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

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

Disable (old) security code from MILK stack +
make handling of edit mode on/off more robust - redirecting users
back to 'discovery' home page when not in edit mode.

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