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

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

Add functionality to allow vocab term searches to be done via an
ajax enabled, autocomplete text input. Add new controller and template
packages for this as well as javascript and style sheets. Also update
routing and add (commented out) example of usage in layout + add
documentation on how to use.

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