From 0c4da8eb9f1d7c96606496ed623bf09aa94a91d3 Mon Sep 17 00:00:00 2001 From: NaiJi Date: Fri, 18 Nov 2022 07:07:42 +0400 Subject: [PATCH] refactor: Move all API factories into encapsulated static class Because it's very hard to track all different provider factories created in different cubits, if users reset application config the previous factories stayed unchanged which would lead to unexpected behavior --- .../api_maps/rest_maps/api_controller.dart | 44 ++++++++++ .../server_providers/server_provider.dart | 2 +- .../cubit/dns_records/dns_records_cubit.dart | 15 +--- .../initializing/dns_provider_form_cubit.dart | 8 +- .../initializing/domain_setup_cubit.dart | 7 +- .../cubit/metrics/metrics_repository.dart | 25 ++---- .../provider_volume_cubit.dart | 49 ++++++----- .../server_detailed_info_repository.dart | 27 +----- .../server_installation_cubit.dart | 62 +++++++++----- .../server_installation_repository.dart | 82 ++++++++++--------- .../setup/initializing/initializing.dart | 5 +- 11 files changed, 173 insertions(+), 153 deletions(-) create mode 100644 lib/logic/api_maps/rest_maps/api_controller.dart diff --git a/lib/logic/api_maps/rest_maps/api_controller.dart b/lib/logic/api_maps/rest_maps/api_controller.dart new file mode 100644 index 00000000..440d25af --- /dev/null +++ b/lib/logic/api_maps/rest_maps/api_controller.dart @@ -0,0 +1,44 @@ +import 'package:selfprivacy/logic/api_maps/rest_maps/api_factory_creator.dart'; +import 'package:selfprivacy/logic/api_maps/rest_maps/api_factory_settings.dart'; +import 'package:selfprivacy/logic/api_maps/rest_maps/dns_providers/dns_provider_factory.dart'; +import 'package:selfprivacy/logic/api_maps/rest_maps/server_providers/server_provider_factory.dart'; + +class ApiController { + static VolumeProviderApiFactory? get currentVolumeProviderApiFactory => + _volumeProviderApiFactory; + static DnsProviderApiFactory? get currentDnsProviderApiFactory => + _dnsProviderApiFactory; + static ServerProviderApiFactory? get currentServerProviderApiFactory => + _serverProviderApiFactory; + + static void initVolumeProviderApiFactory( + final ServerProviderApiFactorySettings settings, + ) { + _volumeProviderApiFactory = + VolumeApiFactoryCreator.createVolumeProviderApiFactory(settings); + } + + static void initDnsProviderApiFactory( + final DnsProviderApiFactorySettings settings, + ) { + _dnsProviderApiFactory = + ApiFactoryCreator.createDnsProviderApiFactory(settings); + } + + static void initServerProviderApiFactory( + final ServerProviderApiFactorySettings settings, + ) { + _serverProviderApiFactory = + ApiFactoryCreator.createServerProviderApiFactory(settings); + } + + static void clearProviderApiFactories() { + _volumeProviderApiFactory = null; + _dnsProviderApiFactory = null; + _serverProviderApiFactory = null; + } + + static VolumeProviderApiFactory? _volumeProviderApiFactory; + static DnsProviderApiFactory? _dnsProviderApiFactory; + static ServerProviderApiFactory? _serverProviderApiFactory; +} diff --git a/lib/logic/api_maps/rest_maps/server_providers/server_provider.dart b/lib/logic/api_maps/rest_maps/server_providers/server_provider.dart index 0be28b85..f846a7a8 100644 --- a/lib/logic/api_maps/rest_maps/server_providers/server_provider.dart +++ b/lib/logic/api_maps/rest_maps/server_providers/server_provider.dart @@ -59,5 +59,5 @@ abstract class ServerProviderApi extends ApiMap { /// Whether we request for staging temprorary certificates. /// Hardcode to 'true' in the middle of testing to not /// get your domain banned but constant certificate renewal - String get stagingAcme => 'false'; + String get stagingAcme => 'true'; } diff --git a/lib/logic/cubit/dns_records/dns_records_cubit.dart b/lib/logic/cubit/dns_records/dns_records_cubit.dart index f3b91bff..3403dc68 100644 --- a/lib/logic/cubit/dns_records/dns_records_cubit.dart +++ b/lib/logic/cubit/dns_records/dns_records_cubit.dart @@ -1,8 +1,6 @@ import 'package:cubit_form/cubit_form.dart'; -import 'package:selfprivacy/logic/api_maps/rest_maps/api_factory_creator.dart'; -import 'package:selfprivacy/logic/api_maps/rest_maps/api_factory_settings.dart'; +import 'package:selfprivacy/logic/api_maps/rest_maps/api_controller.dart'; import 'package:selfprivacy/logic/api_maps/rest_maps/dns_providers/dns_provider.dart'; -import 'package:selfprivacy/logic/api_maps/rest_maps/dns_providers/dns_provider_factory.dart'; import 'package:selfprivacy/logic/cubit/app_config_dependent/authentication_dependend_cubit.dart'; import 'package:selfprivacy/logic/models/hive/server_domain.dart'; import 'package:selfprivacy/logic/models/json/dns_records.dart'; @@ -20,12 +18,6 @@ class DnsRecordsCubit const DnsRecordsState(dnsState: DnsRecordsStatus.refreshing), ); - DnsProviderApiFactory? dnsProviderApiFactory = - ApiFactoryCreator.createDnsProviderApiFactory( - DnsProviderApiFactorySettings(provider: DnsProvider.cloudflare), - ); // TODO: HARDCODE FOR NOW!!! - // TODO: Remove when provider selection is implemented. - final ServerApi api = ServerApi(); @override @@ -46,7 +38,8 @@ class DnsRecordsCubit final String? ipAddress = serverInstallationCubit.state.serverDetails?.ip4; if (domain != null && ipAddress != null) { - final List records = await dnsProviderApiFactory! + final List records = await ApiController + .currentDnsProviderApiFactory! .getDnsProvider() .getDnsRecords(domain: domain); final String? dkimPublicKey = @@ -126,7 +119,7 @@ class DnsRecordsCubit final ServerDomain? domain = serverInstallationCubit.state.serverDomain; final String? ipAddress = serverInstallationCubit.state.serverDetails?.ip4; final DnsProviderApi dnsProviderApi = - dnsProviderApiFactory!.getDnsProvider(); + ApiController.currentDnsProviderApiFactory!.getDnsProvider(); await dnsProviderApi.removeSimilarRecords(domain: domain!); await dnsProviderApi.createMultipleDnsRecords( domain: domain, diff --git a/lib/logic/cubit/forms/setup/initializing/dns_provider_form_cubit.dart b/lib/logic/cubit/forms/setup/initializing/dns_provider_form_cubit.dart index c2348a69..5ba72483 100644 --- a/lib/logic/cubit/forms/setup/initializing/dns_provider_form_cubit.dart +++ b/lib/logic/cubit/forms/setup/initializing/dns_provider_form_cubit.dart @@ -7,16 +7,16 @@ import 'package:selfprivacy/logic/cubit/forms/validations/validations.dart'; class DnsProviderFormCubit extends FormCubit { DnsProviderFormCubit(this.initializingCubit) { - final RegExp regExp = initializingCubit.getDnsProviderApiTokenValidation(); + //final RegExp regExp = initializingCubit.getDnsProviderApiTokenValidation(); apiKey = FieldCubit( initalValue: '', validations: [ RequiredStringValidation('validations.required'.tr()), - ValidationModel( + /*ValidationModel( regExp.hasMatch, 'validations.invalid_format'.tr(), - ), - LengthStringNotEqualValidation(40) + ),*/ + //LengthStringNotEqualValidation(40) ], ); diff --git a/lib/logic/cubit/forms/setup/initializing/domain_setup_cubit.dart b/lib/logic/cubit/forms/setup/initializing/domain_setup_cubit.dart index a1c458fb..62fc1050 100644 --- a/lib/logic/cubit/forms/setup/initializing/domain_setup_cubit.dart +++ b/lib/logic/cubit/forms/setup/initializing/domain_setup_cubit.dart @@ -1,4 +1,5 @@ import 'package:cubit_form/cubit_form.dart'; +import 'package:selfprivacy/logic/api_maps/rest_maps/api_controller.dart'; import 'package:selfprivacy/logic/cubit/server_installation/server_installation_cubit.dart'; import 'package:selfprivacy/logic/models/hive/server_domain.dart'; @@ -9,8 +10,7 @@ class DomainSetupCubit extends Cubit { Future load() async { emit(Loading(LoadingTypes.loadingDomain)); - final List list = await serverInstallationCubit - .repository.dnsProviderApiFactory! + final List list = await ApiController.currentDnsProviderApiFactory! .getDnsProvider() .domainList(); if (list.isEmpty) { @@ -31,8 +31,7 @@ class DomainSetupCubit extends Cubit { emit(Loading(LoadingTypes.saving)); - final String? zoneId = await serverInstallationCubit - .repository.dnsProviderApiFactory! + final String? zoneId = await ApiController.currentDnsProviderApiFactory! .getDnsProvider() .getZoneId(domainName); diff --git a/lib/logic/cubit/metrics/metrics_repository.dart b/lib/logic/cubit/metrics/metrics_repository.dart index 15da1b0c..71c298bf 100644 --- a/lib/logic/cubit/metrics/metrics_repository.dart +++ b/lib/logic/cubit/metrics/metrics_repository.dart @@ -1,11 +1,8 @@ import 'package:selfprivacy/config/get_it_config.dart'; -import 'package:selfprivacy/logic/api_maps/rest_maps/api_factory_creator.dart'; -import 'package:selfprivacy/logic/api_maps/rest_maps/api_factory_settings.dart'; -import 'package:selfprivacy/logic/api_maps/rest_maps/server_providers/server_provider_factory.dart'; +import 'package:selfprivacy/logic/api_maps/rest_maps/api_controller.dart'; import 'package:selfprivacy/logic/common_enum/common_enum.dart'; import 'package:selfprivacy/logic/cubit/metrics/metrics_cubit.dart'; -import 'package:selfprivacy/logic/models/hive/server_details.dart'; import 'package:selfprivacy/logic/models/metrics.dart'; class MetricsLoadException implements Exception { @@ -14,22 +11,10 @@ class MetricsLoadException implements Exception { } class MetricsRepository { - ServerProviderApiFactory? serverProviderApiFactory; - - void _buildServerProviderFactory() { - final ServerProvider? providerType = getIt().serverProvider; - final String? location = getIt().serverLocation; - serverProviderApiFactory = ApiFactoryCreator.createServerProviderApiFactory( - ServerProviderApiFactorySettings( - provider: providerType ?? ServerProvider.unknown, - location: location, - ), - ); - } - Future getMetrics(final Period period) async { - if (serverProviderApiFactory == null) { - _buildServerProviderFactory(); + final providerApiFactory = ApiController.currentServerProviderApiFactory; + if (providerApiFactory == null) { + throw MetricsLoadException('Server Provider data is null'); } final DateTime end = DateTime.now(); @@ -49,7 +34,7 @@ class MetricsRepository { final serverId = getIt().serverDetails!.id; final ServerMetrics? metrics = - await serverProviderApiFactory!.getServerProvider().getMetrics( + await providerApiFactory.getServerProvider().getMetrics( serverId, start, end, diff --git a/lib/logic/cubit/provider_volumes/provider_volume_cubit.dart b/lib/logic/cubit/provider_volumes/provider_volume_cubit.dart index fb087cf9..11e180d0 100644 --- a/lib/logic/cubit/provider_volumes/provider_volume_cubit.dart +++ b/lib/logic/cubit/provider_volumes/provider_volume_cubit.dart @@ -1,9 +1,7 @@ import 'package:easy_localization/easy_localization.dart'; import 'package:selfprivacy/config/get_it_config.dart'; import 'package:selfprivacy/logic/api_maps/graphql_maps/server_api/server_api.dart'; -import 'package:selfprivacy/logic/api_maps/rest_maps/api_factory_creator.dart'; -import 'package:selfprivacy/logic/api_maps/rest_maps/api_factory_settings.dart'; -import 'package:selfprivacy/logic/api_maps/rest_maps/server_providers/server_provider_factory.dart'; +import 'package:selfprivacy/logic/api_maps/rest_maps/api_controller.dart'; import 'package:selfprivacy/logic/common_enum/common_enum.dart'; import 'package:selfprivacy/logic/cubit/app_config_dependent/authentication_dependend_cubit.dart'; import 'package:selfprivacy/logic/models/disk_size.dart'; @@ -17,30 +15,19 @@ class ApiProviderVolumeCubit extends ServerInstallationDependendCubit { ApiProviderVolumeCubit(final ServerInstallationCubit serverInstallationCubit) : super(serverInstallationCubit, const ApiProviderVolumeState.initial()); - - VolumeProviderApiFactory? providerApi; - final ServerApi serverApi = ServerApi(); @override Future load() async { if (serverInstallationCubit.state is ServerInstallationFinished) { - final serverDetails = getIt().serverDetails; - final serverLocation = getIt().serverLocation; - providerApi = serverDetails == null - ? null - : VolumeApiFactoryCreator.createVolumeProviderApiFactory( - ServerProviderApiFactorySettings( - location: serverLocation, - provider: getIt().serverDetails!.provider, - ), - ); _refetch(); } } Future getPricePerGb() async => - providerApi!.getVolumeProvider().getPricePerGb(); + ApiController.currentVolumeProviderApiFactory! + .getVolumeProvider() + .getPricePerGb(); Future refresh() async { emit(const ApiProviderVolumeState([], LoadingStatus.refreshing, false)); @@ -48,12 +35,14 @@ class ApiProviderVolumeCubit } Future _refetch() async { - if (providerApi == null) { + if (ApiController.currentVolumeProviderApiFactory == null) { return emit(const ApiProviderVolumeState([], LoadingStatus.error, false)); } - final List volumes = - await providerApi!.getVolumeProvider().getVolumes(); + final List volumes = await ApiController + .currentVolumeProviderApiFactory! + .getVolumeProvider() + .getVolumes(); if (volumes.isEmpty) { return emit(const ApiProviderVolumeState([], LoadingStatus.error, false)); @@ -64,14 +53,16 @@ class ApiProviderVolumeCubit Future attachVolume(final DiskVolume volume) async { final ServerHostingDetails server = getIt().serverDetails!; - await providerApi! + await ApiController.currentVolumeProviderApiFactory! .getVolumeProvider() .attachVolume(volume.providerVolume!, server.id); refresh(); } Future detachVolume(final DiskVolume volume) async { - await providerApi!.getVolumeProvider().detachVolume(volume.providerVolume!); + await ApiController.currentVolumeProviderApiFactory! + .getVolumeProvider() + .detachVolume(volume.providerVolume!); refresh(); } @@ -84,7 +75,9 @@ class ApiProviderVolumeCubit 'Starting resize', ); emit(state.copyWith(isResizing: true)); - final bool resized = await providerApi!.getVolumeProvider().resizeVolume( + final bool resized = await ApiController.currentVolumeProviderApiFactory! + .getVolumeProvider() + .resizeVolume( volume.providerVolume!, newSize, ); @@ -120,8 +113,10 @@ class ApiProviderVolumeCubit } Future createVolume() async { - final ServerVolume? volume = - await providerApi!.getVolumeProvider().createVolume(); + final ServerVolume? volume = await ApiController + .currentVolumeProviderApiFactory! + .getVolumeProvider() + .createVolume(); final diskVolume = DiskVolume(providerVolume: volume); await attachVolume(diskVolume); @@ -133,7 +128,9 @@ class ApiProviderVolumeCubit } Future deleteVolume(final DiskVolume volume) async { - await providerApi!.getVolumeProvider().deleteVolume(volume.providerVolume!); + await ApiController.currentVolumeProviderApiFactory! + .getVolumeProvider() + .deleteVolume(volume.providerVolume!); refresh(); } diff --git a/lib/logic/cubit/server_detailed_info/server_detailed_info_repository.dart b/lib/logic/cubit/server_detailed_info/server_detailed_info_repository.dart index 5e0f78ea..ca6848bc 100644 --- a/lib/logic/cubit/server_detailed_info/server_detailed_info_repository.dart +++ b/lib/logic/cubit/server_detailed_info/server_detailed_info_repository.dart @@ -1,38 +1,19 @@ import 'package:selfprivacy/config/get_it_config.dart'; import 'package:selfprivacy/logic/api_maps/graphql_maps/server_api/server_api.dart'; -import 'package:selfprivacy/logic/api_maps/rest_maps/api_factory_creator.dart'; -import 'package:selfprivacy/logic/api_maps/rest_maps/api_factory_settings.dart'; -import 'package:selfprivacy/logic/api_maps/rest_maps/server_providers/server_provider_factory.dart'; +import 'package:selfprivacy/logic/api_maps/rest_maps/api_controller.dart'; import 'package:selfprivacy/logic/models/auto_upgrade_settings.dart'; -import 'package:selfprivacy/logic/models/hive/server_details.dart'; import 'package:selfprivacy/logic/models/server_metadata.dart'; import 'package:selfprivacy/logic/models/timezone_settings.dart'; class ServerDetailsRepository { ServerApi server = ServerApi(); - ServerProviderApiFactory? serverProviderApiFactory; - - void _buildServerProviderFactory() { - final ServerProvider? providerType = getIt().serverProvider; - final String? location = getIt().serverLocation; - serverProviderApiFactory = ApiFactoryCreator.createServerProviderApiFactory( - ServerProviderApiFactorySettings( - provider: providerType ?? ServerProvider.unknown, - location: location, - ), - ); - } Future load() async { - if (serverProviderApiFactory == null) { - _buildServerProviderFactory(); - } - + final serverProviderApi = ApiController.currentServerProviderApiFactory; final settings = await server.getSystemSettings(); final serverId = getIt().serverDetails!.id; - final metadata = await serverProviderApiFactory! - .getServerProvider() - .getMetadata(serverId); + final metadata = + await serverProviderApi!.getServerProvider().getMetadata(serverId); return ServerDetailsRepositoryDto( autoUpgradeSettings: settings.autoUpgradeSettings, diff --git a/lib/logic/cubit/server_installation/server_installation_cubit.dart b/lib/logic/cubit/server_installation/server_installation_cubit.dart index d56c6e2e..fa18cda8 100644 --- a/lib/logic/cubit/server_installation/server_installation_cubit.dart +++ b/lib/logic/cubit/server_installation/server_installation_cubit.dart @@ -5,7 +5,7 @@ import 'package:easy_localization/easy_localization.dart'; import 'package:equatable/equatable.dart'; import 'package:selfprivacy/config/get_it_config.dart'; import 'package:selfprivacy/logic/api_maps/graphql_maps/server_api/server_api.dart'; -import 'package:selfprivacy/logic/api_maps/rest_maps/api_factory_creator.dart'; +import 'package:selfprivacy/logic/api_maps/rest_maps/api_controller.dart'; import 'package:selfprivacy/logic/api_maps/rest_maps/api_factory_settings.dart'; import 'package:selfprivacy/logic/api_maps/rest_maps/dns_providers/dns_provider_api_settings.dart'; import 'package:selfprivacy/logic/api_maps/rest_maps/server_providers/server_provider.dart'; @@ -59,8 +59,7 @@ class ServerInstallationCubit extends Cubit { void setServerProviderType(final ServerProvider providerType) async { await repository.saveServerProviderType(providerType); - repository.serverProviderApiFactory = - ApiFactoryCreator.createServerProviderApiFactory( + ApiController.initServerProviderApiFactory( ServerProviderApiFactorySettings( provider: providerType, ), @@ -68,18 +67,19 @@ class ServerInstallationCubit extends Cubit { } ProviderApiTokenValidation serverProviderApiTokenValidation() => - repository.serverProviderApiFactory! + ApiController.currentServerProviderApiFactory! .getServerProvider() .getApiTokenValidation(); - RegExp getDnsProviderApiTokenValidation() => repository.dnsProviderApiFactory! - .getDnsProvider() - .getApiTokenValidation(); + RegExp getDnsProviderApiTokenValidation() => + ApiController.currentDnsProviderApiFactory! + .getDnsProvider() + .getApiTokenValidation(); Future isServerProviderApiTokenValid( final String providerToken, ) async => - repository.serverProviderApiFactory! + ApiController.currentServerProviderApiFactory! .getServerProvider( settings: const ServerProviderApiSettings( isWithToken: false, @@ -89,19 +89,30 @@ class ServerInstallationCubit extends Cubit { Future isDnsProviderApiTokenValid( final String providerToken, - ) async => - repository.dnsProviderApiFactory! - .getDnsProvider( - settings: const DnsProviderApiSettings(isWithToken: false), - ) - .isApiTokenValid(providerToken); + ) async { + if (ApiController.currentDnsProviderApiFactory == null) { + // No other DNS provider is supported for now, + // so it's safe to hardcode Cloudflare + ApiController.initDnsProviderApiFactory( + DnsProviderApiFactorySettings( + provider: DnsProvider.cloudflare, + ), + ); + } + + return ApiController.currentDnsProviderApiFactory! + .getDnsProvider( + settings: const DnsProviderApiSettings(isWithToken: false), + ) + .isApiTokenValid(providerToken); + } Future> fetchAvailableLocations() async { - if (repository.serverProviderApiFactory == null) { + if (ApiController.currentServerProviderApiFactory == null) { return []; } - return repository.serverProviderApiFactory! + return ApiController.currentServerProviderApiFactory! .getServerProvider() .getAvailableLocations(); } @@ -109,11 +120,11 @@ class ServerInstallationCubit extends Cubit { Future> fetchAvailableTypesByLocation( final ServerProviderLocation location, ) async { - if (repository.serverProviderApiFactory == null) { + if (ApiController.currentServerProviderApiFactory == null) { return []; } - return repository.serverProviderApiFactory! + return ApiController.currentServerProviderApiFactory! .getServerProvider() .getServerTypesByLocation(location: location); } @@ -141,8 +152,16 @@ class ServerInstallationCubit extends Cubit { void setServerType(final ServerType serverType) async { await repository.saveServerType(serverType); - repository.serverProviderApiFactory = - ApiFactoryCreator.createServerProviderApiFactory( + ApiController.initServerProviderApiFactory( + ServerProviderApiFactorySettings( + provider: getIt().serverProvider!, + location: serverType.location.identifier, + ), + ); + + // All server providers support volumes for now, + // so it's safe to initialize. + ApiController.initVolumeProviderApiFactory( ServerProviderApiFactorySettings( provider: getIt().serverProvider!, location: serverType.location.identifier, @@ -162,6 +181,7 @@ class ServerInstallationCubit extends Cubit { return; } await repository.saveCloudFlareKey(cloudFlareKey); + emit( (state as ServerInstallationNotFinished) .copyWith(cloudFlareKey: cloudFlareKey), @@ -677,7 +697,7 @@ class ServerInstallationCubit extends Cubit { void clearAppConfig() { closeTimer(); - + ApiController.clearProviderApiFactories(); repository.clearAppConfig(); emit(const ServerInstallationEmpty()); } diff --git a/lib/logic/cubit/server_installation/server_installation_repository.dart b/lib/logic/cubit/server_installation/server_installation_repository.dart index 7e631388..59e4921c 100644 --- a/lib/logic/cubit/server_installation/server_installation_repository.dart +++ b/lib/logic/cubit/server_installation/server_installation_repository.dart @@ -9,14 +9,12 @@ import 'package:hive/hive.dart'; import 'package:pub_semver/pub_semver.dart'; import 'package:selfprivacy/config/get_it_config.dart'; import 'package:selfprivacy/config/hive_config.dart'; -import 'package:selfprivacy/logic/api_maps/rest_maps/api_factory_creator.dart'; +import 'package:selfprivacy/logic/api_maps/rest_maps/api_controller.dart'; import 'package:selfprivacy/logic/api_maps/rest_maps/api_factory_settings.dart'; import 'package:selfprivacy/logic/api_maps/rest_maps/dns_providers/dns_provider.dart'; import 'package:selfprivacy/logic/api_maps/rest_maps/dns_providers/dns_provider_api_settings.dart'; -import 'package:selfprivacy/logic/api_maps/rest_maps/dns_providers/dns_provider_factory.dart'; import 'package:selfprivacy/logic/api_maps/graphql_maps/server_api/server_api.dart'; import 'package:selfprivacy/logic/api_maps/rest_maps/server_providers/server_provider.dart'; -import 'package:selfprivacy/logic/api_maps/rest_maps/server_providers/server_provider_factory.dart'; import 'package:selfprivacy/logic/cubit/server_installation/server_installation_cubit.dart'; import 'package:selfprivacy/logic/models/hive/backblaze_credential.dart'; import 'package:selfprivacy/logic/models/hive/server_details.dart'; @@ -43,13 +41,6 @@ class ServerAuthorizationException implements Exception { class ServerInstallationRepository { Box box = Hive.box(BNames.serverInstallationBox); Box usersBox = Hive.box(BNames.usersBox); - ServerProviderApiFactory? serverProviderApiFactory; - DnsProviderApiFactory? dnsProviderApiFactory = - ApiFactoryCreator.createDnsProviderApiFactory( - DnsProviderApiFactorySettings( - provider: DnsProvider.cloudflare, - ), // TODO: HARDCODE FOR NOW!!! - ); Future load() async { final String? providerApiToken = getIt().serverProviderKey; @@ -67,8 +58,16 @@ class ServerInstallationRepository { if (serverProvider != null || (serverDetails != null && serverDetails.provider != ServerProvider.unknown)) { - serverProviderApiFactory = - ApiFactoryCreator.createServerProviderApiFactory( + ApiController.initServerProviderApiFactory( + ServerProviderApiFactorySettings( + provider: serverProvider ?? serverDetails!.provider, + location: location, + ), + ); + + // All current providers support volumes + // so it's safe to hardcode for now + ApiController.initVolumeProviderApiFactory( ServerProviderApiFactorySettings( provider: serverProvider ?? serverDetails!.provider, location: location, @@ -77,7 +76,7 @@ class ServerInstallationRepository { } if (serverDomain != null && serverDomain.provider != DnsProvider.unknown) { - dnsProviderApiFactory = ApiFactoryCreator.createDnsProviderApiFactory( + ApiController.initDnsProviderApiFactory( DnsProviderApiFactorySettings( provider: serverDomain.provider, ), @@ -168,14 +167,16 @@ class ServerInstallationRepository { ) async { ServerHostingDetails serverDetails; - final ServerProviderApi api = serverProviderApiFactory!.getServerProvider(); - serverDetails = await api.powerOn(); + serverDetails = await ApiController.currentServerProviderApiFactory! + .getServerProvider() + .powerOn(); return serverDetails; } Future getDomainId(final String token, final String domain) async { - final DnsProviderApi dnsProviderApi = dnsProviderApiFactory!.getDnsProvider( + final DnsProviderApi dnsProviderApi = + ApiController.currentDnsProviderApiFactory!.getDnsProvider( settings: DnsProviderApiSettings( isWithToken: false, customToken: token, @@ -244,7 +245,8 @@ class ServerInstallationRepository { required final Future Function(ServerHostingDetails serverDetails) onSuccess, }) async { - final ServerProviderApi api = serverProviderApiFactory!.getServerProvider(); + final ServerProviderApi api = + ApiController.currentServerProviderApiFactory!.getServerProvider(); try { final ServerHostingDetails? serverDetails = await api.createServer( dnsApiToken: cloudFlareKey, @@ -328,9 +330,9 @@ class ServerInstallationRepository { required final void Function() onCancel, }) async { final DnsProviderApi dnsProviderApi = - dnsProviderApiFactory!.getDnsProvider(); + ApiController.currentDnsProviderApiFactory!.getDnsProvider(); final ServerProviderApi serverApi = - serverProviderApiFactory!.getServerProvider(); + ApiController.currentServerProviderApiFactory!.getServerProvider(); await dnsProviderApi.removeSimilarRecords( ip4: serverDetails.ip4, @@ -370,7 +372,7 @@ class ServerInstallationRepository { Future createDkimRecord(final ServerDomain cloudFlareDomain) async { final DnsProviderApi dnsProviderApi = - dnsProviderApiFactory!.getDnsProvider(); + ApiController.currentDnsProviderApiFactory!.getDnsProvider(); final ServerApi api = ServerApi(); late DnsRecord record; @@ -389,15 +391,15 @@ class ServerInstallationRepository { return api.isHttpServerWorking(); } - Future restart() async { - final ServerProviderApi api = serverProviderApiFactory!.getServerProvider(); - return api.restart(); - } + Future restart() async => + ApiController.currentServerProviderApiFactory! + .getServerProvider() + .restart(); - Future powerOn() async { - final ServerProviderApi api = serverProviderApiFactory!.getServerProvider(); - return api.powerOn(); - } + Future powerOn() async => + ApiController.currentServerProviderApiFactory! + .getServerProvider() + .powerOn(); Future getRecoveryCapabilities( final ServerDomain serverDomain, @@ -632,10 +634,10 @@ class ServerInstallationRepository { } } - Future> getServersOnProviderAccount() async { - final ServerProviderApi api = serverProviderApiFactory!.getServerProvider(); - return api.getServers(); - } + Future> getServersOnProviderAccount() async => + ApiController.currentServerProviderApiFactory! + .getServerProvider() + .getServers(); Future saveServerDetails( final ServerHostingDetails serverDetails, @@ -724,13 +726,11 @@ class ServerInstallationRepository { } Future deleteServer(final ServerDomain serverDomain) async { - final ServerProviderApi api = serverProviderApiFactory!.getServerProvider(); - final DnsProviderApi dnsProviderApi = - dnsProviderApiFactory!.getDnsProvider(); - - await api.deleteServer( - domainName: serverDomain.domainName, - ); + await ApiController.currentServerProviderApiFactory! + .getServerProvider() + .deleteServer( + domainName: serverDomain.domainName, + ); await box.put(BNames.hasFinalChecked, false); await box.put(BNames.isServerStarted, false); @@ -739,7 +739,9 @@ class ServerInstallationRepository { await box.put(BNames.isLoading, false); await box.put(BNames.serverDetails, null); - await dnsProviderApi.removeSimilarRecords(domain: serverDomain); + await ApiController.currentDnsProviderApiFactory! + .getDnsProvider() + .removeSimilarRecords(domain: serverDomain); } Future deleteServerRelatedRecords() async { diff --git a/lib/ui/pages/setup/initializing/initializing.dart b/lib/ui/pages/setup/initializing/initializing.dart index 48d95a6d..b81680bc 100644 --- a/lib/ui/pages/setup/initializing/initializing.dart +++ b/lib/ui/pages/setup/initializing/initializing.dart @@ -206,9 +206,8 @@ class InitializingPage extends StatelessWidget { ), const Spacer(), BrandButton.rised( - onPressed: formCubitState.isSubmitting - ? null - : () => context.read().trySubmit(), + onPressed: () => + context.read().trySubmit(), text: 'basis.connect'.tr(), ), const SizedBox(height: 10),