mirror of
ssh://git.janware.com/srv/git/janware/proj/jw-python
synced 2026-01-15 18:03:31 +01:00
63 lines
1.9 KiB
Python
63 lines
1.9 KiB
Python
# -*- 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
|