🐛 fix(auth.py): change refresh token expiration time from 70 minutes to 12 hours for better security and usability

✨ feat(auth.py): add logging statements to provide more visibility into secret key generation and saving process
🐛 fix(auth.py): handle IOError when reading or writing secret key to prevent unexpected failures
This commit is contained in:
Gabriel Luiz Freitas Almeida 2023-09-26 15:14:20 -03:00
commit d05e085c4c

View file

@ -23,7 +23,7 @@ class AuthSettings(BaseSettings):
) )
ALGORITHM: str = "HS256" ALGORITHM: str = "HS256"
ACCESS_TOKEN_EXPIRE_MINUTES: int = 60 ACCESS_TOKEN_EXPIRE_MINUTES: int = 60
REFRESH_TOKEN_EXPIRE_MINUTES: int = 70 REFRESH_TOKEN_EXPIRE_MINUTES: int = 60 * 12
# API Key to execute /process endpoint # API Key to execute /process endpoint
API_KEY_SECRET_KEY: Optional[ API_KEY_SECRET_KEY: Optional[
@ -70,30 +70,33 @@ class AuthSettings(BaseSettings):
@validator("SECRET_KEY", pre=True) @validator("SECRET_KEY", pre=True)
def get_secret_key(cls, value, values): def get_secret_key(cls, value, values):
config_dir = values.get("CONFIG_DIR") config_dir: Path = values.get("CONFIG_DIR")
if not config_dir: if not config_dir:
logger.debug("No CONFIG_DIR provided, not saving secret key") logger.warn("No CONFIG_DIR provided; not saving secret key.")
return value or secrets.token_urlsafe(32) return value or secrets.token_urlsafe(32)
secret_key_path = Path(config_dir) / "secret_key" secret_key_path = config_dir / "secret_key"
if value: try:
logger.debug("Secret key provided") if value:
write_secret_to_file(secret_key_path, value) logger.info("Secret key provided.")
else: write_secret_to_file(secret_key_path, value)
logger.debug("No secret key provided, generating a random one") else:
logger.info("No secret key provided, generating a random one.")
if secret_key_path.exists(): if secret_key_path.exists():
value = read_secret_from_file(secret_key_path) value = read_secret_from_file(secret_key_path)
logger.debug("Loaded secret key") logger.info("Loaded secret key.")
if not value: if not value:
value = secrets.token_urlsafe(32)
write_secret_to_file(secret_key_path, value)
logger.info("Saved secret key.")
else:
value = secrets.token_urlsafe(32) value = secrets.token_urlsafe(32)
write_secret_to_file(secret_key_path, value) write_secret_to_file(secret_key_path, value)
logger.debug("Saved secret key") logger.info("Saved secret key.")
else: except IOError:
value = secrets.token_urlsafe(32) logger.error("Failed to read or write secret key.")
write_secret_to_file(secret_key_path, value) raise IOError("Failed to read or write secret key.")
logger.debug("Saved secret key")
return value return value