add register
This commit is contained in:
+2
-2
@@ -1,4 +1,4 @@
|
||||
from .manager import AuthManager
|
||||
from .manager import AuthManager, ADMIN_PASSWORD
|
||||
from .storage import AuthStorage
|
||||
|
||||
__all__ = ["AuthManager", "AuthStorage"]
|
||||
__all__ = ["AuthManager", "AuthStorage", "ADMIN_PASSWORD"]
|
||||
+12
-4
@@ -7,15 +7,18 @@ from typing import Dict, Optional
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
ADMIN_PASSWORD = "NjduqrKozu#G"
|
||||
|
||||
|
||||
class AuthManager:
|
||||
"""Управляет авторизацией: хеширование паролей, сессии, верификация."""
|
||||
"""Управляет авторизацией: хеширование паролей, сессии, верификация, роли."""
|
||||
|
||||
def __init__(self, session_timeout_minutes: int = 120):
|
||||
self._sessions: Dict[int, datetime] = {}
|
||||
self._roles: Dict[int, str] = {} # user_id -> "admin" or "user"
|
||||
self._failed_attempts: Dict[int, list] = {}
|
||||
self._max_attempts = 5
|
||||
self._lockout_duration = 300 # 5 минут блокировки
|
||||
self._lockout_duration = 300
|
||||
self._session_timeout = timedelta(minutes=session_timeout_minutes)
|
||||
|
||||
@staticmethod
|
||||
@@ -37,13 +40,18 @@ class AuthManager:
|
||||
return False
|
||||
return True
|
||||
|
||||
def login(self, user_id: int):
|
||||
def is_admin(self, user_id: int) -> bool:
|
||||
return self._roles.get(user_id) == "admin"
|
||||
|
||||
def login(self, user_id: int, is_admin: bool = False):
|
||||
self._sessions[user_id] = datetime.now()
|
||||
self._roles[user_id] = "admin" if is_admin else "user"
|
||||
self._failed_attempts.pop(user_id, None)
|
||||
logger.info(f"User {user_id} logged in")
|
||||
logger.info(f"User {user_id} logged in as {self._roles[user_id]}")
|
||||
|
||||
def logout(self, user_id: int):
|
||||
self._sessions.pop(user_id, None)
|
||||
self._roles.pop(user_id, None)
|
||||
self._failed_attempts.pop(user_id, None)
|
||||
logger.info(f"User {user_id} logged out")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user