From 4e329299e015d5b0fc95a612c466e2c717544386 Mon Sep 17 00:00:00 2001 From: Houkime <> Date: Wed, 22 Feb 2023 19:28:04 +0000 Subject: [PATCH] feat(backups): local secret generation and storage --- selfprivacy_api/backup/local_secret.py | 29 ++++++++++++++++++-------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/selfprivacy_api/backup/local_secret.py b/selfprivacy_api/backup/local_secret.py index f2ebf06..02d78a4 100644 --- a/selfprivacy_api/backup/local_secret.py +++ b/selfprivacy_api/backup/local_secret.py @@ -2,29 +2,40 @@ Separated out for circular dependency reasons """ +from __future__ import annotations +import secrets + +from selfprivacy_api.utils.redis_pool import RedisPool + + REDIS_KEY = "backup:local_secret" +redis = RedisPool().get_connection() + class LocalBackupSecret: @staticmethod def get(): """A secret string which backblaze/other clouds do not know. Serves as encryption key. - TODO: generate and save in redis """ - return "TEMPORARY_SECRET" + if not LocalBackupSecret.exists(): + LocalBackupSecret.reset() + return redis.get(REDIS_KEY) @staticmethod def reset(): - pass - - def exists(): - pass + new_secret = LocalBackupSecret._generate() + LocalBackupSecret._store(new_secret) @staticmethod - def _generate(): - pass + def exists() -> bool: + return redis.exists(REDIS_KEY) + + @staticmethod + def _generate() -> str: + return secrets.token_urlsafe(256) @staticmethod def _store(secret: str): - pass + redis.set(REDIS_KEY, secret)