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

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

Add new controller and routes to allow the retrieval of the atom
feeds for the DIF and Published data.

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        self.globals.debugModeOn = cf.get('DEFAULT','debug') or False
48
49        self.globals.atomEditorEnabled = cf.get('ATOM_EDITOR','enabled')
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        self.globals.proxyServer = cf.get('DEFAULT','proxyServer')
60               
61        # for standalone discovery
62        self.globals.standalone=cf.config.getboolean('DISCOVERY','standalone')
63
64        # NB, without this set, the default host on ndg.badc.rl.ac.uk will be
65        # used by discoveryServiceClient
66        if cf.config.has_option('DISCOVERY', 'discoveryServiceURL'):
67            self.globals.discoveryServiceURL = \
68                cf.config.get('DISCOVERY', 'discoveryServiceURL')
69               
70        self.globals.pwFile = cf.get('NDG_EXIST','passwordFile')
71        localDbHostName = cf.get('NDG_EXIST','local')
72        # set up the validator for atoms - to allow re-use across the app
73        self.globals.validator = AtomValidator(None, 
74                                               dbConfigFile = self.globals.pwFile, 
75                                               dbHostName = localDbHostName,
76                                               newLineChar="<br/>",
77                                               isDebug = self.globals.debugModeOn,
78                                               loadAllCollections = False)
79
80        # initialise collection to store re-usable connections to the eXist DB
81        self.globals.eXistDBCons = {}
82       
83        # Security Related
84
85        # Single Sign On settings - check for mode of operation:
86        # 1) act as a client to a separate Single Sign On Service
87        # or
88        # 2) Single Sign On service is integrated into THIS service
89        securityEnabled = not self.globals.standalone
90        isSSOClient = cf.config.has_section('NDG_SECURITY.ssoClient') and \
91            securityEnabled
92           
93        isSSOService = cf.config.has_section('NDG_SECURITY.ssoService') and \
94            securityEnabled
95           
96        if isSSOClient and isSSOService:
97            raise NDGConfigError(\
98                "NDG_SECURITY.ssoClient and NDG_SECURITY.ssoService " + \
99                "sections are present in the NDG Config file: " + \
100                "only one or the other may be set")
101 
102        if isSSOClient:
103            try:
104                from \
105            ndg.security.client.ssoclient.ssoclient.config.ssoClientMiddleware\
106                    import SSOMiddleware
107            except ImportError, e:
108                # If standalone flag is not present security must be enabled
109                raise NDGConfigError(\
110                    '%s: importing Single Sign On Client SSOMiddleware: %s' % \
111                        (__name__, e))
112                       
113               
114            self.app = SSOMiddleware(app, cf.config, g, app_conf,
115                                     defSection='NDG_SECURITY.ssoClient')
116           
117            self.globals.sslServer = g.ndg.security.common.sso.cfg.sslServer
118            self.globals.wayfuri=g.ndg.security.common.sso.cfg.wayfuri
119            self.globals.logout=g.ndg.security.common.sso.cfg.logoutURI
120           
121        elif isSSOService:
122            try:
123                from ndg.security.server.sso.sso.config.ssoServiceMiddleware \
124                    import SSOMiddleware
125            except ImportError, e:
126                # If standalone flag is not present security must be enabled
127                raise NDGConfigError(\
128                    '%s: importing Single Sign On Service SSOMiddleware: %s' %\
129                        (__name__, e))
130                       
131               
132            self.app = SSOMiddleware(app, g, app_conf,
133                                     defSection='NDG_SECURITY.ssoService',
134                                     wssSection='NDG_SECURITY.wssecurity')
135           
136            self.globals.sslServer=g.ndg.security.server.sso.cfg.sslServer
137            self.globals.wayfuri=g.ndg.security.server.sso.cfg.wayfuri
138            self.globals.logout=g.ndg.security.server.sso.cfg.logoutURI
139            self.globals.getCredentials=g.ndg.security.server.sso.cfg.getCredentials
140
141        # Policy Enforcement Point initialisation
142        if securityEnabled:
143            try:
144                from ndg.security.common.authz.pep import PEP
145            except ImportError, e:
146                # If standalone flag is not present security must be enabled
147                raise NDGConfigError('%s: expecting standalone config ' % \
148                        __name__ + 
149                        'flag set to False for Policy Enforcement Point ' + \
150                        'import: %s' % e)
151           
152            self.globals.pep = PEP(cfg=cf.config, 
153                                   cfgSection='NDG_SECURITY.gatekeeper')
154           
155        self.config=cf
156       
157        self.__setUpHelpText(g)
158
159
160    def __setUpHelpText(self, g):
161       
162        cf = CONFIG['app_conf']['helpConfigfile']
163        cf = myConfig(cf)
164        # NB, the cf.config class lowercases everything.
165        for (section, val) in cf.config.items('ATOM_EDITOR'):
166            setattr(g, section, val)
167           
168        # extend the granulite example link - to add a valid location
169        g.example_granulite = g.example_granulite.replace('HREF', \
170            h.url_for('example'))
171       
172       
173    def __call__(self,environ,start_response):
174       
175        environ['ndgConfig']=self.config
176        return self.app(environ,start_response)
177   
Note: See TracBrowser for help on using the repository browser.