# -*- coding: utf-8 -*- from typing import Optional, Union from ...log import * from ... import Config from .. import Access from .. import Auth as AuthBase from .. import Group as GroupBase from .. import User as UserBase from .. import ProjectFlags class Group(GroupBase): # export def __init__(self, auth: AuthBase, name: str): self.__name = name self.__auth = auth def _name(self) -> str: return self.__name class User(UserBase): # export def __init__(self, auth: AuthBase, name: str, conf: Config): self.__name = name self.__conf = conf self.__auth = auth self.__groups: Optional[list[GroupBase]] = None self.__email = conf.get('email') @property def conf(self): return self.__conf def _name(self) -> str: return self.__name def _groups(self) -> list[GroupBase]: if self.__groups is None: name: str = '' ret: list[GroupBase] = [] for name in self.conf['groups']: ret.append(Group(self.__auth, name)) self.__groups = ret return self.__groups def _email(self) -> str: return self.__email class Auth(AuthBase): # export def __init__(self, conf: Config): super().__init__(conf) self.___users: Optional[dict[str, User]] = None self.__groups = None self.__current_user: User|None = None @property def __users(self) -> User: if self.___users is None: ret: dict[str, User] = {} for name in self.conf.entries('user'): conf = self.conf.branch('user.' + name) ret[name] = User(self, name, conf) self.___users = ret return self.___users def _access(self, what: str, access_type: Optional[Access], who: User|GroupBase|None) -> bool: # type: ignore slog(WARNING, f'Returning False for {access_type} access to resource {what} by {who}') return False def _user(self, name) -> User: return self.__users[name] def _users(self) -> list[User]: return self.__users def _current_user(self) -> User: if self.__current_user is None: self.__current_user = self._user(self.conf['current_user']) return self.__current_user def _user_by_email(self, email: str) -> User: if self.__user_by_email is None: ret: dict[str, User] = dict() for user in self.__users.values(): ret[user.email] = user self.__user_by_email = ret return self.__user_by_email[email] def _projects(self, name, flags: ProjectFlags) -> list[str]: return None