From c60339444944405a716bad5cf1b350dba5621973 Mon Sep 17 00:00:00 2001 From: Inex Code Date: Wed, 14 Jun 2023 00:43:01 +0300 Subject: [PATCH] fix(backups): try to actually get backup configuration --- selfprivacy_api/backup/providers/backblaze.py | 2 ++ .../backup/providers/local_file.py | 2 ++ selfprivacy_api/backup/providers/memory.py | 2 ++ selfprivacy_api/graphql/queries/backup.py | 23 +++++++++++-------- selfprivacy_api/graphql/queries/providers.py | 1 + 5 files changed, 20 insertions(+), 10 deletions(-) diff --git a/selfprivacy_api/backup/providers/backblaze.py b/selfprivacy_api/backup/providers/backblaze.py index 9ec5eba..f474a99 100644 --- a/selfprivacy_api/backup/providers/backblaze.py +++ b/selfprivacy_api/backup/providers/backblaze.py @@ -4,3 +4,5 @@ from selfprivacy_api.backup.restic_backuper import ResticBackuper class Backblaze(AbstractBackupProvider): backuper = ResticBackuper("--b2-account", "--b2-key", ":b2:") + + name = "BACKBLAZE" diff --git a/selfprivacy_api/backup/providers/local_file.py b/selfprivacy_api/backup/providers/local_file.py index a20f615..95075dd 100644 --- a/selfprivacy_api/backup/providers/local_file.py +++ b/selfprivacy_api/backup/providers/local_file.py @@ -5,6 +5,8 @@ from selfprivacy_api.backup.restic_backuper import ResticBackuper class LocalFileBackup(AbstractBackupProvider): backuper = ResticBackuper("", "", "memory") + name = "FILE" + # login and key args are for compatibility with generic provider methods. They are ignored. def __init__(self, filename: str, login: str = "", key: str = ""): super().__init__() diff --git a/selfprivacy_api/backup/providers/memory.py b/selfprivacy_api/backup/providers/memory.py index 3f257bf..a481559 100644 --- a/selfprivacy_api/backup/providers/memory.py +++ b/selfprivacy_api/backup/providers/memory.py @@ -4,3 +4,5 @@ from selfprivacy_api.backup.restic_backuper import ResticBackuper class InMemoryBackup(AbstractBackupProvider): backuper = ResticBackuper("", "", ":memory:") + + name = "MEMORY" diff --git a/selfprivacy_api/graphql/queries/backup.py b/selfprivacy_api/graphql/queries/backup.py index 97b4682..c20be35 100644 --- a/selfprivacy_api/graphql/queries/backup.py +++ b/selfprivacy_api/graphql/queries/backup.py @@ -18,22 +18,25 @@ class BackupConfiguration: # False when repo is not initialized and not ready to be used is_initialized: bool # If none, autobackups are disabled - autobackup_period: typing.Optional[int] = None + autobackup_period: typing.Optional[int] # Bucket name for Backblaze, path for some other providers - location_name: typing.Optional[str] = None - location_id: typing.Optional[str] = None + location_name: typing.Optional[str] + location_id: typing.Optional[str] @strawberry.type class Backup: @strawberry.field - def configuration() -> BackupConfiguration: - config = BackupConfiguration() - config.encryption_key = LocalBackupSecret.get() - config.is_initialized = Backups.is_initted() - config.autobackup_period = Backups.autobackup_period_minutes() - config.location_name = Backups.provider().location - config.location_id = Backups.provider().repo_id + def configuration(self) -> BackupConfiguration: + encryption_key = LocalBackupSecret.get() + return BackupConfiguration( + provider=BackupProvider[Backups.provider().name], + encryption_key=encryption_key.decode() if encryption_key else "", + is_initialized=Backups.is_initted(), + autobackup_period=Backups.autobackup_period_minutes(), + location_name=Backups.provider().location, + location_id=Backups.provider().repo_id, + ) @strawberry.field def all_snapshots(self) -> typing.List[SnapshotInfo]: diff --git a/selfprivacy_api/graphql/queries/providers.py b/selfprivacy_api/graphql/queries/providers.py index 2a9fcec..b9ca7ef 100644 --- a/selfprivacy_api/graphql/queries/providers.py +++ b/selfprivacy_api/graphql/queries/providers.py @@ -19,6 +19,7 @@ class ServerProvider(Enum): @strawberry.enum class BackupProvider(Enum): BACKBLAZE = "BACKBLAZE" + NONE = "NONE" # for testing purposes, make sure not selectable in prod. MEMORY = "MEMORY" FILE = "FILE"