def handle_request(self, auth, path, get_vars, post_vars):
     if path == "login":
         redirect(self.get_login_url())
     elif path == "callback":
         self._handle_callback(auth, get_vars)
     else:
         abort(404)
 def _handle_callback(self, auth, get_vars):
     data = self.callback(get_vars)
     if not data:
         abort(401)
     error = data.get("error")
     if error:
         if isinstance(error, str):
             code, msg = 401, error
         else:
             code = error.get("code", 401)
             msg = error.get("message", "Unknown error")
         abort(code, msg)
     if auth.db:
         # map returned fields into auth_user fields
         user = {}
         for key, value in self.maps.items():
             value, parts = data, value.split(".")
             for part in parts:
                 value = value[int(part) if part.isdigit() else part]
                 user[key] = value
         user["sso_id"] = "%s:%s" % (self.name, user["sso_id"])
         if not "username" in user:
             user["username"] = user["sso_id"]
         # store or retrieve the user
         data = auth.get_or_register_user(user)
     else:
         # WIP Allow login without DB
         if not "id" in data:
             data["id"] = data.get("username") or data.get("email")
     user_id = data.get("id")
     auth.store_user_in_session(user_id)
     redirect(URL("index"))
Example #3
0
 def handle_request(self, auth, path, get_vars, post_vars):
     if path == "login":
         self.next = request.query.get('next') or URL('index')
         redirect(self.get_login_url())
     elif path == "callback":
         self._handle_callback(auth, get_vars)
     else:
         abort(404)
Example #4
0
 def handle_request(self, auth, path, get_vars, post_vars):
     if path == "login":
         auth.session["_next"] = request.query.get("next") or URL("index")
         redirect(self.get_login_url())
     elif path == "callback":
         self._handle_callback(auth, get_vars)
     else:
         abort(404)
Example #5
0
        def wrapper():
            kwargs = self.parse_request(func, **defaults)
            name = self._hash(func, **dict(kwargs, **self.params))
            self.filename = f"{name}{self.EXT}"
            rec = db.fcache(name=name)
            commit = False

            if rec is None:
                stream = get_stream()

                if settings.CACHE_NEW:
                    try:
                        newid = db.fcache.insert(name=name,
                                                 file=db.fcache.file.store(
                                                     stream, self.filename))
                    except AttributeError:
                        raise
                        self.time_expire = settings.CACHE_EXPIRE - (
                            self.now - now()).seconds
                        return stream.read()
                    else:
                        rec = db.fcache[newid]
                        commit = True
                else:
                    self.time_expire = settings.CACHE_EXPIRE - (self.now -
                                                                now()).seconds
                    return stream.read()

            elif (self.now - rec.modified_on).seconds > (
                    rec.timeout or settings.CACHE_EXPIRE):
                stream = get_stream()
                rec.update(file=db.fcache.file.store(stream, self.filename))
                commit = True

            self.time_expire = (rec.timeout or settings.CACHE_EXPIRE) - (
                self.now - rec.modified_on).seconds

            if commit: db.commit()
            if self.public and not stream_public:
                _, path_to_img = db.fcache.file.retrieve(rec.file,
                                                         nameonly=True)
                rpath = path_to_img[path_to_img.index('static'):]
                redirect(f'/{app_name}/{rpath}')
            else:
                _, stream = db.fcache.file.retrieve(rec.file, nameonly=False)
                return stream.read()
Example #6
0
 def _handle_callback(self, auth, get_vars):
     data = self.callback(get_vars)
     if not data or 'error' in data:
         abort(401)
     if auth.db:
         # map returned fields into auth_user fields
         user = {}
         for key, value in self.maps.items():
             value, parts = data, value.split('.')
             for part in parts:
                 value = value[int(part) if part.isdigit() else part]
                 user[key] = value
         user['sso_id'] = '%s:%s' % (self.name, user['sso_id'])
         # store or retrieve the user
         data = auth.get_or_register_user(user)
     else:
         # WIP Allow login without DB
         if not 'id' in data:
             data['id'] = data.get('username') or data.get('email')
     auth.session['user'] = data
     redirect(URL('index'))
Example #7
0
 def _handle_callback(self, auth, get_vars):
     data = self.callback(get_vars)
     if not data or "error" in data:
         abort(401)
     if auth.db:
         # map returned fields into auth_user fields
         user = {}
         for key, value in self.maps.items():
             value, parts = data, value.split(".")
             for part in parts:
                 value = value[int(part) if part.isdigit() else part]
                 user[key] = value
         user["sso_id"] = "%s:%s" % (self.name, user["sso_id"])
         # store or retrieve the user
         data = auth.get_or_register_user(user)
     else:
         # WIP Allow login without DB
         if not "id" in data:
             data["id"] = data.get("username") or data.get("email")
     auth.session["user"] = data
     redirect(URL("index"))