mirror of
ssh://git.janware.com/srv/git/janware/proj/jw-python
synced 2026-01-15 18:03:31 +01:00
auth: Add LDAP support
Signed-off-by: Jan Lindemann <jan@janware.com>
This commit is contained in:
parent
0a1a6e5e17
commit
8a316ead21
4 changed files with 283 additions and 29 deletions
|
|
@ -8,6 +8,7 @@ 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
|
||||
|
||||
|
|
@ -18,12 +19,18 @@ class Group(GroupBase): # export
|
|||
def _name(self) -> str:
|
||||
return self.__name
|
||||
|
||||
class User(UserBase):
|
||||
class User(UserBase): # export
|
||||
|
||||
def __init__(self, auth: AuthBase, name: str):
|
||||
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
|
||||
|
|
@ -32,32 +39,54 @@ class User(UserBase):
|
|||
if self.__groups is None:
|
||||
name: str = ''
|
||||
ret: list[GroupBase] = []
|
||||
for name in self.__auth.conf['user.' + name + '.groups']:
|
||||
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):
|
||||
self.__conf = conf
|
||||
self.__users: Optional[dict[str, User]] = None
|
||||
super().__init__(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:
|
||||
@property
|
||||
def __users(self) -> 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_]
|
||||
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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue