Changeset 1639


Ignore:
Timestamp:
27/10/06 11:55:57 (13 years ago)
Author:
pjkersha
Message:

python/setup.py: adapted to make Python Egg.
python/*.py: changed import statements to reflect new package structure of client and server.

Location:
TI12-security/trunk/python
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • TI12-security/trunk/python/Tests/SecurityCGItest.py

    r1636 r1639  
    1616from datetime import datetime 
    1717from datetime import timedelta 
    18 from ndg.security.Session import UserSession, UserSessionError 
     18from ndg.security.server.Session import UserSession, UserSessionError 
    1919 
    2020from ndg.security.SecurityCGI import IdentityProviderSecurityCGI, \ 
  • TI12-security/trunk/python/Tests/SessionMgrTest.py

    r1636 r1639  
    22 
    33import unittest 
    4 from ndg.security.Session import * 
     4from ndg.security.server.Session import * 
    55 
    66 
  • TI12-security/trunk/python/bin/SessionMgrServer.py

    r1636 r1639  
    3131 
    3232# Session Manager 
    33 from ndg.security.Session import * 
     33from ndg.security.server.Session import * 
    3434 
    3535 
  • TI12-security/trunk/python/bin/initCredReposDb.py

    r1636 r1639  
    2121import getpass 
    2222 
    23 from ndg.security.Session import * 
     23from ndg.security.server.Session import * 
    2424 
    2525 
  • TI12-security/trunk/python/ndg/security/server/Session.py

    r1638 r1639  
    5959class UserSessionError(Exception):     
    6060    """Exception handling for NDG User Session class.""" 
    61     pass 
    62      
    63      
    64 #_____________________________________________________________________________ 
    65 class _MetaUserSession(type): 
    66     """Enable UserSession to have read only class variables e.g. 
    67      
    68     print UserSession.cookieTags is allowed but, 
    69      
    70     UserSession.cookieTags = None 
    71      
    72     ... raises - AttributeError: can't set attribute""" 
    73     def __getCookieTags(cls): 
    74         return ("NDG-ID1", "NDG-ID2") 
    75  
    76     cookieTags = property(fget=__getCookieTags) 
    77  
     61     
    7862 
    7963#_____________________________________________________________________________ 
     
    8367    """Session details - created when a user logs into NDG""" 
    8468 
    85     __metaclass__ = _MetaUserSession 
    86      
    87     # Session ID 
    88     __sessIDlen = 64 
     69    #_________________________________________________________________________ 
     70    def __init__(self, *credWalletArgs, **credWalletKeys): 
     71        """Initialise UserSession with args and keywords to CredWallet""" 
     72                 
     73         
     74        # Each User Session has one or more browser sessions associated with 
     75        # it.  These are stored in a list 
     76        self.__sessIDlist = [] 
     77        self.addNewSessID() 
     78        self.__credWallet = CredWallet(*credWalletArgs, **credWalletKeys) 
     79 
     80 
     81    #_________________________________________________________________________ 
     82    # CredWallet access  
     83    def __getCredWallet(self): 
     84        """Get Credential Wallet instance""" 
     85        return self.__credWallet 
     86     
     87    credWallet = property(fget=__getCredWallet, 
     88                          doc="Read-only access to CredWallet instance") 
     89 
     90 
     91    #_________________________________________________________________________ 
     92    # CredWallet access  
     93    def __getSessIDlist(self): 
     94        """Get Session ID list - last item is latest allocated for this 
     95        session""" 
     96        return self.__sessIDlist 
     97     
     98    sessIDlist = property(fget=__getSessIDlist, 
     99                          doc="Read-only access to Session ID list") 
     100 
     101 
     102    #_________________________________________________________________________         
     103    def __latestSessID(self): 
     104        """Get the session ID most recently allocated""" 
     105        return self.__sessIDlist[-1] 
     106     
     107    # Publish as an attribute 
     108    latestSessID = property(fget=__latestSessID, 
     109                            doc="Latest Session ID allocated") 
     110 
     111 
     112    #_________________________________________________________________________ 
     113    def addNewSessID(self): 
     114        """Add a new session ID to be associated with this UserSession 
     115        instance""" 
     116 
     117        # base 64 encode output from urandom - raw output from urandom is 
     118        # causes problems when passed over SOAP.  A consequence of this is 
     119        # that the string length of the session ID will almost certainly be 
     120        # longer than SessionMgr.__sessIDlen 
     121        sessID = base64.urlsafe_b64encode(os.urandom(SessionCookie.sessIDlen)) 
     122        self.__sessIDlist.append(sessID) 
     123 
     124 
     125    #_________________________________________________________________________ 
     126    def __getExpiryStr(self): 
     127        """Return session expiry date/time as would be formatted for a cookie 
     128        """ 
     129 
     130        try: 
     131            # Proxy certificate's not after time determines the expiry 
     132            dtNotAfter = self.credWallet.proxyCert.notAfter 
     133 
     134            return dtNotAfter.strftime(self.__sessCookieExpiryFmt) 
     135        except Exception, e: 
     136            UserSessionError, "getExpiry: %s" % e 
     137 
     138 
     139    #_________________________________________________________________________ 
     140    @staticmethod 
     141    def encrypt(txt, encrKey): 
     142        """Encrypt the test of this Session Manager's WS URI / URI for its 
     143        public key to allow inclusion in a web browser session cookie 
     144         
     145        The address is encrypted and then base 64 encoded""" 
     146         
     147        # Text length must be a multiple of 16 for AES encryption 
     148        try: 
     149            mod = len(txt) % 16 
     150            nPad = mod and 16 - mod or 0 
     151                 
     152            # Add padding 
     153            paddedURI = txt + ''.join(' '*nPad) 
     154        except Exception, e: 
     155            raise UserSessionError, "Error padding text for encryption: " + \ 
     156                                    str(e) 
     157         
     158        # encrypt 
     159        try: 
     160            aes = AES.new(encrKey, AES.MODE_ECB) 
     161            return base64.urlsafe_b64encode(aes.encrypt(paddedURI)) 
     162         
     163        except Exception, e: 
     164            raise UserSessionError, "Error encrypting text: %s" % str(e) 
     165                                        
     166     
     167    #_________________________________________________________________________ 
     168    @staticmethod                                    
     169    def decrypt(encrTxt, encrKey): 
     170        """Decrypt text from cookie set by another Session Manager.  This 
     171        is required when reading a session cookie to find out which  
     172        Session Manager holds the client's session 
     173         
     174        encrTxt:    base 64 encoded encrypted text""" 
     175 
     176        try: 
     177            aes = AES.new(encrKey, AES.MODE_ECB) 
     178             
     179            # Decode from base 64 
     180            b64DecodedEncrTxt = base64.urlsafe_b64decode(encrTxt) 
     181             
     182            # Decrypt and strip trailing spaces 
     183            return aes.decrypt(b64DecodedEncrTxt).strip() 
     184         
     185        except Exception, e: 
     186            raise SessionMgrError, "Decrypting: %s" % str(e)             
     187 
     188 
     189    #_________________________________________________________________________ 
     190    def createCookie(self,  
     191                     sessMgrWSDLuri, 
     192                     encrKey,  
     193                     sessID=None, 
     194                     cookieDomain=None, 
     195                     asString=True): 
     196        """Create cookies for session ID Session Manager WSDL address 
     197 
     198        sessMgrWSDLuri:     WSDL address for Session Mananger  
     199        sessMgrPubKeyURI:   URI for public key of Session Manager 
     200        encrKey:               encryption key used to encrypted above URIs 
     201        sessID:                if no session ID is provided, use the latest  
     202                               one to be allocated. 
     203        cookieDomain:          domain set for cookie, if non set, web server 
     204                               domain name is used.  Nb. Generalised domains 
     205                               which don't set a specific host can be a  
     206                               security risk. 
     207        asString:              Set to True to return the cookie as string  
     208                               text.  If False, it is returned as a  
     209                               SimpleCookie instance.""" 
     210           
     211        if sessID is None: 
     212            # Use latest session ID allocated if none was input 
     213            sessID = self.__sessIDlist[-1] 
     214             
     215        elif not isinstance(sessID, basestring): 
     216            raise UserSessionError, "Input session ID is not a valid string" 
     217                                 
     218            if sessID not in self.__sessIDlist: 
     219                raise UserSessionError, "Input session ID not found in list" 
     220  
     221  
     222        encrSessMgrWSDLuri = self.encrypt(sessMgrWSDLuri, encrKey) 
     223        dtExpiry = self.credWallet.proxyCert.notAfter 
     224         
     225        # Call class method  
     226        cookieTagsKw = SessionCookie.tags 
     227        cookieTagsKw = {}.fromkeys(cookieTags) 
     228        cookieTagsKw[cookieTags[0]] = sessID 
     229        cookieTagsKw[cookieTags[1]] = encrSessMgrWSDLuri 
     230         
     231        return str(SessionCookie(dtExpiry=dtExpiry, 
     232                                 cookieDomain=cookieDomain, 
     233                                 **cookieTagsKw)) 
     234 
     235 
     236#_____________________________________________________________________________ 
     237class SessionCookieError(Exception): 
     238    "Handle exception from SessionCookie class" 
     239     
     240         
     241#_____________________________________________________________________________ 
     242class _MetaSessionCookie(type): 
     243    """Enable SessionCookie to have read only class variables e.g. 
     244     
     245    print sessionCookie.cookieTags is allowed but, 
     246     
     247    sessionCookie.cookieTags = None 
     248     
     249    ... raises - AttributeError: can't set attribute""" 
     250    def __getTags(cls): 
     251        '''ndgID1 is the session ID and ndgID2 is the encrypted session  
     252        manager WSDL address.''' 
     253        return ("ndgID1", "ndgID2") 
     254 
     255    tags = property(fget=__getTags) 
     256 
     257    def __getSessIDlen(cls): 
     258        '''This sets the session ID length (!)''' 
     259        return 64 
     260     
     261    sessIDlen = property(fget=__getSessIDlen) 
     262     
     263     
     264#_____________________________________________________________________________ 
     265class SessionCookie(object): 
     266    """Class encapsulates Session Cookie for handling by UserSession and 
     267    LoginService""" 
     268     
     269    __metaclass__ = _MetaSessionCookie 
    89270 
    90271    # Follow standard format for cookie path and expiry attributes 
     
    98279    __sessCookieExpiryFmt = "\"%a, %d-%b-%Y %H:%M:%S GMT\"" 
    99280 
    100  
    101     #_________________________________________________________________________ 
    102     def __init__(self, *credWalletArgs, **credWalletKeys): 
    103         """Initialise UserSession with args and keywords to CredWallet""" 
    104  
    105         # Domain for cookie used by createCookie method - if not set, default 
    106         # is web server domain name 
    107         self.__cookieDomain = None 
    108                  
    109          
    110         # Each User Session has one or more browser sessions associated with 
    111         # it.  These are stored in a list 
    112         self.__sessIDlist = [] 
    113         self.addNewSessID() 
    114         self.__credWallet = CredWallet(*credWalletArgs, **credWalletKeys) 
    115  
    116  
    117     #_________________________________________________________________________ 
    118     def __setCookieDomain(self, cookieDomain): 
    119         """Set domain for cookie - set to None to assume domain of web server 
    120         """ 
    121  
    122         if not isinstance(cookieDomain, basestring) and \ 
    123            cookieDomain is not None: 
    124             raise UserSessionError(\ 
    125                 "Expecting string or None type for \"cookieDomain\"") 
    126                          
    127         self.__cookieDomain = cookieDomain 
    128  
    129     cookieDomain = property(fset=__setCookieDomain, doc="Set cookie domain") 
    130  
    131  
    132     #_________________________________________________________________________ 
    133     # CredWallet access  
    134     def __getCredWallet(self): 
    135         """Get Credential Wallet instance""" 
    136         return self.__credWallet 
    137      
    138     credWallet = property(fget=__getCredWallet, 
    139                           doc="Read-only access to CredWallet instance") 
    140  
    141  
    142     #_________________________________________________________________________ 
    143     # CredWallet access  
    144     def __getSessIDlist(self): 
    145         """Get Session ID list - last item is latest allocated for this 
    146         session""" 
    147         return self.__sessIDlist 
    148      
    149     sessIDlist = property(fget=__getSessIDlist, 
    150                           doc="Read-only access to Session ID list") 
    151  
    152  
    153     #_________________________________________________________________________         
    154     def __latestSessID(self): 
    155         """Get the session ID most recently allocated""" 
    156         return self.__sessIDlist[-1] 
    157      
    158     # Publish as an attribute 
    159     latestSessID = property(fget=__latestSessID, 
    160                             doc="Latest Session ID allocated") 
    161  
    162  
    163     #_________________________________________________________________________ 
    164     def addNewSessID(self): 
    165         """Add a new session ID to be associated with this UserSession 
    166         instance""" 
    167  
    168         # base 64 encode output from urandom - raw output from urandom is 
    169         # causes problems when passed over SOAP.  A consequence of this is 
    170         # that the string length of the session ID will almost certainly be 
    171         # longer than SessionMgr.__sessIDlen 
    172         sessID = base64.urlsafe_b64encode(os.urandom(self.__sessIDlen)) 
    173         self.__sessIDlist.append(sessID) 
    174  
    175  
    176     #_________________________________________________________________________ 
    177     def __getExpiryStr(self): 
    178         """Return session expiry date/time as would formatted for a cookie""" 
    179  
    180         try: 
    181             # Proxy certificate's not after time determines the expiry 
    182             dtNotAfter = self.credWallet.proxyCert.notAfter 
    183  
    184             return dtNotAfter.strftime(self.__sessCookieExpiryFmt) 
    185         except Exception, e: 
    186             UserSessionError("getExpiry: %s" % e) 
    187  
    188  
    189     #_________________________________________________________________________ 
    190     @staticmethod 
    191     def encrypt(txt, encrKey): 
    192         """Encrypt the test of this Session Manager's WS URI / URI for its 
    193         public key to allow inclusion in a web browser session cookie 
    194          
    195         The address is encrypted and then base 64 encoded""" 
    196          
    197         # Text length must be a multiple of 16 for AES encryption 
    198         try: 
    199             mod = len(txt) % 16 
    200             nPad = mod and 16 - mod or 0 
    201                  
    202             # Add padding 
    203             paddedURI = txt + ''.join(' '*nPad) 
    204         except Exception, e: 
    205             raise UserSessionError, "Error padding text for encryption: " + \ 
    206                                     str(e) 
    207          
    208         # encrypt 
    209         try: 
    210             aes = AES.new(encrKey, AES.MODE_ECB) 
    211             return base64.urlsafe_b64encode(aes.encrypt(paddedURI)) 
    212          
    213         except Exception, e: 
    214             raise UserSessionError("Error encrypting text: %s" % str(e)) 
    215                                         
    216      
    217     #_________________________________________________________________________ 
    218     @staticmethod                                    
    219     def decrypt(encrTxt, encrKey): 
    220         """Decrypt text from cookie set by another Session Manager.  This 
    221         is required when reading a session cookie to find out which  
    222         Session Manager holds the client's session 
    223          
    224         encrTxt:    base 64 encoded encrypted text""" 
    225  
    226         try: 
    227             aes = AES.new(encrKey, AES.MODE_ECB) 
    228              
    229             # Decode from base 64 
    230             b64DecodedEncrTxt = base64.urlsafe_b64decode(encrTxt) 
    231              
    232             # Decrypt and strip trailing spaces 
    233             return aes.decrypt(b64DecodedEncrTxt).strip() 
    234          
    235         except Exception, e: 
    236             raise SessionMgrError("Decrypting: %s" % str(e))             
    237  
    238  
    239     #_________________________________________________________________________ 
    240     def createCookie(self,  
    241                      sessMgrWSDLuri, 
    242                      encrKey,  
    243                      sessID=None, 
    244                      cookieDomain=None, 
    245                      asString=True): 
    246         """Create cookies for session ID Session Manager WSDL address 
    247  
    248         sessMgrWSDLuri:     WSDL address for Session Mananger  
    249         sessMgrPubKeyURI:   URI for public key of Session Manager 
    250         encrKey:               encryption key used to encrypted above URIs 
    251         sessID:                if no session ID is provided, use the latest  
    252                                one to be allocated. 
    253         cookieDomain:          domain set for cookie, if non set, web server 
    254                                domain name is used 
    255         asString:              Set to True to return the cookie as string  
    256                                text.  If False, it is returned as a  
    257                                SimpleCookie instance.""" 
    258  
    259  
    260         # Nb. Implicit call to __setCookieDomain method 
    261         if cookieDomain: 
    262             self.cookieDomain = cookieDomain 
    263  
    264            
    265         if sessID is None: 
    266             # Use latest session ID allocated if none was input 
    267             sessID = self.__sessIDlist[-1] 
    268              
    269         elif not isinstance(sessID, basestring): 
    270             raise UserSessionError, "Input session ID is not a valid string" 
    271                                  
    272             if sessID not in self.__sessIDlist: 
    273                 raise UserSessionError, "Input session ID not found in list" 
    274   
    275   
    276         encrSessMgrWSDLuri = self.encrypt(sessMgrWSDLuri, encrKey) 
    277         dtExpiry = self.credWallet.proxyCert.notAfter 
    278          
    279         # Call class method  
    280         cookieTags = UserSession.cookieTags 
    281         cookieTagsKwArgs = {}.fromkeys(cookieTags) 
    282         cookieTagsKwArgs[cookieTags[0]] = sessID 
    283         cookieTagsKwArgs[cookieTags[1]] = encrSessMgrWSDLuri 
    284          
    285         return self.__class__.createSecurityCookie(dtExpiry=dtExpiry, 
    286                                             cookieDomain=self.__cookieDomain, 
    287                                             asString=asString, 
    288                                             **cookieTagsKwArgs) 
    289  
    290      
     281         
    291282    #_________________________________________________________________________     
    292     @classmethod 
    293     def createSecurityCookie(cls,  
    294                              expiryStr=None, 
    295                              dtExpiry=None, 
    296                              cookieDomain=None, 
    297                              asString=False, 
    298                              **cookieTagKwArgs): 
    299         """Class method for generic cookie creation independent of individual 
    300         UserSession details.  This is useful for making a fresh cookie from 
    301         an existing one. 
    302          
    303         sessID:                session ID for cookie 
    304         encrSessMgrWSDLuri:    encrypted Session Manager WSDL address. 
    305                                Use UserSession.encrypt().  The site  
     283    def __init__(self,  
     284                 expiryStr=None, 
     285                 dtExpiry=None, 
     286                 cookieDomain=None, 
     287                 **cookieTagKw): 
     288        """Generic cookie creation independent of individual UserSession  
     289        details.              
     290             
     291        Caller should set the cookie e.g. in a CGI script 
     292        print "Content-type: text/html" 
     293        print str(cookie) + os.linesep 
     294 
     295         
     296        **cookieTagKw:         session ID for cookie (ndgID1) and 
     297                               encrypted Session Manager WSDL address (ndgID2) 
     298                               ** style arg means they can be passed as a 
     299                               dictionary without the caller needing to  
     300                               know the tag names. 
     301                                
     302                               Use UserSession.encrypt() to encrypt the 
     303                               SessionManager WSDL address.  The site  
    306304                               SessionManager holds the encryption key. 
    307305        expiryStr|dtExpiry:    expiry date time for the cookie.  Input as a  
     
    311309        cookieDomain:          The domain for the cookie.  Default is the 
    312310                               web server address.  Override to set to a  
    313                                site wide cookie e.g. .rl.ac.uk 
    314         asString:              a SimpleCookie instance is returned be default. 
    315                                Set this flag to True to override and return 
    316                                the string text instead. 
     311                               site wide cookie e.g. .rl.ac.uk.  Nb. that this 
     312                               has security implications 
    317313        """ 
    318          
    319         try: 
    320             sessID = cookieTagKwArgs['NDG-ID1'] 
    321             encrSessMgrWSDLuri = cookieTagKwArgs['NDG-ID2'] 
     314 
     315        # Domain for cookie used by createCookie method - if not set, it will 
     316        # default to web server domain name 
     317        self.__cookieDomain = cookieDomain 
     318         
     319        try: 
     320            sessID = cookieTagKw['NDG-ID1'] 
     321            encrSessMgrWSDLuri = cookieTagKw['NDG-ID2'] 
    322322             
    323323        except KeyError: 
    324             c = cls.cookieTags 
     324            c = self.tags 
    325325            msg = len(c) > 1 and 's %s and %s' % (', '.join(c[:-1]), c[-1]) \ 
    326326                or ' ' + c[-1] 
    327             raise UserSessionError, "The Cookie tag keyword%s" % c 
    328  
    329              
    330         if len(sessID) < cls.__sessIDlen: 
    331             UserSessionError, "Session ID has an invalid length" 
     327            raise SessionCookieError, "The Cookie tag keyword%s" % c 
     328 
     329             
     330        if len(sessID) < SessionCookie.sessIDlen: 
     331            SessionCookieError, "Session ID has an invalid length" 
    332332             
    333333        if encrSessMgrWSDLuri[:7] == 'http://' or \ 
    334334           encrSessMgrWSDLuri[:8] == 'https://': 
    335             UserSessionError, "Input Session Manager WSDL URI does not " + \ 
    336                               "appear to have been encrypted" 
     335            SessionCookieError, "Input Session Manager WSDL URI does not " + \ 
     336                                "appear to have been encrypted" 
    337337                               
    338338        if dtExpiry: 
    339339            if not isinstance(dtExpiry, datetime): 
    340                 UserSessionError, \ 
     340                SessionCookieError, \ 
    341341                    "Expecting valid datetime object with dtExpiry keyword" 
    342342                 
    343             expiryStr = dtExpiry.strftime(cls.__sessCookieExpiryFmt) 
     343            expiryStr = dtExpiry.strftime(self.__sessCookieExpiryFmt) 
    344344             
    345345        elif not expiryStr or not isinstance(expiryStr, basestring): 
    346             raise UserSessionError, "No cookie expiry was set" 
     346            raise SessionCookieError, "No cookie expiry was set" 
    347347             
    348348             
    349349        try:    
    350             sessCookie = SimpleCookie() 
     350            self.__cookie = SimpleCookie() 
    351351              
    352352            tagValues = (sessID, encrSessMgrWSDLuri) 
    353353            i=0 
    354             for tag in cls.cookieTags: 
    355                  
    356                 sessCookie[tag] = tagValues[i] 
     354            for tag in self.tags: 
     355                 
     356                self.__cookie[tag] = tagValues[i] 
    357357                i += 1 
    358358                 
    359359                # Use standard format for cookie path and expiry 
    360                 sessCookie[tag][cls.__cookiePathTag] = cls.__cookiePath                 
    361                 sessCookie[tag][cls.__cookieExpiryTag]= expiryStr 
     360                self.__cookie[tag][self.__cookiePathTag] = self.__cookiePath                 
     361                self.__cookie[tag][self.__cookieExpiryTag]= expiryStr 
    362362                                             
    363363                # Make cookie as generic as possible for domains - Nb. '.uk' 
    364364                # alone won't work but .rl.ac.uk would 
    365365                if cookieDomain: 
    366                     sessCookie[tag][cls.__cookieDomainTag] = cookieDomain 
    367              
    368              
    369             # Caller should set the cookie e.g. in a CGI script 
    370             # print "Content-type: text/html" 
    371             # print cookie.output() + os.linesep 
    372             if asString: 
    373                 return sessCookie.output() 
    374             else: 
    375                 return sessCookie 
    376              
    377         except Exception, e: 
    378             raise UserSessionError("Creating Session Cookie: %s" % e) 
    379          
    380      
    381     #_________________________________________________________________________     
    382     @classmethod 
    383     def isValidSecurityCookie(cls, cookie, raiseExcep=False): 
     366                    self.__cookie[tag][self.__cookieDomainTag] = cookieDomain 
     367             
     368        except Exception, e: 
     369            raise SessionCookieError, "Creating Session Cookie: %s" % e 
     370         
     371     
     372    def asSimpleCookie(self): 
     373        return self.__cookie 
     374     
     375    def asString(self): 
     376        return self.__cookie.output() 
     377     
     378    def __call__(self): 
     379        return self.asSimpleCookie() 
     380     
     381    def __str__(self): 
     382        return self.asString() 
     383     
     384    def __repr__(self): 
     385        return self.asString() 
     386 
     387 
     388    #_________________________________________________________________________ 
     389    def __setCookieDomain(self, cookieDomain): 
     390        """Set domain for cookie - set to None to assume domain of web server 
     391        """ 
     392 
     393        if not isinstance(cookieDomain, basestring) and \ 
     394           cookieDomain is not None: 
     395            raise SessionCookieError, \ 
     396                "Expecting string or None type for \"cookieDomain\"" 
     397                         
     398        self.__cookieDomain = cookieDomain 
     399 
     400    cookieDomain = property(fset=__setCookieDomain, doc="Set cookie domain") 
     401        
     402     
     403    #_________________________________________________________________________ 
     404    @classmethod    
     405    def isValid(cls, cookie, raiseExcep=False): 
    384406        """Check cookie has the expected session keys.  Cookie may be a  
    385407        string or SimpleCookie type""" 
     
    390412        elif not isinstance(cookie, SimpleCookie): 
    391413            if raiseExcep: 
    392                 raise UserSessionError, "Input cookie must be a string or " +\ 
     414                raise SessionCookieError,"Input cookie must be a string or "+\ 
    393415                                        "SimpleCookie type" 
    394416            else: 
    395417                return False 
    396418         
    397         missingTags = [tag for tag in cls.cookieTags if tag not in cookie] 
     419        missingTags = [tag for tag in self.tags if tag not in cookie] 
    398420        if missingTags: 
    399421            if raiseExcep: 
    400                 raise UserSessionError, \ 
    401                     "Input cookie missing security tag(s): " + \ 
    402                     ", ".join(missingTags) 
     422                raise SessionCookieError, \ 
     423            "Input cookie missing security tag(s): " + ", ".join(missingTags) 
    403424            else: 
    404425                return False 
    405426 
    406         if len(cookie[cls.cookieTags[0]].value) < cls.__sessIDlen: 
     427        if len(cookie[self.tags[0]].value) < cls.sessIDlen: 
    407428            if raiseExcep: 
    408                 raise UserSessionError, "Session ID has an invalid length" 
     429                raise SessionCookieError, "Session ID has an invalid length" 
    409430            else: 
    410431                return False 
     
    416437class SessionMgrError(Exception):     
    417438    """Exception handling for NDG Session Manager class.""" 
    418     pass 
     439 
    419440 
    420441#_____________________________________________________________________________ 
     
    438459     
    439460    #_________________________________________________________________________ 
    440     def __init__(self,  
    441                  propFilePath=None,  
    442                  credReposPPhrase=None,  
    443                  **prop):        
     461    def __init__(self, propFilePath=None, credReposPPhrase=None, **prop):        
    444462        """Create a new session manager to manager NDG User Sessions 
    445463         
  • TI12-security/trunk/python/setup.py

    r1337 r1639  
    1212version 1.0 or later. 
    1313""" 
    14 from distutils.core import setup 
     14# Bootstrap setuptools if necessary. 
     15from ez_setup import use_setuptools 
     16use_setuptools() 
     17 
     18from setuptools import setup, find_packages 
     19 
    1520import os 
    1621 
    17 setupKeys = \ 
     22# Get latest SubVersion revision for use with release ID 
     23_svnRev = '$Rev:$' 
     24_version = 'DevPostAlpha + 'Rev:' in _svnRev and '' or "-" + _svnRev 
     25 
     26# Packages needed for NDG Security 
     27# TODO: subdivide these into server and client specific and comon dependencies 
     28_pkgDependencies = [ 
     29    'ElementTree', 
     30    'cElementTree', 
     31    'M2Crypto', 
     32    'ZSI', 
     33    'Ft', 
     34    '_xmlplus', 
     35    'twisted', 
     36    'zope', 
     37    'Crypto', 
     38    'sqlobject', 
     39    'MySQLdb', 
     40    'pyXMLSec'] 
     41 
     42setupKw = \ 
    1843{ 
    19     'name':           'NDG-Security', 
    20     'version':        'Dev-PostAlpha', 
    21     'description':    'NERC DataGrid Security Utilities', 
    22     'author':         'P J Kershaw', 
    23     'author_email':   'P.J.Kershaw@rl.ac.uk', 
    24     'url':            'http://proj.badc.rl.ac.uk/ndg', 
    25     'packages':       ['NDG'], 
     44    'name':                     'ndg-security', 
     45    'version':                  _version, 
     46    'description':              'NERC DataGrid Security Utilities', 
     47    'long_description':         'Software for securing NDG resources', 
     48    'author':                   'Philip Kershaw', 
     49    'author_email':             'P.J.Kershaw@rl.ac.uk', 
     50    'url':                      'http://proj.badc.rl.ac.uk/ndg', 
     51    'install_requires':         _pkgDependencies, 
     52    'packages':                 find_packages(), 
     53 
     54    # This flag will include all files under SVN control or included in 
     55    # MANIFEST.in. 
     56    'include_package_data':     True, 
     57    # Finer grained control of data file inclusion can be achieved with 
     58    # these parameters.  See the setuptools docs. 
     59    #'package_data':            {} 
     60    #'exclude_package_data':    {} 
     61 
     62    'test_suite':               'ndg.utils.test.suite', 
    2663} 
    27 setup(**setupKeys) 
     64setup(**setupKw) 
Note: See TracChangeset for help on using the changeset viewer.