diff --git a/selfprivacy_api/repositories/tokens/abstract_tokens_repository.py b/selfprivacy_api/repositories/tokens/abstract_tokens_repository.py index d9a250e..764f3b6 100644 --- a/selfprivacy_api/repositories/tokens/abstract_tokens_repository.py +++ b/selfprivacy_api/repositories/tokens/abstract_tokens_repository.py @@ -123,6 +123,10 @@ class AbstractTokensRepository(ABC): return False return recovery_key.is_valid() + @abstractmethod + def _store_recovery_key(self, recovery_key: RecoveryKey) -> None: + """Store recovery key directly""" + @abstractmethod def _delete_recovery_key(self) -> None: """Delete the recovery key""" diff --git a/selfprivacy_api/repositories/tokens/json_tokens_repository.py b/selfprivacy_api/repositories/tokens/json_tokens_repository.py index 4cb7b3f..332bef8 100644 --- a/selfprivacy_api/repositories/tokens/json_tokens_repository.py +++ b/selfprivacy_api/repositories/tokens/json_tokens_repository.py @@ -103,6 +103,11 @@ class JsonTokensRepository(AbstractTokensRepository): recovery_key = RecoveryKey.generate(expiration, uses_left) + self._store_recovery_key(recovery_key) + + return recovery_key + + def _store_recovery_key(self, recovery_key: RecoveryKey) -> None: with WriteUserData(UserDataFiles.TOKENS) as tokens_file: key_expiration: Optional[str] = None if recovery_key.expires_at is not None: @@ -114,8 +119,6 @@ class JsonTokensRepository(AbstractTokensRepository): "uses_left": recovery_key.uses_left, } - return recovery_key - def _decrement_recovery_token(self): """Decrement recovery key use count by one""" if self.is_recovery_key_valid(): diff --git a/selfprivacy_api/repositories/tokens/redis_tokens_repository.py b/selfprivacy_api/repositories/tokens/redis_tokens_repository.py index 27271b7..0b3c19b 100644 --- a/selfprivacy_api/repositories/tokens/redis_tokens_repository.py +++ b/selfprivacy_api/repositories/tokens/redis_tokens_repository.py @@ -65,9 +65,12 @@ class RedisTokensRepository(AbstractTokensRepository): ) -> RecoveryKey: """Create the recovery key""" recovery_key = RecoveryKey.generate(expiration=expiration, uses_left=uses_left) - self._store_model_as_hash(RECOVERY_KEY_REDIS_KEY, recovery_key) + self._store_recovery_key(recovery_key) return recovery_key + def _store_recovery_key(self, recovery_key: RecoveryKey) -> None: + self._store_model_as_hash(RECOVERY_KEY_REDIS_KEY, recovery_key) + def _delete_recovery_key(self) -> None: """Delete the recovery key""" redis = self.connection