| |
| |
| |
| |
| |
| |
| |
| |
|
|
| import logging |
| from typing import Dict, Any, Optional |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| logger = logging.getLogger('security') |
|
|
| class Security: |
| def __init__(self, services: Dict[str, Any]): |
| |
| self.user_handler: Optional[UserHandler] = services.get("user_handler") |
| self.access_control: Optional[AccessControl] = services.get("access_control") |
| self.encryption: Optional[Encryption] = services.get("encryption") |
|
|
| |
| |
| if not self.user_handler: |
| logger.critical("Security manager init failed: UserHandler service missing.") |
| raise RuntimeError("UserHandler service missing") |
|
|
| if not self.access_control: |
| logger.critical("Security manager init failed: AccessControl service missing.") |
| raise RuntimeError("AccessControl service missing") |
|
|
| |
| |
| if not self.encryption: |
| logger.warning("Encryption service not available. Encryption/decryption features will be disabled.") |
|
|
| logger.info("Security manager initialized and ready.") |
|
|
| |
| |
| async def user_login(self, username: str, password: str, request_data: dict) -> bool: |
| logger.info(f"Attempting login for user: {username}") |
| if await self.user_handler.login(username, password, request_data): |
| return await self.user_handler.validate_session(request_data) |
| return False |
|
|
| |
| async def check_permission(self, user_id: int, permission_name: str) -> bool: |
| logger.debug(f"Checking permission '{permission_name}' for user ID {user_id}") |
| return await self.access_control.has_permission(user_id, permission_name) |
|
|
| |
| def encrypt_data(self, data: str) -> Dict[str, str]: |
| if not self.encryption: |
| raise RuntimeError("Encryption service not initialized.") |
| logger.debug("Encrypting data.") |
| return self.encryption.encrypt(data) |
|
|
| |
| def decrypt_data(self, encrypted_data: str, nonce: str, tag: str) -> Optional[str]: |
| if not self.encryption: |
| logger.error("Encryption service not initialized. Cannot decrypt data.") |
| return None |
| logger.debug("Decrypting data.") |
| try: |
| return self.encryption.decrypt(encrypted_data, nonce, tag) |
| except Exception as e: |
| logger.error(f"Decryption failed: {e}") |
| return None |
|
|