Changeset 980


Ignore:
Timestamp:
23/05/06 09:07:39 (13 years ago)
Author:
lawrence
Message:

Modifications in browse to get security going
(currently deliberately crashing in session
establishment - but after successfully obtaining
trusted host list).

Location:
TI07-MOLES/trunk/StubB/XSLT/browse/portal/cgi
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • TI07-MOLES/trunk/StubB/XSLT/browse/portal/cgi/browse.config

    r976 r980  
    2323[security] 
    2424 
    25 localSM:        http://norealhost 
     25libraryLoc:     /home/bnl/sandboxes/ndg/MOLES/browse/portal/cgi/NDG/ 
     26localAA:        http://glue.badc.rl.ac.uk/attAuthority.wsdl 
     27localSM:        http://glue.badc.rl.ac.uk/sessionMgr.wsdl 
    2628 
    2729# comment out the debugLog if you dont want one! 
  • TI07-MOLES/trunk/StubB/XSLT/browse/portal/cgi/browse.py

    r828 r980  
    22import cgitb; cgitb.enable() 
    33import sys 
    4 from browseCGI import * 
     4from Utilities import myConfig 
     5from browseCGI import CGIcontroller 
    56 
    6 molesPortal=CGIcontroller() 
     7config=myConfig('cgi/browse.config') 
     8molesPortal=CGIcontroller(config) 
    79response=molesPortal.goforit() 
    810response.write(sys.stdout) 
  • TI07-MOLES/trunk/StubB/XSLT/browse/portal/cgi/browseCGI.py

    r976 r980  
    3434                self.history=RingBuffer(10) 
    3535                self.__loadBrowseHistory() 
     36                self.url=url  
    3637         
    3738        def makeGateway(self): 
    3839                ''' Make connection to NDG security ''' 
    39                 self.ndgGate=gateway2NDGsession(self.rawCookie,self.config) 
     40                aa=self.config.get('security','localAA',None) 
     41                self.ndgGate=gateway2NDGsession(self.rawCookie,self.url,aa) 
    4042         
    4143        def __toXML(self): 
     
    8486        ''' Currently holds the cgi environment and controls ''' 
    8587         
    86         def __init__(self): 
     88        def __init__(self,config): 
    8789                ''' Instantiate the CGI environment''' 
    8890                self.env=os.environ 
    8991                self.path=self.env.get('PATH_INFO','/') 
    9092                self.FieldStorage=cgi.FieldStorage() 
    91                 self.config=myConfig('cgi/browse.config') 
     93                self.config=config 
    9294                self.response=Response() 
    9395 
     
    115117                 
    116118                self.session=BrowseSession(self.cookie,self.uri,self.config) 
     119                 
    117120                if self.config.logfile is not None: self.config.log(self.cookie) 
    118121                 
     122                #this is where we invoke NDG security setup 
     123                self.session.makeGateway() 
     124                 
    119125                #get the xml document 
    120126                db=self.config.get('db','exist',None) 
     
    139145                            content=et2text(self.b.tree) 
    140146                        elif self.ViewXML==1: 
    141                             #self.response.contentType='text/html' 
    142147                            content=et2html(self.b.tree) 
    143148                        else: 
  • TI07-MOLES/trunk/StubB/XSLT/browse/portal/cgi/insecure.py

    r976 r980  
    3636        #we don't use os.path.split, because this is os indpendent. 
    3737        edb='xmldb:exist://%s:8080/exist/xmlrpc'%db 
     38        #following a hack for testing: 
     39        if uri=='methyl.example.xml': 
     40            f=file('../exampleB/methyl.example.xml') 
     41            return f.read() 
    3842        try: 
    3943                repPath,localID=uri.split('/') 
  • TI07-MOLES/trunk/StubB/XSLT/browse/portal/cgi/secure.py

    r935 r980  
    11from Utilities import wrapGetText 
     2from NDG.SecurityClient import * 
    23 
    34class AccessControl: 
     
    3536        so for now we'll hardcode that mapping in this routine, but it ought to be a simple 
    3637        (restful) web service (restful because it is public) ''' 
    37         return [x] 
     38        return x 
    3839         
    3940class gateway2NDGsession: 
     
    4344        def __init__(self,cookie, url, config, desiredAA=None): 
    4445                 
    45                 ''' Establish gateway by either, 
    46                        a) using the NDG cookie and passing it to a local session manager instance 
    47                        to decode and use, or  
    48                        b) redirecting and receving back a url with the cookie information and then 
    49                        doing option a). 
    50                 In both cases, we can't assume that we can *Create* the cookie as there 
    51                 may be a pre-existing history component to the cookie. 
    52                 ''' 
     46                ''' The use case is that we attempt to establish a gateway to an  
     47                existing NDG session. If it exists, fine, if it doesn't, then we 
     48                don't do anything, but wait til a check call before attempting 
     49                to establish a connection ... that way we can prompt with an appropriate 
     50                set of hosts. 
     51                 
     52                If an NDG cookie exists, we use it by reEstablishing to the existing session. 
     53                ''' 
    5354                 
    5455                #First we have to see if the ndgsecurity info is in the cookie 
    5556                self.cookie=cookie 
    5657                self.url=url 
    57                 if self.__notSecCookie(): 
    58                         self._Establish(desiredAA) 
    59                 else: 
    60                         self._reEstablish() 
     58                self.connected=0 
     59                self.config=config 
     60                if self.__SecCookie(): self._reEstablish(cookie) 
    6161                 
    62                 self.config=config 
    63          
    64         def __notSecCookie(self): 
     62        def __SecCookie(self): 
    6563                ''' Check the current cookie and see if it contains security information, but 
    6664                we (the CGI) don't need to parse it ''' 
    6765                # note we don't use isinstance since it is considered harmful. 
    6866                if self.cookie is None: 
    69                         return 1 
     67                    return 0 
    7068                else: 
    71                         try: 
    72                                 for i in ('NDG-ID1','NDG-ID2'):  
    73                                         if i not in self.cookie: return 1 
    74                         except:  
    75                                 return 1 
    76                 return 0 
     69                    try: 
     70                        for i in ('NDG-ID1','NDG-ID2'):  
     71                            if i not in self.cookie: return 0 
     72                    except:  
     73                        return 0 
     74                return 1 
    7775                                                 
    78         def _Establish(self,desiredAA): 
    79                 ''' Need to go off and do some prompting etc ''' 
    80                 # this should eventually be a redirect, after which we will 
    81                 # get a URI back with the cookie posted as a (hidden) uri argument. 
    82                 AA=AttributeAuthorityClient(desiredAA) 
    83                 trustedHostList=AA.getTrustedHostInfo() 
     76        def __Establish(self,parsedSimpleCondition): 
     77                ''' Establish an NDG security session. We work out who to login 
     78                with by getting the list of trusted hosts from the parsedSimpleCondition 
     79                (which is just a tuple - role, attribute authority). This results in 
     80                a redirect to a user chosen host, after which we get back a URI with 
     81                the cookie posted as a (hidden) uri argument ''' 
     82                 
     83                AA=AttAuthorityClient(aaWSDL=parsedSimpleCondition[1]) 
     84                trustedHostList=AA.getTrustedHostInfo(role=parsedSimpleCondition[0]) 
    8485                loginHostList=mapAA2loginHosts(trustedHostList)  
    85                 pass 
     86                print trustedHostList,1/0 
     87                #PHIL AT THIS POINT WE NEED TO CALL YOUR LOGIN CODE WHICH OUGHT 
     88                #TO PROMPT THE USER FOR ONE OF THESE HOSTS ... 
    8689         
    8790        def _reEstablish(self,cookie): 
    8891                ''' bind to the existing WSDL ''' 
    8992                 
    90                 # 
    9193                self.__loadKeys(smWSDL) 
    9294                try: 
     
    9496                        # (all these keys to do message level encryption while talking to server, 
    9597                        # see __loadKeys for more details) 
    96                         smClient = SessionClient( 
     98                        self.smClient = SessionClient( 
    9799                            smWSDL=self.__localSessionManagerProxyWSDL, 
    98100                            smPubKeyFilePath=self.__localSessionManagerPublicKey, 
     
    100102                                    clntPriKeyFilePath=self.__thisCGIprivateKey, 
    101103                            traceFile=traceFile) 
    102  
     104                        self.connected=1 
    103105                except Exception, e: 
    104106                        # Socket error returns tuple - reformat to just give msg 
     
    114116                if parsedSimpleCondition is None: return 0 
    115117 
    116                 resp = smClient.reqAuthorisation(sessCookie=cookieObj, 
     118                #if not connected, get connected 
     119                self.__Establish(parsedSimpleCondition) 
     120 
     121                resp = self.smClient.reqAuthorisation(sessCookie=cookieObj, 
    117122                                    aaWSDL=wsdlAA, 
    118123                                    aaPubKey=None, # the session client can get that from the WSDL  
Note: See TracChangeset for help on using the changeset viewer.