Ignore:
Timestamp:
Feb 3, 2015, 6:01:27 PM (9 years ago)
Author:
casties
Branch:
default
Message:

upped version to 0.5.
can use display name and groups from auth token.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/main/java/de/mpiwg/itgroup/annotations/restlet/AnnotatorResourceImpl.java

    r86 r88  
    1 /**
    2  * Base class for Annotator resource classes.
    3  */
    41package de.mpiwg.itgroup.annotations.restlet;
    52
     
    2724
    2825import java.io.UnsupportedEncodingException;
    29 import java.security.InvalidKeyException;
    30 import java.security.SignatureException;
    3126import java.text.SimpleDateFormat;
    3227import java.util.ArrayList;
     
    5752import org.restlet.util.Series;
    5853
     54import com.google.gson.JsonArray;
     55import com.google.gson.JsonElement;
     56import com.google.gson.JsonObject;
     57
    5958import de.mpiwg.itgroup.annotations.Actor;
    6059import de.mpiwg.itgroup.annotations.Annotation;
     
    155154     */
    156155    public boolean isAuthenticated(Representation entity) {
    157         return (checkAuthToken(entity) != null);
     156        return (getUserFromAuthToken(entity) != null);
    158157    }
    159158
     
    166165     * @return user-id
    167166     */
    168     public String checkAuthToken(Representation entity) {
     167    public Person getUserFromAuthToken(Representation entity) {
    169168        @SuppressWarnings("unchecked")
    170169        Series<Header> requestHeaders = (Series<Header>) getRequest().getAttributes().get("org.restlet.http.headers");
     
    172171        if (authToken == null) {
    173172            if (!((BaseRestlet) getApplication()).isAuthorizationMode()) {
    174                 return "anonymous";
     173                return Person.getAnonymous();
    175174            }
    176175            return null;
    177176        }
    178         // decode token first to get consumer key
    179         JsonToken token = new JsonTokenParser(null, null).deserialize(authToken);
    180         String userId = token.getParamAsPrimitive("userId").getAsString();
    181         String consumerKey = token.getParamAsPrimitive("consumerKey").getAsString();
    182         // get stored consumer secret for key
    183         BaseRestlet restServer = (BaseRestlet) getApplication();
    184         String consumerSecret = restServer.getConsumerSecret(consumerKey);
    185         logger.fine("requested consumer key=" + consumerKey + " secret=" + consumerSecret);
    186         if (consumerSecret == null) {
    187             return null;
    188         }
    189         // logger.fine(String.format("token=%s tokenString=%s signatureAlgorithm=%s",token,token.getTokenString(),token.getSignatureAlgorithm()));
    190         try {
     177        Person user = null;
     178                try {
     179                        // decode token first to get consumer key
     180            JsonToken token = new JsonTokenParser(null, null).deserialize(authToken);
     181            String consumerKey = token.getParamAsPrimitive("consumerKey").getAsString();
     182            // get stored consumer secret for key
     183            BaseRestlet restServer = (BaseRestlet) getApplication();
     184            String consumerSecret = restServer.getConsumerSecret(consumerKey);
     185            logger.fine("requested consumer key=" + consumerKey + " secret=" + consumerSecret);
     186                        if (consumerSecret == null) {
     187                            logger.warning("Error: unknown consumer key: "+consumerKey);
     188                                return null;
     189                        }
     190                        // logger.fine(String.format("token=%s tokenString=%s signatureAlgorithm=%s",token,token.getTokenString(),token.getSignatureAlgorithm()));
    191191            List<Verifier> verifiers = new ArrayList<Verifier>();
    192192            // we only do HS256 yet
     
    194194            // verify token signature(should really be static...)
    195195            new JsonTokenParser(new SystemClock(), null, (Checker[]) null).verify(token, verifiers);
    196         } catch (SignatureException e) {
    197             // TODO Auto-generated catch block
    198             e.printStackTrace();
    199         } catch (InvalidKeyException e) {
    200             // TODO Auto-generated catch block
    201             e.printStackTrace();
    202         } catch (UnsupportedEncodingException e) {
    203             // TODO Auto-generated catch block
    204             e.printStackTrace();
     196            // create Person
     197            JsonObject payload = token.getPayloadAsJsonObject();
     198            // userId is mandatory
     199            String userId = payload.get("userId").getAsString();
     200            user = new Person(userId);
     201            // displayName is optional
     202            if (payload.has("displayName")) {
     203                user.name = payload.get("displayName").getAsString();
     204            }
     205            // memberOf groups is optional
     206            if (payload.has("memberOf")) {
     207                Set<String> groups = new HashSet<String>();
     208                JsonArray jgroups = payload.get("memberOf").getAsJsonArray();
     209                for (JsonElement jgroup : jgroups) {
     210                    groups.add(jgroup.getAsString());
     211                }
     212                user.groups = groups;
     213            }
     214        } catch (Exception e) {
     215            logger.warning("Error checking auth token: "+e.toString());
     216            return null;
    205217        }
    206218        // must be ok then
    207         logger.fine("auth OK! user=" + userId);
    208         return userId;
     219        logger.fine("auth OK! user=" + user);
     220        return user;
    209221    }
    210222
     
    212224     * creates Annotator-JSON from an Annotation object.
    213225     *
    214      * @param annot
     226     * @param annot annotation object
    215227     * @param forAnonymous
    216      *            TODO
    217      * @return
     228     * @return Annotator-JSON
    218229     */
    219230    public JSONObject createAnnotatorJson(Annotation annot, boolean forAnonymous) {
     
    577588         * check authentication
    578589         */
    579         String authUser = checkAuthToken(entity);
     590        Person authUser = getUserFromAuthToken(entity);
    580591        if (authUser == null) {
    581592            /*
     
    620631        }
    621632        if (username == null) {
    622             username = authUser;
     633            username = authUser.getName();
    623634        }
    624635        // try to get full name
Note: See TracChangeset for help on using the changeset viewer.