Merge pull request 'Make login token last 8 hours' (#35) from make-login-token-last-8-hours into main
Reviewed-on: #35
This commit was merged in pull request #35.
This commit is contained in:
@@ -6,7 +6,7 @@ import logging
|
||||
from baby_monitor.repositories.interfaces import (
|
||||
TokenRepositoryInterface,
|
||||
)
|
||||
from baby_monitor.repositories.token.memory_token import (
|
||||
from baby_monitor.repositories.token import (
|
||||
InMemoryTokenRepository,
|
||||
)
|
||||
|
||||
@@ -43,7 +43,7 @@ def _initialize_token_repository() -> TokenRepositoryInterface:
|
||||
) from e
|
||||
|
||||
try:
|
||||
from baby_monitor.repositories.token.redis_token import (
|
||||
from baby_monitor.repositories.token import (
|
||||
RedisTokenRepository,
|
||||
)
|
||||
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
"""Token repository implementations and configurations."""
|
||||
|
||||
from .default_ttl import DEFAULT_TTL
|
||||
from .memory_token import InMemoryTokenRepository
|
||||
from .redis_token import RedisTokenRepository
|
||||
|
||||
__all__ = [
|
||||
"DEFAULT_TTL",
|
||||
"InMemoryTokenRepository",
|
||||
"RedisTokenRepository",
|
||||
]
|
||||
@@ -0,0 +1,3 @@
|
||||
"""Definition of Token default TTL."""
|
||||
|
||||
DEFAULT_TTL = 28800 # seconds -> 8 hours
|
||||
@@ -3,6 +3,7 @@
|
||||
from datetime import datetime, timedelta, UTC
|
||||
|
||||
from baby_monitor.repositories.interfaces import TokenRepositoryInterface
|
||||
from baby_monitor.repositories.token import DEFAULT_TTL
|
||||
|
||||
|
||||
class InMemoryTokenRepository(TokenRepositoryInterface):
|
||||
@@ -16,9 +17,8 @@ class InMemoryTokenRepository(TokenRepositoryInterface):
|
||||
def __init__(self) -> None:
|
||||
# token -> (user_id, expiry_time)
|
||||
self._tokens: dict[str, tuple[int, datetime]] = {}
|
||||
self._default_ttl = 3600 # Store default TTL for sliding expiration
|
||||
|
||||
def store(self, token: str, user_id: int, ttl: int = 3600) -> None:
|
||||
def store(self, token: str, user_id: int, ttl: int = DEFAULT_TTL) -> None:
|
||||
"""Store a token with TTL (time to live in seconds)."""
|
||||
expiry = datetime.now(UTC) + timedelta(seconds=ttl)
|
||||
self._tokens[token] = (user_id, expiry)
|
||||
@@ -39,7 +39,7 @@ class InMemoryTokenRepository(TokenRepositoryInterface):
|
||||
return None
|
||||
|
||||
# Sliding expiration: extend the token lifetime
|
||||
new_expiry = datetime.now(UTC) + timedelta(seconds=self._default_ttl)
|
||||
new_expiry = datetime.now(UTC) + timedelta(seconds=DEFAULT_TTL)
|
||||
self._tokens[token] = (user_id, new_expiry)
|
||||
|
||||
return user_id
|
||||
|
||||
@@ -3,14 +3,14 @@
|
||||
from typing import Any
|
||||
|
||||
from baby_monitor.repositories.interfaces import TokenRepositoryInterface
|
||||
from baby_monitor.repositories.token import DEFAULT_TTL
|
||||
|
||||
|
||||
class RedisTokenRepository(TokenRepositoryInterface):
|
||||
"""
|
||||
Redis-based token storage.
|
||||
|
||||
Requires redis package: pip install redis
|
||||
Set REDIS_URI environment variable (e.g., redis://localhost:6379/0)
|
||||
This implementation uses Redis to store tokens with TTL. Implements sliding expiration.
|
||||
"""
|
||||
|
||||
def __init__(self, redis_client: Any) -> None:
|
||||
@@ -21,9 +21,8 @@ class RedisTokenRepository(TokenRepositoryInterface):
|
||||
redis_client: Redis client instance from redis.from_url()
|
||||
"""
|
||||
self.redis = redis_client
|
||||
self.default_ttl = 3600 # Store default TTL for sliding expiration
|
||||
|
||||
def store(self, token: str, user_id: int, ttl: int = 3600) -> None:
|
||||
def store(self, token: str, user_id: int, ttl: int = DEFAULT_TTL) -> None:
|
||||
"""Store a token with TTL (time to live in seconds)."""
|
||||
key = f"token:{token}"
|
||||
self.redis.setex(key, ttl, str(user_id))
|
||||
@@ -37,7 +36,7 @@ class RedisTokenRepository(TokenRepositoryInterface):
|
||||
user_id_str = self.redis.get(key)
|
||||
if user_id_str:
|
||||
# Sliding expiration: extend the token lifetime
|
||||
self.redis.expire(key, self.default_ttl)
|
||||
self.redis.expire(key, DEFAULT_TTL)
|
||||
return int(user_id_str)
|
||||
return None
|
||||
|
||||
|
||||
Reference in New Issue
Block a user