Ejemplo n.º 1
0
    def web_index(self):
        # Render base template
        data = self.getSessionData()

        url_state = ""
        if self.request.arguments.has_key("url_state") and len(
                self.request.arguments["url_state"][0]) > 0:
            url_state = self.request.arguments["url_state"][0]

        view_name = Conf.getTheme()
        if self.request.arguments.has_key("view") and len(
                self.request.arguments["view"][0]) > 0:
            view_name = self.request.arguments["view"][0]

        theme_name = "ext-all-gray"
        if self.request.arguments.has_key("theme") and len(
                self.request.arguments["theme"][0]) > 0:
            if self.request.arguments["theme"][0] == "Neptune":
                theme_name = "ext-all-neptune"
            if self.request.arguments["theme"][0] == "Classic":
                theme_name = "ext-all"

        open_app = ""
        if self.request.arguments.has_key("open_app") and len(
                self.request.arguments["open_app"][0]) > 0:
            open_app = self.request.arguments["open_app"][0].strip()

        icon = data['baseURL'] + Conf.getIcon()

        level = str(gLogger.getLevel()).lower()
        self.render("root.tpl",
                    iconUrl=icon,
                    base_url=data['baseURL'],
                    _dev=Conf.devMode(),
                    ext_version=data['extVersion'],
                    url_state=url_state,
                    extensions=data['extensions'],
                    credentials=data['user'],
                    title=Conf.getTitle(),
                    theme=theme_name,
                    root_url=Conf.rootURL(),
                    view=view_name,
                    open_app=open_app,
                    debug_level=level)
Ejemplo n.º 2
0
 def __isGroupAuthApp(self, appLoc):
     handlerLoc = "/".join(List.fromChar(appLoc, ".")[1:])
     if not handlerLoc:
         return False
     if handlerLoc not in self.__handlers:
         gLogger.error("Handler %s required by %s does not exist!" %
                       (handlerLoc, appLoc))
         return False
     handler = self.__handlers[handlerLoc]
     auth = AuthManager(Conf.getAuthSectionForHandler(handlerLoc))
     return auth.authQuery("", dict(self.__credDict), handler.AUTH_PROPS)
Ejemplo n.º 3
0
 def __change(self, setup=None, group=None):
     if not setup:
         setup = self.getUserSetup()
     if not group:
         group = self.getUserGroup() or 'anon'
     qs = False
     if 'Referer' in self.request.headers:
         o = urlparse.urlparse(self.request.headers['Referer'])
         qs = '?%s' % o.query
     url = [Conf.rootURL().strip("/"), "s:%s" % setup, "g:%s" % group]
     self.redirect("/%s%s" % ("/".join(url), qs))
Ejemplo n.º 4
0
 def run(self):
     """
 Start web servers
 """
     bu = Conf.rootURL().strip("/")
     urls = []
     for proto, port in self.__servers:
         urls.append("%s://0.0.0.0:%s/%s/" % (proto, port, bu))
     self.log.always("Listening on %s" % " and ".join(urls))
     tornado.autoreload.add_reload_hook(self.__reloadAppCB)
     tornado.ioloop.IOLoop.instance().start()
Ejemplo n.º 5
0
 def get(self, setup, group, route):
     if self.__action == "addSlash":
         o = urlparse.urlparse(self.request.uri)
         proto = self.request.protocol
         if 'X-Scheme' in self.request.headers:
             proto = self.request.headers['X-Scheme']
         nurl = "%s://%s%s/" % (proto, self.request.host, o.path)
         if o.query:
             nurl = "%s?%s" % (nurl, o.query)
         self.redirect(nurl, permanent=True)
     elif self.__action == "sendToRoot":
         dest = "/"
         rootURL = Conf.rootURL()
         if rootURL:
             dest += "%s/" % rootURL.strip("/")
         if setup and group:
             dest += "s:%s/g:%s/" % (setup, group)
         self.redirect(dest)
Ejemplo n.º 6
0
 def getData(self):
     data = {
         'menu': self.__getGroupMenu(),
         'user': self.__credDict,
         'validGroups': [],
         'setup': self.__setup,
         'validSetups': gConfig.getSections("/DIRAC/Setups")['Value'],
         'extensions': self.__extensions,
         'extVersion': self.getExtJSVersion()
     }
     #Add valid groups if known
     DN = self.__credDict.get("DN", "")
     if DN:
         result = Registry.getGroupsForDN(DN)
         if result['OK']:
             data['validGroups'] = result['Value']
     #Calculate baseURL
     baseURL = [
         Conf.rootURL().strip("/"),
         "s:%s" % data['setup'],
         "g:%s" % self.__credDict.get('group', '')
     ]
     data['baseURL'] = "/%s" % "/".join(baseURL)
     return data
Ejemplo n.º 7
0
 def __init__(self):
     self.__handlerMgr = HandlerMgr(Conf.rootURL())
     self.__servers = {}
     self.log = gLogger.getSubLogger("Web")
Ejemplo n.º 8
0
    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)
        # 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)
        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())

            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)
            port = Conf.HTTPSPort()
            srv.listen(port)
            self.__servers[('https', port)] = srv
        else:
            Conf.generateCAFile(
            )  # if we use Nginx we have to generate the cas as well...
        return result