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

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

Updated config to pull out new dummy service icons

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