Changeset 1777


Ignore:
Timestamp:
28/11/06 15:47:24 (13 years ago)
Author:
pjkersha
Message:

Working version of Session Manager stubs with reqAuthorisation, connect and getX509Cert calls.

server/SessionMgr/server-config.tac: added stubs for reqAuthorisation - TODO: hook up *real* SessionMgr?
backend.
server/SessionMgr/SessionMgr_services_server.py, common/SessionMgr/SessionMgr_services.py,
common/SessionMgr/SessionMgr_services_types.py, www/html/sessionMgr.wsdl: changes to WSDL to support
reqAuthorisation operations including list elements (by setting maxOccurs="unbounded")

test/SessionMgrClientTest.py: Session Manager unit tests updated for the above.

test/SessionCookieTest.py: new unit test for SessionCookie? module.

common/SessionCookie.py: fixes including ability to pass a cookie string to initialise and create
a new object.

Location:
TI12-security/trunk/python
Files:
1 added
8 edited

Legend:

Unmodified
Added
Removed
  • TI12-security/trunk/python/ndg.security.common/ndg/security/common/SessionCookie.py

    r1770 r1777  
    1414reposID = '$Id$' 
    1515 
     16from datetime import datetime 
     17from Cookie import SimpleCookie 
    1618 
    1719#_____________________________________________________________________________ 
     
    6264         
    6365    #_________________________________________________________________________     
    64     def __init__(self,  
     66    def __init__(self, 
     67                 cookieStr=None,  
    6568                 expiryStr=None, 
    6669                 dtExpiry=None, 
     70                 cookiePath=None, 
    6771                 cookieDomain=None, 
    6872                 **cookieTagKw): 
    69         """Generic cookie creation independent of individual UserSession  
    70         details.              
     73        """Cookie creation              
    7174             
    7275        Caller should set the cookie e.g. in a CGI script 
     
    7477        print str(cookie) + os.linesep 
    7578 
    76          
    77         **cookieTagKw:         session ID for cookie (ndgID1) and 
    78                                encrypted Session Manager WSDL address (ndgID2) 
    79                                ** style arg means they can be passed as a 
    80                                dictionary without the caller needing to  
    81                                know the tag names. 
    82                                 
     79        cookieStr:                   Optionally, create new object by parsing a 
     80                               cookie string 
    8381                               Use UserSession.encrypt() to encrypt the 
    8482                               SessionManager WSDL address.  The site  
     
    8886                               cookies or input a datetime type for  
    8987                               conversion. 
     88        cookiePath:            cookie path - defaults to '/' 
    9089        cookieDomain:          The domain for the cookie.  Default is the 
    9190                               web server address.  Override to set to a  
    9291                               site wide cookie e.g. .rl.ac.uk.  Nb. that this 
    9392                               has security implications 
     93         
     94        **cookieTagKw:         session ID for cookie (ndgID1) and 
     95                               encrypted Session Manager WSDL address (ndgID2) 
     96                               ** style arg means they can be passed as a 
     97                               dictionary without the caller needing to  
     98                               know the tag names. 
    9499        """ 
    95100 
     
    97102        # default to web server domain name 
    98103        self.__cookieDomain = cookieDomain 
    99          
     104 
     105        # Nb. SimpleCookie doesn't like unicode 
     106        self.__cookie = SimpleCookie(str(cookieStr)) 
     107             
    100108        try: 
    101             sessID = cookieTagKw[SessionCookie.tags[0]] 
    102             encrSessionMgrURI = cookieTagKw[SessionCookie.tags[1]] 
     109            # Check for expected cookie morsels 
     110            sessID = self.__cookie[SessionCookie.tags[0]].value 
     111            encrSessionMgrURI = self.__cookie[SessionCookie.tags[1]].value 
    103112             
    104113        except KeyError: 
    105             c = self.tags 
    106             msg = len(c) > 1 and 's %s and %s' % (', '.join(c[:-1]), c[-1]) \ 
    107                 or ' ' + c[-1] 
    108             raise SessionCookieError, "The Cookie tag keyword%s" % c 
     114            try: 
     115                # if not, check for setting from keywords 
     116                sessID = cookieTagKw[SessionCookie.tags[0]] 
     117                encrSessionMgrURI = cookieTagKw[SessionCookie.tags[1]] 
     118                 
     119            except KeyError:             
     120                tags = SessionCookie.tags 
     121                msg = len(tags) > 1 and \ 
     122                    's %s and %s' % (', '.join(tags[:-1]), tags[-1]) \ 
     123                    or ' ' + tags[-1] 
     124                raise SessionCookieError, "Missing Cookie morsel%s" % msg 
    109125 
    110126             
     
    114130        if encrSessionMgrURI[:7] == 'http://' or \ 
    115131           encrSessionMgrURI[:8] == 'https://': 
    116             SessionCookieError, "Input Session Manager WSDL URI does not " + \ 
     132            SessionCookieError, "Input Session Manager URI does not " + \ 
    117133                                "appear to have been encrypted" 
    118134                               
     
    125141             
    126142        elif not expiryStr or not isinstance(expiryStr, basestring): 
    127             raise SessionCookieError, "No cookie expiry was set" 
    128              
    129              
    130         try:    
    131             self.__cookie = SimpleCookie() 
    132               
     143            try: 
     144                # Check for expiry already set in SimpleCookie type - this 
     145                # would be true if str keyword was set 
     146                exp = \ 
     147                self.__cookie[SessionCookie.tags[0]][self.__cookieExpiryTag] 
     148            except KeyError: 
     149                raise SessionCookieError, "No cookie expiry was set" 
     150             
     151             
     152        try:              
    133153            tagValues = (sessID, encrSessionMgrURI) 
    134154            i=0 
    135             for tag in self.tags: 
    136                  
    137                 self.__cookie[tag] = tagValues[i] 
    138                 i += 1 
     155            for tag in SessionCookie.tags: 
     156                 
     157                if tag not in self.__cookie: 
     158                    self.__cookie[tag] = tagValues[i] 
    139159                 
    140160                # Use standard format for cookie path and expiry 
    141                 self.__cookie[tag][self.__cookiePathTag] = self.__cookiePath                 
    142                 self.__cookie[tag][self.__cookieExpiryTag]= expiryStr 
     161                self.__cookie[tag][self.__cookiePathTag] = \ 
     162                                            cookiePath or self.__cookiePath 
     163                                                             
     164                if expiryStr: 
     165                    self.__cookie[tag][self.__cookieExpiryTag] = expiryStr 
    143166                                             
    144                 # Make cookie as generic as possible for domains - Nb. '.uk' 
    145                 # alone won't work but .rl.ac.uk would 
     167                # Default domain is the host.  This is the safest option from 
     168                # a security perspective 
    146169                if cookieDomain: 
    147170                    self.__cookie[tag][self.__cookieDomainTag] = cookieDomain 
     171                     
     172                i += 1 
    148173             
    149174        except Exception, e: 
     
    185210    def __getSessionID(self): 
    186211        """Return the session ID from the cookie""" 
    187         return self.__cookie[SessionCookie.tags[0]]  
     212        return self.__cookie[SessionCookie.tags[0]].value  
    188213     
    189214    sessionID = property(fget=__getSessionID, doc="Get session ID") 
     
    192217    def __getEncrSessionMgrURI(self): 
    193218        """Return the Encrypted Session manager URI from the cookie""" 
    194         return self.__cookie[SessionCookie.tags[1]]  
     219        return self.__cookie[SessionCookie.tags[1]].value 
    195220 
    196221    encrSessionMgrURI = property(fget=__getEncrSessionMgrURI,  
  • TI12-security/trunk/python/ndg.security.common/ndg/security/common/SessionMgr/SessionMgr_services.py

    r1773 r1777  
    2929        # no ws-addressing 
    3030 
    31     # op: <ZSI.wstools.WSDLTools.Message instance at 0xb6f4f08c> 
    32     def addUser(self, username,passPhrase,createServerSess,getCookie): 
     31    # op: <ZSI.wstools.WSDLTools.Message instance at 0xb6df750c> 
     32    def addUser(self, username,passPhrase): 
    3333 
    3434        request = addUserInputMsg() 
    3535        request._username = username 
    3636        request._passPhrase = passPhrase 
    37         request._createServerSess = createServerSess 
    38         request._getCookie = getCookie 
    3937 
    4038        kw = {} 
     
    4341        # no output wsaction 
    4442        response = self.binding.Receive(addUserOutputMsg.typecode) 
    45         cookie = response._cookie 
    46         proxyCert = response._proxyCert 
    47         return cookie,proxyCert 
     43        return  
    4844 
    49     # op: <ZSI.wstools.WSDLTools.Message instance at 0xb6f4f3ac> 
     45    # op: <ZSI.wstools.WSDLTools.Message instance at 0xb6df798c> 
    5046    def connect(self, username,passPhrase,createServerSess,getCookie): 
    5147 
     
    6561        return cookie,proxyCert 
    6662 
    67     # op: <ZSI.wstools.WSDLTools.Message instance at 0xb6f4ff0c> 
     63    # op: <ZSI.wstools.WSDLTools.Message instance at 0xb6dfd26c> 
    6864    def disconnect(self, cookie,proxyCert): 
    6965 
     
    7975        return  
    8076 
    81     # op: <ZSI.wstools.WSDLTools.Message instance at 0xb6f600cc> 
    82     def reqAuthorisation(self, proxyCert,sessID,encrSessionMgrURI,attAuthorityURI,attAuthorityCert,reqRole,mapFromTrustedHosts,rtnExtAttCertList): 
     77    # op: <ZSI.wstools.WSDLTools.Message instance at 0xb6dfd9ec> 
     78    def reqAuthorisation(self, proxyCert,sessID,encrSessionMgrURI,attAuthorityURI,attAuthorityCert,reqRole,mapFromTrustedHosts,rtnExtAttCertList,extAttCert,extTrustedHost): 
    8379 
    8480        request = reqAuthorisationInputMsg() 
     
    9187        request._mapFromTrustedHosts = mapFromTrustedHosts 
    9288        request._rtnExtAttCertList = rtnExtAttCertList 
     89        request._extAttCert = extAttCert 
     90        request._extTrustedHost = extTrustedHost 
    9391 
    9492        kw = {} 
     
    9896        response = self.binding.Receive(reqAuthorisationOutputMsg.typecode) 
    9997        attCert = response._attCert 
    100         return attCert 
     98        statusCode = response._statusCode 
     99        extAttCert = response._extAttCert 
     100        return attCert,statusCode,extAttCert 
    101101 
    102     # op: <ZSI.wstools.WSDLTools.Message instance at 0xb6f6024c> 
     102    # op: <ZSI.wstools.WSDLTools.Message instance at 0xb6dfdb6c> 
    103103    def getX509Cert(self): 
    104104 
     
    113113        return x509Cert 
    114114 
    115 addUserInputMsg = ns0.connect_Dec().pyclass 
     115addUserInputMsg = ns0.addUser_Dec().pyclass 
    116116 
    117 addUserOutputMsg = ns0.connectResponse_Dec().pyclass 
     117addUserOutputMsg = ns0.addUserResponse_Dec().pyclass 
    118118 
    119119connectInputMsg = ns0.connect_Dec().pyclass 
  • TI12-security/trunk/python/ndg.security.common/ndg/security/common/SessionMgr/SessionMgr_services_types.py

    r1773 r1777  
    1818    targetNamespace = "urn:ndg:security" 
    1919 
     20    class attCertList_Def(ZSI.TC.List, TypeDefinition): 
     21        itemType = (u'urn:ndg:security', u'attCert') 
     22        schema = "urn:ndg:security" 
     23        type = (schema, "attCertList") 
     24        def __init__(self, pname, **kw): 
     25            ZSI.TC.List.__init__(self, pname, **kw) 
     26 
     27    class trustedHostList_Def(ZSI.TC.List, TypeDefinition): 
     28        itemType = (u'urn:ndg:security', u'trustedHost') 
     29        schema = "urn:ndg:security" 
     30        type = (schema, "trustedHostList") 
     31        def __init__(self, pname, **kw): 
     32            ZSI.TC.List.__init__(self, pname, **kw) 
     33 
    2034    class addUser_Dec(ZSI.TCcompound.ComplexType, ElementDeclaration): 
    2135        literal = "addUser" 
     
    142156            self.pyclass = Holder 
    143157 
     158    class attCert_Dec(ZSI.TC.String, ElementDeclaration): 
     159        literal = "attCert" 
     160        schema = "urn:ndg:security" 
     161        def __init__(self, **kw): 
     162            kw["pname"] = ("urn:ndg:security","attCert") 
     163            kw["aname"] = "_attCert" 
     164            class IHolder(str): typecode=self 
     165            kw["pyclass"] = IHolder 
     166            IHolder.__name__ = "_attCert_immutable_holder" 
     167            ZSI.TC.String.__init__(self, **kw) 
     168 
     169    class trustedHost_Dec(ZSI.TC.String, ElementDeclaration): 
     170        literal = "trustedHost" 
     171        schema = "urn:ndg:security" 
     172        def __init__(self, **kw): 
     173            kw["pname"] = ("urn:ndg:security","trustedHost") 
     174            kw["aname"] = "_trustedHost" 
     175            class IHolder(str): typecode=self 
     176            kw["pyclass"] = IHolder 
     177            IHolder.__name__ = "_trustedHost_immutable_holder" 
     178            ZSI.TC.String.__init__(self, **kw) 
     179 
    144180    class reqAuthorisation_Dec(ZSI.TCcompound.ComplexType, ElementDeclaration): 
    145181        literal = "reqAuthorisation" 
     
    147183        def __init__(self, **kw): 
    148184            ns = ns0.reqAuthorisation_Dec.schema 
    149             TClist = [ZSI.TC.String(pname="proxyCert", aname="_proxyCert", minOccurs=0, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.String(pname="sessID", aname="_sessID", minOccurs=0, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.String(pname="encrSessionMgrURI", aname="_encrSessionMgrURI", minOccurs=0, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.String(pname="attAuthorityURI", aname="_attAuthorityURI", minOccurs=1, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.String(pname="attAuthorityCert", aname="_attAuthorityCert", minOccurs=0, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.String(pname="reqRole", aname="_reqRole", minOccurs=0, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.Boolean(pname="mapFromTrustedHosts", aname="_mapFromTrustedHosts", minOccurs=1, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.Boolean(pname="rtnExtAttCertList", aname="_rtnExtAttCertList", minOccurs=1, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded"))] 
     185            TClist = [ZSI.TC.String(pname="proxyCert", aname="_proxyCert", minOccurs=0, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.String(pname="sessID", aname="_sessID", minOccurs=0, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.String(pname="encrSessionMgrURI", aname="_encrSessionMgrURI", minOccurs=0, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.String(pname="attAuthorityURI", aname="_attAuthorityURI", minOccurs=1, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.String(pname="attAuthorityCert", aname="_attAuthorityCert", minOccurs=0, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.String(pname="reqRole", aname="_reqRole", minOccurs=0, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.Boolean(pname="mapFromTrustedHosts", aname="_mapFromTrustedHosts", minOccurs=1, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.Boolean(pname="rtnExtAttCertList", aname="_rtnExtAttCertList", minOccurs=1, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.String(pname="extAttCert", aname="_extAttCert", minOccurs=0, maxOccurs="unbounded", nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.String(pname="extTrustedHost", aname="_extTrustedHost", minOccurs=0, maxOccurs="unbounded", nillable=False, typed=False, encoded=kw.get("encoded"))] 
    150186            kw["pname"] = ("urn:ndg:security","reqAuthorisation") 
    151187            kw["aname"] = "_reqAuthorisation" 
     
    165201                    self._mapFromTrustedHosts = None 
    166202                    self._rtnExtAttCertList = None 
     203                    self._extAttCert = [] 
     204                    self._extTrustedHost = [] 
    167205                    return 
    168206            Holder.__name__ = "reqAuthorisation_Holder" 
     
    174212        def __init__(self, **kw): 
    175213            ns = ns0.reqAuthorisationResponse_Dec.schema 
    176             TClist = [ZSI.TC.String(pname="attCert", aname="_attCert", minOccurs=0, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded"))] 
     214            TClist = [ZSI.TC.String(pname="attCert", aname="_attCert", minOccurs=0, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.String(pname="statusCode", aname="_statusCode", minOccurs=1, maxOccurs=1, nillable=False, typed=False, encoded=kw.get("encoded")), ZSI.TC.String(pname="extAttCert", aname="_extAttCert", minOccurs=0, maxOccurs="unbounded", nillable=False, typed=False, encoded=kw.get("encoded"))] 
    177215            kw["pname"] = ("urn:ndg:security","reqAuthorisationResponse") 
    178216            kw["aname"] = "_reqAuthorisationResponse" 
     
    185223                    # pyclass 
    186224                    self._attCert = None 
     225                    self._statusCode = None 
     226                    self._extAttCert = [] 
    187227                    return 
    188228            Holder.__name__ = "reqAuthorisationResponse_Holder" 
  • TI12-security/trunk/python/ndg.security.common/ndg/security/common/SessionMgr/__init__.py

    r1773 r1777  
    1515__all__ = ['SessionMgr_services', 'SessionMgr_services_types'] 
    1616 
    17 from SessionMgr_services import SessionMgrServiceLocator 
    18  
    1917import sys 
    2018import os 
    21 from ndg.security.common.SessionCookie import SessionCookie 
    2219 
    2320# Handle retrieval of public key cert for Session Manager/Attribute Authority 
     
    2623import urllib 
    2724 
    28 from NDG.X509 import * 
    29 import NDG.SessionMgrIO as smIO 
    30 import NDG.AttAuthorityIO as aaIO 
     25from ndg.security.common.SessionCookie import SessionCookie 
     26from ndg.security.common.X509 import * 
     27from ndg.security.common.AttCert import AttCertParse 
     28from SessionMgr_services import SessionMgrServiceLocator 
    3129 
    3230 
     
    4745                 tracefile=None): 
    4846        """ 
    49         uri:                  WSDL URI for Session Manager WS.  Setting it  
     47        uri:                    URI for Session Manager WS.  Setting it  
    5048                                 will set the Service Proxy 
    5149        smCertFilePath:     
     
    5351                                 the outgoing message if required - set as a 
    5452                                 path on the local file system or as a URI 
    55         clntCertFilePath:      Public key of client.  This is passed to the 
     53        clntCertFilePath:        X.509 cert for client.  This is passed to the 
    5654                                 Session Manager so that it can encrypt 
    5755                                 responses.  WARNING: if not set, responses 
     
    6361                                 give extra WS debug information""" 
    6462 
    65         self.__smSrv = None 
     63        self.__srv = None 
    6664        self.__uri = None 
    6765        self.__smCertFilePath = None 
     
    109107        self.__uri = uri 
    110108         
    111     uri = property(fset=__setURI, doc="Set Session Manager WSDL URI") 
     109    uri = property(fset=__setURI, doc="Set Session Manager URI") 
    112110 
    113111 
     
    117115        if not isinstance(smCertFilePath, basestring): 
    118116            raise SessionMgrClientError, \ 
    119                 "Session Manager public key URI must be a valid string" 
     117                "Session Manager X.509 Cert. file must be a valid string" 
    120118         
    121119        self.__smCertFilePath = smCertFilePath 
    122120         
    123121    smCertFilePath = property(fset=__setSMcertFilePath, 
    124                                 doc="Set Session Manager public key URI") 
     122                                doc="Set Session Manager X.509 Cert. file") 
    125123 
    126124  
     
    130128        if not isinstance(clntCertFilePath, basestring): 
    131129            raise SessionMgrClientError, \ 
    132                 "Client public key file path must be a valid string" 
     130                "Client X.509 cert. file path must be a valid string" 
    133131         
    134132        self.__clntCertFilePath = clntCertFilePath 
     
    137135             
    138136        except IOError, (errNo, errMsg): 
    139             raise SessionMgrClientError, "Reading certificate file \"%s\": %s" %\ 
    140                                         (self.__clntCertFilePath, errMsg) 
     137            raise SessionMgrClientError, \ 
     138                                    "Reading certificate file \"%s\": %s" % \ 
     139                                    (self.__clntCertFilePath, errMsg) 
    141140                                
    142141        except Exception, e: 
    143             raise SessionMgrClientError, "Reading certificate file \"%s\": %s" %\ 
    144                                         (self.__clntCertFilePath, str(e)) 
     142            raise SessionMgrClientError, \ 
     143                                    "Reading certificate file \"%s\": %s" %\ 
     144                                    (self.__clntCertFilePath, str(e)) 
    145145         
    146146    clntCertFilePath = property(fset=__setClntCertFilePath, 
    147                                   doc="File path for client public key") 
     147                                  doc="File path for client X.509 cert.") 
    148148 
    149149  
     
    163163    #_________________________________________________________________________ 
    164164    def __getSessionMgrCert(self): 
    165         """Retrieve the public key from the URI""" 
     165        """Retrieve the X.509 certificate from file or if not available, from 
     166        the Session Manager service""" 
    166167         
    167168        # Don't proceed unless URI was set - user may have set public key via 
     
    173174            self.__smCertTempFile = tempfile.NamedTemporaryFile() 
    174175             
    175             cert = self.getCert() 
     176            cert = self.getX509Cert() 
    176177            open(self.__smCertTempFile.name, "w").write(cert) 
    177178             
     
    180181        except IOError, (errNo, errMsg): 
    181182            raise SessionMgrClientError, \ 
    182                                 "Writing public key to temp \"%s\": %s" % \ 
    183                                 (self.__smCertTempFile.name, errMsg)                                                                     
     183                            "Writing X.509 certificate to temp \"%s\": %s" % \ 
     184                            (self.__smCertTempFile.name, errMsg)                                                                     
    184185        except Exception, e: 
    185186            raise SessionMgrClientError, "Retrieving Session Manager " + \ 
    186                                      "public key: %s" % str(e) 
     187                                         "X.509 certificate: %s" % str(e) 
    187188     
    188189         
     
    240241        # Make request for new user 
    241242        try:    
    242             resp = self.__smSrv.addUser(username, pPhrase) 
     243            self.__srv.addUser(username, pPhrase) 
    243244 
    244245        except Exception, e: 
     
    284285             
    285286            except Exception, e: 
    286                 raise SessionMgrClientError, "Pass-phrase not defined: " + str(e) 
     287                raise SessionMgrClientError, "Pass-phrase not defined: " + \ 
     288                                             str(e) 
    287289 
    288290 
     
    290292        self.__getSessionMgrCert() 
    291293 
    292          
     294 
    293295        # Make connection 
    294296        try:  
    295             resp = self.__smSrv.connect(userName,  
    296                                         pPhrase, 
    297                                         getCookie, 
    298                                         createServerSess) 
    299             if 'sessCookie' in connectResp: 
    300                 return connectResp['sessCookie'] 
    301              
    302             elif 'proxyCert' in connectResp: 
    303                 return connectResp['proxyCert'] 
    304              
     297            cookie, proxyCert = self.__srv.connect(userName,  
     298                                                   pPhrase, 
     299                                                   getCookie, 
     300                                                   createServerSess) 
     301            if cookie: 
     302                return cookie 
     303                        
     304            elif proxyCert: 
     305                return proxyCert 
     306                        
    305307            else: 
    306308               raise SessionMgrClientError, \ 
    307                    "Neither \"sessCookie\" or \"proxyCert\" found in response" 
     309               "Neither \"_sessCookie\" or \"_proxyCert\" found in response" 
    308310                
    309311        except Exception, e: 
     
    321323                         attAuthorityCert=None, 
    322324                         reqRole=None, 
    323                          mapFromTrustedHosts=None, 
    324                          rtnExtAttCertList=None, 
     325                         mapFromTrustedHosts=True, 
     326                         rtnExtAttCertList=False, 
    325327                         extAttCertList=[], 
    326328                         extTrustedHostList=[], 
     
    386388        # Make authorisation request 
    387389        try: 
    388             resp = self.__srv.reqAuthorisation(proxyCert, 
    389                                                sessID,  
    390                                                encrSessionMgrURI, 
    391                                                attAuthorityURI, 
    392                                                attAuthorityCert, 
    393                                                reqRole, 
    394                                                mapFromTrustedHosts, 
    395                                                rtnExtAttCertList, 
    396                                                extAttCertList, 
    397                                                extTrustedHostList) 
    398             return resp 
     390            attCert, statusCode, extAttCertList = \ 
     391                        self.__srv.reqAuthorisation(proxyCert, 
     392                                                  sessID,  
     393                                                  encrSessionMgrURI, 
     394                                                  attAuthorityURI, 
     395                                                  attAuthorityCert, 
     396                                                  reqRole, 
     397                                                  mapFromTrustedHosts, 
     398                                                  rtnExtAttCertList, 
     399                                                  extAttCertList, 
     400                                                  extTrustedHostList) 
     401            return attCert, statusCode, extAttCertList 
    399402             
    400403        except Exception, e: 
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/SessionMgr/SessionMgr_services_server.py

    r1773 r1777  
    6262      </xsd:element> 
    6363 
     64          <xsd:element name=\"attCert\" type=\"xsd:string\"/> 
     65          <xsd:element name=\"trustedHost\" type=\"xsd:string\"/> 
     66       
     67      <xsd:simpleType name=\"attCertList\"> 
     68        <xsd:list itemType=\"tns:attCert\"/> 
     69      </xsd:simpleType> 
     70 
     71      <xsd:simpleType name=\"trustedHostList\"> 
     72                <xsd:list itemType=\"tns:trustedHost\"/> 
     73      </xsd:simpleType> 
     74       
    6475      <xsd:element name=\"reqAuthorisation\"> 
    6576        <xsd:complexType> 
     
    7384                    <xsd:element maxOccurs=\"1\" minOccurs=\"1\" name=\"mapFromTrustedHosts\" type=\"xsd:boolean\"/> 
    7485                    <xsd:element maxOccurs=\"1\" minOccurs=\"1\" name=\"rtnExtAttCertList\" type=\"xsd:boolean\"/> 
    75                     <xsd:simpleType name=\"extAttCertList\"> 
    76                           <xsd:list itemType=\"xsd:string\"/> 
    77                         </xsd:simpleType> 
    78                     <xsd:simpleType name=\"extTrustedHostList\"> 
    79                           <xsd:list itemType=\"xsd:string\"/> 
    80                         </xsd:simpleType> 
     86                        <xsd:element maxOccurs=\"unbounded\" minOccurs=\"0\" name=\"extAttCert\" type=\"xsd:string\"/> 
     87                        <xsd:element maxOccurs=\"unbounded\" minOccurs=\"0\" name=\"extTrustedHost\" type=\"xsd:string\"/> 
     88 
     89<!-- Leave out list handling for now - use maxOccurs=\"unbounded\" instead 
     90                        <xsd:element name=\"extAttCertList\" type=\"tns:attCertList\" minOccurs=\"0\" maxOccurs=\"1\"/> 
     91                        <xsd:element name=\"extTrustedHostList\" type=\"tns:trustedHostList\" minOccurs=\"0\" maxOccurs=\"1\"/> 
     92--> 
    8193                  </xsd:sequence> 
    8294                </xsd:complexType> 
     
    8799              <xsd:sequence> 
    88100                <xsd:element maxOccurs=\"1\" minOccurs=\"0\" name=\"attCert\" type=\"xsd:string\"/> 
     101                <xsd:element maxOccurs=\"1\" minOccurs=\"1\" name=\"statusCode\" type=\"xsd:string\"/> 
     102                        <xsd:element maxOccurs=\"unbounded\" minOccurs=\"0\" name=\"extAttCert\" type=\"xsd:string\"/> 
     103<!-- Leave out list handling for now - use maxOccurs=\"unbounded\" instead 
     104                        <xsd:element name=\"extAttCertList\" type=\"tns:attCertList\" minOccurs=\"0\" maxOccurs=\"1\"/> 
     105--> 
    89106              </xsd:sequence> 
    90107            </xsd:complexType> 
     
    107124  
    108125  <message name=\"addUserInputMsg\"> 
    109     <part element=\"tns:connect\" name=\"parameters\"/> 
     126    <part element=\"tns:addUser\" name=\"parameters\"/> 
    110127  </message> 
    111128 
    112129  <message name=\"addUserOutputMsg\"> 
    113     <part element=\"tns:connectResponse\" name=\"parameters\"/> 
     130    <part element=\"tns:addUserResponse\" name=\"parameters\"/> 
    114131  </message> 
    115132  
     
    251268    def soap_addUser(self, ps): 
    252269        self.request = ps.Parse(addUserInputMsg.typecode) 
     270        parameters = (self.request._username, self.request._passPhrase) 
     271 
     272        # If we have an implementation object use it 
     273        if hasattr(self,'impl'): 
     274            parameters = self.impl.addUser(parameters[0],parameters[1]) 
     275 
     276        result = addUserOutputMsg() 
     277        return self.request, result 
     278 
     279    soapAction['addUser'] = 'soap_addUser' 
     280    root[(addUserInputMsg.typecode.nspname,addUserInputMsg.typecode.pname)] = 'soap_addUser' 
     281 
     282    def soap_connect(self, ps): 
     283        self.request = ps.Parse(connectInputMsg.typecode) 
    253284        parameters = (self.request._username, self.request._passPhrase, self.request._createServerSess, self.request._getCookie) 
    254285 
    255286        # If we have an implementation object use it 
    256287        if hasattr(self,'impl'): 
    257             parameters = self.impl.addUser(parameters[0],parameters[1],parameters[2],parameters[3]) 
    258  
    259         result = addUserOutputMsg() 
     288            parameters = self.impl.connect(parameters[0],parameters[1],parameters[2],parameters[3]) 
     289 
     290        result = connectOutputMsg() 
    260291        # If we have an implementation object, copy the result  
    261292        if hasattr(self,'impl'): 
     
    265296        return self.request, result 
    266297 
    267     soapAction['addUser'] = 'soap_addUser' 
    268     root[(addUserInputMsg.typecode.nspname,addUserInputMsg.typecode.pname)] = 'soap_addUser' 
    269  
    270     def soap_connect(self, ps): 
    271         self.request = ps.Parse(connectInputMsg.typecode) 
    272         parameters = (self.request._username, self.request._passPhrase, self.request._createServerSess, self.request._getCookie) 
    273  
    274         # If we have an implementation object use it 
    275         if hasattr(self,'impl'): 
    276             parameters = self.impl.connect(parameters[0],parameters[1],parameters[2],parameters[3]) 
    277  
    278         result = connectOutputMsg() 
    279         # If we have an implementation object, copy the result  
    280         if hasattr(self,'impl'): 
    281             # Should have a tuple of 2 args 
    282             result._cookie = parameters[0] 
    283             result._proxyCert = parameters[1] 
    284         return self.request, result 
    285  
    286298    soapAction['connect'] = 'soap_connect' 
    287299    root[(connectInputMsg.typecode.nspname,connectInputMsg.typecode.pname)] = 'soap_connect' 
     
    303315    def soap_reqAuthorisation(self, ps): 
    304316        self.request = ps.Parse(reqAuthorisationInputMsg.typecode) 
    305         parameters = (self.request._proxyCert, self.request._sessID, self.request._encrSessionMgrURI, self.request._attAuthorityURI, self.request._attAuthorityCert, self.request._reqRole, self.request._mapFromTrustedHosts, self.request._rtnExtAttCertList) 
    306  
    307         # If we have an implementation object use it 
    308         if hasattr(self,'impl'): 
    309             parameters = self.impl.reqAuthorisation(parameters[0],parameters[1],parameters[2],parameters[3],parameters[4],parameters[5],parameters[6],parameters[7]) 
     317        parameters = (self.request._proxyCert, self.request._sessID, self.request._encrSessionMgrURI, self.request._attAuthorityURI, self.request._attAuthorityCert, self.request._reqRole, self.request._mapFromTrustedHosts, self.request._rtnExtAttCertList, self.request._extAttCert, self.request._extTrustedHost) 
     318 
     319        # If we have an implementation object use it 
     320        if hasattr(self,'impl'): 
     321            parameters = self.impl.reqAuthorisation(parameters[0],parameters[1],parameters[2],parameters[3],parameters[4],parameters[5],parameters[6],parameters[7],parameters[8],parameters[9]) 
    310322 
    311323        result = reqAuthorisationOutputMsg() 
    312324        # If we have an implementation object, copy the result  
    313325        if hasattr(self,'impl'): 
    314             result._attCert = parameters 
     326            # Should have a tuple of 3 args 
     327            result._attCert = parameters[0] 
     328            result._statusCode = parameters[1] 
     329            result._extAttCert = parameters[2] 
    315330        return self.request, result 
    316331 
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/SessionMgr/server-config.tac

    r1773 r1777  
    2424from ndg.security.server.SessionMgr import SessionMgr 
    2525 
     26from ndg.security.common.SessionCookie import SessionCookie 
     27from datetime import datetime, timedelta 
     28 
    2629class SessionMgrServiceSub(SessionMgrService, WSResource): 
    2730     def __init__(self): 
     
    3841     def soap_connect(self, ps, **kw): 
    3942         #import pdb;pdb.set_trace() 
    40          request, response = SessionMgrService.soap_getHostInfo(self, ps) 
     43         request, response = SessionMgrService.soap_connect(self, ps) 
     44         response.set_element_proxyCert('PROXY CERT') 
     45          
     46         dtExpiry = datetime.utcnow() + timedelta(seconds=60*60) 
     47         cookie = SessionCookie(ndgID1='9'*64,  
     48                                ndgID2='0'*64, 
     49                                dtExpiry=dtExpiry) 
     50          
     51         response.set_element_cookie(cookie) 
    4152         return request, response 
    4253 
     
    4960         #import pdb;pdb.set_trace() 
    5061         request, response = SessionMgrService.soap_reqAuthorisation(self, ps) 
     62         response.set_element_attCert('ATTRIBUTE CERTIFICATE') 
     63         response.set_element_statusCode('AcessGranted') 
    5164         return request, response 
    5265 
  • TI12-security/trunk/python/ndg.security.test/ndg/security/test/SessionMgrClientTest.py

    r1773 r1777  
    2626 
    2727 
    28 class SecurityClientTestCase(unittest.TestCase): 
     28class SessionMgrClientTestCase(unittest.TestCase): 
    2929     
    3030    def setUp(self): 
     
    130130        # explicitly as a string use the 'pPhrase' keyword instead 
    131131        sSessCookie = self.clnt.connect(self.config['userName'],  
    132                             pPhraseFilePath=self.config['userNamePPhrase'], 
    133                             clntPriKeyPwd=self.__clntPriKeyPwd) 
     132                                    pPhrase=self.config['userNamePPhrase'], 
     133                                    clntPriKeyPwd=self.__clntPriKeyPwd) 
     134 
    134135        self.sessCookie = SessionCookie(sSessCookie) 
    135136        print "User '%s' connected to Session Manager:\n%s" % \ 
     
    177178                        attAuthorityURI=self.config['aaURI'], 
    178179                        encrSessionMgrURI=self.sessCookie.encrSessionMgrURI, 
     180                        clntPriKeyPwd=self.__clntPriKeyPwd) 
     181           
     182        print resp 
     183 
     184 
     185    def testCookieReqAuthorisationWithExtAttCertList(self): 
     186        """testCookieReqAuthorisation: make an authorisation request using 
     187        a cookie as authentication credential""" 
     188         
     189        self.testCookieConnect() 
     190        resp = self.clnt.reqAuthorisation(\ 
     191                        sessID=self.sessCookie.sessionID,  
     192                        attAuthorityURI=self.config['aaURI'], 
     193                        encrSessionMgrURI=self.sessCookie.encrSessionMgrURI, 
     194                        extAttCertList=['AC1', 'AC2', 'AC3'], 
    179195                        clntPriKeyPwd=self.__clntPriKeyPwd) 
    180196           
  • TI12-security/trunk/python/www/html/sessionMgr.wsdl

    r1773 r1777  
    5959      </xsd:element> 
    6060 
     61          <xsd:element name="attCert" type="xsd:string"/> 
     62          <xsd:element name="trustedHost" type="xsd:string"/> 
     63       
     64      <xsd:simpleType name="attCertList"> 
     65        <xsd:list itemType="tns:attCert"/> 
     66      </xsd:simpleType> 
     67 
     68      <xsd:simpleType name="trustedHostList"> 
     69                <xsd:list itemType="tns:trustedHost"/> 
     70      </xsd:simpleType> 
     71       
    6172      <xsd:element name="reqAuthorisation"> 
    6273        <xsd:complexType> 
     
    7081                    <xsd:element name="mapFromTrustedHosts" type="xsd:boolean" minOccurs="1" maxOccurs="1"/> 
    7182                    <xsd:element name="rtnExtAttCertList" type="xsd:boolean" minOccurs="1" maxOccurs="1"/> 
    72                     <xsd:simpleType name="extAttCertList"> 
    73                           <xsd:list itemType="xsd:string"/> 
    74                         </xsd:simpleType> 
    75                     <xsd:simpleType name="extTrustedHostList"> 
    76                           <xsd:list itemType="xsd:string"/> 
    77                         </xsd:simpleType> 
     83                        <xsd:element name="extAttCert" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/> 
     84                        <xsd:element name="extTrustedHost" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/> 
     85 
     86<!-- Leave out list handling for now - use maxOccurs="unbounded" instead 
     87                        <xsd:element name="extAttCertList" type="tns:attCertList" minOccurs="0" maxOccurs="1"/> 
     88                        <xsd:element name="extTrustedHostList" type="tns:trustedHostList" minOccurs="0" maxOccurs="1"/> 
     89--> 
    7890                  </xsd:sequence> 
    7991                </xsd:complexType> 
     
    8496              <xsd:sequence> 
    8597                <xsd:element name="attCert" type="xsd:string" minOccurs="0" maxOccurs="1"/> 
     98                <xsd:element name="statusCode" type="xsd:string" minOccurs="1" maxOccurs="1"/> 
     99                        <xsd:element name="extAttCert" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/> 
     100<!-- Leave out list handling for now - use maxOccurs="unbounded" instead 
     101                        <xsd:element name="extAttCertList" type="tns:attCertList" minOccurs="0" maxOccurs="1"/> 
     102--> 
    86103              </xsd:sequence> 
    87104            </xsd:complexType> 
     
    104121  
    105122  <message name="addUserInputMsg"> 
    106     <part name="parameters" element="tns:connect"/> 
     123    <part name="parameters" element="tns:addUser"/> 
    107124  </message> 
    108125 
    109126  <message name="addUserOutputMsg"> 
    110     <part name="parameters" element="tns:connectResponse"/> 
     127    <part name="parameters" element="tns:addUserResponse"/> 
    111128  </message> 
    112129  
Note: See TracChangeset for help on using the changeset viewer.