""" New device key used to obtain access token. """ from datetime import datetime, timedelta, timezone import secrets from pydantic import BaseModel from mnemonic import Mnemonic from selfprivacy_api.models.tokens.time import is_past class NewDeviceKey(BaseModel): """ Recovery key used to obtain access token. Recovery key has a key string, date of creation, date of expiration. """ key: str created_at: datetime expires_at: datetime def is_valid(self) -> bool: """ Check if key is valid. """ if is_past(self.expires_at): return False return True def as_mnemonic(self) -> str: """ Get the key as a mnemonic. """ return Mnemonic(language="english").to_mnemonic(bytes.fromhex(self.key)) @staticmethod def generate() -> "NewDeviceKey": """ Factory to generate a random token. """ creation_date = datetime.now(timezone.utc) key = secrets.token_bytes(16).hex() return NewDeviceKey( key=key, created_at=creation_date, expires_at=creation_date + timedelta(minutes=10), )