diff --git a/GeneXusCryptography/pom.xml b/GeneXusCryptography/pom.xml
index 5fc7769..15e4ed8 100644
--- a/GeneXusCryptography/pom.xml
+++ b/GeneXusCryptography/pom.xml
@@ -7,7 +7,7 @@
com.genexus
SecurityAPIParent
- 17.10.0
+ 18.0.0
diff --git a/GeneXusFtps/pom.xml b/GeneXusFtps/pom.xml
index 502bc0c..a1d7f48 100644
--- a/GeneXusFtps/pom.xml
+++ b/GeneXusFtps/pom.xml
@@ -8,7 +8,7 @@
com.genexus
SecurityAPIParent
- 17.10.0
+ 18.0.0
diff --git a/GeneXusJWT/pom.xml b/GeneXusJWT/pom.xml
index ed1ec1d..61b11eb 100644
--- a/GeneXusJWT/pom.xml
+++ b/GeneXusJWT/pom.xml
@@ -7,7 +7,7 @@
com.genexus
SecurityAPIParent
- 17.10.0
+ 18.0.0
@@ -26,7 +26,7 @@
com.auth0
java-jwt
- 3.10.3
+ 4.0.0
diff --git a/GeneXusJWT/src/main/java/com/genexus/JWT/JWTCreator.java b/GeneXusJWT/src/main/java/com/genexus/JWT/JWTCreator.java
index 2b62543..6f96e53 100644
--- a/GeneXusJWT/src/main/java/com/genexus/JWT/JWTCreator.java
+++ b/GeneXusJWT/src/main/java/com/genexus/JWT/JWTCreator.java
@@ -43,75 +43,34 @@ public JWTCreator() {
}
/******** EXTERNAL OBJECT PUBLIC METHODS - BEGIN ********/
+
public String doCreate(String algorithm, PrivateClaims privateClaims, JWTOptions options) {
this.error.cleanError();
- if (options.hasError()) {
- this.error = options.getError();
- return "";
- }
- JWTAlgorithm alg = JWTAlgorithm.getJWTAlgorithm(algorithm, this.error);
- if (this.hasError()) {
- return "";
- }
- Builder tokenBuilder = JWT.create();
- if (!options.getHeaderParameters().isEmpty()) {
- HeaderParameters parameters = options.getHeaderParameters();
- tokenBuilder.withHeader(parameters.getMap());
- }
- tokenBuilder = doBuildPayload(tokenBuilder, privateClaims, options);
- if (this.hasError()) {
- return "";
- }
- Algorithm algorithmType = null;
- if (JWTAlgorithm.isPrivate(alg)) {
-
- PrivateKeyManager key = options.getPrivateKey();
- if (key.hasError()) {
- this.error = key.getError();
- return "";
- }
-
- algorithmType = JWTAlgorithm.getAsymmetricAlgorithm(alg, key, null, error);
- if (this.hasError()) {
- return "";
- }
-
- } else {
-
- algorithmType = JWTAlgorithm.getSymmetricAlgorithm(alg, options.getSecret(), this.error);
- if (this.hasError()) {
- return "";
- }
- }
- String signedJwt = "";
- try {
- signedJwt = tokenBuilder.sign(algorithmType);
- } catch (Exception e) {
- this.error.setError("JW003", e.getMessage());
- return "";
- }
-
- return signedJwt;
+ return create_Aux(algorithm, privateClaims, options);
}
public boolean doVerify(String token, String expectedAlgorithm, PrivateClaims privateClaims, JWTOptions options) {
+ this.error.cleanError();
return doVerify(token, expectedAlgorithm, privateClaims, options, true, true);
}
public boolean doVerifyJustSignature(String token, String expectedAlgorithm, JWTOptions options) {
+ this.error.cleanError();
return doVerify(token, expectedAlgorithm, null, options, false, false);
}
public boolean doVerifySignature(String token, String expectedAlgorithm, JWTOptions options) {
+ this.error.cleanError();
return doVerify(token, expectedAlgorithm, null, options, false, true);
}
public String getPayload(String token) {
+ this.error.cleanError();
String res = "";
try {
res = getTokenPart(token, "payload");
} catch (Exception e) {
- this.error.setError("JW009", e.getMessage());
+ this.error.setError("JW001", e.getMessage());
return "";
}
return res;
@@ -119,23 +78,25 @@ public String getPayload(String token) {
}
public String getHeader(String token) {
+ this.error.cleanError();
String res = "";
try {
res = getTokenPart(token, "header");
} catch (Exception e) {
- this.error.setError("JW010", e.getMessage());
+ this.error.setError("JW002", e.getMessage());
return "";
}
return res;
}
public String getTokenID(String token) {
+ this.error.cleanError();
String res = "";
try {
res = getTokenPart(token, "id");
} catch (Exception e) {
- this.error.setError("JW011", e.getMessage());
+ this.error.setError("JW003", e.getMessage());
return "";
}
return res;
@@ -143,11 +104,65 @@ public String getTokenID(String token) {
/******** EXTERNAL OBJECT PUBLIC METHODS - END ********/
+ private String create_Aux(String algorithm, PrivateClaims privateClaims, JWTOptions options) {
+ if (options == null) {
+ this.error.setError("JW004", "Options parameter is null");
+ return "";
+ }
+ JWTAlgorithm alg = JWTAlgorithm.getJWTAlgorithm(algorithm, this.error);
+ if (this.hasError()) {
+ return "";
+ }
+ Builder tokenBuilder = JWT.create();
+ if (!options.getHeaderParameters().isEmpty()) {
+ HeaderParameters parameters = options.getHeaderParameters();
+ tokenBuilder.withHeader(parameters.getMap());
+ }
+ if (privateClaims == null) {
+ this.error.setError("JW005", "PrivateClaims parameter is null");
+ return "";
+ }
+ tokenBuilder = doBuildPayload(tokenBuilder, privateClaims, options);
+ if (this.hasError()) {
+ return "";
+ }
+ Algorithm algorithmType = null;
+ if (JWTAlgorithm.isPrivate(alg)) {
+
+ PrivateKeyManager key = options.getPrivateKey();
+ if (key.hasError()) {
+ this.error = key.getError();
+ return "";
+ }
+
+ algorithmType = JWTAlgorithm.getAsymmetricAlgorithm(alg, key, null, error);
+ if (this.hasError()) {
+ return "";
+ }
+
+ } else {
+
+ algorithmType = JWTAlgorithm.getSymmetricAlgorithm(alg, options.getSecret(), this.error);
+ if (this.hasError()) {
+ return "";
+ }
+ }
+ String signedJwt = "";
+ try {
+ signedJwt = tokenBuilder.sign(algorithmType);
+ } catch (Exception e) {
+ this.error.setError("JW006", e.getMessage());
+ return "";
+ }
+
+ return signedJwt;
+ }
+
private boolean doVerify(String token, String expectedAlgorithm, PrivateClaims privateClaims, JWTOptions options,
boolean verifyClaims, boolean verifyRegClaims) {
- this.error.cleanError();
- if (options.hasError()) {
- this.error = options.getError();
+
+ if (options == null) {
+ this.error.setError("JW004", "Options parameter is null");
return false;
}
DecodedJWT decodedJWT = null;
@@ -155,7 +170,7 @@ private boolean doVerify(String token, String expectedAlgorithm, PrivateClaims p
decodedJWT = JWT.decode(token);
} catch (Exception e) {
- this.error.setError("JW005", e.getMessage());
+ this.error.setError("JW007", e.getMessage());
return false;
}
if (isRevoqued(decodedJWT, options)) {
@@ -199,14 +214,14 @@ private boolean doVerify(String token, String expectedAlgorithm, PrivateClaims p
if (this.hasError()) {
return false;
}
-
try {
JWTVerifier verifier = verification.build();
DecodedJWT decodedToken = JWT.decode(token);
verifier.verify(decodedToken);
} catch (Exception e) {
- error.setError("JW006", e.getMessage());
+
+ error.setError("JW009", e.getMessage());
return false;
}
@@ -227,7 +242,7 @@ private String getTokenPart(String token, String part) throws Exception {
case "id":
return decodedToken.getId();
default:
- error.setError("JW007", "Unknown token segment");
+ error.setError("JW010", "Unknown token segment");
return "";
}
byte[] base64Bytes = Base64.decodeBase64(base64Part);
@@ -268,7 +283,7 @@ private Verification buildVerification(Verification verification, JWTOptions opt
return null;
}
} else {
- error.setError("JW002", registeredC.get(z).getKey() + " wrong registered claim key");
+ error.setError("JW011", String.format("%s wrong registered claim key", registeredC.get(z).getKey()));
return null;
}
}
@@ -298,12 +313,12 @@ private Builder doBuildPayload(Builder tokenBuilder, PrivateClaims privateClaims
} else if (obj instanceof Boolean) {
tokenBuilder.withClaim(privateC.get(i).getKey(), (boolean) privateC.get(i).getValue());
} else {
- this.error.setError("JW012", "Unrecognized data type");
+ this.error.setError("JW016", "Unrecognized data type");
}
// tokenBuilder.withClaim(privateC.get(i).getKey(), privateC.get(i).getValue());
}
} catch (Exception e) {
- this.error.setError("JW004", e.getMessage());
+ this.error.setError("JW012", e.getMessage());
return null;
}
}
@@ -315,7 +330,7 @@ private Builder doBuildPayload(Builder tokenBuilder, PrivateClaims privateClaims
try {
tokenBuilder.withClaim(publicC.get(j).getKey(), (String) publicC.get(j).getValue());
} catch (Exception e) {
- this.error.setError("JW003", e.getMessage());
+ this.error.setError("JW013", e.getMessage());
return null;
}
}
@@ -332,7 +347,7 @@ private Builder doBuildPayload(Builder tokenBuilder, PrivateClaims privateClaims
return null;
}
} else {
- error.setError("JW002", registeredC.get(z).getKey() + " wrong registered claim key");
+ error.setError("JW011", String.format("%s wrong registered claim key", registeredC.get(z).getKey()));
return null;
}
}
@@ -358,7 +373,7 @@ private boolean verifyPrivateClaims(DecodedJWT decodedJWT, PrivateClaims private
map = (HashMap) mapper.readValue(plainTextPart, new TypeReference