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

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

Updated to include ndg browse icon

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