diff --git a/selfprivacy_api/migrations/__init__.py b/selfprivacy_api/migrations/__init__.py index 7385548..41fa9af 100644 --- a/selfprivacy_api/migrations/__init__.py +++ b/selfprivacy_api/migrations/__init__.py @@ -19,6 +19,7 @@ from selfprivacy_api.migrations.migrate_to_selfprivacy_channel import ( ) from selfprivacy_api.migrations.mount_volume import MountVolume from selfprivacy_api.migrations.providers import CreateProviderFields +from selfprivacy_api.migrations.redis_tokens import LoadTokensToRedis migrations = [ FixNixosConfigBranch(), @@ -27,6 +28,7 @@ migrations = [ MountVolume(), CheckForFailedBindsMigration(), CreateProviderFields(), + LoadTokensToRedis(), ] diff --git a/selfprivacy_api/migrations/redis_tokens.py b/selfprivacy_api/migrations/redis_tokens.py new file mode 100644 index 0000000..c5eea2f --- /dev/null +++ b/selfprivacy_api/migrations/redis_tokens.py @@ -0,0 +1,48 @@ +from selfprivacy_api.migrations.migration import Migration + +from selfprivacy_api.repositories.tokens.json_tokens_repository import ( + JsonTokensRepository, +) +from selfprivacy_api.repositories.tokens.redis_tokens_repository import ( + RedisTokensRepository, +) +from selfprivacy_api.repositories.tokens.abstract_tokens_repository import ( + AbstractTokensRepository, +) + + +class LoadTokensToRedis(Migration): + """Load Json tokens into Redis""" + + def get_migration_name(self): + return "load_tokens_to_redis" + + def get_migration_description(self): + return "Loads access tokens and recovery keys from legacy json file into redis token storage" + + def is_repo_empty(self, repo: AbstractTokensRepository) -> bool: + if repo.get_tokens() != []: + return False + if repo.get_recovery_key() is not None: + return False + return True + + def is_migration_needed(self): + try: + if not self.is_repo_empty(JsonTokensRepository()) and self.is_repo_empty( + RedisTokensRepository() + ): + return True + except Exception as e: + print(e) + return False + + def migrate(self): + # Write info about providers to userdata.json + try: + RedisTokensRepository().clone(JsonTokensRepository()) + + print("Done") + except Exception as e: + print(e) + print("Error migrating access tokens from json to redis")