def bootstrap(self): """ Configure and create web app """ self.log.always("\n ====== Starting DIRAC web app ====== \n") #Load required CFG files self.__loadWebAppCFGFiles() #Debug mode? devMode = Conf.devMode() if devMode: self.log.info("Configuring in developer mode...") #Calculating routes result = self.__handlerMgr.getRoutes() if not result['OK']: return result routes = result['Value'] #Initialize the session data SessionData.setHandlers(self.__handlerMgr.getHandlers()['Value']) #Create the app tLoader = TemplateLoader(self.__handlerMgr.getPaths("template")) kw = dict(devMode=devMode, template_loader=tLoader, cookie_secret=Conf.cookieSecret(), log_function=self._logRequest) #Check processes if we're under a load balancert if Conf.balancer() and Conf.numProcesses() not in (0, 1): tornado.process.fork_processes(Conf.numProcesses(), max_restarts=0) kw['devMode'] = False #Configure tornado app self.__app = tornado.web.Application(routes, **kw) self.log.notice("Configuring HTTP on port %s" % (Conf.HTTPPort())) #Create the web servers srv = tornado.httpserver.HTTPServer(self.__app) port = Conf.HTTPPort() srv.listen(port) self.__servers[('http', port)] = srv if Conf.HTTPS(): self.log.notice("Configuring HTTPS on port %s" % Conf.HTTPSPort()) sslops = dict(certfile=Conf.HTTPSCert(), keyfile=Conf.HTTPSKey(), cert_reqs=ssl.CERT_OPTIONAL, ca_certs=Conf.generateCAFile()) self.log.debug( " - %s" % "\n - ".join(["%s = %s" % (k, sslops[k]) for k in sslops])) srv = tornado.httpserver.HTTPServer(self.__app, ssl_options=sslops) port = Conf.HTTPSPort() srv.listen(port) self.__servers[('https', port)] = srv return result
def bootstrap(self): """ Configure and create web app """ self.log.always("\n ====== Starting DIRAC web app ====== \n") # Load required CFG files if not self._loadDefaultWebCFG( ): # if we have a web.cfg under etc directory we use it, otherwise we use the configuration file defined by the developer self._loadWebAppCFGFiles() # Calculating routes result = self.__handlerMgr.getRoutes() if not result['OK']: return result routes = result['Value'] # Initialize the session data SessionData.setHandlers(self.__handlerMgr.getHandlers()['Value']) # Create the app tLoader = TemplateLoader(self.__handlerMgr.getPaths("template")) kw = dict(debug=Conf.devMode(), template_loader=tLoader, cookie_secret=Conf.cookieSecret(), log_function=self._logRequest, autoreload=Conf.numProcesses() < 2) #please do no move this lines. The lines must be before the fork_processes signal.signal(signal.SIGTERM, self.stopChildProcesses) signal.signal(signal.SIGINT, self.stopChildProcesses) # Check processes if we're under a load balancert if Conf.balancer() and Conf.numProcesses() not in (0, 1): tornado.process.fork_processes(Conf.numProcesses(), max_restarts=0) kw['debug'] = False # Debug mode? if kw['debug']: self.log.info("Configuring in developer mode...") # Configure tornado app self.__app = tornado.web.Application(routes, **kw) self.log.notice("Configuring HTTP on port %s" % (Conf.HTTPPort())) # Create the web servers srv = tornado.httpserver.HTTPServer(self.__app, xheaders=True) port = Conf.HTTPPort() srv.listen(port) self.__servers[('http', port)] = srv Conf.generateRevokedCertsFile() # it is used by nginx.... if Conf.HTTPS(): self.log.notice("Configuring HTTPS on port %s" % Conf.HTTPSPort()) sslops = dict(certfile=Conf.HTTPSCert(), keyfile=Conf.HTTPSKey(), cert_reqs=ssl.CERT_OPTIONAL, ca_certs=Conf.generateCAFile(), ssl_version=ssl.PROTOCOL_TLSv1) sslprotocol = str(Conf.SSLProrocol()) aviableProtocols = [i for i in dir(ssl) if i.find('PROTOCOL') == 0] if sslprotocol and sslprotocol != "": if (sslprotocol in aviableProtocols): sslops['ssl_version'] = getattr(ssl, sslprotocol) else: message = "%s protocol is not provided. The following protocols are provided: %s" % ( sslprotocol, str(aviableProtocols)) gLogger.warn(message) self.log.debug( " - %s" % "\n - ".join(["%s = %s" % (k, sslops[k]) for k in sslops])) srv = tornado.httpserver.HTTPServer(self.__app, ssl_options=sslops, xheaders=True) port = Conf.HTTPSPort() srv.listen(port) self.__servers[('https', port)] = srv else: #when NGINX is used then the Conf.HTTPS return False, it means tornado does not have to be configured using 443 port Conf.generateCAFile( ) # if we use Nginx we have to generate the cas as well... return result