Ejemplo n.º 1
0
 def __call__(self, request):
     if not hasattr(request, "user"):
         request.user = auth.get_user(request)
     if not hasattr(request.user, "scenarios"):
         # A scenario list is not available on the request
         for i in settings.DATABASES:
             try:
                 if settings.DATABASES[i]["regexp"].match(request.path):
                     scenario = Scenario.objects.using(
                         DEFAULT_DB_ALIAS).get(name=i)
                     if scenario.status != "In use":
                         return HttpResponseNotFound("Scenario not in use")
                     request.prefix = "/%s" % i
                     request.path_info = request.path_info[len(request.
                                                               prefix):]
                     request.path = request.path[len(request.prefix):]
                     request.database = i
                     if hasattr(request.user, "_state"):
                         request.user._state.db = i.name
                     return self.get_response(request)
             except Exception:
                 pass
         request.prefix = ""
         request.database = DEFAULT_DB_ALIAS
         if hasattr(request.user, "_state"):
             request.user._state.db = DEFAULT_DB_ALIAS
     else:
         # A list of scenarios is already available
         if request.user.is_anonymous:
             return self.get_response(request)
         default_scenario = None
         for i in request.user.scenarios:
             if i.name == DEFAULT_DB_ALIAS:
                 default_scenario = i
             try:
                 if settings.DATABASES[i.name]["regexp"].match(
                         request.path):
                     request.prefix = "/%s" % i.name
                     request.path_info = request.path_info[len(request.
                                                               prefix):]
                     request.path = request.path[len(request.prefix):]
                     request.database = i.name
                     request.scenario = i
                     if hasattr(request.user, "_state"):
                         request.user._state.db = i.name
                     request.user.is_superuser = i.is_superuser
                     return self.get_response(request)
             except Exception:
                 pass
         request.prefix = ""
         request.database = DEFAULT_DB_ALIAS
         if hasattr(request.user, "_state"):
             request.user._state.db = DEFAULT_DB_ALIAS
         if default_scenario:
             request.scenario = default_scenario
         else:
             request.scenario = Scenario(name=DEFAULT_DB_ALIAS)
     return self.get_response(request)
Ejemplo n.º 2
0
 def process_request(self, request):
     request.user = auth.get_user(request)
     if not hasattr(request.user, 'scenarios'):
         # A scenario list is not available on the request
         for i in settings.DATABASES:
             try:
                 if settings.DATABASES[i]['regexp'].match(request.path):
                     scenario = Scenario.objects.get(name=i)
                     if scenario.status != 'In use':
                         print('boom')
                         return HttpResponseNotFound('Scenario not in use')
                     request.prefix = '/%s' % i
                     request.path_info = request.path_info[len(request.
                                                               prefix):]
                     request.path = request.path[len(request.prefix):]
                     request.database = i
                     return
             except Exception as e:
                 print(e)
                 pass
         request.prefix = ''
         request.database = DEFAULT_DB_ALIAS
     else:
         # A list of scenarios is already available
         if not request.user or request.user.is_anonymous():
             return
         default_scenario = None
         for i in request.user.scenarios:
             if i.name == DEFAULT_DB_ALIAS:
                 default_scenario = i
             try:
                 if settings.DATABASES[i.name]['regexp'].match(
                         request.path):
                     request.prefix = '/%s' % i.name
                     request.path_info = request.path_info[len(request.
                                                               prefix):]
                     request.path = request.path[len(request.prefix):]
                     request.database = i.name
                     request.scenario = i
                     request.user._state.db = i.name
                     request.user.is_superuser = i.is_superuser
                     return
             except:
                 pass
         request.prefix = ''
         request.database = DEFAULT_DB_ALIAS
         if default_scenario:
             request.scenario = default_scenario
         else:
             request.scenario = Scenario(name=DEFAULT_DB_ALIAS)
Ejemplo n.º 3
0
    def __call__(self, request):
        # Make request information available throughout the application
        setattr(_thread_locals, "request", request)

        if not hasattr(request, "user"):
            request.user = auth.get_user(request)
        if not hasattr(request.user, "scenarios"):
            # A scenario list is not available on the request
            for i in settings.DATABASES:
                try:
                    if settings.DATABASES[i]["regexp"].match(request.path):
                        scenario = Scenario.objects.using(DEFAULT_DB_ALIAS).get(name=i)
                        if scenario.status != "In use":
                            return HttpResponseNotFound("Scenario not in use")
                        request.prefix = "/%s" % i
                        request.path_info = request.path_info[len(request.prefix) :]
                        request.path = request.path[len(request.prefix) :]
                        request.database = i
                        if hasattr(request.user, "_state"):
                            request.user._state.db = i.name
                        response = self.get_response(request)
                        if not response.streaming:
                            # Note: Streaming response get the request field cleared in the
                            # request_finished signal handler
                            setattr(_thread_locals, "request", None)
                        return response
                except Exception:
                    pass
            request.prefix = ""
            request.database = DEFAULT_DB_ALIAS
            if hasattr(request.user, "_state"):
                request.user._state.db = DEFAULT_DB_ALIAS
        else:
            # A list of scenarios is already available
            if request.user.is_anonymous:
                return self.get_response(request)
            default_scenario = None
            for i in request.user.scenarios:
                if i.name == DEFAULT_DB_ALIAS:
                    default_scenario = i
                try:
                    if settings.DATABASES[i.name]["regexp"].match(request.path):
                        request.prefix = "/%s" % i.name
                        request.path_info = request.path_info[len(request.prefix) :]
                        request.path = request.path[len(request.prefix) :]
                        request.database = i.name
                        request.scenario = i
                        if hasattr(request.user, "_state"):
                            request.user._state.db = i.name
                        request.user.is_superuser = i.is_superuser
                        response = self.get_response(request)
                        if not response.streaming:
                            # Note: Streaming response get the request field cleared in the
                            # request_finished signal handler
                            setattr(_thread_locals, "request", None)
                        return response
                except Exception:
                    pass
            request.prefix = ""
            request.database = DEFAULT_DB_ALIAS
            if hasattr(request.user, "_state"):
                request.user._state.db = DEFAULT_DB_ALIAS
            if default_scenario:
                request.scenario = default_scenario
            else:
                request.scenario = Scenario(name=DEFAULT_DB_ALIAS)
        response = self.get_response(request)
        if not response.streaming:
            # Note: Streaming response get the request field cleared in the
            # request_finished signal handler
            setattr(_thread_locals, "request", None)
        return response
Ejemplo n.º 4
0
    def __call__(self, request):
        # Make request information available throughout the application
        setattr(_thread_locals, "request", request)

        if not hasattr(request, "user"):
            request.user = auth.get_user(request)

        # Log out automatically after inactivity
        if (
            not request.user.is_anonymous
            and settings.SESSION_LOGOUT_IDLE_TIME
            and "freppledb.common.middleware.AutoLoginAsAdminUser"
            not in settings.MIDDLEWARE
        ):
            now = datetime.now()
            if "last_request" in request.session:
                idle_time = now - datetime.strptime(
                    request.session["last_request"], "%y-%m-%d %H:%M:%S"
                )
                if idle_time > timedelta(minutes=settings.SESSION_LOGOUT_IDLE_TIME):
                    logout(request)
                    info(
                        request,
                        _("Your session has expired. Please login again to continue."),
                    )
                    if request.headers.get("x-requested-with") == "XMLHttpRequest":
                        return HttpResponse(
                            status=401,
                            content=_(
                                "Your session has expired. Please login again to continue."
                            ),
                        )
                    else:
                        return HttpResponseRedirect(request.path_info)
                else:
                    request.session["last_request"] = now.strftime("%y-%m-%d %H:%M:%S")
            else:
                request.session["last_request"] = now.strftime("%y-%m-%d %H:%M:%S")

        # Keep last_login date up to date
        if not request.user.is_anonymous:
            last_login = getattr(request.user, "last_login", None)
            now = timezone.now()
            if not last_login or now - last_login > timedelta(hours=1):
                user_logged_in.send(
                    sender=request.user.__class__, request=request, user=request.user
                )

        if not hasattr(request.user, "scenarios"):
            # A scenario list is not available on the request
            for i in settings.DATABASES:
                try:
                    if settings.DATABASES[i]["regexp"].match(request.path):
                        scenario = Scenario.objects.using(DEFAULT_DB_ALIAS).get(name=i)
                        if scenario.status != "In use":
                            return HttpResponseNotFound("Scenario not in use")
                        request.prefix = "/%s" % i
                        request.path_info = request.path_info[len(request.prefix) :]
                        request.path = request.path[len(request.prefix) :]
                        request.database = i
                        if hasattr(request.user, "_state"):
                            request.user._state.db = i.name
                        response = self.get_response(request)
                        if not response.streaming:
                            # Note: Streaming response get the request field cleared in the
                            # request_finished signal handler
                            setattr(_thread_locals, "request", None)
                        return response
                except Exception:
                    pass
            request.prefix = ""
            request.database = DEFAULT_DB_ALIAS
            if hasattr(request.user, "_state"):
                request.user._state.db = DEFAULT_DB_ALIAS
        else:
            # A list of scenarios is already available
            if request.user.is_anonymous:
                return self.get_response(request)
            default_scenario = None
            for i in request.user.scenarios:
                if i.name == DEFAULT_DB_ALIAS:
                    default_scenario = i
                try:
                    if settings.DATABASES[i.name]["regexp"].match(request.path):
                        request.prefix = "/%s" % i.name
                        request.path_info = request.path_info[len(request.prefix) :]
                        request.path = request.path[len(request.prefix) :]
                        request.database = i.name
                        request.scenario = i
                        if hasattr(request.user, "_state"):
                            request.user._state.db = i.name
                        request.user.is_superuser = i.is_superuser
                        request.user.horizonlength = i.horizonlength
                        request.user.horizontype = i.horizontype
                        request.user.horizonbefore = i.horizonbefore
                        request.user.horizonbuckets = i.horizonbuckets
                        request.user.horizonstart = i.horizonstart
                        request.user.horizonend = i.horizonend
                        request.user.horizonunit = i.horizonunit
                        response = self.get_response(request)
                        if not response.streaming:
                            # Note: Streaming response get the request field cleared in the
                            # request_finished signal handler
                            setattr(_thread_locals, "request", None)
                        return response
                except Exception:
                    pass
            request.prefix = ""
            request.database = DEFAULT_DB_ALIAS
            if hasattr(request.user, "_state"):
                request.user._state.db = DEFAULT_DB_ALIAS
            if default_scenario:
                request.scenario = default_scenario
            else:
                request.scenario = Scenario(name=DEFAULT_DB_ALIAS)
        response = self.get_response(request)
        if not response.streaming:
            # Note: Streaming response get the request field cleared in the
            # request_finished signal handler
            setattr(_thread_locals, "request", None)
        return response