diff --git a/selfprivacy_api/migrations/__init__.py b/selfprivacy_api/migrations/__init__.py index adb7d24..222c95e 100644 --- a/selfprivacy_api/migrations/__init__.py +++ b/selfprivacy_api/migrations/__init__.py @@ -22,6 +22,7 @@ from selfprivacy_api.migrations.providers import CreateProviderFields from selfprivacy_api.migrations.prepare_for_nixos_2211 import ( MigrateToSelfprivacyChannelFrom2205, ) +from selfprivacy_api.migrations.redis_tokens import LoadTokensToRedis migrations = [ FixNixosConfigBranch(), @@ -31,6 +32,7 @@ migrations = [ CheckForFailedBindsMigration(), CreateProviderFields(), MigrateToSelfprivacyChannelFrom2205(), + 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")