Ejemplo n.º 1
0
    def get_current_user(self):
        """get current user"""
        if not hasattr(self, "_current_user") or self.get_argument("reload", None):
            # log.debug("get_current_user:  no _current_user attr, finding")
            user_cookie = self.get_secure_cookie("dsuser")
            if not user_cookie:
                return None
            self._user_json = tornado.escape.json_decode(user_cookie)
            if "id" not in self._user_json:
                return None

            if self.get_argument("reload", None):
                redis_user_json = None
            else:
                # log.debug("get_current_user: found cookie, getting user from cache")
                redis_user_json = self.db.redis.get("DS-person-%s" % self._user_json["id"])

            if not redis_user_json:
                p = None
                if self.get_cookie("dsu", None):
                    p = Person.by_unique(self.get_cookie("dsu").lower())
                elif self.get_cookie("dsuserkey", None):
                    p = Person.by_unique(self.get_cookie("dsuserkey").lower())
                if p:
                    self.set_current_user(p, islogon=False)
                    redis_user_json = p.to_json()

            # make sure current_user returned is NOT an SA Person obj, but pure json derived
            if redis_user_json:
                p = Person()
                self._current_user = p.from_json(redis_user_json)
            else:
                self._current_user = None
                log.error("Critical error get_current_user() no redis_user_json user_json=%s" % self._user_json)

        # log.debug(self._user_json)
        if not self._current_user:
            return None

        # set is authenticated/not flag, make sure not to persist this other than cookie
        if "is_authenticated" in self._user_json:
            self._current_user.is_authenticated = self._user_json["is_authenticated"]
        else:
            self._current_user.is_authenticated = False
        return self._current_user