# -*- 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 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): def __init__(self, auth: AuthBase, name: str): self.__name = name self.__auth = auth self.__groups: Optional[list[GroupBase]] = None 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.__auth.conf['user.' + name + '.groups']: ret.append(Group(self.__auth, name)) self.__groups = ret return self.__groups class Auth(AuthBase): # export def __init__(self, conf: Config): self.__conf = conf self.__users: Optional[dict[str, User]] = None self.__groups = None self.__current_user: User|None = None def _user(self, name_) -> User: if self.__users is None: ret: dict[str, User] = {} for name in self.conf.entries('user'): ret[name] = User(self, name) self.__users = ret return self.__users[name_] 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 _current_user(self) -> User: if self.__current_user is None: self.__current_user = self._user(self.conf['current_user']) return self.__current_user