Changeset 9:41f264620073 in OKFNAnnotator (for Zope)


Ignore:
Timestamp:
Feb 12, 2015, 6:46:55 PM (9 years ago)
Author:
casties
Branch:
default
Tags:
tip
Message:

adds user's groups from LDAP to generated token.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • AuthTokenGenerator.py

    r8 r9  
    4545    def index_html(self, user='anonymous'):
    4646        """returns authentication token for user (Zope style)"""
    47         if self._user_allowed(user=user):
    48             token = self._generate_token(user)
     47        zUser = self._allowed_user(user=user)
     48        logging.debug("allowed user: %s"%repr(zUser))
     49        if zUser:
     50            token = self._generate_token(zUser)
    4951            # set CORS headers
    5052            origin = self.REQUEST.getHeader("Origin", None)
     
    7173
    7274        self.REQUEST.RESPONSE.setHeader("Access-Control-Allow-Credentials", "true")
    73         if self._user_allowed(user=user, password=password):
    74             token = self._generate_token(user)
     75        zUser = self._allowed_user(user=user, password=password)
     76        logging.debug("allowed user: %s"%repr(zUser))
     77        if zUser:
     78            token = self._generate_token(zUser)
    7579            logging.debug("token for user %s: %s"%(user, token))
    7680            self.REQUEST.RESPONSE.setHeader("Content-Type", "text/plain")
     
    8084            return "Please Authenticate!"
    8185
    82     def _user_allowed(self, user=None, password=None):
     86    def _allowed_user(self, user=None, password=None):
    8387        # check the login
    8488        if user == 'anonymous':
     
    9195        if authname == user:
    9296            # user is logged in
    93             return authname
     97            return authuser
    9498       
    9599        if password:
     
    108112        return None
    109113
    110     def _generate_token(self, user_id):
     114    def _generate_token(self, user):
    111115        #return JSON-token
    112116        issue_time = datetime.datetime.now(UTC).replace(microsecond=0)
     117        if isinstance(user, basestring):
     118            # not a real User object
     119            user_id = user
     120        else:
     121            user_id = user.getUserName()
     122           
     123        payload = {
     124            'consumerKey':self.consumer_key,
     125            'userId':user_id,
     126            'issuedAt':issue_time.isoformat(),
     127            'ttl':self.tokenTtl}
    113128       
    114         return jwt.encode({
    115            'consumerKey': self.consumer_key,
    116            'userId': user_id,
    117            'issuedAt': issue_time.isoformat(),
    118            'ttl': self.tokenTtl
    119            }, self.consumer_secret)
     129        if hasattr(user, '_getLDAPGroups'):
     130            # add groups from LDAP
     131            groups = user._getLDAPGroups()
     132            payload['memberOf'] = groups
     133           
     134        logging.debug("token payload=%s"%repr(payload))
     135        return jwt.encode(payload, self.consumer_secret)
    120136       
    121137
Note: See TracChangeset for help on using the changeset viewer.