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

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

updated to help single search text box

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
7from ndg.common.src.clients.http.vocabserverclient import VocabServerClient
8from ndg.common.src.clients.ws.discovery.discoveryserviceclient import DiscoveryServiceClient
9import milk_server.lib.helpers as h
10
11class NDGConfigError(Exception): 
12    '''Errors related to reading from ndg config file'''
13     
14class milkMiddleware:
15   
16    def __init__(self, app, g, app_conf):
17       
18        #this is the next application in the wsgi stack
19        self.app=app
20       
21        #set up the ndg configuration file
22        cf= CONFIG['app_conf']['configfile']
23        cf=myConfig(cf)
24     
25        self.globals=g
26        self.globals.htdocs=cf.get('DEFAULT','htdocs',None)
27        self.globals.localLink=cf.get('layout','localLink',None)
28        self.globals.ndgLink=cf.get('layout','ndgLink','http://ndg.nerc.ac.uk')
29        self.globals.ndgImage=cf.get('layout','ndgImage',None)
30        self.globals.ndgAlt=cf.get('layout','ndgAlt','Visit NDG')
31        self.globals.stfcLink=cf.get('layout','stfcLink')
32        self.globals.stfcImage=cf.get('layout','stfcImage')
33        self.globals.helpIcon=cf.get('layout','helpIcon')
34        self.globals.navPlus=cf.get('layout','navPlus')
35        self.globals.loadingIcon=cf.get('layout','loadingIcon')
36        self.globals.navMinus=cf.get('layout','navMinus')
37        self.globals.LeftAlt=cf.get('layout','HdrLeftAlt')
38        self.globals.LeftLogo=cf.get('layout','HdrLeftLogo')
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.feedIcon = cf.get('layout','feedIcon')
48        self.globals.vocSrchIcon = cf.get('layout','vocabSrchIcon')       
49        self.globals.txtSrchIcon = cf.get('layout','textSrchIcon')
50       
51       
52        self.globals.debugModeOn = \
53            self.__getTrueFalseValue(cf.get('DEFAULT','debug')) 
54       
55        self.globals.atomEditorEnabled = \
56            self.__getTrueFalseValue(cf.get('MILK_SERVER','editorOn')) 
57
58        self.globals.browseEnabled = \
59            self.__getTrueFalseValue(cf.get('MILK_SERVER','browseOn')) 
60
61        self.globals.discoveryEnabled = \
62            self.__getTrueFalseValue(cf.get('MILK_SERVER','discoveryOn')) 
63
64        self.globals.wmcClientURL = cf.get('WMC_CLIENT','url')
65       
66        self.globals.disclaimer=cf.get('default','disclaimer')
67       
68        self.globals.discoveryURL=cf.get('SEARCH','discoveryURL')
69       
70        self.globals.server=cf.get('DEFAULT','server','')
71
72        self.globals.proxyServer = cf.get('DEFAULT','proxyServer')
73
74        self.globals.mailServer = cf.get('DEFAULT','mailServer')
75        self.globals.tbRecipient = cf.get('DEFAULT', 'tbrecipient')
76        self.globals.metadataMaintainer = cf.get('DEFAULT','metadataMaintainer')
77               
78        # for standalone discovery
79        self.globals.standalone = cf.config.getboolean('DISCOVERY','standalone')
80
81        # NB, without this set, the default host on ndg.badc.rl.ac.uk will be
82        # used by discoveryServiceClient
83        self.globals.discoveryServiceURL = cf.get('DISCOVERY', 'discoveryServiceURL')
84
85        searchClient = DiscoveryServiceClient(HostAndPort = self.globals.discoveryServiceURL)
86        # Look up values to use in the 'order by' list
87        orderByVals = searchClient.getList('orderByFieldList')
88        self.globals.orderByList = orderByVals
89               
90        self.globals.pwFile = cf.get('NDG_EXIST','passwordFile')
91        self.globals.localEXist = cf.get('NDG_EXIST','local')
92        # set up the validator for atoms - to allow re-use across the app
93        self.globals.validator = AtomValidator(None,
94                                               localMILKServer = self.globals.server, 
95                                               dbConfigFile = self.globals.pwFile, 
96                                               dbHostName = self.globals.localEXist,
97                                               newLineChar="<br/>",
98                                               isDebug = self.globals.debugModeOn,
99                                               loadAllCollections = False)
100
101        # initialise client to vocab server - to do vocab term searches
102        self.globals.vocabServerClient = VocabServerClient(proxyServer = self.globals.proxyServer)
103
104        # initialise collection to store re-usable connections to the eXist DB
105        self.globals.eXistDBCons = {}
106       
107        # Security Related
108
109        # Single Sign On settings - check for mode of operation:
110        # 1) act as a client to a separate Single Sign On Service
111        # or
112        # 2) Single Sign On service is integrated into THIS service
113        securityEnabled = not self.globals.standalone
114        isSSOClient = cf.config.has_section('NDG_SECURITY.ssoClient') and \
115            securityEnabled
116           
117        isSSOService = cf.config.has_section('NDG_SECURITY.ssoService') and \
118            securityEnabled
119           
120        if isSSOClient and isSSOService:
121            raise NDGConfigError(\
122                "NDG_SECURITY.ssoClient and NDG_SECURITY.ssoService " + \
123                "sections are present in the NDG Config file: " + \
124                "only one or the other may be set")
125 
126        if isSSOClient:
127            try:
128                from \
129            ndg.security.client.ssoclient.ssoclient.config.ssoClientMiddleware\
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 Client SSOMiddleware: %s' % \
135                        (__name__, e))
136                       
137               
138            self.app = SSOMiddleware(app, cf.config, g, app_conf,
139                                     defSection='NDG_SECURITY.ssoClient')
140           
141            self.globals.sslServer = g.ndg.security.common.sso.cfg.sslServer
142            self.globals.wayfuri=g.ndg.security.common.sso.cfg.wayfuri
143            self.globals.logout=g.ndg.security.common.sso.cfg.logoutURI
144           
145        elif isSSOService:
146            try:
147                from ndg.security.server.sso.sso.config.ssoServiceMiddleware \
148                    import SSOMiddleware
149            except ImportError, e:
150                # If standalone flag is not present security must be enabled
151                raise NDGConfigError(\
152                    '%s: importing Single Sign On Service SSOMiddleware: %s' %\
153                        (__name__, e))
154                       
155               
156            self.app = SSOMiddleware(app, g, app_conf,
157                                     defSection='NDG_SECURITY.ssoService',
158                                     wssSection='NDG_SECURITY.wssecurity')
159           
160            self.globals.sslServer=g.ndg.security.server.sso.cfg.sslServer
161            self.globals.wayfuri=g.ndg.security.server.sso.cfg.wayfuri
162            self.globals.logout=g.ndg.security.server.sso.cfg.logoutURI
163            self.globals.getCredentials=g.ndg.security.server.sso.cfg.getCredentials
164
165        # Policy Enforcement Point initialisation
166        if securityEnabled:
167            try:
168                from ndg.security.common.authz.pep import PEP
169            except ImportError, e:
170                # If standalone flag is not present security must be enabled
171                raise NDGConfigError('%s: expecting standalone config ' % \
172                        __name__ + 
173                        'flag set to False for Policy Enforcement Point ' + \
174                        'import: %s' % e)
175           
176            self.globals.pep = PEP(cfg=cf.config, 
177                                   cfgSection='NDG_SECURITY.gatekeeper')
178           
179        self.config=cf
180       
181        self.__setUpHelpText(g)
182
183    def __getTrueFalseValue(self, val):
184        '''
185        Check for config values that could be true/false in a consistent manner
186        @param val: value read from config object
187        @return True, if val is some form of 'true'
188        '''
189        if val and val.lower() == 'true':
190            return True
191        return False
192
193    def __setUpHelpText(self, g):
194       
195        cf = CONFIG['app_conf']['helpConfigfile']
196        cf = myConfig(cf)
197        # NB, the cf.config class lowercases everything.
198        for (section, val) in cf.config.items('ATOM_EDITOR'):
199            setattr(g, section, val)
200           
201        # extend the granulite example link - to add a valid location
202        g.example_granulite = g.example_granulite.replace('HREF', \
203            h.url_for('example'))
204
205
206    def __call__(self,environ,start_response):
207       
208        environ['ndgConfig']=self.config
209        return self.app(environ,start_response)
210   
Note: See TracBrowser for help on using the repository browser.