feat(backups): local secret generation and storage

restic-rewrite-api
Houkime 2023-02-22 19:28:04 +00:00
parent 23ee958bfb
commit 4e329299e0
1 changed files with 20 additions and 9 deletions

View File

@ -2,29 +2,40 @@
Separated out for circular dependency reasons 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_KEY = "backup:local_secret"
redis = RedisPool().get_connection()
class LocalBackupSecret: class LocalBackupSecret:
@staticmethod @staticmethod
def get(): def get():
"""A secret string which backblaze/other clouds do not know. """A secret string which backblaze/other clouds do not know.
Serves as encryption key. 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 @staticmethod
def reset(): def reset():
pass new_secret = LocalBackupSecret._generate()
LocalBackupSecret._store(new_secret)
def exists():
pass
@staticmethod @staticmethod
def _generate(): def exists() -> bool:
pass return redis.exists(REDIS_KEY)
@staticmethod
def _generate() -> str:
return secrets.token_urlsafe(256)
@staticmethod @staticmethod
def _store(secret: str): def _store(secret: str):
pass redis.set(REDIS_KEY, secret)