From 345e2c10c44eeb615c44aeb3f8b0c967485c6f8e Mon Sep 17 00:00:00 2001
From: Houkime <>
Date: Mon, 29 May 2023 16:12:22 +0000
Subject: [PATCH] feature(backups): a graphql query to get provider info

---
 .../graphql/common_types/service.py           |  7 ++++
 selfprivacy_api/graphql/queries/backup.py     | 32 +++++++++++++++++--
 2 files changed, 36 insertions(+), 3 deletions(-)

diff --git a/selfprivacy_api/graphql/common_types/service.py b/selfprivacy_api/graphql/common_types/service.py
index 8f27386..9e04254 100644
--- a/selfprivacy_api/graphql/common_types/service.py
+++ b/selfprivacy_api/graphql/common_types/service.py
@@ -108,6 +108,13 @@ class Service:
         return None
 
 
+@strawberry.type
+class SnapshotInfo:
+    id: str
+    service: "Service"
+    created_at: datetime.datetime
+
+
 def service_to_graphql_service(service: ServiceInterface) -> Service:
     """Convert service to graphql service"""
     return Service(
diff --git a/selfprivacy_api/graphql/queries/backup.py b/selfprivacy_api/graphql/queries/backup.py
index ef61b10..80b08e9 100644
--- a/selfprivacy_api/graphql/queries/backup.py
+++ b/selfprivacy_api/graphql/queries/backup.py
@@ -2,13 +2,39 @@
 # pylint: disable=too-few-public-methods
 import typing
 import strawberry
-from selfprivacy_api.graphql.common_types.backup_snapshot import SnapshotInfo
+
+
+from selfprivacy_api.backup import Backups
+from selfprivacy_api.backup.local_secret import LocalBackupSecret
+from selfprivacy_api.graphql.queries.providers import BackupProvider
+from selfprivacy_api.graphql.common_types.service import SnapshotInfo
+
+
+@strawberry.type
+class BackupConfiguration:
+    provider: BackupProvider
+    # When server is lost, the app should have the key to decrypt backups on a new server
+    encryption_key: str
+    # If none, autobackups are disabled
+    autobackup_period: typing.Optional[int] = None
+    # Bucket name for Backblaze, path for some other providers
+    location_name: typing.Optional[str] = None
+    location_id: typing.Optional[str] = None
+    # False when repo is not initialized and not ready to be used
+    is_initialized: bool
 
 
 @strawberry.type
 class Backup:
-    backend: str
+    @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
 
     @strawberry.field
-    def get_backups(self) -> typing.List[SnapshotInfo]:
+    def all_snapshots(self) -> typing.List[SnapshotInfo]:
         return []