Changeset 3914 for TI12-security


Ignore:
Timestamp:
20/05/08 17:11:20 (12 years ago)
Author:
pjkersha
Message:
  • New ndg.security.common.zsi_util.httpproxy.ProxyHTTPConnection class replaces urllib2client - easier to fit into existing ZSI client framework.
  • Further OpenID integration into Single Sign On Service. User now authenticates OK but patches needed to AuthKit? + need to handle return_to URL dynamically according to page visited before WAYF call.
Location:
TI12-security/trunk/python
Files:
4 added
1 deleted
16 edited

Legend:

Unmodified
Added
Removed
  • TI12-security/trunk/python/Tests/authtest/development.ini

    r3892 r3914  
    1414use = egg:Paste#http 
    1515host = 0.0.0.0 
    16 port = 5000 
     16port = 5100 
    1717 
    1818[app:main] 
     
    5454# This is optional - see: 
    5555# http://wiki.pylonshq.com/display/authkitcookbook/OpenID+Passurl 
    56 authkit.openid.baseurl = http://localhost:5000 
     56authkit.openid.baseurl = http://localhost:5100 
    5757 
    5858# Template for signin 
     
    6161# Logging configuration 
    6262[loggers] 
    63 keys = root, authtest 
     63keys = root, authtest, authkit 
    6464 
    6565[handlers] 
     
    7878qualname = authtest 
    7979 
     80[logger_authkit] 
     81level = DEBUG 
     82handlers = 
     83qualname = authkit 
     84 
    8085[handler_console] 
    8186class = StreamHandler 
  • TI12-security/trunk/python/ndg.security.common/ndg/security/common/AttAuthority/AttAuthority_services.py

    r3832 r3914  
    88import urlparse, types 
    99from ZSI.TCcompound import ComplexType, Struct 
    10 from ndg.security.common.zsi_utils import urllib2client as client 
     10from ZSI import client 
    1111import ZSI 
    1212from ZSI.generate.pyclass import pyclass_type 
     
    2929        # no ws-addressing 
    3030 
    31     # op: <ZSI.wstools.WSDLTools.Message instance at 0x84a3dec> 
     31    # op: <ZSI.wstools.WSDLTools.Message instance at 0x8460c4c> 
    3232    def getAttCert(self, userId,userCert,userAttCert): 
    3333 
     
    4646        return attCert,msg 
    4747 
    48     # op: <ZSI.wstools.WSDLTools.Message instance at 0x84a812c> 
     48    # op: <ZSI.wstools.WSDLTools.Message instance at 0x8460f8c> 
    4949    def getHostInfo(self): 
    5050 
     
    6464        return hostname,aaURI,aaDN,loginURI,loginServerDN,loginRequestServerDN 
    6565 
    66     # op: <ZSI.wstools.WSDLTools.Message instance at 0x84a8d8c> 
     66    # op: <ZSI.wstools.WSDLTools.Message instance at 0x8466bec> 
    6767    def getTrustedHostInfo(self, role): 
    6868 
     
    7878        return trustedHosts 
    7979 
    80     # op: <ZSI.wstools.WSDLTools.Message instance at 0x84a8f2c> 
     80    # op: <ZSI.wstools.WSDLTools.Message instance at 0x8466d8c> 
    8181    def getAllHostsInfo(self): 
    8282 
     
    9191        return hosts 
    9292 
    93     # op: <ZSI.wstools.WSDLTools.Message instance at 0x84b20cc> 
     93    # op: <ZSI.wstools.WSDLTools.Message instance at 0x8466f0c> 
    9494    def getX509Cert(self): 
    9595 
  • TI12-security/trunk/python/ndg.security.common/ndg/security/common/AttAuthority/Makefile

    r3832 r3914  
    1717OPTS=-be -f 
    1818 
    19 STUB_FILE=AttAuthority_services.py 
    20 TMP_FILE=AttAuthority_services.tmp 
    21  
    22 ORIG1=from ZSI import client 
    23 REPL1=from ndg.security.common.zsi_utils import urllib2client as client 
    24  
    2519generateStubs: ${WSDL_FILE} 
    2620        @echo Generate stub ... 
    2721        ${CMD} ${OPTS} ${WSDL_FILE} 
    28         @echo Make substitutions for HTTP Proxy custom Client Binding class fix ... 
    29         cat ${STUB_FILE}|sed  s/"${ORIG1}"/"${REPL1}"/g > ${TMP_FILE} 
    30         @mv ${TMP_FILE} ${STUB_FILE} 
    3122        @echo Done. 
    3223         
  • TI12-security/trunk/python/ndg.security.common/ndg/security/common/AttAuthority/__init__.py

    r3755 r3914  
    3838    HostCheck 
    3939 
     40from ndg.security.common.zsi_utils.httpproxy import ProxyHTTPConnection 
     41 
    4042import logging 
    4143log = logging.getLogger(__name__) 
     
    7375                 uri=None,  
    7476                 tracefile=None, 
     77                 httpProxyHost=None, 
     78                 ignoreHttpProxyEnv=False, 
    7579                 sslCACertList=[], 
    7680                 sslCACertFilePathList=[], 
     
    111115        self.__uri = None 
    112116        self._transdict = {}         
     117        self._transport = HTTPProxyConnection 
    113118         
    114119        if uri: 
    115120            self.__setURI(uri) 
    116121 
     122        self.__setHTTPProxyHost(httpProxyHost) 
     123        self.__setIgnoreHttpProxyEnv(ignoreHttpProxyEnv) 
     124         
    117125        if sslPeerCertCN: 
    118126            self.__setSSLPeerCertCN(sslPeerCertCN) 
     
    157165            self._transport = HTTPSConnection 
    158166        else: 
    159             self._transport = None 
     167            self._transport = ProxyHTTPConnection 
    160168 
    161169 
     
    168176             
    169177    uri = property(fset=__setURI, fget=__getURI,doc="Attribute Authority URI") 
     178 
     179 
     180    #_________________________________________________________________________ 
     181    def __setHTTPProxyHost(self, val): 
     182        """Set a HTTP Proxy host overriding any http_proxy environment variable 
     183        setting""" 
     184        if self._transport != ProxyHTTPConnection: 
     185            raise AttAuthorityClientError(\ 
     186                "Setting HTTP Proxy Host but transport class is not " + \ 
     187                "ProxyHTTPConnection type") 
     188         
     189        self._transdict['httpProxyHost'] = val 
     190 
     191    httpProxyHost = property(fset=__setHTTPProxyHost,  
     192        doc="HTTP Proxy hostname - overrides any http_proxy env var setting") 
     193 
     194 
     195    #_________________________________________________________________________ 
     196    def __setIgnoreHttpProxyEnv(self, val): 
     197        """Set to True to ignore any http_proxy environment variable setting""" 
     198        if self._transport != ProxyHTTPConnection: 
     199            raise AttAuthorityClientError(\ 
     200                "Setting ignore HTTP Proxy Host flag but transport class " + \ 
     201                "is not ProxyHTTPConnection type") 
     202         
     203        self._transdict['ignoreHttpProxyEnv'] = val 
     204 
     205    ignoreHttpProxyEnv = property(fset=__setIgnoreHttpProxyEnv,  
     206    doc="Set to True to ignore any http_proxy environment variable setting") 
    170207 
    171208 
     
    362399        @return: dictionary of host information indexed by hostname derived  
    363400        from the map configuration""" 
    364              
     401 
     402        hosts = self.__srv.getAllHostsInfo() 
    365403        try: 
    366404            hosts = self.__srv.getAllHostsInfo() 
  • TI12-security/trunk/python/ndg.security.common/ndg/security/common/SessionMgr/Makefile

    r3832 r3914  
    1717OPTS=-be -f 
    1818 
    19 STUB_FILE=SessionMgr_services.py 
    20 TMP_FILE=SessionMgr_services.tmp 
    21  
    22 ORIG1=from ZSI import client 
    23 REPL1=from ndg.security.common.zsi_utils import urllib2client as client 
    24  
    2519generateStubs: ${WSDL_FILE} 
    2620        @echo Generate stub ... 
    2721        ${CMD} ${OPTS} ${WSDL_FILE} 
    28         @echo Make substitutions for HTTP Proxy custom Client Binding class fix ... 
    29         cat ${STUB_FILE}|sed  s/"${ORIG1}"/"${REPL1}"/g > ${TMP_FILE} 
    30         @mv ${TMP_FILE} ${STUB_FILE} 
    3122        @echo Done. 
    3223         
  • TI12-security/trunk/python/ndg.security.common/ndg/security/common/SessionMgr/SessionMgr_services.py

    r3832 r3914  
    88import urlparse, types 
    99from ZSI.TCcompound import ComplexType, Struct 
    10 from ndg.security.common.zsi_utils import urllib2client as client 
     10from ZSI import client 
    1111import ZSI 
    1212from ZSI.generate.pyclass import pyclass_type 
     
    2929        # no ws-addressing 
    3030 
    31     # op: <ZSI.wstools.WSDLTools.Message instance at 0x84a844c> 
     31    # op: <ZSI.wstools.WSDLTools.Message instance at 0x84652ac> 
    3232    def getSessionStatus(self, userDN,sessID): 
    3333 
     
    4444        return isAlive 
    4545 
    46     # op: <ZSI.wstools.WSDLTools.Message instance at 0x84a874c> 
     46    # op: <ZSI.wstools.WSDLTools.Message instance at 0x84655ac> 
    4747    def connect(self, username,passphrase,createServerSess): 
    4848 
     
    6363        return userCert,userPriKey,issuingCert,sessID 
    6464 
    65     # op: <ZSI.wstools.WSDLTools.Message instance at 0x84af46c> 
     65    # op: <ZSI.wstools.WSDLTools.Message instance at 0x846d2cc> 
    6666    def disconnect(self, userCert,sessID): 
    6767 
     
    7777        return  
    7878 
    79     # op: <ZSI.wstools.WSDLTools.Message instance at 0x84af60c> 
     79    # op: <ZSI.wstools.WSDLTools.Message instance at 0x846d46c> 
    8080    def getAttCert(self, userCert,sessID,attAuthorityURI,attAuthorityCert,reqRole,mapFromTrustedHosts,rtnExtAttCertList,extAttCert,extTrustedHost): 
    8181 
     
    101101        return attCert,msg,extAttCertOut 
    102102 
    103     # op: <ZSI.wstools.WSDLTools.Message instance at 0x84af78c> 
     103    # op: <ZSI.wstools.WSDLTools.Message instance at 0x846d5ec> 
    104104    def getX509Cert(self): 
    105105 
  • TI12-security/trunk/python/ndg.security.common/ndg/security/common/SessionMgr/__init__.py

    r3790 r3914  
    2828from ndg.security.common.m2CryptoSSLUtility import HTTPSConnection, \ 
    2929    HostCheck 
     30from ndg.security.common.zsi_utils.httpproxy import ProxyHTTPConnection 
    3031from SessionMgr_services import SessionMgrServiceLocator 
    3132 
     
    119120                 uri=None,  
    120121                 tracefile=None, 
     122                 httpProxyHost=None, 
     123                 ignoreHttpProxyEnv=False, 
    121124                 sslCACertList=[], 
    122125                 sslCACertFilePathList=[], 
     
    159162        self.__uri = None 
    160163        self._transdict = {} 
    161         self._transport = None        
     164        self._transport = ProxyHTTPConnection        
    162165         
    163166        if uri: 
    164167            self.__setURI(uri) 
     168 
     169        self.__setHTTPProxyHost(httpProxyHost) 
     170        self.__setIgnoreHttpProxyEnv(ignoreHttpProxyEnv) 
    165171 
    166172        if sslPeerCertCN: 
     
    195201         
    196202        if not isinstance(uri, basestring): 
    197             raise SessionMgrClientError, \ 
    198                              "Session Manager WSDL URI must be a valid string" 
     203            raise SessionMgrClientError( 
     204                             "Session Manager WSDL URI must be a valid string") 
    199205         
    200206        self.__uri = uri 
     
    202208            scheme = urlparse.urlparse(self.__uri)[0] 
    203209        except TypeError: 
    204             raise AttributeAuthorityClientError, \ 
    205                 "Error parsing transport type from URI" 
     210            raise AttributeAuthorityClientError( 
     211                                    "Error parsing transport type from URI") 
    206212                 
    207213        if scheme == "https": 
    208214            self._transport = HTTPSConnection 
    209215        else: 
    210             self._transport = None 
     216            self._transport = ProxyHTTPConnection 
    211217             
    212218            # Ensure SSL settings are cancelled 
     
    222228    uri = property(fset=__setURI, fget=__getURI, doc="Session Manager URI") 
    223229 
     230 
     231    #_________________________________________________________________________ 
     232    def __setHTTPProxyHost(self, val): 
     233        """Set a HTTP Proxy host overriding any http_proxy environment variable 
     234        setting""" 
     235        if self._transport != ProxyHTTPConnection: 
     236            raise SessionMgrClientError(\ 
     237                "Setting HTTP Proxy Host - transport class is %s type, " % \ 
     238                self._transport + \ 
     239                "expecting ProxyHTTPConnection type") 
     240         
     241        self._transdict['httpProxyHost']= val 
     242 
     243    httpProxyHost = property(fset=__setHTTPProxyHost,  
     244        doc="HTTP Proxy hostname - overrides any http_proxy env var setting") 
     245 
     246 
     247    #_________________________________________________________________________ 
     248    def __setIgnoreHttpProxyEnv(self, val): 
     249        """Set to True to ignore any http_proxy environment variable setting""" 
     250        if self._transport != ProxyHTTPConnection: 
     251            raise SessionMgrClientError(\ 
     252                "Setting ignore HTTP Proxy Host flag but transport class " + \ 
     253                "is not ProxyHTTPConnection type") 
     254         
     255        self._transdict['ignoreHttpProxyEnv']= val 
     256 
     257    ignoreHttpProxyEnv = property(fset=__setIgnoreHttpProxyEnv,  
     258    doc="Set to True to ignore any http_proxy environment variable setting") 
     259     
    224260 
    225261    #_________________________________________________________________________ 
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/sso/development.ini

    r3754 r3914  
    2929#beaker.session.data_dir = %(here)s/data/sessions 
    3030 
     31authkit.setup.method=openid, cookie 
     32authkit.cookie.secret=secret encryption string 
     33authkit.cookie.signoutpath = /openidsignout 
     34authkit.openid.path.signedin=/login 
     35authkit.openid.store.type=file 
     36authkit.openid.store.config=%(here)s/data/openid 
     37#authkit.openid.path.process=/login 
     38 
     39# Copied from http://wiki.pylonshq.com/display/authkitcookbook/OpenID+Passurl 
     40#authkit.openid.session.middleware = beaker.session 
     41authkit.openid.session.key = authkit_openid 
     42authkit.openid.session.secret = random string 
     43 
     44# This is optional - see: 
     45# http://wiki.pylonshq.com/display/authkitcookbook/OpenID+Passurl 
     46authkit.openid.baseurl = http://localhost/sso 
     47 
     48# Template for signin 
     49authkit.openid.template.obj = sso.lib.openid_util:make_template 
     50 
     51# Handler for parsing OpenID and creating a session from it 
     52authkit.openid.urltouser = sso.lib.openid_util:url2user 
     53 
    3154# WARNING: *THE LINE BELOW MUST BE UNCOMMENTED ON A PRODUCTION ENVIRONMENT* 
    3255# Debug mode will enable the interactive debugging tool, allowing ANYONE to 
     
    5679qualname = sso 
    5780 
     81[logger_authkit] 
     82level = DEBUG 
     83handlers = 
     84qualname = authkit 
    5885 
    5986[logger_ndg] 
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/sso/sso.cfg

    r3754 r3914  
    1111disclaimer: 
    1212 
    13 [NDG_SECURITY] 
    1413# Redirect SOAP output to a file e.g. open(<somefile>, 'w') 
    1514tracefile: None 
     
    2019attAuthorityURI: http://localhost:5000/AttributeAuthority 
    2120 
    22 # WS-Security signature handler 
    23 wssCfgFilePath: ./wssecurity.cfg 
     21# WS-Security signature handler - set a config file with 'wssCfgFilePath' 
     22# or omit and put the relevant content directly in here under  
     23# 'NDG_SECURITY.wssecurity' section 
     24#wssCfgFilePath: wssecurity.cfg 
    2425 
    2526# SSL Connections 
     
    3031sslCACertFilePathList: certs/ndg-test-ca.crt 
    3132 
    32 # Set an alternate CommonName to match with peer cert for SSL 
    33 # Connections.  If the CN=hostname of the peer then this option  
    34 # can be commented out 
    35 sslPeerCertCN:  
     33# Web Services HTTP Proxy fine tuning  
     34# 
     35# For most situations, these settings can be ignored and instead make use of  
     36# the http_proxy environment variable.  They allow for the case where specific  
     37# settings are needed just for the security web services calls 
    3638 
    37 # Gatekeeper Attribute Certificate check 
    38 # Issuer - should match with the issuer element of the users Attribute 
    39 # Certificate submitted in order to gain access 
    40 acIssuer: /CN=AttributeAuthority/O=NDG/OU=BADC 
    41 #acIssuer: /CN=Junk/O=NDG/OU=Gabriel 
     39# Overrides the http_proxy environment variable setting - may be omitted 
     40#httpProxyHost: wwwcache.rl.ac.uk:8080 
    4241 
    43 # verification of X.509 cert back to CA 
    44 acCACertFilePathList: certs/ndg-test-ca.crt 
     42# Web service clients pick up the http_proxy environment variable setting by 
     43# default.  Set this flag to True to ignore http_proxy for web service  
     44# connections.  To use the http_proxy setting, set this parameter to False or  
     45# remove it completely from this file. 
     46ignoreHttpProxyEnv: True 
     47 
     48 
     49# Flag to enable OpenID login 
     50enableOpenID: True 
     51 
     52[WSSecurity] 
     53 
     54# Settings for signature of an outbound message ... 
     55 
     56# Certificate associated with private key used to sign a message.  The sign  
     57# method will add this to the BinarySecurityToken element of the WSSE header.   
     58# binSecTokValType attribute must be set to 'X509' or 'X509v3' ValueType.   
     59# As an alternative, use 'signingCertChain' parameter 
     60 
     61# file path PEM encoded cert  
     62signingCertFilePath=certs/clnt.crt 
     63 
     64# file path to PEM encoded private key file 
     65signingPriKeyFilePath=certs/clnt.key 
     66 
     67# Password protecting private key.  Leave blank if there is no password. 
     68signingPriKeyPwd= 
     69 
     70# Provide a space separated list of file paths.  CA Certs should be included  
     71# for all the sites this installation trusts 
     72caCertFilePathList=certs/ndg-test-ca.crt 
     73 
     74# Set the ValueType for the BinarySecurityToken added to the WSSE header for a 
     75# signed message.   
     76reqBinSecTokValType=X509v3 
     77 
     78# Add a timestamp element to an outbound message 
     79addTimestamp=True 
     80 
     81# For WSSE 1.1 - service returns signature confirmation containing signature  
     82# value sent by client 
     83applySignatureConfirmation=False 
     84 
     85tracefile=sys.stderr 
    4586 
    4687[layout] 
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/sso/sso/config/environment.py

    r3652 r3914  
    3232    # CONFIGURATION OPTIONS HERE (note: all config options will override 
    3333    # any Pylons config options) 
     34     
     35    # Make a dedicated alias for SSO Service templates to avoid possible 
     36    # conflicts when importing SSO Service code into another pylons project 
     37    kidopts = {'kid.assume_encoding':'utf-8', 'kid.encoding':'utf-8'} 
     38    config.add_template_engine('kid',  
     39                               'ndg.security.server.sso.sso.templates',  
     40                               kidopts, 
     41                               alias='ndg.security.kid') 
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/sso/sso/config/middleware.py

    r3754 r3914  
    1212 
    1313from sso.config.environment import load_environment 
    14  
    1514from sso.config.ssoServiceMiddleware import SSOMiddleware 
     15import logging 
     16log = logging.getLogger(__name__) 
    1617 
    1718def make_app(global_conf, full_stack=True, **app_conf): 
     
    4142    # CUSTOM MIDDLEWARE HERE (filtered by error handling middlewares) 
    4243    app = SSOMiddleware(app, app_conf['configfile'], app.globals) 
    43  
     44     
     45    # OpenID Middleware 
     46    if app.globals.ndg.security.server.ssoservice.cfg.enableOpenID: 
     47        import authkit.authenticate 
     48        from beaker.middleware import SessionMiddleware 
     49         
     50        app = authkit.authenticate.middleware(app, app_conf) 
     51        app = SessionMiddleware(app)#,key='authkit.open_id',secret='some secret') 
     52        log.info('OpenID is enabled') 
    4453 
    4554    if asbool(full_stack): 
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/sso/sso/config/ssoServiceMiddleware.py

    r3896 r3914  
    3939             
    4040        appGlobals.ndg = ndg 
    41            
     41        self.globals = appGlobals 
     42         
    4243    def __call__(self, environ, start_response): 
    4344         
     
    8586              defSection='DEFAULT',  
    8687              layoutSection='layout', 
    87               wssSection='NDG_SECURITY.wssecurity'): 
     88              wssSection='WSSecurity'): 
    8889        '''Extract content of config file object into self''' 
    8990               
     
    105106                        'No "sslCACertFilePathList" security setting' 
    106107 
     108 
     109        # HTTP Proxy setting for web service connections... 
     110         
     111        # Override an http_proxy env setting   
     112        if self.cfg.has_option(defSection, 'httpProxyHost'): 
     113            self.httpProxyHost = self.cfg.get(defSection, 'httpProxyHost') 
     114        else: 
     115            self.httpProxyHost = None 
     116         
     117        # Set this to True if the http_proxy environment variable should be 
     118        # ignored in this case 
     119        if self.cfg.has_option(defSection, 'ignoreHttpProxyEnv'): 
     120            self.ignoreHttpProxyEnv = self.cfg.getboolean(defSection,  
     121                                                          'ignoreHttpProxyEnv') 
     122        else: 
     123            self.ignoreHttpProxyEnv = False 
     124             
     125             
    107126        # If no separate WS-Security config file is set then read these params 
    108127        # from the current config file 
     
    136155        self.wayfuri='%s/wayf' % self.server 
    137156 
     157        # Flag to enable OpenID interface 
     158        try: 
     159            self.enableOpenID = self.cfg.getboolean(defSection, 'enableOpenID') 
     160        except ConfigParser.NoOptionError: 
     161            self.enableOpenID = False 
     162             
    138163        self.localLink=self.cfg.get(layoutSection, 'localLink', None) 
    139164        self.localImage=self.cfg.get(layoutSection, 'localImage', None) 
    140         self.localAlt=self.cfg.get(layoutSection, 'localAlt', 'Visit Local Site') 
    141         self.ndgLink=self.cfg.get(layoutSection, 'ndgLink', 'http://ndg.nerc.ac.uk') 
     165        self.localAlt=self.cfg.get(layoutSection, 'localAlt',  
     166                                   'Visit Local Site') 
     167        self.ndgLink=self.cfg.get(layoutSection, 'ndgLink',  
     168                                  'http://ndg.nerc.ac.uk') 
    142169        self.ndgImage=self.cfg.get(layoutSection, 'ndgImage', None) 
    143170        self.ndgAlt=self.cfg.get(layoutSection, 'ndgAlt','Visit NDG') 
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/sso/sso/controllers/login.py

    r3897 r3914  
    2121        present login''' 
    2222        log.debug("LoginController.index ...")    
     23         
     24        # Convenience alias 
     25        cfg = g.ndg.security.server.ssoservice.cfg 
    2326 
    2427        # Check the return to URL 
     
    3235        try:     
    3336            smClnt = SessionMgrClient(uri=session['ndgSec']['h'], 
    34                     tracefile=g.ndg.security.server.ssoservice.cfg.tracefile, 
    35                     **g.ndg.security.server.ssoservice.cfg.wss) 
     37                                    tracefile=cfg.tracefile, 
     38                                    httpProxyHost=cfg.httpProxyHost, 
     39                                    ignoreHttpProxyEnv=cfg.ignoreHttpProxyEnv, 
     40                                    **cfg.wss) 
    3641                                 
    3742        except Exception, e: 
     
    7378        Session Manager following user login""" 
    7479        log.debug("LoginController.getCredentials ...")    
     80         
     81        # Convenience alias 
     82        cfg = g.ndg.security.server.ssoservice.cfg 
    7583 
    7684        # Check the return to URL 
     
    8290         
    8391        try:     
    84             smClnt = SessionMgrClient(\ 
    85                     uri=g.ndg.security.server.ssoservice.cfg.smURI, 
    86                     tracefile=g.ndg.security.server.ssoservice.cfg.tracefile, 
    87                     **g.ndg.security.server.ssoservice.cfg.wss) 
     92            smClnt = SessionMgrClient(uri=cfg.smURI, 
     93                                     tracefile=cfg.tracefile, 
     94                                     httpProxyHost=cfg.httpProxyHost, 
     95                                     ignoreHttpProxyEnv=cfg.ignoreHttpProxyEnv, 
     96                                     **cfg.wss) 
    8897                                 
    8998            username = request.params['username'] 
     
    99108        # Connect to Session Manager 
    100109        log.debug('Calling Session Manager "%s" connect for user "%s" ...' % \ 
    101                   (g.ndg.security.server.ssoservice.cfg.smURI, username)) 
     110                  (cfg.smURI, username)) 
    102111        try: 
    103112            sessID = smClnt.connect(username, passphrase=passphrase)[-1] 
     
    115124            # Make request for attribute certificate 
    116125            attCert = smClnt.getAttCert(sessID=sessID,  
    117                     attAuthorityURI=g.ndg.security.server.ssoservice.cfg.aaURI) 
     126                                        attAuthorityURI=cfg.aaURI) 
    118127        except SessionExpired, e: 
    119128            log.info("Session expired getting Attribute Certificate: %s" % e) 
     
    139148         
    140149        # Make security session details 
    141         setSecuritySession(h=g.ndg.security.server.ssoservice.cfg.smURI, 
     150        setSecuritySession(h=cfg.smURI, 
    142151                           u=username, 
    143152                           org=attCert.issuerName, 
     
    157166        this is not necessary.""" 
    158167        log.debug("LoginController._redirect...") 
     168         
     169        # Convenience alias 
     170        cfg = g.ndg.security.server.ssoservice.cfg 
    159171         
    160172        # This is set in index and getCredentials 
     
    188200             
    189201            # Look-up list of Cert DNs for trusted requestors 
    190             aaClnt = AttAuthorityClient(\ 
    191                     uri=g.ndg.security.server.ssoservice.cfg.aaURI, 
    192                     tracefile=g.ndg.security.server.ssoservice.cfg.tracefile, 
    193                     **g.ndg.security.server.ssoservice.cfg.wss) 
     202            aaClnt = AttAuthorityClient(uri=cfg.aaURI, 
     203                                    tracefile=cfg.tracefile, 
     204                                    httpProxyHost=cfg.httpProxyHost, 
     205                                    ignoreHttpProxyEnv=cfg.ignoreHttpProxyEnv, 
     206                                    **cfg.wss) 
    194207             
    195208            HostInfo = aaClnt.getAllHostsInfo() 
     
    198211            log.debug(\ 
    199212            "Attribute Authority [%s] expecting DN for SSL peer one of: %s" % \ 
    200                 (g.ndg.security.server.ssoservice.cfg.aaURI, requestServerDN)) 
     213                (cfg.aaURI, requestServerDN)) 
    201214             
    202215            hostCheck = HostCheck(acceptedDNs=requestServerDN, 
    203                                   caCertFilePathList=\ 
    204                     g.ndg.security.server.ssoservice.cfg.sslCACertFilePathList) 
     216                                  caCertFilePathList=cfg.sslCACertFilePathList) 
    205217             
    206218            testConnection = HTTPSConnection(returnToURLHostname,  
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/sso/sso/controllers/wayf.py

    r3892 r3914  
    2929        # preserve confidentiality of credentials 
    3030        if g.ndg.security.server.ssoservice.cfg.server in c.returnTo: 
    31             c.returnTo = c.returnTo.replace(g.ndg.security.server.ssoservice.cfg.server,  
    32                                             g.ndg.security.server.ssoservice.cfg.sslServer) 
     31            c.returnTo = c.returnTo.replace(\ 
     32                                g.ndg.security.server.ssoservice.cfg.server,  
     33                                g.ndg.security.server.ssoservice.cfg.sslServer) 
    3334            c.b64encReturnTo = urlsafe_b64encode(c.returnTo)         
    3435            log.debug(\ 
     
    3940    def index(self): 
    4041        ''' NDG equivalent to Shibboleth WAYF ''' 
     42         
     43        # Convenience alias 
     44        cfg = g.ndg.security.server.ssoservice.cfg 
     45         
    4146        log.debug("WayfController.index ...") 
     47        log.debug("Initialising connection to Attribute Authority [%s]" % \ 
     48                  cfg.aaURI) 
     49         
     50        try: 
     51            aaClnt = AttAuthorityClient(uri=cfg.aaURI, 
     52                                    tracefile=cfg.tracefile, 
     53                                    httpProxyHost=cfg.httpProxyHost, 
     54                                    ignoreHttpProxyEnv=cfg.ignoreHttpProxyEnv, 
     55                                    **cfg.wss) 
     56        except Exception, e: 
     57            c.xml='Error establishing security context.  Please report ' + \ 
     58                  'the error to your site administrator' 
     59            log.error("Initialising AttAuthorityClient for " + \ 
     60                      "getAllHostsInfo call: %s" % e) 
     61            return render('ndg.security.kid', 'ndg.security.error') 
     62             
     63        # Get list of login uris for trusted sites including THIS one 
     64        log.debug("Calling Attribute Authority getAllHostsInfo for wayf ...") 
    4265 
    43         aaClnt = AttAuthorityClient(\ 
    44                     uri=g.ndg.security.server.ssoservice.cfg.aaURI, 
    45                     tracefile=g.ndg.security.server.ssoservice.cfg.tracefile, 
    46                     **g.ndg.security.server.ssoservice.cfg.wss) 
    47  
    48         # Get list of login uris for trusted sites including THIS one 
    49         log.debug("Calling Attribute Authority getTrustedHostInfo and " + \ 
    50                   "getHostInfo for wayf") 
    51  
    52         hosts = aaClnt.getAllHostsInfo()     
    53         c.providers=dict([(k, v['loginURI']) for k, v in hosts.items()]) 
     66        hosts = aaClnt.getAllHostsInfo()  
     67        try: 
     68            hosts = aaClnt.getAllHostsInfo()  
     69        except Exception, e: 
     70            c.xml='Error getting a list of trusted sites for login.  ' + \ 
     71                'Please report the error to your site administrator.' 
     72            log.error("AttAuthorityClient getAllHostsInfo call: %s" % e)   
     73            return render('ndg.security.kid', 'ndg.security.error') 
     74             
     75        c.providers = dict([(k, v['loginURI']) for k, v in hosts.items()]) 
    5476         
    5577        session.save() 
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/sso/sso/lib/base.py

    r3892 r3914  
    1313import ndg.security.server.sso.sso.lib.helpers as h 
    1414import ndg.security.server.sso.sso.model as model 
     15from ndg.security.common.pylons.security_util import setSecuritySession, \ 
     16    session 
    1517 
    1618import urllib 
    17 from urlparse import urlsplit, urlunsplit 
    18 from base64 import urlsafe_b64encode 
    19  
    20 from ndg.security.common.pylons.security_util import setSecuritySession, \ 
    21     SSOServiceQuery 
    22  
    2319import logging 
    2420log = logging.getLogger(__name__) 
     
    3228        # is under environ['pylons.routes_dict'] should you want to check 
    3329        # the action or route vars here 
    34         log.debug("BaseController.__call__ ...") 
     30        #log.debug("BaseController.__call__ ...") 
    3531 
    3632        # construct URL picking up setting of server name from config to  
     
    4844                c.requestURL += '?' + query 
    4945 
    50         log.debug("BaseController.__call__: c.requestURL = %s" % c.requestURL) 
    51  
     46        #log.debug("BaseController.__call__: c.requestURL = %s" % c.requestURL) 
     47        self._openidHandler(environ) 
    5248         
    5349        return WSGIController.__call__(self, environ, start_response) 
    5450     
     51    def _openidHandler(self, environ): 
     52        if 'REMOTE_USER' not in environ: 
     53            return 
     54         
     55        if 'ndgSec' in session and \ 
     56           environ['REMOTE_USER'] == session['ndgSec']['u']: 
     57            return 
     58         
     59        setSecuritySession(h=None, 
     60                           u=environ['REMOTE_USER'], 
     61                           org=environ['REMOTE_USER'], 
     62                           roles=[], 
     63                           sid=None) 
     64        session.save() 
     65       
    5566# Include the '_' function in the public names 
    5667__all__ = [__name for __name in locals().keys() if not __name.startswith('_') \ 
  • TI12-security/trunk/python/ndg.security.server/ndg/security/server/sso/sso/templates/ndg/security/wayf.kid

    r3892 r3914  
    11<html py:extends="'ndgPage.kid'" xmlns="http://www.w3.org/1999/xhtml" xmlns:py="http://purl.org/kid/ns#"> 
    2     <head> 
    3     <replace py:replace="pagehead()"/> 
    4     </head> 
    5     <body> 
    6         <div py:replace="header()"/> 
    7         <div class="wayfContent" style="text-indent:5px">         
     2    <div py:def="trustedSitesList()" class="trustedSitesList" style="text-indent:5px">         
    83        <h4> Where are you from? </h4> 
    9         <p> You can login in at: 
    10         <?python 
    11         # Sort alphabetically 
    12         providerNames = c.providers.keys() 
    13         providerNames.sort() 
    14         ?> 
    15         <ul py:for="h in providerNames"> 
    16             <li> <a href="${c.providers[h]}?r=${c.b64encReturnTo}">${h}</a></li> 
    17         </ul></p> 
     4        <p> You can login in at a trusted partner site: 
     5                <?python 
     6                # Sort alphabetically 
     7                providerNames = c.providers.keys() 
     8                providerNames.sort() 
     9                ?> 
     10                <ul py:for="h in providerNames"> 
     11                    <li> <a href="${c.providers[h]}?r=${c.b64encReturnTo}">${h}</a></li> 
     12                </ul> 
     13            </p> 
     14        <!-- 
    1815        <p>Before clicking on these links, please check that the links redirect to a site 
    1916        you trust with your security credentials.</p> 
    2017        <p> How can I tell?  For any of the above, following login you will be  
    2118        redirected back to the URL: <a href="${c.returnTo}">${c.returnTo}</a></p> 
    22                 </div> 
     19        --> 
     20        </div> 
     21         
     22    <div py:def="openIDSignin()" class="openIDSignin" style="text-indent:5px"> 
     23                <p>Alternatively, sign in with OpenID:</p> 
     24                <form action="$g.ndg.security.server.ssoservice.cfg.server/verify" method="post"> 
     25                  <table cellspacing="0" border="0" cellpadding="5"> 
     26                    <tr> 
     27                        <td>OpenID:</td>  
     28                        <td><input type="text" name="openid" value="" class='openid-identifier'/></td> 
     29                        <td align="right"> 
     30                        <input type="submit" name="authform" value="Go"/></td> 
     31                    </tr> 
     32                  </table> 
     33                </form> 
     34        </div> 
     35 
     36    <head> 
     37                <style> 
     38                        input.openid-identifier { 
     39                           background: url($g.ndg.security.server.ssoservice.cfg.server/layout/openid-inputicon.gif) no-repeat; 
     40                           background-color: #fff; 
     41                           background-position: 0 50%; 
     42                           padding-left: 18px; 
     43                        } 
     44                </style> 
     45        <replace py:replace="pagehead()"/> 
     46    </head> 
     47    <body> 
     48        <div py:replace="header()"/> 
     49        <replace py:replace="trustedSitesList()"/> 
     50        <replace py:replace="openIDSignin()"/> 
    2351        <div py:replace="footer(showLoginStatus=False)"/> 
    2452    </body> 
Note: See TracChangeset for help on using the changeset viewer.