source: MILK/trunk/milk_server/milk_server/config/milkMiddleware.py @ 4958

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/MILK/trunk/milk_server/milk_server/config/milkMiddleware.py@4958
Revision 4958, 7.4 KB checked in by cbyrom, 11 years ago (diff)

Adjust MILK stack startup to properly initialise connection to new eXist clients.

Line 
1'''
2Class defining the config params for the milk server
3'''
4from paste.deploy import CONFIG
5from ndg.common.src.models.myconfig import myConfig
6from ndg.common.src.lib.atomvalidator import AtomValidator
7import milk_server.lib.helpers as h
8
9class NDGConfigError(Exception): 
10    '''Errors related to reading from ndg config file'''
11     
12class milkMiddleware:
13   
14    def __init__(self, app, g, app_conf):
15       
16        #this is the next application in the wsgi stack
17        self.app=app
18       
19        #set up the ndg configuration file
20        cf= CONFIG['app_conf']['configfile']
21        cf=myConfig(cf)
22     
23        self.globals=g
24        self.globals.htdocs=cf.get('DEFAULT','htdocs',None)
25        self.globals.localLink=cf.get('layout','localLink',None)
26        self.globals.localAlt=cf.get('layout','localAlt','Visit Local Site')
27        self.globals.ndgLink=cf.get('layout','ndgLink','http://ndg.nerc.ac.uk')
28        self.globals.ndgImage=cf.get('layout','ndgImage',None)
29        self.globals.ndgAlt=cf.get('layout','ndgAlt','Visit NDG')
30        self.globals.stfcLink=cf.get('layout','stfcLink')
31        self.globals.stfcImage=cf.get('layout','stfcImage')
32        self.globals.helpIcon=cf.get('layout','helpIcon')
33        self.globals.navPlus=cf.get('layout','navPlus')
34        self.globals.loadingIcon=cf.get('layout','loadingIcon')
35        self.globals.navMinus=cf.get('layout','navMinus')
36        self.globals.LeftAlt=cf.get('layout','HdrLeftAlt')
37        self.globals.LeftLogo=cf.get('layout','HdrLeftLogo')
38        self.globals.pageLogo="bodcHdr"
39        self.globals.icons_xml=cf.get('layout','Xicon')
40        self.globals.icons_plot=cf.get('layout','plot')
41        self.globals.icons_prn=cf.get('layout','printer')
42        self.globals.icons_A=cf.get('NDG_A_SERVICE','icon')
43        self.globals.icons_B=cf.get('NDG_B_SERVICE','icon')
44        self.globals.icons_D=cf.get('DISCOVERY','icon')
45        self.globals.icons_R=cf.get('RELATED','icon')
46        self.globals.icons_key=cf.get('layout','key')
47       
48        self.globals.atomEditorEnabled = cf.get('ATOM_EDITOR','enabled')
49        self.globals.debugAtomEditor = cf.get('ATOM_EDITOR','debug') or False
50
51        self.globals.wmcClientURL = cf.get('WMC_CLIENT','url')
52       
53        self.globals.disclaimer=cf.get('default','disclaimer')
54       
55        self.globals.discoveryURL=cf.get('SEARCH','discoveryURL')
56       
57        self.globals.server=cf.get('DEFAULT','server','')
58
59        # for standalone discovery
60        self.globals.standalone=cf.config.getboolean('DISCOVERY','standalone')
61
62        # NB, without this set, the default host on ndg.badc.rl.ac.uk will be
63        # used by discoveryServiceClient
64        if cf.config.has_option('DISCOVERY', 'discoveryServiceURL'):
65            self.globals.discoveryServiceURL = \
66                cf.config.get('DISCOVERY', 'discoveryServiceURL')
67               
68        self.globals.pwFile = cf.get('NDG_EXIST','passwordFile')
69        localDbHostName = cf.get('NDG_EXIST','local')
70        # set up the validator for atoms - to allow re-use across the app
71        self.globals.validator = AtomValidator(None, self.globals.pwFile, 
72                                               dbHostName = localDbHostName,
73                                               newLineChar="<br/>",
74                                               isDebug = self.globals.debugAtomEditor,
75                                               loadAllCollections = True)
76
77        # initialise collection to store re-usable connections to the eXist DB
78        self.globals.eXistDBCons = {}
79       
80        # Security Related
81
82        # Single Sign On settings - check for mode of operation:
83        # 1) act as a client to a separate Single Sign On Service
84        # or
85        # 2) Single Sign On service is integrated into THIS service
86        securityEnabled = not self.globals.standalone
87        isSSOClient = cf.config.has_section('NDG_SECURITY.ssoClient') and \
88            securityEnabled
89           
90        isSSOService = cf.config.has_section('NDG_SECURITY.ssoService') and \
91            securityEnabled
92           
93        if isSSOClient and isSSOService:
94            raise NDGConfigError(\
95                "NDG_SECURITY.ssoClient and NDG_SECURITY.ssoService " + \
96                "sections are present in the NDG Config file: " + \
97                "only one or the other may be set")
98 
99        if isSSOClient:
100            try:
101                from \
102            ndg.security.client.ssoclient.ssoclient.config.ssoClientMiddleware\
103                    import SSOMiddleware
104            except ImportError, e:
105                # If standalone flag is not present security must be enabled
106                raise NDGConfigError(\
107                    '%s: importing Single Sign On Client SSOMiddleware: %s' % \
108                        (__name__, e))
109                       
110               
111            self.app = SSOMiddleware(app, cf.config, g, app_conf,
112                                     defSection='NDG_SECURITY.ssoClient')
113           
114            self.globals.sslServer = g.ndg.security.common.sso.cfg.sslServer
115            self.globals.wayfuri=g.ndg.security.common.sso.cfg.wayfuri
116            self.globals.logout=g.ndg.security.common.sso.cfg.logoutURI
117           
118        elif isSSOService:
119            try:
120                from ndg.security.server.sso.sso.config.ssoServiceMiddleware \
121                    import SSOMiddleware
122            except ImportError, e:
123                # If standalone flag is not present security must be enabled
124                raise NDGConfigError(\
125                    '%s: importing Single Sign On Service SSOMiddleware: %s' %\
126                        (__name__, e))
127                       
128               
129            self.app = SSOMiddleware(app, g, app_conf,
130                                     defSection='NDG_SECURITY.ssoService',
131                                     wssSection='NDG_SECURITY.wssecurity')
132           
133            self.globals.sslServer=g.ndg.security.server.sso.cfg.sslServer
134            self.globals.wayfuri=g.ndg.security.server.sso.cfg.wayfuri
135            self.globals.logout=g.ndg.security.server.sso.cfg.logoutURI
136            self.globals.getCredentials=g.ndg.security.server.sso.cfg.getCredentials
137
138        # Policy Enforcement Point initialisation
139        if securityEnabled:
140            try:
141                from ndg.security.common.authz.pep import PEP
142            except ImportError, e:
143                # If standalone flag is not present security must be enabled
144                raise NDGConfigError('%s: expecting standalone config ' % \
145                        __name__ + 
146                        'flag set to False for Policy Enforcement Point ' + \
147                        'import: %s' % e)
148           
149            self.globals.pep = PEP(cfg=cf.config, 
150                                   cfgSection='NDG_SECURITY.gatekeeper')
151           
152        self.config=cf
153       
154        self.__setUpHelpText(g)
155
156
157    def __setUpHelpText(self, g):
158       
159        cf = CONFIG['app_conf']['helpConfigfile']
160        cf = myConfig(cf)
161        # NB, the cf.config class lowercases everything.
162        for (section, val) in cf.config.items('ATOM_EDITOR'):
163            setattr(g, section, val)
164           
165        # extend the granulite example link - to add a valid location
166        g.example_granulite = g.example_granulite.replace('HREF', \
167            h.url_for('example'))
168       
169       
170    def __call__(self,environ,start_response):
171       
172        environ['ndgConfig']=self.config
173        return self.app(environ,start_response)
174   
Note: See TracBrowser for help on using the repository browser.