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

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

Add additional check in atom validator, when dealing with broken links

  • these may refer to docs in the 'working' state, which aren't

available via browse - hence the broken link. For these, allow the
use of an alternative MILK server.

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                                               localMILKServer = self.globals.server, 
82                                               dbConfigFile = self.globals.pwFile, 
83                                               dbHostName = localDbHostName,
84                                               newLineChar="<br/>",
85                                               isDebug = self.globals.debugModeOn,
86                                               loadAllCollections = False)
87
88        # initialise client to vocab server - to do vocab term searches
89        self.globals.vocabServerClient = VocabServerClient(proxyServer = self.globals.proxyServer)
90
91        # initialise collection to store re-usable connections to the eXist DB
92        self.globals.eXistDBCons = {}
93       
94        # Security Related
95
96        # Single Sign On settings - check for mode of operation:
97        # 1) act as a client to a separate Single Sign On Service
98        # or
99        # 2) Single Sign On service is integrated into THIS service
100        securityEnabled = not self.globals.standalone
101        isSSOClient = cf.config.has_section('NDG_SECURITY.ssoClient') and \
102            securityEnabled
103           
104        isSSOService = cf.config.has_section('NDG_SECURITY.ssoService') and \
105            securityEnabled
106           
107        if isSSOClient and isSSOService:
108            raise NDGConfigError(\
109                "NDG_SECURITY.ssoClient and NDG_SECURITY.ssoService " + \
110                "sections are present in the NDG Config file: " + \
111                "only one or the other may be set")
112 
113        if isSSOClient:
114            try:
115                from \
116            ndg.security.client.ssoclient.ssoclient.config.ssoClientMiddleware\
117                    import SSOMiddleware
118            except ImportError, e:
119                # If standalone flag is not present security must be enabled
120                raise NDGConfigError(\
121                    '%s: importing Single Sign On Client SSOMiddleware: %s' % \
122                        (__name__, e))
123                       
124               
125            self.app = SSOMiddleware(app, cf.config, g, app_conf,
126                                     defSection='NDG_SECURITY.ssoClient')
127           
128            self.globals.sslServer = g.ndg.security.common.sso.cfg.sslServer
129            self.globals.wayfuri=g.ndg.security.common.sso.cfg.wayfuri
130            self.globals.logout=g.ndg.security.common.sso.cfg.logoutURI
131           
132        elif isSSOService:
133            try:
134                from ndg.security.server.sso.sso.config.ssoServiceMiddleware \
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 Service SSOMiddleware: %s' %\
140                        (__name__, e))
141                       
142               
143            self.app = SSOMiddleware(app, g, app_conf,
144                                     defSection='NDG_SECURITY.ssoService',
145                                     wssSection='NDG_SECURITY.wssecurity')
146           
147            self.globals.sslServer=g.ndg.security.server.sso.cfg.sslServer
148            self.globals.wayfuri=g.ndg.security.server.sso.cfg.wayfuri
149            self.globals.logout=g.ndg.security.server.sso.cfg.logoutURI
150            self.globals.getCredentials=g.ndg.security.server.sso.cfg.getCredentials
151
152        # Policy Enforcement Point initialisation
153        if securityEnabled:
154            try:
155                from ndg.security.common.authz.pep import PEP
156            except ImportError, e:
157                # If standalone flag is not present security must be enabled
158                raise NDGConfigError('%s: expecting standalone config ' % \
159                        __name__ + 
160                        'flag set to False for Policy Enforcement Point ' + \
161                        'import: %s' % e)
162           
163            self.globals.pep = PEP(cfg=cf.config, 
164                                   cfgSection='NDG_SECURITY.gatekeeper')
165           
166        self.config=cf
167       
168        self.__setUpHelpText(g)
169
170    def __getTrueFalseValue(self, val):
171        '''
172        Check for config values that could be true/false in a consistent manner
173        @param val: value read from config object
174        @return True, if val is some form of 'true'
175        '''
176        if val and val.lower() == 'true':
177            return True
178        return False
179
180    def __setUpHelpText(self, g):
181       
182        cf = CONFIG['app_conf']['helpConfigfile']
183        cf = myConfig(cf)
184        # NB, the cf.config class lowercases everything.
185        for (section, val) in cf.config.items('ATOM_EDITOR'):
186            setattr(g, section, val)
187           
188        # extend the granulite example link - to add a valid location
189        g.example_granulite = g.example_granulite.replace('HREF', \
190            h.url_for('example'))
191       
192       
193    def __call__(self,environ,start_response):
194       
195        environ['ndgConfig']=self.config
196        return self.app(environ,start_response)
197   
Note: See TracBrowser for help on using the repository browser.