Changeset 1203 for TI12-security


Ignore:
Timestamp:
16/06/06 11:38:22 (13 years ago)
Author:
pjkersha
Message:

Tests/AttAuthorityIOtest.py: added testTrustedHosts3 to test results from livglue

Tests/security.py: returnURI input to init isn't needed - it can be picked up from as a form variable.

NDG/SecurityCGI.py: returnCreds renamed to returnCredsResponse. This method now checks the domain of the input
cookie. If this matches that of the returnURI, then there is no need to return the cookie information as they
can share the cookie.

NDG/Session.py: Created a metaclass _MetaUserSession for UserSession?. This enables UserSession? to have read-
only class variables - e.g. "cookieTags"

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

Legend:

Unmodified
Added
Removed
  • TI12-security/trunk/python/NDG/SecurityCGI.py

    r1190 r1203  
    100100                            timedelta(seconds=self.cookieLifetimeHrs*60*60) 
    101101 
    102         self.__wsDebug = False 
     102        self.__wsDebug = False         
    103103        self._authorisationMethod = None 
    104  
    105104        self.attCert = None 
    106          
    107          
     105                 
    108106        cgi.FieldStorage.__init__(self, **cgiFieldStorageKwArgs) 
    109107 
     
    138136             
    139137            if bAuthorise: 
    140  
    141138                # Authorisation and authentication arguments were set 
    142139                # - Call authentication first 
    143                 cookie = self.authenticate(setCookie=False) 
     140                sessCookie = self.authenticate(setCookie=False) 
    144141 
    145142                # Call authorisation passing the session ID for authorise to 
    146143                # set the cookie 
    147                 self.getAttCert(cookie) 
     144                self.getAttCert(sessCookie) 
    148145             
    149146            if 'returnURI' in self: 
     
    269266                            bAuthorise=False,  
    270267                            sessCookie=None,  
    271                             **returnCredsKwArgs): 
     268                            **returnCredsResponseKwArgs): 
    272269        """Receive request from remote site for credentials.  Process and  
    273270        return via a redirect""" 
     
    286283                 
    287284            # Return cookie to requestor 
    288             self.returnCreds(sessCookie, returnURI, **returnCredsKwArgs) 
     285            self.returnCredsResponse(sessCookie,  
     286                                     returnURI,  
     287                                     **returnCredsResponseKwArgs) 
    289288 
    290289        else: 
     
    297296     
    298297    #_________________________________________________________________________ 
    299     def returnCreds(self, 
    300                     sessCookie,  
    301                     returnURI=None, 
    302                     pageTitle='', 
    303                     hdrTxt='', 
    304                     delayTime=0, 
    305                     redirectMsg='', 
    306                     setCookie=False): 
     298    def returnCredsResponse(self, 
     299                            sessCookie,  
     300                            returnURI=None, 
     301                            pageTitle='', 
     302                            hdrTxt='', 
     303                            delayTime=0, 
     304                            redirectMsg='', 
     305                            setCookie=False): 
    307306        """User's home site returns credentials to requestor via a HTTP  
    308307        redirect 
     
    324323            cookieTxt = '' 
    325324 
    326  
    327         # Allow for case where return URI already includes some args 
    328         if '?' in returnURI: 
    329             argSeparator = '&' 
    330         else: 
    331             argSeparator = '?' 
    332  
    333  
    334         print """Content-type: text/html 
     325        # Check to see if the returnURI is in the same domain - if so there's 
     326        # no need to return any credentials in the redirect 
     327        cookieDomain = sessCookie[UserSession.cookieTags[0]]['domain'] 
     328        if cookieDomain and cookieDomain in returnURI: 
     329            print """Content-type: text/html 
     330%s 
     331<html> 
     332<head> 
     333<title>%s</title> 
     334<meta http-equiv="REFRESH" 
     335content="%d; url=%s"> 
     336%s 
     337</head> 
     338<body> 
     339%s 
     340</body> 
     341</html>""" % ( cookieTxt, 
     342               pageTitle, 
     343               delayTime, 
     344               returnURI, 
     345               hdrTxt, 
     346               redirectMsg) 
     347             
     348        else: 
     349            # returnURI is in a different domain - return the credentials 
     350            # 
     351            # Allow for case where return URI already includes some args 
     352            if '?' in returnURI: 
     353                argSeparator = '&' 
     354            else: 
     355                argSeparator = '?' 
     356     
     357     
     358            print """Content-type: text/html 
    335359%s 
    336360<html> 
     
    354378               hdrTxt, 
    355379               redirectMsg) 
    356  
    357  
     380     
     381     
    358382    #_________________________________________________________________________ 
    359383    def authenticate(self, bAuthorise=False): 
  • TI12-security/trunk/python/NDG/Session.py

    r1180 r1203  
    7171    def __str__(self): 
    7272        return self.__msg 
     73     
     74     
     75#_____________________________________________________________________________ 
     76class _MetaUserSession(type): 
     77    """Enable UserSession to have read only class variables e.g. 
     78     
     79    print UserSession.cookieTags is allowed but, 
     80     
     81    UserSession.cookieTags = None 
     82     
     83    ... raises - AttributeError: can't set attribute""" 
     84    def __getCookieTags(cls): 
     85        return ("NDG-ID1", "NDG-ID2") 
     86 
     87    cookieTags = property(fget=__getCookieTags) 
    7388 
    7489 
     
    7994    """Session details - created when a user logs into NDG""" 
    8095 
     96    __metaclass__ = _MetaUserSession 
     97     
    8198    # Session ID 
    8299    __sessIDlen = 64 
    83  
    84     __cookieTags = ("NDG-ID1", "NDG-ID2") 
    85100 
    86101    # Follow standard format for cookie path and expiry attributes 
     
    340355            tagValues = (sessID, encrSessMgrWSDLuri) 
    341356            i=0 
    342             for tag in cls.__cookieTags: 
     357            for tag in cls.cookieTags: 
    343358                 
    344359                sessCookie[tag] = tagValues[i] 
     
    350365                                             
    351366                # Make cookie as generic as possible for domains - Nb. '.uk' 
    352                 # alone won't work 
     367                # alone won't work but .rl.ac.uk would 
    353368                if cookieDomain: 
    354369                    sessCookie[tag][cls.__cookieDomainTag] = cookieDomain 
     
    383398                return False 
    384399         
    385         missingTags = [tag for tag in cls.__cookieTags if tag not in cookie] 
     400        missingTags = [tag for tag in cls.cookieTags if tag not in cookie] 
    386401        if missingTags: 
    387402            if raiseExcep: 
     
    392407                return False 
    393408 
    394         if len(cookie[cls.__cookieTags[0]].value) < cls.__sessIDlen: 
     409        if len(cookie[cls.cookieTags[0]].value) < cls.__sessIDlen: 
    395410            if raiseExcep: 
    396411                raise UserSessionError, "Session ID has an invalid length" 
  • TI12-security/trunk/python/Tests/AttAuthorityIOtest.py

    r1176 r1203  
    303303        print self.trustedHostResp() 
    304304        print self.trustedHostResp['trustedHosts'] 
    305          
    306  
     305 
     306         
     307    def testTrustedHosts3(self): 
     308         
     309        xmlTxt = \ 
     310"""<?xml version="1.0" encoding="UTF-8"?> 
     311<TrustedHostInfoResp> 
     312    <trustedHosts> 
     313        <trusted name="BADC"> 
     314            <wsdl>http://glue.badc.rl.ac.uk/attAuthority.wsdl</wsdl> 
     315            <loginURI>https://glue.badc.rl.ac.uk/cgi-bin/security.py</loginURI> 
     316            <roleSet> 
     317                <role>school</role> 
     318                <role>rapid</role> 
     319                <role>government</role> 
     320                <role>badcUser</role> 
     321                <role>nercFunded</role> 
     322                <role>bodcUser</role> 
     323                <role>commercial</role> 
     324                <role>metOfficeForm</role> 
     325                <role>other</role> 
     326                <role>acsoe</role> 
     327                <role>university</role> 
     328                <role>nercInst</role> 
     329            </roleSet> 
     330        </trusted> 
     331    </trustedHosts> 
     332</TrustedHostInfoResp>""" 
     333 
     334        try:        
     335            self.trustedHostResp = TrustedHostInfoResp(xmlTxt=xmlTxt) 
     336        except Exception, e: 
     337            self.fail(str(e)) 
     338   
     339        print self.trustedHostResp() 
     340        print self.trustedHostResp['trustedHosts'] 
     341         
     342         
    307343class AttAuthorityIOtestSuite(unittest.TestSuite): 
    308344    def __init__(self): 
  • TI12-security/trunk/python/Tests/security.py

    r1035 r1203  
    280280    clntPriKeyFilePath = "../certs/GabrielCGI-key.pem" 
    281281 
    282     returnURI = "https://gabriel.bnsc.rl.ac.uk/cgi-bin/security.py" 
    283  
    284282    securityCGI = TestSecurityCGI(smWSDL, 
    285283                                  aaWSDL, 
     
    288286                                  aaPubKeyFilePath=aaPubKeyFilePath, 
    289287                                  clntPubKeyFilePath=clntPubKeyFilePath, 
    290                                   clntPriKeyFilePath=clntPriKeyFilePath, 
    291                                   returnURI=returnURI) 
     288                                  clntPriKeyFilePath=clntPriKeyFilePath) 
    292289    securityCGI() 
Note: See TracChangeset for help on using the changeset viewer.