summaryrefslogtreecommitdiff
path: root/eaaf_modules/eaaf_module_auth_sl20/src/main/java/at/gv/egiz/eaaf/modules/auth/sl20/utils/SL20JsonExtractorUtils.java
diff options
context:
space:
mode:
Diffstat (limited to 'eaaf_modules/eaaf_module_auth_sl20/src/main/java/at/gv/egiz/eaaf/modules/auth/sl20/utils/SL20JsonExtractorUtils.java')
-rw-r--r--eaaf_modules/eaaf_module_auth_sl20/src/main/java/at/gv/egiz/eaaf/modules/auth/sl20/utils/SL20JsonExtractorUtils.java102
1 files changed, 42 insertions, 60 deletions
diff --git a/eaaf_modules/eaaf_module_auth_sl20/src/main/java/at/gv/egiz/eaaf/modules/auth/sl20/utils/SL20JsonExtractorUtils.java b/eaaf_modules/eaaf_module_auth_sl20/src/main/java/at/gv/egiz/eaaf/modules/auth/sl20/utils/SL20JsonExtractorUtils.java
index d4e1490d..eb6de461 100644
--- a/eaaf_modules/eaaf_module_auth_sl20/src/main/java/at/gv/egiz/eaaf/modules/auth/sl20/utils/SL20JsonExtractorUtils.java
+++ b/eaaf_modules/eaaf_module_auth_sl20/src/main/java/at/gv/egiz/eaaf/modules/auth/sl20/utils/SL20JsonExtractorUtils.java
@@ -7,9 +7,7 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
-import at.gv.egiz.eaaf.modules.auth.sl20.data.VerificationResult;
-import at.gv.egiz.eaaf.modules.auth.sl20.exceptions.SL20Exception;
-import at.gv.egiz.eaaf.modules.auth.sl20.exceptions.SlCommandoParserException;
+
import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
@@ -18,25 +16,29 @@ import org.apache.http.util.EntityUtils;
import org.jose4j.base64url.Base64Url;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
+import at.gv.egiz.eaaf.modules.auth.sl20.data.VerificationResult;
+import at.gv.egiz.eaaf.modules.auth.sl20.exceptions.SL20Exception;
+import at.gv.egiz.eaaf.modules.auth.sl20.exceptions.SlCommandoParserException;
+
public class SL20JsonExtractorUtils {
private static final Logger log = LoggerFactory.getLogger(SL20JsonExtractorUtils.class);
private static JsonMapper mapper = new JsonMapper();
-
/**
* Extract String value from JSON.
*
- * @param input JSON
- * @param keyID Element identifier
+ * @param input JSON
+ * @param keyID Element identifier
* @param isRequired true, if the element must not null
* @return Value of this element
* @throws SlCommandoParserException In case an error
*/
- public static String getStringValue(final JsonNode input, final String keyID,
- final boolean isRequired) throws SlCommandoParserException {
+ public static String getStringValue(final JsonNode input, final String keyID, final boolean isRequired)
+ throws SlCommandoParserException {
try {
final JsonNode internal = getAndCheck(input, keyID, isRequired);
@@ -58,14 +60,14 @@ public class SL20JsonExtractorUtils {
/**
* Extract Boolean value from JSON.
*
- * @param input JSON
- * @param keyID Element identifier
+ * @param input JSON
+ * @param keyID Element identifier
* @param isRequired true, if the element must not null
* @return Boolean
* @throws SlCommandoParserException In case of an error
*/
- public static boolean getBooleanValue(final ObjectNode input, final String keyID,
- final boolean isRequired, final boolean defaultValue) throws SlCommandoParserException {
+ public static boolean getBooleanValue(final ObjectNode input, final String keyID, final boolean isRequired,
+ final boolean defaultValue) throws SlCommandoParserException {
try {
final JsonNode internal = getAndCheck(input, keyID, isRequired);
@@ -87,14 +89,14 @@ public class SL20JsonExtractorUtils {
/**
* Extract JSONObject value from JSON.
*
- * @param input JSON
- * @param keyID Element identifier
+ * @param input JSON
+ * @param keyID Element identifier
* @param isRequired true, if the element must not null
* @return JSON node
* @throws SlCommandoParserException In case of an error
*/
- public static JsonNode getJsonObjectValue(final JsonNode input, final String keyID,
- final boolean isRequired) throws SlCommandoParserException {
+ public static JsonNode getJsonObjectValue(final JsonNode input, final String keyID, final boolean isRequired)
+ throws SlCommandoParserException {
try {
final JsonNode internal = getAndCheck(input, keyID, isRequired);
@@ -120,8 +122,7 @@ public class SL20JsonExtractorUtils {
* @return List of Elements in this node
* @throws SlCommandoParserException In case of an error
*/
- public static List<String> getListOfStringElements(final JsonNode input)
- throws SlCommandoParserException {
+ public static List<String> getListOfStringElements(final JsonNode input) throws SlCommandoParserException {
final List<String> result = new ArrayList<>();
if (input != null) {
if (input.isArray()) {
@@ -149,8 +150,8 @@ public class SL20JsonExtractorUtils {
/**
* Extract Map of Key/Value pairs from a JSON Element.
*
- * @param input parent JSON object
- * @param keyID KeyId of the child that should be parsed
+ * @param input parent JSON object
+ * @param keyID KeyId of the child that should be parsed
* @param isRequired true, if the element must not null
* @return Map of element pairs
* @throws SlCommandoParserException In case of an error
@@ -169,8 +170,7 @@ public class SL20JsonExtractorUtils {
* @return Map of element pairs
* @throws SlCommandoParserException in case of an error
*/
- public static Map<String, String> getMapOfStringElements(final JsonNode input)
- throws SlCommandoParserException {
+ public static Map<String, String> getMapOfStringElements(final JsonNode input) throws SlCommandoParserException {
final Map<String, String> result = new HashMap<>();
if (input != null) {
@@ -196,13 +196,11 @@ public class SL20JsonExtractorUtils {
return result;
}
- private static void entitySetToMap(final Map<String, String> result,
- final Iterator<Entry<String, JsonNode>> entry) {
+ private static void entitySetToMap(final Map<String, String> result, final Iterator<Entry<String, JsonNode>> entry) {
while (entry.hasNext()) {
final Entry<String, JsonNode> el = entry.next();
if (result.containsKey(el.getKey())) {
- log.info("Attr. Map already contains Element with Key: " + el.getKey()
- + ". Overwrite element ... ");
+ log.info("Attr. Map already contains Element with Key: " + el.getKey() + ". Overwrite element ... ");
}
result.put(el.getKey(), el.getValue().asText());
@@ -211,12 +209,11 @@ public class SL20JsonExtractorUtils {
}
-
/**
* Extract Security-Layer 2.0 result from response object.
*
- * @param command SL2.0 command
- * @param decrypter JWS decrypter implementation
+ * @param command SL2.0 command
+ * @param decrypter JWS decrypter implementation
* @param mustBeEncrypted if <code>true</code>, the result must be encrypted
* @return decrypted JSON
* @throws SL20Exception In case of an error
@@ -224,8 +221,7 @@ public class SL20JsonExtractorUtils {
public static JsonNode extractSL20Result(final JsonNode command, final IJoseTools decrypter,
final boolean mustBeEncrypted) throws SL20Exception {
final JsonNode result = command.get(SL20Constants.SL20_COMMAND_CONTAINER_RESULT);
- final JsonNode encryptedResult =
- command.get(SL20Constants.SL20_COMMAND_CONTAINER_ENCRYPTEDRESULT);
+ final JsonNode encryptedResult = command.get(SL20Constants.SL20_COMMAND_CONTAINER_ENCRYPTEDRESULT);
if (result == null && encryptedResult == null) {
throw new SlCommandoParserException("NO result OR encryptedResult FOUND.");
@@ -238,8 +234,7 @@ public class SL20JsonExtractorUtils {
} catch (final Exception e) {
log.info("Can NOT decrypt SL20 result. Reason:" + e.getMessage());
if (!mustBeEncrypted) {
- log.warn(
- "Decrypted results are disabled by configuration. Parse result in plain if it is possible");
+ log.warn("Decrypted results are disabled by configuration. Parse result in plain if it is possible");
// dummy code
try {
@@ -267,7 +262,6 @@ public class SL20JsonExtractorUtils {
throw new SlCommandoParserException("Internal build error");
}
-
}
/**
@@ -278,8 +272,8 @@ public class SL20JsonExtractorUtils {
* @return Signature verification result that contains the payLoad
* @throws SlCommandoParserException In case of an error
*/
- public static VerificationResult extractSL20PayLoad(final JsonNode container,
- final IJoseTools joseTools, final boolean mustBeSigned) throws SL20Exception {
+ public static VerificationResult extractSL20PayLoad(final JsonNode container, final IJoseTools joseTools,
+ final boolean mustBeSigned) throws SL20Exception {
final JsonNode sl20Payload = container.get(SL20Constants.SL20_PAYLOAD);
final JsonNode sl20SignedPayload = container.get(SL20Constants.SL20_SIGNEDPAYLOAD);
@@ -301,10 +295,8 @@ public class SL20JsonExtractorUtils {
throw new SlCommandoParserException("Internal build error");
}
-
}
-
/**
* Extract generic transport container from httpResponse.
*
@@ -312,19 +304,16 @@ public class SL20JsonExtractorUtils {
* @return JSON with SL2.0 response
* @throws SlCommandoParserException In case of an error
*/
- public static JsonNode getSL20ContainerFromResponse(final HttpResponse httpResp)
- throws SlCommandoParserException {
+ public static JsonNode getSL20ContainerFromResponse(final HttpResponse httpResp) throws SlCommandoParserException {
try {
JsonNode sl20Resp = null;
- if (httpResp.getStatusLine().getStatusCode() == 303
- || httpResp.getStatusLine().getStatusCode() == 307) {
+ if (httpResp.getStatusLine().getStatusCode() == 303 || httpResp.getStatusLine().getStatusCode() == 307) {
final Header[] locationHeader = httpResp.getHeaders("Location");
if (locationHeader == null) {
throw new SlCommandoParserException("Find Redirect statuscode but not Location header");
}
- final String sl20RespString =
- new URIBuilder(locationHeader[0].getValue()).getQueryParams().get(0).getValue();
+ final String sl20RespString = new URIBuilder(locationHeader[0].getValue()).getQueryParams().get(0).getValue();
sl20Resp = mapper.getMapper().readTree(Base64Url.decode(sl20RespString));
} else if (httpResp.getStatusLine().getStatusCode() == 200) {
@@ -333,16 +322,15 @@ public class SL20JsonExtractorUtils {
}
if (!httpResp.getEntity().getContentType().getValue().startsWith("application/json")) {
- throw new SlCommandoParserException("SL20 response with a wrong ContentType: "
- + httpResp.getEntity().getContentType().getValue());
+ throw new SlCommandoParserException(
+ "SL20 response with a wrong ContentType: " + httpResp.getEntity().getContentType().getValue());
}
sl20Resp = parseSL20ResultFromResponse(httpResp.getEntity());
- } else if (httpResp.getStatusLine().getStatusCode() == 500
- || httpResp.getStatusLine().getStatusCode() == 401
+ } else if (httpResp.getStatusLine().getStatusCode() == 500 || httpResp.getStatusLine().getStatusCode() == 401
|| httpResp.getStatusLine().getStatusCode() == 400) {
- log.info("SL20 response with http-code: " + httpResp.getStatusLine().getStatusCode()
- + ". Search for error message");
+ log.info(
+ "SL20 response with http-code: " + httpResp.getStatusLine().getStatusCode() + ". Search for error message");
try {
sl20Resp = parseSL20ResultFromResponse(httpResp.getEntity());
@@ -354,8 +342,6 @@ public class SL20JsonExtractorUtils {
}
-
-
} else {
throw new SlCommandoParserException(
"SL20 response with http-code: " + httpResp.getStatusLine().getStatusCode());
@@ -365,8 +351,7 @@ public class SL20JsonExtractorUtils {
return sl20Resp;
} catch (final Exception e) {
- throw new SlCommandoParserException("SL20 response parsing FAILED! Reason: " + e.getMessage(),
- e);
+ throw new SlCommandoParserException("SL20 response parsing FAILED! Reason: " + e.getMessage(), e);
}
}
@@ -384,21 +369,18 @@ public class SL20JsonExtractorUtils {
throw new SlCommandoParserException("SL2.0 can NOT parse to a JSON object");
}
-
} else {
throw new SlCommandoParserException("Can NOT find content in http response");
}
}
-
- private static JsonNode getAndCheck(final JsonNode input, final String keyID,
- final boolean isRequired) throws SlCommandoParserException {
+ private static JsonNode getAndCheck(final JsonNode input, final String keyID, final boolean isRequired)
+ throws SlCommandoParserException {
final JsonNode internal = input.get(keyID);
if (internal == null && isRequired) {
- throw new SlCommandoParserException(
- "REQUIRED Element with keyId: " + keyID + " does not exist");
+ throw new SlCommandoParserException("REQUIRED Element with keyId: " + keyID + " does not exist");
}
return internal;