Source code for gws.web.auth

import gws
import gws.common.auth

import gws.types as t

from . import wrappers, error


#:export IRequest
[docs]class Request(wrappers.BaseRequest, t.IRequest): session: t.ISession = None @property def auth(self) -> t.IAuthManager: return self.root.application.auth @property def user(self) -> t.IUser: if not self.session: raise gws.Error('session not opened') return self.session.user
[docs] def auth_open(self): try: self.session = self.auth.open_session(self) except gws.common.auth.Error as e: raise error.Forbidden() from e
[docs] def auth_close(self, res: t.IResponse): self.session = self.auth.close_session(self.session, self, res)
[docs] def login(self, login: str, password: str): if not self.user.is_guest: gws.log.error('login while logged-in') raise gws.web.error.Forbidden() method = self.auth.get_method('web') if not method: gws.log.error('web auth method not found') raise gws.web.error.Forbidden() try: self.session = self.auth.login(method, login, password, self) except gws.common.auth.Error as e: raise error.Forbidden() from e
[docs] def logout(self): self.session = self.auth.logout(self.session, self)
[docs] def require(self, klass: str, uid: str) -> t.IObject: node = self.root.find(klass, uid) if not node: gws.log.error('require: not found', klass, uid) raise error.NotFound() if not self.user.can_use(node): gws.log.error('require: denied', klass, uid) raise error.Forbidden() return node
[docs] def require_project(self, uid: str) -> t.IProject: return t.cast(t.IProject, self.require('gws.common.project', uid))
[docs] def require_layer(self, uid: str) -> t.ILayer: return t.cast(t.ILayer, self.require('gws.ext.layer', uid))
[docs] def acquire(self, klass: str, uid: str) -> t.Optional[t.IObject]: obj = self.root.find(klass, uid) if obj and self.user.can_use(obj): return obj