Changeset 6:17bbd5e80d15 in OKFNAnnotator (for Zope)


Ignore:
Timestamp:
Oct 30, 2012, 7:20:31 PM (12 years ago)
Author:
casties
Branch:
default
Message:

method getLoginToken and real authentication support.

Files:
2 edited

Legend:

Unmodified
Added
Removed
  • AuthTokenGenerator.py

    r2 r6  
    22from Products.PageTemplates.PageTemplateFile import PageTemplateFile
    33from OFS.PropertyManager import PropertyManager
     4from AccessControl import getSecurityManager
     5from zExceptions import Unauthorized
    46
    57import logging
     
    4042        self.consumer_secret = consumerSecret
    4143
    42     def index_html(self, user='anonymous', password=None):
    43         """returns authentication token for user"""
    44         if self._token_allowed():
     44    def index_html(self, user='anonymous'):
     45        """returns authentication token for user (Zope style)"""
     46        if self._user_allowed(user=user):
    4547            token = self._generate_token(user)
    4648            # set CORS headers
     
    5254
    5355            self.REQUEST.RESPONSE.setHeader("Access-Control-Allow-Credentials", "true")
    54             logging.debug("token=%s"%token)
     56            logging.debug("token for user %s: %s"%(user, token))
    5557            self.REQUEST.RESPONSE.setHeader("Content-Type", "text/plain")
    5658            return token
    57             # send as JSON
    58             #self.REQUEST.RESPONSE.setHeader("Content-Type", "application/json")
    59             #json.dump(token, self.REQUEST.RESPONSE)
    6059        else:
    61             self.REQUEST.RESPONSE.setStatus('Forbidden')
    62             return "SORRY, NOT ALLOWED!"
     60            raise Unauthorized
    6361
    64     def _token_allowed(self, user=None, password=None):
    65         # here we should check the login
    66         return True
     62    def getLoginToken(self, user='anonymous', password=None):
     63        """returns authentication token or error code"""
     64        # set CORS headers
     65        origin = self.REQUEST.getHeader("Origin", None)
     66        if origin is not None:
     67            self.REQUEST.RESPONSE.setHeader("Access-Control-Allow-Origin", origin)
     68        else:
     69            self.REQUEST.RESPONSE.setHeader("Access-Control-Allow-Origin", "*")
     70
     71        self.REQUEST.RESPONSE.setHeader("Access-Control-Allow-Credentials", "true")
     72        if self._user_allowed(user=user, password=password):
     73            token = self._generate_token(user)
     74            logging.debug("token for user %s: %s"%(user, token))
     75            self.REQUEST.RESPONSE.setHeader("Content-Type", "text/plain")
     76            return token
     77        else:
     78            self.REQUEST.RESPONSE.setStatus('Unauthorized')
     79            return "Please Authenticate!"
     80       
     81
     82    def _user_allowed(self, user=None, password=None):
     83        # check the login
     84        if user == 'anonymous':
     85            # everybody can be anonymous
     86            return user
     87       
     88        # get logged in user
     89        authuser = getSecurityManager().getUser()
     90        authname = authuser.getUserName()
     91        logging.debug("token_allowed: user=%s authuser=%s username=%s"%(user, repr(authuser), repr(authname)))
     92        if authname == user:
     93            # user is logged in
     94            return authname
     95       
     96        if password:
     97            logging.debug("trying password")
     98            # TODO: should we care about aquisition?
     99            authuser = self.acl_users.authenticate(user, password, None)
     100            return authuser
     101           
     102        return None
    67103
    68104    def _generate_token(self, user_id):
  • version.txt

    r3 r6  
    1 0.4
     10.5
Note: See TracChangeset for help on using the changeset viewer.