Changeset 4265 for TI12-security


Ignore:
Timestamp:
01/10/08 16:49:53 (11 years ago)
Author:
pjkersha
Message:

Integrating Session Manager into WSGI framework.

Location:
TI12-security/trunk/python/ndg.security.server/ndg/security/server
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/AttAuthority/__init__.py

    r4245 r4265  
    235235        apply to XML format properties files.  section setting defaults to  
    236236        current propFileSection attribute 
     237         
     238        @type prefix: basestring 
     239        @param prefix: apply prefix to ini file properties - doesn't  
     240        apply to XML format properties files.  This enables filtering of 
     241        properties so that only those relevant to this class are read in 
    237242        ''' 
    238243        if section is None: 
     
    389394                    fget=getPropFileSection, 
    390395                    doc="Set the file section name for ini file properties")    
     396     
     397    def setPropPrefix(self, val=None): 
     398        """Set prefix for properties read from ini file.  This is set from 
     399        input or based on environment variable setting  
     400        NDGSEC_AA_PROPFILEPREFIX 
     401         
     402        DOES NOT apply to XML file properties 
     403         
     404        @type val: basestring 
     405        @param val: section name""" 
     406        log.debug("Setting property file section name") 
     407        if val is None: 
     408            val = os.environ.get('NDGSEC_AA_PROPFILEPREFIX', 'DEFAULT') 
     409                 
     410        if not isinstance(val, basestring): 
     411            raise AttributeError("Input Properties file section name " 
     412                                 "must be a valid string.") 
     413       
     414        self._propPrefix = val 
     415        log.debug("Properties file section set to: %s" % val) 
     416         
     417    def getPropPrefix(self): 
     418        '''Get the prefix name used for properties in an ini file - 
     419        DOES NOT apply to XML file properties 
     420         
     421        @rtype: basestring 
     422        @return: section name''' 
     423        log.debug("Getting property file prefix") 
     424        if hasattr(self, '_propPrefix'): 
     425            return self._propPrefix 
     426        else: 
     427            return ""     
     428         
     429    # Also set up as a property 
     430    propPrefix = property(fset=setPropPrefix, 
     431                          fget=getPropPrefix, 
     432                          doc="Set a prefix for ini file properties")    
    391433 
    392434    def getAttCert(self, 
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/SessionMgr/__init__.py

    r4171 r4265  
    4848from ndg.security.common.SessionMgr import SessionMgrClient 
    4949 
    50 # Placing of session ID on client 
    51 from ndg.security.common.sessionCookie import SessionCookie 
    52  
    5350# generic parser to read INI/XML properties file 
    5451from ndg.security.common.utils.ConfigFileParsers import readAndValidateProperties 
     
    6461 
    6562#_____________________________________________________________________________ 
    66 class _SessionMgrException(Exception): 
     63class _SessionException(Exception): 
    6764    """Base class for all Exceptions in this module.  Overrides Exception to  
    6865    enable writing to the log""" 
     
    7269 
    7370#_____________________________________________________________________________ 
    74 class UserSessionError(_SessionMgrException):     
     71class UserSessionError(_SessionException):     
    7572    """Exception handling for NDG User Session class.""" 
    7673 
     
    8986    
    9087 
    91 #_____________________________________________________________________________ 
    9288# Inheriting from 'object' allows Python 'new-style' class with Get/Set 
    9389# access methods 
    9490class UserSession(object): 
    9591    """Session details - created when a user logs into NDG""" 
    96  
    97     #_________________________________________________________________________ 
     92    sessIdLen = 32 
     93     
    9894    def __init__(self, *credWalletArgs, **credWalletKeys): 
    9995        """Initialise UserSession with args and keywords to CredWallet""" 
     
    10399        # Each User Session has one or more browser sessions associated with 
    104100        # it.  These are stored in a list 
    105         self.__sessIDlist = [] 
     101        self.__sessIdList = [] 
    106102        self.addNewSessID() 
    107103        self.__credWallet = CredWallet(*credWalletArgs, **credWalletKeys) 
    108104 
    109         log.info("Created a session with ID = %s" % self.__sessIDlist[-1]) 
    110  
    111     #_________________________________________________________________________ 
    112     # CredWallet access  
     105        log.info("Created a session with ID = %s" % self.__sessIdList[-1]) 
     106 
    113107    def __getCredWallet(self): 
    114108        """Get Credential Wallet instance""" 
     
    118112                          doc="Read-only access to CredWallet instance") 
    119113 
    120  
    121     #_________________________________________________________________________ 
    122     # CredWallet access  
    123114    def __getSessIDlist(self): 
    124115        """Get Session ID list - last item is latest allocated for this 
    125116        session""" 
    126         return self.__sessIDlist 
     117        return self.__sessIdList 
    127118     
    128119    sessIDlist = property(fget=__getSessIDlist, 
    129120                          doc="Read-only access to Session ID list") 
    130121 
    131  
    132     #_________________________________________________________________________         
    133122    def __latestSessID(self): 
    134123        """Get the session ID most recently allocated""" 
    135         return self.__sessIDlist[-1] 
     124        return self.__sessIdList[-1] 
    136125     
    137126    # Publish as an attribute 
     
    139128                            doc="Latest Session ID allocated") 
    140129 
    141  
    142     #_________________________________________________________________________ 
    143130    def addNewSessID(self): 
    144131        """Add a new session ID to be associated with this UserSession 
     
    148135        # causes problems when passed over SOAP.  A consequence of this is 
    149136        # that the string length of the session ID will almost certainly be 
    150         # longer than SessionMgr.__sessIDlen 
    151         sessID = base64.urlsafe_b64encode(os.urandom(SessionCookie.sessIDlen)) 
    152         self.__sessIDlist.append(sessID) 
    153  
    154  
    155     #_________________________________________________________________________ 
    156     def __getExpiryStr(self): 
    157         """Return session expiry date/time as would be formatted for a cookie 
    158         """ 
    159  
    160         try: 
    161             # Proxy certificate's not after time determines the expiry 
    162             dtNotAfter = self.credWallet.userCert.notAfter 
    163  
    164             return dtNotAfter.strftime(self.__sessCookieExpiryFmt) 
    165         except Exception, e: 
    166             UserSessionError("getExpiry: %s" % e) 
    167  
    168  
    169     #_________________________________________________________________________ 
     137        # longer than UserSession.sessIdLen 
     138        sessID = base64.urlsafe_b64encode(os.urandom(UserSession.sessIdLen)) 
     139        self.__sessIdList.append(sessID) 
     140 
    170141    @staticmethod 
    171142    def encodeSessionMgrURI(txt, encrKey=None): 
     
    205176            raise UserSessionError("Encoding Session Manager URI: %s"%e) 
    206177         
    207      
    208     #_________________________________________________________________________ 
    209178    @staticmethod                                    
    210179    def decodeSessionMgrURI(txt, encrKey=None): 
     
    231200        except Exception, e: 
    232201            raise SessionMgrError("Decoding Session Manager URI: %s" % e)           
    233  
    234  
    235202        if encrKey is not None: 
    236203            try: 
     
    245212            return b64DecodedEncrTxt 
    246213         
    247  
    248     #_________________________________________________________________________ 
    249     def createCookie(self,  
    250                      sessMgrURI, 
    251                      encrKey,  
    252                      sessID=None, 
    253                      cookieDomain=None, 
    254                      asString=True): 
    255         """Create cookies for session ID Session Manager WSDL address 
    256  
    257         @type sessMgrURI: string 
    258         @param sessMgrURI: address for Session Mananger  
    259          
    260         @type encrKey: string 
    261         @param encrKey: encryption key used to encrypted above URIs 
    262          
    263         @type sessID: string 
    264         @param sessID: if no session ID is provided, use the latest one to  
    265         be allocated. 
    266          
    267         @type cookieDomain: string 
    268         @param cookieDomain: domain set for cookie, if non set, web server 
    269         domain name is used.  Nb. Generalised domains which don't set a  
    270         specific host can be a security risk. 
    271          
    272         @type asString: bool 
    273         @param asString: Set to True to return the cookie as string text.   
    274         If False, it is returned as a SessionCookie instance. 
    275          
    276         @rtype: SessionCookie / string depending on asString keyword 
    277         @return: session cookie""" 
    278          
    279         log.debug("UserSession.createCookie ...") 
    280            
    281         if sessID is None: 
    282             # Use latest session ID allocated if none was input 
    283             sessID = self.__sessIDlist[-1] 
    284              
    285         elif not isinstance(sessID, basestring): 
    286             raise UserSessionError("Input session ID is not a valid string") 
    287                                  
    288             if sessID not in self.__sessIDlist: 
    289                 raise UserSessionError("Input session ID not found in list") 
    290   
    291   
    292         encrSessMgrURI = self.encodeSessionMgrURI(sessMgrURI, encrKey) 
    293         dtExpiry = self.credWallet.userCert.notAfter 
    294          
    295         # Call class method  
    296         cookieTags = SessionCookie.tags 
    297         cookieTagsKw = {}.fromkeys(cookieTags) 
    298         cookieTagsKw[cookieTags[0]] = sessID 
    299         cookieTagsKw[cookieTags[1]] = encrSessMgrURI 
    300          
    301         sessCookie = SessionCookie(dtExpiry=dtExpiry, 
    302                                    cookieDomain=cookieDomain, 
    303                                    **cookieTagsKw) 
    304         if asString: 
    305             return str(sessCookie) 
    306         else: 
    307             return sessCookie 
    308      
    309  
    310 #_____________________________________________________________________________ 
    311 class SessionMgrError(_SessionMgrException):     
     214class SessionMgrError(_SessionException):     
    312215    """Exception handling for NDG Session Manager class.""" 
    313216 
     
    324227 
    325228 
    326 #_____________________________________________________________________________ 
    327229class SessionMgr(dict): 
    328230    """NDG authentication and session handling 
    329231     
    330     @type __validElem: dict 
    331     @cvar __validElem: list of the valid properties file element names and 
     232    @type _validElem: dict 
     233    @cvar _validElem: list of the valid properties file element names and 
    332234    sub-elements where appropriate 
    333235     
    334     @type __confDir: string 
    335     @cvar __confDir: configuration directory under $NDGSEC_DIR - default location 
     236    @type _confDir: string 
     237    @cvar _confDir: configuration directory under $NDGSEC_DIR - default location 
    336238    for properties file  
    337239     
    338     @type __propFileName: string 
    339     @cvar __propFileName: default file name for properties file under  
    340     __confDir 
     240    @type _propFileName: string 
     241    @cvar _propFileName: default file name for properties file under  
     242    _confDir 
    341243    """ 
    342244 
     
    346248    CRED_REPOS_KEY_NAME = 'credReposProp' 
    347249 
    348     __validElem = \ 
    349     { 
     250    _validElem = { 
    350251        'portNum':                None, 
    351252        'useSSL':                 None, 
     
    356257        'sessMgrURI':             None, 
    357258        'cookieDomain':           None,  
    358         'authNServiceProp':        None,  
    359         CRED_REPOS_KEY_NAME:          ('modFilePath', 'modName', 'className',  
     259        'authNServiceProp':       None,  
     260        CRED_REPOS_KEY_NAME:      ('modFilePath', 'modName', 'className',  
    360261                                   'propFile'), 
    361         'simpleCACltProp':        ('uri', 'xmlSigKeyFile', 'xmlSigCertFile',  
    362                                    'xmlSigCertPwd') 
    363262    } 
    364263 
    365     __confDir = "conf" 
    366     __propFileName = "sessionMgrProperties.xml" 
    367      
    368     #_________________________________________________________________________ 
    369     def __init__(self, propFilePath=None, credReposPPhrase=None, **prop):        
     264    _confDir = "conf" 
     265    _propFileName = "sessionMgrProperties.xml" 
     266     
     267    def __init__(self,  
     268                 propFilePath=None,  
     269                 propFileSection='DEFAULT', 
     270                 propPrefix='', 
     271                 credReposPPhrase=None, **prop):        
    370272        """Create a new session manager to manager NDG User Sessions 
    371273         
     
    400302        # Instantiate the authentication service to use with the session manager 
    401303        self.__authNService = instantiateClass( 
    402                 self.__prop[self.AUTHN_KEY_NAME].get('moduleName'),\ 
    403                 self.__prop[self.AUTHN_KEY_NAME].get('className'),\ 
    404                 moduleFilePath=self.__prop[self.AUTHN_KEY_NAME].get('moduleFilePath'),\ 
    405                 objectType=AbstractAutheNService, \ 
     304                self.__prop[self.AUTHN_KEY_NAME].get('moduleName'), 
     305                self.__prop[self.AUTHN_KEY_NAME].get('className'), 
     306                moduleFilePath=self.__prop[self.AUTHN_KEY_NAME].get('moduleFilePath'), 
     307                objectType=AbstractAuthNService,  
    406308                classProperties=self.__prop[self.AUTHN_KEY_NAME]) 
    407  
    408  
    409309        # Call here as we can safely expect that all Credential Repository 
    410310        # parameters have been set above 
    411311        self.__credRepos = instantiateClass( 
    412                 self.__prop[self.CRED_REPOS_KEY_NAME].get('modName'),\ 
    413                 self.__prop[self.CRED_REPOS_KEY_NAME].get('className'),\ 
    414                 moduleFilePath=self.__prop[self.CRED_REPOS_KEY_NAME].get('modFilePath'),\ 
    415                 objectType=CredRepos, \ 
     312                self.__prop[self.CRED_REPOS_KEY_NAME].get('modName'), 
     313                self.__prop[self.CRED_REPOS_KEY_NAME].get('className'), 
     314                moduleFilePath=self.__prop[self.CRED_REPOS_KEY_NAME].get('modFilePath'), 
     315                objectType=CredRepos, 
    416316                classProperties=self.__prop[self.CRED_REPOS_KEY_NAME]) 
    417317         
     
    421321        self.setProperties(**prop) 
    422322         
    423     #_________________________________________________________________________         
    424323    def __repr__(self): 
    425324        """Return file properties dictionary as representation""" 
     
    429328        "Session Manager keys cannot be removed"         
    430329        raise KeyError('Keys cannot be deleted from '+self.__class__.__name__) 
    431  
    432  
     330     
    433331    def __getitem__(self, key): 
    434332        self.__class__.__name__ + """ behaves as data dictionary of Session 
     
    467365    def __contains__(self, key): 
    468366        return key in self.__prop 
    469  
    470  
    471     #_________________________________________________________________________ 
     367     
    472368    def setPropFilePath(self, val=None): 
    473369        """Set properties file from input or based on environment variable 
     
    478374                val = os.environ['NDGSEC_SM_PROPFILEPATH'] 
    479375                 
    480                 log.debug(\ 
    481                 'Set properties file path "%s" from "NDGSEC_SM_PROPFILEPATH"'\ 
    482                 % val) 
     376                log.debug('Set properties file path "%s" from ' 
     377                          '"NDGSEC_SM_PROPFILEPATH"' % val) 
    483378 
    484379            elif 'NDGSEC_DIR' in os.environ: 
    485380                val = os.path.join(os.environ['NDGSEC_DIR'],  
    486                                    self.__class__.__confDir, 
    487                                    self.__class__.__propFileName) 
     381                                   self.__class__._confDir, 
     382                                   self.__class__._propFileName) 
    488383 
    489384                log.debug('Set properties file path %s from "NDGSEC_DIR"'%val) 
     
    514409                            fget=getPropFilePath, 
    515410                            doc="Set the path to the properties file")    
    516              
    517  
    518     #_________________________________________________________________________ 
    519     def readProperties(self): 
     411         
     412    def getPropFileSection(self): 
     413        '''Get the section name to extract properties from an ini file - 
     414        DOES NOT apply to XML file properties 
     415         
     416        @rtype: basestring 
     417        @return: section name''' 
     418        log.debug("Getting property file section name") 
     419        if hasattr(self, '_propFileSection'): 
     420            return self._propFileSection 
     421        else: 
     422            return ""     
     423     
     424    def setPropFileSection(self, val=None): 
     425        """Set section name to read properties from ini file.  This is set from 
     426        input or based on environment variable setting  
     427        NDGSEC_SM_PROPFILESECTION 
     428         
     429        @type val: basestring 
     430        @param val: section name""" 
     431        log.debug("Setting property file section name") 
     432        if not val: 
     433            val = os.environ.get('NDGSEC_SM_PROPFILESECTION', 'DEFAULT') 
     434                 
     435        if not isinstance(val, basestring): 
     436            raise AttributeError("Input Properties file section name " 
     437                                 "must be a valid string.") 
     438       
     439        self._propFileSection = val 
     440        log.debug("Properties file section set to: %s" % val) 
     441         
     442    # Also set up as a property 
     443    propFileSection = property(fset=setPropFileSection, 
     444                    fget=getPropFileSection, 
     445                    doc="Set the file section name for ini file properties")    
     446     
     447    def setPropPrefix(self, val=None): 
     448        """Set prefix for properties read from ini file.  This is set from 
     449        input or based on environment variable setting  
     450        NDGSEC_AA_PROPFILEPREFIX 
     451         
     452        DOES NOT apply to XML file properties 
     453         
     454        @type val: basestring 
     455        @param val: section name""" 
     456        log.debug("Setting property file section name") 
     457        if val is None: 
     458            val = os.environ.get('NDGSEC_AA_PROPFILEPREFIX', 'DEFAULT') 
     459                 
     460        if not isinstance(val, basestring): 
     461            raise AttributeError("Input Properties file section name " 
     462                                 "must be a valid string.") 
     463       
     464        self._propPrefix = val 
     465        log.debug("Properties file section set to: %s" % val) 
     466            
     467    def setPropPrefix(self, val=None): 
     468        """Set prefix for properties read from ini file.  This is set from 
     469        input or based on environment variable setting  
     470        NDGSEC_SM_PROPFILEPREFIX 
     471         
     472        DOES NOT apply to XML file properties 
     473         
     474        @type val: basestring 
     475        @param val: section name""" 
     476        log.debug("Setting property file section name") 
     477        if val is None: 
     478            val = os.environ.get('NDGSEC_SM_PROPFILEPREFIX', 'DEFAULT') 
     479                 
     480        if not isinstance(val, basestring): 
     481            raise AttributeError("Input Properties file section name " 
     482                                 "must be a valid string.") 
     483       
     484        self._propPrefix = val 
     485        log.debug("Properties file section set to: %s" % val) 
     486         
     487    def getPropPrefix(self): 
     488        '''Get the prefix name used for properties in an ini file - 
     489        DOES NOT apply to XML file properties 
     490         
     491        @rtype: basestring 
     492        @return: section name''' 
     493        log.debug("Getting property file prefix") 
     494        if hasattr(self, '_propPrefix'): 
     495            return self._propPrefix 
     496        else: 
     497            return ""     
     498         
     499    # Also set up as a property 
     500    propPrefix = property(fset=setPropPrefix, 
     501                          fget=getPropPrefix, 
     502                          doc="Set a prefix for ini file properties")    
     503 
     504    def readProperties(self, section=None, prefix=None): 
     505        '''Read the properties files and do some checking/converting of input  
     506        values 
     507          
     508        @type section: basestring 
     509        @param section: ini file section to read properties from - doesn't  
     510        apply to XML format properties files.  section setting defaults to  
     511        current propFileSection attribute 
     512        
     513        @type prefix: basestring 
     514        @param prefix: apply prefix to ini file properties - doesn't  
     515        apply to XML format properties files.  This enables filtering of 
     516        properties so that only those relevant to this class are read in 
    520517        ''' 
    521         Read the properties files and do some checking/converting of input values 
    522         ''' 
     518        if section is None: 
     519            section = self.propFileSection 
     520         
     521        if prefix is None: 
     522            prefix = self.propPrefix 
     523             
    523524        # Configuration file properties are held together in a dictionary 
    524         self.__prop = readAndValidateProperties(self.propFilePath, \ 
    525                                                 validKeys=SessionMgr.__validElem) 
     525        self.__prop = readAndValidateProperties(self.propFilePath, 
     526                                            validKeys=SessionMgr._validElem) 
    526527         
    527528        # add the WS-security properties to the main properties 
     
    530531 
    531532        missingElem = [] 
    532         # Further process the input config detail - to ensure subelement details 
    533         # are properly set up - NB, these are vals which are dictionaries; can 
    534         # ignore other vals here 
     533         
     534        # Further process the input config detail - to ensure subelement  
     535        # details are properly set up - NB, these are vals which are  
     536        # dictionaries; can ignore other vals here 
    535537        for key, val in self.__prop.items(): 
    536538            if not isinstance(val, dict): 
     
    539541            if key == self.CRED_REPOS_KEY_NAME: 
    540542                # Check for missing elements 
    541                 missingElem.extend(getMissingElem(\ 
    542                                            self.__validElem[self.CRED_REPOS_KEY_NAME], 
    543                                            self.__prop[self.CRED_REPOS_KEY_NAME])) 
    544                      
    545             elif key == 'simpleCACltProp': 
    546                 # Check for missing elements 
    547                 missingElem.extend(getMissingElem(\ 
    548                                        self.__validElem['simpleCACltProp'], 
    549                                        self.__prop['simpleCACltProp'])) 
    550                      
    551  
    552         missingElem.extend(getMissingElem(self.__validElem, self.__prop)) 
     543                missingElem.extend(getMissingElem( 
     544                                   self._validElem[self.CRED_REPOS_KEY_NAME], 
     545                                   self.__prop[self.CRED_REPOS_KEY_NAME]))                     
     546 
     547        missingElem.extend(getMissingElem(self._validElem, self.__prop)) 
    553548        errMsg = '' 
    554549         
     
    560555        log.info('Loaded properties from "%s"' % self._propFilePath) 
    561556        
    562  
    563     #_________________________________________________________________________ 
    564557    def setProperties(self, **prop): 
    565558        """Update existing properties from an input dictionary 
     
    569562         
    570563        for key in prop.keys(): 
    571             if key not in self.__validElem: 
     564            if key not in self._validElem: 
    572565                raise SessionMgrError("Property name \"%s\" is invalid" % key) 
    573  
    574  
    575566        for key, value in prop.items(): 
    576567                        
     
    581572                self.__prop[self.CRED_REPOS_KEY_NAME] = prop[key].copy() 
    582573 
    583             elif key in self.__validElem: 
     574            elif key in self._validElem: 
    584575                # Only update other keys if they are not None or "" 
    585576                if value: 
     
    589580                        self.__prop[key] = value               
    590581            else: 
    591                 raise SessionMgrError(\ 
    592                     "Key \"%s\" is not a valid Session Manager property" % key) 
    593      
    594      
     582                raise SessionMgrError('Key "%s" is not a valid Session ' 
     583                                      'Manager property' % key) 
     584         
    595585    def getSessionStatus(self, sessID=None, userDN=None): 
    596586        """Check the status of a given session identified by sessID or  
     
    639629                return False 
    640630 
    641      
    642     #_________________________________________________________________________         
    643631    def connect(self,  
    644632                createServerSess=True, 
     
    725713         
    726714        
    727     #_________________________________________________________________________         
    728715    def __createUserSession(self, *creds): 
    729716        """Create a new user session from input user credentials        
     
    789776        return userSess 
    790777 
    791  
    792     #_________________________________________________________________________         
    793778    def __connect2UserSession(self, userCert=None, sessID=None): 
    794779        """Connect to an existing session by providing a valid session ID or 
     
    881866                 
    882867 
    883  
    884     #_________________________________________________________________________         
    885868    def deleteUserSession(self, sessID=None, userCert=None, userSess=None): 
    886869        """Delete an existing session by providing a valid session ID or 
     
    955938                 (userDN, userSess.sessIDlist)) 
    956939 
    957     #_________________________________________________________________________ 
    958940    def getAttCert(self, 
    959941                   userCert=None, 
    960942                   sessID=None, 
    961                    encrSessMgrURI=None, 
    962943                   **credWalletKw): 
    963944        """For a given user, request Attribute Certificate from an Attribute  
     
    972953        @param sessID: user's ID to key into their session 
    973954         
    974         @type encrSessMgrURI: string 
    975         @param encrSessMgrURI: URI for remote session manager to forward a 
    976         request to.  This effectively use THIS session manager as a proxy to 
    977         another.  This URI is encrypted with a shared key.  The key is stored 
    978         in the property file 'sessMgrEncrKey' element.  *** This functionality 
    979         is redundant for NDG BETA delivery *** 
    980          
    981955        @type credWalletKw: dict 
    982956        @param **credWalletKw: keywords to CredWallet.getAttCert 
     
    985959        log.debug("Calling SessionMgr.getAttCert ...") 
    986960         
    987         # Web browser client input will include the encrypted address of the 
    988         # Session Manager where the user's session is held. 
    989         if encrSessMgrURI: 
    990              
    991             # Decrypt the URI for where the user's session resides 
    992             userSessMgrURI = UserSession.decodeSessionMgrURI(encrSessMgrURI, 
    993                                                self.__prop['sessMgrEncrKey']) 
    994                                                 
    995             # Check the address against the address of THIS Session Manager   
    996             if userSessMgrURI != self.__prop['sessMgrURI']: 
    997                  
    998                 # Session is held on a remote Session  Manager 
    999                 userSessMgrResp = self.__redirectAttCertReq(userSessMgrURI, 
    1000                                                             sessID=sessID, 
    1001                                                             userCert=userCert, 
    1002                                                             **credWalletKw) 
    1003  
    1004                 # Reset response by making a new AuthorisationResp object 
    1005                 # The response from the remote Session Manager will still 
    1006                 # contain the encrypted XML sent by it.  This should be 
    1007                 # discarded 
    1008                 return userSessMgrResp 
    1009  
    1010              
    1011         # User's session resides with THIS Session Manager / no encrypted 
    1012         # URI address passed in (as in command line use case for security) ... 
    1013  
    1014             
    1015961        # Retrieve session corresponding to user's session ID using relevant 
    1016962        # input credential 
    1017963        userSess = self.__connect2UserSession(sessID=sessID,userCert=userCert) 
    1018  
    1019  
    1020964        # User's Credential Wallet carries out attribute request to the 
    1021965        # Attribute Authority 
     
    1029973            # certificate 
    1030974            return None, str(e), e.extAttCertList 
    1031  
    1032  
    1033     #_________________________________________________________________________ 
    1034     def __redirectAttCertReq(self, userSessMgrURI, **kw): 
    1035         """Handle case where User session resides on another Session Manager - 
    1036         forward the request 
    1037          
    1038         @type userSessMgrURI: string 
    1039         @param userSessMgrURI: address of remote session manager where user 
    1040         session is held 
    1041          
    1042         @type **kw: dict 
    1043         @param **kw: same keywords which apply to getAttCert call""" 
    1044  
    1045          
    1046         log.info('SessionMgr.__redirectAttCertReq - redirecting to "%s"' % \ 
    1047                  userSessMgrURI) 
    1048                  
    1049          
    1050         # Instantiate WS proxy for remote session manager 
    1051         try: 
    1052             sessMgrClnt = SessionMgrClient(uri=userSessMgrURI, 
    1053                                  signingCertFilePath=self.__prop['signingCertFilePath'], 
    1054                                  signingPriKeyFilePath=self.__prop['signingPriKeyFilePath'], 
    1055                                  signingPriKeyPwd=self.__prop['signingPriKeyPwd'])            
    1056         except Exception, e: 
    1057             raise SessionMgrError( 
    1058                 "Re-directing attribute certificate request to \"%s\": %s" % \ 
    1059                 (userSessMgrURI, str(e))) 
    1060  
    1061              
    1062         # Call remote session manager's authorisation request method 
    1063         # and return result to caller 
    1064         try: 
    1065             # Call remote SessionMgr where users session lies 
    1066             resp = sessMgrClnt.getAttCert(**kw)         
    1067             return resp 
    1068          
    1069         except Exception, e: 
    1070             raise SessionMgrError( 
    1071         "Forwarding Authorisation request for Session Manager \"%s\": %s" %\ 
    1072                 (userSessMgrURI, e)) 
    1073  
    1074  
    1075     #_________________________________________________________________________ 
     975         
    1076976    def auditCredRepos(self): 
    1077977        """Remove expired Attribute Certificates from the Credential 
     
    1079979        log.debug("Calling SessionMgr.auditCredRepos ...") 
    1080980        self.__credRepos.auditCredentials() 
    1081  
    1082  
    1083 class AbstractAutheNService: 
     981         
     982         
     983class AbstractAuthNService: 
    1084984    """ 
    1085985    An abstract base class to define the authentication service interface for use 
     
    11111011        """ 
    11121012        pass 
    1113  
    1114  
     1013     
    11151014    def setProperties(self, **prop): 
    11161015        """Update existing properties from an input dictionary 
     
    11181017        raise NotImplementedError( 
    11191018                            self.setProperties.__doc__.replace('\n       ','')) 
    1120  
    1121  
     1019         
    11221020    def logon(self, username, passphrase, lifetime=None): 
    11231021        """ 
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/zsi/attributeauthority/AttAuthority_services_server.py

    r4255 r4265  
    55################################################## 
    66 
    7 from AttAuthority_services import * 
     7from ndg.security.common.zsi.attributeauthority.AttAuthority_services import * 
    88from ZSI.ServiceContainer import ServiceSOAPBinding 
    99 
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/zsi/attributeauthority/Makefile

    r4255 r4265  
    1717OPTS=-e -f 
    1818 
     19STUB_FILE=AttAuthority_services_server.py 
     20TMP_FILE=AttAuthority_services_server.py.tmp 
     21 
     22ORIG1=from AttAuthority_services import 
     23REPL1=from ndg.security.common.zsi.attributeauthority.AttAuthority_services import 
     24 
    1925generateStubs: ${WSDL_FILE} 
    2026        @echo Generate stub ... 
    2127        ${CMD} ${OPTS} ${WSDL_FILE} 
     28        @echo Make substitutions for correct NDG import path ... 
     29        @cat ${STUB_FILE}|sed  s/"${ORIG1}"/"${REPL1}"/g > ${TMP_FILE} 
     30        @mv ${TMP_FILE} ${STUB_FILE} 
    2231        @echo Done. 
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/zsi/sessionmanager/Makefile

    r4256 r4265  
    1717OPTS=-e -f 
    1818 
     19STUB_FILE=SessionMgr_services_server.py 
     20TMP_FILE=SessionMgr_services_server.py.tmp 
     21 
     22ORIG1=from SessionMgr_services import 
     23REPL1=from ndg.security.common.zsi.sessionmanager.SessionMgr_services import 
     24 
    1925generateStubs: ${WSDL_FILE} 
    2026        @echo Generate stub ... 
    2127        ${CMD} ${OPTS} ${WSDL_FILE} 
     28        @echo Make substitutions for compatibility for correct NDG import path ... 
     29        @cat ${STUB_FILE}|sed  s/"${ORIG1}"/"${REPL1}"/g > ${TMP_FILE} 
     30        @mv ${TMP_FILE} ${STUB_FILE} 
    2231        @echo Done. 
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/zsi/sessionmanager/SessionMgr_services_server.py

    r4256 r4265  
    55################################################## 
    66 
    7 from SessionMgr_services import * 
     7from ndg.security.common.zsi.sessionmanager.SessionMgr_services import * 
    88from ZSI.ServiceContainer import ServiceSOAPBinding 
    99 
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/zsi/sessionmanager/__init__.py

    r4262 r4265  
    1919    import SessionMgrService as _SessionMgrService 
    2020 
    21 from ndg.security.server.SessionMgr import SessionMgr, \ 
    22     SessionMgrAccessDenied 
     21from ndg.security.server.SessionMgr import SessionMgr 
    2322     
    2423from ndg.security.common.wssecurity.dom import SignatureHandler 
Note: See TracChangeset for help on using the changeset viewer.