canaille-globuzma/canaille/core/models.py

104 lines
2.6 KiB
Python
Raw Normal View History

2022-11-01 11:25:21 +00:00
import datetime
2021-12-20 22:57:27 +00:00
from flask import session
2020-08-14 11:18:08 +00:00
class User:
2021-12-02 17:23:14 +00:00
def __init__(self, *args, **kwargs):
self.read = set()
self.write = set()
self.permissions = set()
super().__init__(*args, **kwargs)
2020-08-19 14:20:57 +00:00
@classmethod
2023-04-07 19:24:09 +00:00
def get_from_login(cls, login=None, **kwargs):
raise NotImplementedError()
2020-08-21 08:23:39 +00:00
def login(self):
try:
2020-12-29 08:31:46 +00:00
previous = (
session["user_id"]
if isinstance(session["user_id"], list)
else [session["user_id"]]
2020-12-29 08:31:46 +00:00
)
2023-02-05 18:08:25 +00:00
session["user_id"] = previous + [self.id]
except KeyError:
2023-02-05 18:08:25 +00:00
session["user_id"] = [self.id]
2020-08-21 08:23:39 +00:00
2020-12-29 08:31:46 +00:00
@classmethod
2020-08-21 08:23:39 +00:00
def logout(self):
try:
session["user_id"].pop()
if not session["user_id"]:
del session["user_id"]
except (IndexError, KeyError):
2020-08-21 08:23:39 +00:00
pass
@property
def identifier(self):
"""
Returns a unique value that will be used to identify the user.
This value will be used in URLs in canaille, so it should be unique and short.
"""
raise NotImplementedError()
def has_password(self):
raise NotImplementedError()
2020-08-14 11:18:08 +00:00
def check_password(self, password):
raise NotImplementedError()
2020-08-14 11:18:08 +00:00
def set_password(self, password):
raise NotImplementedError()
2021-12-02 17:23:14 +00:00
2021-12-08 17:06:50 +00:00
def can_read(self, field):
return field in self.read | self.write
2023-06-22 13:24:13 +00:00
@property
def preferred_email(self):
return self.emails[0] if self.emails else None
@property
def can_edit_self(self):
return "edit_self" in self.permissions
2021-12-06 23:07:32 +00:00
@property
def can_use_oidc(self):
return "use_oidc" in self.permissions
2021-12-02 17:23:14 +00:00
@property
def can_manage_users(self):
return "manage_users" in self.permissions
@property
def can_manage_groups(self):
return "manage_groups" in self.permissions
@property
def can_manage_oidc(self):
return "manage_oidc" in self.permissions
@property
def can_delete_account(self):
return "delete_account" in self.permissions
@property
def can_impersonate_users(self):
return "impersonate_users" in self.permissions
2022-11-01 11:25:21 +00:00
@property
def locked(self):
return bool(self.lock_date) and self.lock_date < datetime.datetime.now(
datetime.timezone.utc
)
2021-06-03 13:00:11 +00:00
class Group:
2023-06-28 16:09:25 +00:00
@property
def identifier(self):
"""
Returns a unique value that will be used to identify the user.
This value will be used in URLs in canaille, so it should be unique and short.
"""
raise NotImplementedError()