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

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

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