Mercurial > hg > AnnotationManagerN4J
diff src/main/java/de/mpiwg/itgroup/annotations/restlet/AnnotatorResourceImpl.java @ 88:b406507a953d
upped version to 0.5.
can use display name and groups from auth token.
author | casties |
---|---|
date | Tue, 03 Feb 2015 19:01:27 +0100 |
parents | e3f0613b2f2d |
children | 247cbbb385de |
line wrap: on
line diff
--- a/src/main/java/de/mpiwg/itgroup/annotations/restlet/AnnotatorResourceImpl.java Tue Feb 03 11:33:45 2015 +0100 +++ b/src/main/java/de/mpiwg/itgroup/annotations/restlet/AnnotatorResourceImpl.java Tue Feb 03 19:01:27 2015 +0100 @@ -1,6 +1,3 @@ -/** - * Base class for Annotator resource classes. - */ package de.mpiwg.itgroup.annotations.restlet; /* @@ -26,8 +23,6 @@ */ import java.io.UnsupportedEncodingException; -import java.security.InvalidKeyException; -import java.security.SignatureException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; @@ -56,6 +51,10 @@ import org.restlet.resource.ServerResource; import org.restlet.util.Series; +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; + import de.mpiwg.itgroup.annotations.Actor; import de.mpiwg.itgroup.annotations.Annotation; import de.mpiwg.itgroup.annotations.Annotation.FragmentTypes; @@ -154,7 +153,7 @@ * @return */ public boolean isAuthenticated(Representation entity) { - return (checkAuthToken(entity) != null); + return (getUserFromAuthToken(entity) != null); } /** @@ -165,56 +164,68 @@ * @param entity * @return user-id */ - public String checkAuthToken(Representation entity) { + public Person getUserFromAuthToken(Representation entity) { @SuppressWarnings("unchecked") Series<Header> requestHeaders = (Series<Header>) getRequest().getAttributes().get("org.restlet.http.headers"); String authToken = requestHeaders.getFirstValue("x-annotator-auth-token", true); if (authToken == null) { if (!((BaseRestlet) getApplication()).isAuthorizationMode()) { - return "anonymous"; + return Person.getAnonymous(); } return null; } - // decode token first to get consumer key - JsonToken token = new JsonTokenParser(null, null).deserialize(authToken); - String userId = token.getParamAsPrimitive("userId").getAsString(); - String consumerKey = token.getParamAsPrimitive("consumerKey").getAsString(); - // get stored consumer secret for key - BaseRestlet restServer = (BaseRestlet) getApplication(); - String consumerSecret = restServer.getConsumerSecret(consumerKey); - logger.fine("requested consumer key=" + consumerKey + " secret=" + consumerSecret); - if (consumerSecret == null) { - return null; - } - // logger.fine(String.format("token=%s tokenString=%s signatureAlgorithm=%s",token,token.getTokenString(),token.getSignatureAlgorithm())); - try { + Person user = null; + try { + // decode token first to get consumer key + JsonToken token = new JsonTokenParser(null, null).deserialize(authToken); + String consumerKey = token.getParamAsPrimitive("consumerKey").getAsString(); + // get stored consumer secret for key + BaseRestlet restServer = (BaseRestlet) getApplication(); + String consumerSecret = restServer.getConsumerSecret(consumerKey); + logger.fine("requested consumer key=" + consumerKey + " secret=" + consumerSecret); + if (consumerSecret == null) { + logger.warning("Error: unknown consumer key: "+consumerKey); + return null; + } + // logger.fine(String.format("token=%s tokenString=%s signatureAlgorithm=%s",token,token.getTokenString(),token.getSignatureAlgorithm())); List<Verifier> verifiers = new ArrayList<Verifier>(); // we only do HS256 yet verifiers.add(new HmacSHA256Verifier(consumerSecret.getBytes("UTF-8"))); // verify token signature(should really be static...) new JsonTokenParser(new SystemClock(), null, (Checker[]) null).verify(token, verifiers); - } catch (SignatureException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (InvalidKeyException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (UnsupportedEncodingException e) { - // TODO Auto-generated catch block - e.printStackTrace(); + // create Person + JsonObject payload = token.getPayloadAsJsonObject(); + // userId is mandatory + String userId = payload.get("userId").getAsString(); + user = new Person(userId); + // displayName is optional + if (payload.has("displayName")) { + user.name = payload.get("displayName").getAsString(); + } + // memberOf groups is optional + if (payload.has("memberOf")) { + Set<String> groups = new HashSet<String>(); + JsonArray jgroups = payload.get("memberOf").getAsJsonArray(); + for (JsonElement jgroup : jgroups) { + groups.add(jgroup.getAsString()); + } + user.groups = groups; + } + } catch (Exception e) { + logger.warning("Error checking auth token: "+e.toString()); + return null; } // must be ok then - logger.fine("auth OK! user=" + userId); - return userId; + logger.fine("auth OK! user=" + user); + return user; } /** * creates Annotator-JSON from an Annotation object. * - * @param annot + * @param annot annotation object * @param forAnonymous - * TODO - * @return + * @return Annotator-JSON */ public JSONObject createAnnotatorJson(Annotation annot, boolean forAnonymous) { // return user as a JSON object (otherwise just as string) @@ -576,7 +587,7 @@ /* * check authentication */ - String authUser = checkAuthToken(entity); + Person authUser = getUserFromAuthToken(entity); if (authUser == null) { /* * // try http auth User httpUser = getHttpAuthUser(entity); if @@ -619,7 +630,7 @@ } } if (username == null) { - username = authUser; + username = authUser.getName(); } // try to get full name if (creator.getName() == null && username != null) {