package oiccli;
import com.auth0.jwt.creators.Message;
import com.google.common.base.Strings;
import java.io.File;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
import java.util.Map;
import oiccli.client_info.ClientInfo;
import oiccli.exceptions.MissingRequiredAttribute;
public class Utils {
public static Message requestObjectEncryption(Message message, ClientInfo clientInfo, Map args) throws MissingRequiredAttribute {
String encryptionAlg = (String) args.get("requestObjectEncryptionAlg");
if(Strings.isNullOrEmpty(encryptionAlg)) {
List listOfAlgs = clientInfo.getBehavior().get("requestObjectEncryptionAlg");
if(listOfAlgs != null || !listOfAlgs.isEmpty()) {
encryptionAlg = listOfAlgs.get(0);
}
if(encryptionAlg == null) {
return message;
}
}
String encryptionEnc = (String) args.get("requestObjectEncryptionEnc");
if(Strings.isNullOrEmpty(encryptionEnc)) {
List listOfAlgs = clientInfo.getBehavior().get("requestObjectEncryptionEnc");
if(listOfAlgs != null || !listOfAlgs.isEmpty()) {
encryptionEnc = listOfAlgs.get(0);
}
if(encryptionEnc == null) {
throw new MissingRequiredAttribute("No requestObjectEncryptionEnc specified");
}
}
JWE jwe = new JWE(message, encryptionAlg, encryptionEnc);
String keyType = StringUtil.alg2keytype(encryptionAlg);
String kid = (String) args.get("encKid");
if(Strings.isNullOrEmpty(kid)) {
kid = "";
}
if(!args.containsKey("target")) {
throw new MissingRequiredAttribute("No target specified");
}
List keys;
if(!Strings.isNullOrEmpty(kid)) {
keys = clientInfo.getKeyJar().getEncryptKey(keyType, args.get("target"), kid);
jwe.setKid(kid);
} else {
keys = clientInfo.getKeyJar().getEncryptKey(keyType, args.get("target"));
}
return jwe.encrypt(keys);
}
public static Tuple constructRequestUri(String localDir, String basePath, Map args) {
File file = new File(localDir);
if(!file.isDirectory()) {
file.mkdirs();
}
String name = StringUtil.generateRandomString(10) + ".jwt";
File fileExists = Paths.get(localDir, name).toFile();
while(fileExists.exists()) {
name = StringUtil.generateRandomString(10);
fileExists = Paths.get(localDir, name).toFile();
}
String webName = basePath + name;
return new Tuple(fileExists.toString(), webName);
}
}