backend json validation added

This commit is contained in:
Katerina Iatropoulou 2020-10-20 14:47:43 +00:00
parent 84006bd941
commit 6cf8537818
3 changed files with 31 additions and 12 deletions

View File

@ -11,9 +11,10 @@ public class JwksDeserializer implements JsonDeserializer<Jwks> {
throws JsonParseException {
JsonObject jsonObject = jsonElement.getAsJsonObject();
System.out.println("json object" + jsonObject);
if (jsonObject == null) throw new JsonParseException("Jwks not valid.");
JsonArray jsonArray = jsonObject.getAsJsonArray("keys");
System.out.println("json array" + jsonArray);
if (jsonArray == null ) throw new JsonParseException("Jwks not valid.");
Jwks jwks = new Jwks();
Key[] keys = new Key[jsonArray.size()];
@ -22,10 +23,21 @@ public class JwksDeserializer implements JsonDeserializer<Jwks> {
for (int i = 0; i < jsonArray.size(); i++) {
key = new Key();
JsonElement je = jsonArray.get(i);
if (je == null) throw new JsonParseException("Jwks not valid.");
if (je.getAsJsonObject().get("kty")==null) throw new JsonParseException("Jwks not valid.");
key.setKty(je.getAsJsonObject().get("kty").getAsString());
if (je.getAsJsonObject().get("e")==null) throw new JsonParseException("Jwks not valid.");
key.setE(je.getAsJsonObject().get("e").getAsString());
if (je.getAsJsonObject().get("kid")==null) throw new JsonParseException("Jwks not valid.");
key.setKid(je.getAsJsonObject().get("kid").getAsString());
if (je.getAsJsonObject().get("alg")==null) throw new JsonParseException("Jwks not valid.");
key.setAlg(je.getAsJsonObject().get("alg").getAsString());
if (je.getAsJsonObject().get("n")==null) throw new JsonParseException("Jwks not valid.");
key.setN(je.getAsJsonObject().get("n").getAsString());
keys[i] = key;
}

View File

@ -2,6 +2,7 @@ package eu.dnetlib.openaire.usermanagement;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonParseException;
import eu.dnetlib.openaire.user.pojos.RegisteredService;
import eu.dnetlib.openaire.usermanagement.utils.RegisteredServicesUtils;
import eu.dnetlib.openaire.usermanagement.utils.TokenUtils;
@ -68,7 +69,8 @@ public class RegisterServiceServlet extends HttpServlet {
if (keyType.equals("uri")) {
jwksUri = request.getParameter("uri");
UrlValidator urlValidator = new UrlValidator();
String[] schemes = {"https"};
UrlValidator urlValidator = new UrlValidator(schemes);
if (!urlValidator.isValid(jwksUri)){
System.out.println("Not valid? " + jwksUri);
request.getSession().setAttribute("msg_key_uri_error_display", "display:block");
@ -76,10 +78,15 @@ public class RegisterServiceServlet extends HttpServlet {
}
} else {
jwksString = request.getParameter("value");
Gson gson = new GsonBuilder().registerTypeAdapter(Jwks.class, new JwksDeserializer()).create();
jwks = gson.fromJson(jwksString, Jwks.class);
if (jwks.getKeys()==null || jwks.getKeys().length==0) {
System.out.println("Something wrong with the keys.");
try {
Gson gson = new GsonBuilder().registerTypeAdapter(Jwks.class, new JwksDeserializer()).create();
jwks = gson.fromJson(jwksString, Jwks.class);
if (jwks.getKeys() == null || jwks.getKeys().length == 0) {
System.out.println("Something wrong with the keys.");
request.getSession().setAttribute("msg_key_value_error_display", "display:block");
canProceed = false;
}
} catch (JsonParseException jpe) {
request.getSession().setAttribute("msg_key_value_error_display", "display:block");
canProceed = false;
}
@ -131,7 +138,7 @@ public class RegisterServiceServlet extends HttpServlet {
request.getSession().setAttribute("key_radio", keyType);
request.getSession().setAttribute("uri", jwksUri);
request.getSession().setAttribute("value", jwksString);
response.sendRedirect("./registerService");
return;
}

View File

@ -140,16 +140,16 @@
<div class="uk-margin">
<label class="uk-form-label" for="form-horizontal-text">Public Key Set</label>
<label><input class="uk-radio" type="radio" name="key_radio" value="value" checked>By Value</label>
<label><input class="uk-radio" type="radio" name="key_radio" value="uri">By URI</label><br>
<label><input class="uk-radio" type="radio" name="key_radio" value="value" ${(key_radio == 'value' || key_radio == '') ? 'checked' : ''} >By Value</label>
<label><input class="uk-radio" type="radio" name="key_radio" value="uri" ${key_radio == 'uri' ? 'checked' : ''} >By URI</label><br>
<div id="value_input">
<span class="msg_key_value_error uk-text-danger uk-text-small uk-float-left" style='${msg_key_value_error_display}'>Please provide a valid JSON.</span>
<textarea id="value" name="value" type="textarea" placeholder='{"keys":[]}' class="form-control uk-textarea" rows="10">{"keys":[]}</textarea>
<textarea id="value" name="value" type="textarea" placeholder='{"keys":[]}' class="form-control uk-textarea" rows="10" value=${value}></textarea>
</div>
<div id="uri_input" style="display:none;">
<span class="msg_key_uri_error uk-text-danger uk-text-small uk-float-left" style='${msg_key_uri_error_display}'>Please provide a valid URI (do not forget the protocol! https://...)</span>
<input id="uri" name="uri" type="text" placeholder="https://" class="form-control" value="${jwksUri}">
<input id="uri" name="uri" type="text" placeholder="https://" class="form-control" value=${uri}>
</div>
</div>
<hr class="uk-margin-remove-top">