mirror of
https://git.selfprivacy.org/kherel/selfprivacy.org.app.git
synced 2025-03-11 17:24:09 +00:00
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
This commit is contained in:
parent
268816385f
commit
0c4da8eb9f
11 changed files with 173 additions and 153 deletions
lib
logic
api_maps/rest_maps
cubit
dns_records
forms/setup/initializing
metrics
provider_volumes
server_detailed_info
server_installation
ui/pages/setup/initializing
44
lib/logic/api_maps/rest_maps/api_controller.dart
Normal file
44
lib/logic/api_maps/rest_maps/api_controller.dart
Normal file
|
@ -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;
|
||||||
|
}
|
|
@ -59,5 +59,5 @@ abstract class ServerProviderApi extends ApiMap {
|
||||||
/// Whether we request for staging temprorary certificates.
|
/// Whether we request for staging temprorary certificates.
|
||||||
/// Hardcode to 'true' in the middle of testing to not
|
/// Hardcode to 'true' in the middle of testing to not
|
||||||
/// get your domain banned but constant certificate renewal
|
/// get your domain banned but constant certificate renewal
|
||||||
String get stagingAcme => 'false';
|
String get stagingAcme => 'true';
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
import 'package:cubit_form/cubit_form.dart';
|
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_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.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/cubit/app_config_dependent/authentication_dependend_cubit.dart';
|
||||||
import 'package:selfprivacy/logic/models/hive/server_domain.dart';
|
import 'package:selfprivacy/logic/models/hive/server_domain.dart';
|
||||||
import 'package:selfprivacy/logic/models/json/dns_records.dart';
|
import 'package:selfprivacy/logic/models/json/dns_records.dart';
|
||||||
|
@ -20,12 +18,6 @@ class DnsRecordsCubit
|
||||||
const DnsRecordsState(dnsState: DnsRecordsStatus.refreshing),
|
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();
|
final ServerApi api = ServerApi();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
@ -46,7 +38,8 @@ class DnsRecordsCubit
|
||||||
final String? ipAddress =
|
final String? ipAddress =
|
||||||
serverInstallationCubit.state.serverDetails?.ip4;
|
serverInstallationCubit.state.serverDetails?.ip4;
|
||||||
if (domain != null && ipAddress != null) {
|
if (domain != null && ipAddress != null) {
|
||||||
final List<DnsRecord> records = await dnsProviderApiFactory!
|
final List<DnsRecord> records = await ApiController
|
||||||
|
.currentDnsProviderApiFactory!
|
||||||
.getDnsProvider()
|
.getDnsProvider()
|
||||||
.getDnsRecords(domain: domain);
|
.getDnsRecords(domain: domain);
|
||||||
final String? dkimPublicKey =
|
final String? dkimPublicKey =
|
||||||
|
@ -126,7 +119,7 @@ class DnsRecordsCubit
|
||||||
final ServerDomain? domain = serverInstallationCubit.state.serverDomain;
|
final ServerDomain? domain = serverInstallationCubit.state.serverDomain;
|
||||||
final String? ipAddress = serverInstallationCubit.state.serverDetails?.ip4;
|
final String? ipAddress = serverInstallationCubit.state.serverDetails?.ip4;
|
||||||
final DnsProviderApi dnsProviderApi =
|
final DnsProviderApi dnsProviderApi =
|
||||||
dnsProviderApiFactory!.getDnsProvider();
|
ApiController.currentDnsProviderApiFactory!.getDnsProvider();
|
||||||
await dnsProviderApi.removeSimilarRecords(domain: domain!);
|
await dnsProviderApi.removeSimilarRecords(domain: domain!);
|
||||||
await dnsProviderApi.createMultipleDnsRecords(
|
await dnsProviderApi.createMultipleDnsRecords(
|
||||||
domain: domain,
|
domain: domain,
|
||||||
|
|
|
@ -7,16 +7,16 @@ import 'package:selfprivacy/logic/cubit/forms/validations/validations.dart';
|
||||||
|
|
||||||
class DnsProviderFormCubit extends FormCubit {
|
class DnsProviderFormCubit extends FormCubit {
|
||||||
DnsProviderFormCubit(this.initializingCubit) {
|
DnsProviderFormCubit(this.initializingCubit) {
|
||||||
final RegExp regExp = initializingCubit.getDnsProviderApiTokenValidation();
|
//final RegExp regExp = initializingCubit.getDnsProviderApiTokenValidation();
|
||||||
apiKey = FieldCubit(
|
apiKey = FieldCubit(
|
||||||
initalValue: '',
|
initalValue: '',
|
||||||
validations: [
|
validations: [
|
||||||
RequiredStringValidation('validations.required'.tr()),
|
RequiredStringValidation('validations.required'.tr()),
|
||||||
ValidationModel<String>(
|
/*ValidationModel<String>(
|
||||||
regExp.hasMatch,
|
regExp.hasMatch,
|
||||||
'validations.invalid_format'.tr(),
|
'validations.invalid_format'.tr(),
|
||||||
),
|
),*/
|
||||||
LengthStringNotEqualValidation(40)
|
//LengthStringNotEqualValidation(40)
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import 'package:cubit_form/cubit_form.dart';
|
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/cubit/server_installation/server_installation_cubit.dart';
|
||||||
import 'package:selfprivacy/logic/models/hive/server_domain.dart';
|
import 'package:selfprivacy/logic/models/hive/server_domain.dart';
|
||||||
|
|
||||||
|
@ -9,8 +10,7 @@ class DomainSetupCubit extends Cubit<DomainSetupState> {
|
||||||
|
|
||||||
Future<void> load() async {
|
Future<void> load() async {
|
||||||
emit(Loading(LoadingTypes.loadingDomain));
|
emit(Loading(LoadingTypes.loadingDomain));
|
||||||
final List<String> list = await serverInstallationCubit
|
final List<String> list = await ApiController.currentDnsProviderApiFactory!
|
||||||
.repository.dnsProviderApiFactory!
|
|
||||||
.getDnsProvider()
|
.getDnsProvider()
|
||||||
.domainList();
|
.domainList();
|
||||||
if (list.isEmpty) {
|
if (list.isEmpty) {
|
||||||
|
@ -31,8 +31,7 @@ class DomainSetupCubit extends Cubit<DomainSetupState> {
|
||||||
|
|
||||||
emit(Loading(LoadingTypes.saving));
|
emit(Loading(LoadingTypes.saving));
|
||||||
|
|
||||||
final String? zoneId = await serverInstallationCubit
|
final String? zoneId = await ApiController.currentDnsProviderApiFactory!
|
||||||
.repository.dnsProviderApiFactory!
|
|
||||||
.getDnsProvider()
|
.getDnsProvider()
|
||||||
.getZoneId(domainName);
|
.getZoneId(domainName);
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,8 @@
|
||||||
import 'package:selfprivacy/config/get_it_config.dart';
|
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_controller.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/common_enum/common_enum.dart';
|
import 'package:selfprivacy/logic/common_enum/common_enum.dart';
|
||||||
|
|
||||||
import 'package:selfprivacy/logic/cubit/metrics/metrics_cubit.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';
|
import 'package:selfprivacy/logic/models/metrics.dart';
|
||||||
|
|
||||||
class MetricsLoadException implements Exception {
|
class MetricsLoadException implements Exception {
|
||||||
|
@ -14,22 +11,10 @@ class MetricsLoadException implements Exception {
|
||||||
}
|
}
|
||||||
|
|
||||||
class MetricsRepository {
|
class MetricsRepository {
|
||||||
ServerProviderApiFactory? serverProviderApiFactory;
|
|
||||||
|
|
||||||
void _buildServerProviderFactory() {
|
|
||||||
final ServerProvider? providerType = getIt<ApiConfigModel>().serverProvider;
|
|
||||||
final String? location = getIt<ApiConfigModel>().serverLocation;
|
|
||||||
serverProviderApiFactory = ApiFactoryCreator.createServerProviderApiFactory(
|
|
||||||
ServerProviderApiFactorySettings(
|
|
||||||
provider: providerType ?? ServerProvider.unknown,
|
|
||||||
location: location,
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
Future<MetricsLoaded> getMetrics(final Period period) async {
|
Future<MetricsLoaded> getMetrics(final Period period) async {
|
||||||
if (serverProviderApiFactory == null) {
|
final providerApiFactory = ApiController.currentServerProviderApiFactory;
|
||||||
_buildServerProviderFactory();
|
if (providerApiFactory == null) {
|
||||||
|
throw MetricsLoadException('Server Provider data is null');
|
||||||
}
|
}
|
||||||
|
|
||||||
final DateTime end = DateTime.now();
|
final DateTime end = DateTime.now();
|
||||||
|
@ -49,7 +34,7 @@ class MetricsRepository {
|
||||||
|
|
||||||
final serverId = getIt<ApiConfigModel>().serverDetails!.id;
|
final serverId = getIt<ApiConfigModel>().serverDetails!.id;
|
||||||
final ServerMetrics? metrics =
|
final ServerMetrics? metrics =
|
||||||
await serverProviderApiFactory!.getServerProvider().getMetrics(
|
await providerApiFactory.getServerProvider().getMetrics(
|
||||||
serverId,
|
serverId,
|
||||||
start,
|
start,
|
||||||
end,
|
end,
|
||||||
|
|
|
@ -1,9 +1,7 @@
|
||||||
import 'package:easy_localization/easy_localization.dart';
|
import 'package:easy_localization/easy_localization.dart';
|
||||||
import 'package:selfprivacy/config/get_it_config.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/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/server_providers/server_provider_factory.dart';
|
|
||||||
import 'package:selfprivacy/logic/common_enum/common_enum.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/cubit/app_config_dependent/authentication_dependend_cubit.dart';
|
||||||
import 'package:selfprivacy/logic/models/disk_size.dart';
|
import 'package:selfprivacy/logic/models/disk_size.dart';
|
||||||
|
@ -17,30 +15,19 @@ class ApiProviderVolumeCubit
|
||||||
extends ServerInstallationDependendCubit<ApiProviderVolumeState> {
|
extends ServerInstallationDependendCubit<ApiProviderVolumeState> {
|
||||||
ApiProviderVolumeCubit(final ServerInstallationCubit serverInstallationCubit)
|
ApiProviderVolumeCubit(final ServerInstallationCubit serverInstallationCubit)
|
||||||
: super(serverInstallationCubit, const ApiProviderVolumeState.initial());
|
: super(serverInstallationCubit, const ApiProviderVolumeState.initial());
|
||||||
|
|
||||||
VolumeProviderApiFactory? providerApi;
|
|
||||||
|
|
||||||
final ServerApi serverApi = ServerApi();
|
final ServerApi serverApi = ServerApi();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<void> load() async {
|
Future<void> load() async {
|
||||||
if (serverInstallationCubit.state is ServerInstallationFinished) {
|
if (serverInstallationCubit.state is ServerInstallationFinished) {
|
||||||
final serverDetails = getIt<ApiConfigModel>().serverDetails;
|
|
||||||
final serverLocation = getIt<ApiConfigModel>().serverLocation;
|
|
||||||
providerApi = serverDetails == null
|
|
||||||
? null
|
|
||||||
: VolumeApiFactoryCreator.createVolumeProviderApiFactory(
|
|
||||||
ServerProviderApiFactorySettings(
|
|
||||||
location: serverLocation,
|
|
||||||
provider: getIt<ApiConfigModel>().serverDetails!.provider,
|
|
||||||
),
|
|
||||||
);
|
|
||||||
_refetch();
|
_refetch();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<Price?> getPricePerGb() async =>
|
Future<Price?> getPricePerGb() async =>
|
||||||
providerApi!.getVolumeProvider().getPricePerGb();
|
ApiController.currentVolumeProviderApiFactory!
|
||||||
|
.getVolumeProvider()
|
||||||
|
.getPricePerGb();
|
||||||
|
|
||||||
Future<void> refresh() async {
|
Future<void> refresh() async {
|
||||||
emit(const ApiProviderVolumeState([], LoadingStatus.refreshing, false));
|
emit(const ApiProviderVolumeState([], LoadingStatus.refreshing, false));
|
||||||
|
@ -48,12 +35,14 @@ class ApiProviderVolumeCubit
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> _refetch() async {
|
Future<void> _refetch() async {
|
||||||
if (providerApi == null) {
|
if (ApiController.currentVolumeProviderApiFactory == null) {
|
||||||
return emit(const ApiProviderVolumeState([], LoadingStatus.error, false));
|
return emit(const ApiProviderVolumeState([], LoadingStatus.error, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
final List<ServerVolume> volumes =
|
final List<ServerVolume> volumes = await ApiController
|
||||||
await providerApi!.getVolumeProvider().getVolumes();
|
.currentVolumeProviderApiFactory!
|
||||||
|
.getVolumeProvider()
|
||||||
|
.getVolumes();
|
||||||
|
|
||||||
if (volumes.isEmpty) {
|
if (volumes.isEmpty) {
|
||||||
return emit(const ApiProviderVolumeState([], LoadingStatus.error, false));
|
return emit(const ApiProviderVolumeState([], LoadingStatus.error, false));
|
||||||
|
@ -64,14 +53,16 @@ class ApiProviderVolumeCubit
|
||||||
|
|
||||||
Future<void> attachVolume(final DiskVolume volume) async {
|
Future<void> attachVolume(final DiskVolume volume) async {
|
||||||
final ServerHostingDetails server = getIt<ApiConfigModel>().serverDetails!;
|
final ServerHostingDetails server = getIt<ApiConfigModel>().serverDetails!;
|
||||||
await providerApi!
|
await ApiController.currentVolumeProviderApiFactory!
|
||||||
.getVolumeProvider()
|
.getVolumeProvider()
|
||||||
.attachVolume(volume.providerVolume!, server.id);
|
.attachVolume(volume.providerVolume!, server.id);
|
||||||
refresh();
|
refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> detachVolume(final DiskVolume volume) async {
|
Future<void> detachVolume(final DiskVolume volume) async {
|
||||||
await providerApi!.getVolumeProvider().detachVolume(volume.providerVolume!);
|
await ApiController.currentVolumeProviderApiFactory!
|
||||||
|
.getVolumeProvider()
|
||||||
|
.detachVolume(volume.providerVolume!);
|
||||||
refresh();
|
refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -84,7 +75,9 @@ class ApiProviderVolumeCubit
|
||||||
'Starting resize',
|
'Starting resize',
|
||||||
);
|
);
|
||||||
emit(state.copyWith(isResizing: true));
|
emit(state.copyWith(isResizing: true));
|
||||||
final bool resized = await providerApi!.getVolumeProvider().resizeVolume(
|
final bool resized = await ApiController.currentVolumeProviderApiFactory!
|
||||||
|
.getVolumeProvider()
|
||||||
|
.resizeVolume(
|
||||||
volume.providerVolume!,
|
volume.providerVolume!,
|
||||||
newSize,
|
newSize,
|
||||||
);
|
);
|
||||||
|
@ -120,8 +113,10 @@ class ApiProviderVolumeCubit
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> createVolume() async {
|
Future<void> createVolume() async {
|
||||||
final ServerVolume? volume =
|
final ServerVolume? volume = await ApiController
|
||||||
await providerApi!.getVolumeProvider().createVolume();
|
.currentVolumeProviderApiFactory!
|
||||||
|
.getVolumeProvider()
|
||||||
|
.createVolume();
|
||||||
|
|
||||||
final diskVolume = DiskVolume(providerVolume: volume);
|
final diskVolume = DiskVolume(providerVolume: volume);
|
||||||
await attachVolume(diskVolume);
|
await attachVolume(diskVolume);
|
||||||
|
@ -133,7 +128,9 @@ class ApiProviderVolumeCubit
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> deleteVolume(final DiskVolume volume) async {
|
Future<void> deleteVolume(final DiskVolume volume) async {
|
||||||
await providerApi!.getVolumeProvider().deleteVolume(volume.providerVolume!);
|
await ApiController.currentVolumeProviderApiFactory!
|
||||||
|
.getVolumeProvider()
|
||||||
|
.deleteVolume(volume.providerVolume!);
|
||||||
refresh();
|
refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,38 +1,19 @@
|
||||||
import 'package:selfprivacy/config/get_it_config.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/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/server_providers/server_provider_factory.dart';
|
|
||||||
import 'package:selfprivacy/logic/models/auto_upgrade_settings.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/server_metadata.dart';
|
||||||
import 'package:selfprivacy/logic/models/timezone_settings.dart';
|
import 'package:selfprivacy/logic/models/timezone_settings.dart';
|
||||||
|
|
||||||
class ServerDetailsRepository {
|
class ServerDetailsRepository {
|
||||||
ServerApi server = ServerApi();
|
ServerApi server = ServerApi();
|
||||||
ServerProviderApiFactory? serverProviderApiFactory;
|
|
||||||
|
|
||||||
void _buildServerProviderFactory() {
|
|
||||||
final ServerProvider? providerType = getIt<ApiConfigModel>().serverProvider;
|
|
||||||
final String? location = getIt<ApiConfigModel>().serverLocation;
|
|
||||||
serverProviderApiFactory = ApiFactoryCreator.createServerProviderApiFactory(
|
|
||||||
ServerProviderApiFactorySettings(
|
|
||||||
provider: providerType ?? ServerProvider.unknown,
|
|
||||||
location: location,
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
Future<ServerDetailsRepositoryDto> load() async {
|
Future<ServerDetailsRepositoryDto> load() async {
|
||||||
if (serverProviderApiFactory == null) {
|
final serverProviderApi = ApiController.currentServerProviderApiFactory;
|
||||||
_buildServerProviderFactory();
|
|
||||||
}
|
|
||||||
|
|
||||||
final settings = await server.getSystemSettings();
|
final settings = await server.getSystemSettings();
|
||||||
final serverId = getIt<ApiConfigModel>().serverDetails!.id;
|
final serverId = getIt<ApiConfigModel>().serverDetails!.id;
|
||||||
final metadata = await serverProviderApiFactory!
|
final metadata =
|
||||||
.getServerProvider()
|
await serverProviderApi!.getServerProvider().getMetadata(serverId);
|
||||||
.getMetadata(serverId);
|
|
||||||
|
|
||||||
return ServerDetailsRepositoryDto(
|
return ServerDetailsRepositoryDto(
|
||||||
autoUpgradeSettings: settings.autoUpgradeSettings,
|
autoUpgradeSettings: settings.autoUpgradeSettings,
|
||||||
|
|
|
@ -5,7 +5,7 @@ import 'package:easy_localization/easy_localization.dart';
|
||||||
import 'package:equatable/equatable.dart';
|
import 'package:equatable/equatable.dart';
|
||||||
import 'package:selfprivacy/config/get_it_config.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/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/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/dns_providers/dns_provider_api_settings.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.dart';
|
||||||
|
@ -59,8 +59,7 @@ class ServerInstallationCubit extends Cubit<ServerInstallationState> {
|
||||||
|
|
||||||
void setServerProviderType(final ServerProvider providerType) async {
|
void setServerProviderType(final ServerProvider providerType) async {
|
||||||
await repository.saveServerProviderType(providerType);
|
await repository.saveServerProviderType(providerType);
|
||||||
repository.serverProviderApiFactory =
|
ApiController.initServerProviderApiFactory(
|
||||||
ApiFactoryCreator.createServerProviderApiFactory(
|
|
||||||
ServerProviderApiFactorySettings(
|
ServerProviderApiFactorySettings(
|
||||||
provider: providerType,
|
provider: providerType,
|
||||||
),
|
),
|
||||||
|
@ -68,18 +67,19 @@ class ServerInstallationCubit extends Cubit<ServerInstallationState> {
|
||||||
}
|
}
|
||||||
|
|
||||||
ProviderApiTokenValidation serverProviderApiTokenValidation() =>
|
ProviderApiTokenValidation serverProviderApiTokenValidation() =>
|
||||||
repository.serverProviderApiFactory!
|
ApiController.currentServerProviderApiFactory!
|
||||||
.getServerProvider()
|
.getServerProvider()
|
||||||
.getApiTokenValidation();
|
.getApiTokenValidation();
|
||||||
|
|
||||||
RegExp getDnsProviderApiTokenValidation() => repository.dnsProviderApiFactory!
|
RegExp getDnsProviderApiTokenValidation() =>
|
||||||
.getDnsProvider()
|
ApiController.currentDnsProviderApiFactory!
|
||||||
.getApiTokenValidation();
|
.getDnsProvider()
|
||||||
|
.getApiTokenValidation();
|
||||||
|
|
||||||
Future<bool> isServerProviderApiTokenValid(
|
Future<bool> isServerProviderApiTokenValid(
|
||||||
final String providerToken,
|
final String providerToken,
|
||||||
) async =>
|
) async =>
|
||||||
repository.serverProviderApiFactory!
|
ApiController.currentServerProviderApiFactory!
|
||||||
.getServerProvider(
|
.getServerProvider(
|
||||||
settings: const ServerProviderApiSettings(
|
settings: const ServerProviderApiSettings(
|
||||||
isWithToken: false,
|
isWithToken: false,
|
||||||
|
@ -89,19 +89,30 @@ class ServerInstallationCubit extends Cubit<ServerInstallationState> {
|
||||||
|
|
||||||
Future<bool> isDnsProviderApiTokenValid(
|
Future<bool> isDnsProviderApiTokenValid(
|
||||||
final String providerToken,
|
final String providerToken,
|
||||||
) async =>
|
) async {
|
||||||
repository.dnsProviderApiFactory!
|
if (ApiController.currentDnsProviderApiFactory == null) {
|
||||||
.getDnsProvider(
|
// No other DNS provider is supported for now,
|
||||||
settings: const DnsProviderApiSettings(isWithToken: false),
|
// so it's safe to hardcode Cloudflare
|
||||||
)
|
ApiController.initDnsProviderApiFactory(
|
||||||
.isApiTokenValid(providerToken);
|
DnsProviderApiFactorySettings(
|
||||||
|
provider: DnsProvider.cloudflare,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ApiController.currentDnsProviderApiFactory!
|
||||||
|
.getDnsProvider(
|
||||||
|
settings: const DnsProviderApiSettings(isWithToken: false),
|
||||||
|
)
|
||||||
|
.isApiTokenValid(providerToken);
|
||||||
|
}
|
||||||
|
|
||||||
Future<List<ServerProviderLocation>> fetchAvailableLocations() async {
|
Future<List<ServerProviderLocation>> fetchAvailableLocations() async {
|
||||||
if (repository.serverProviderApiFactory == null) {
|
if (ApiController.currentServerProviderApiFactory == null) {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
return repository.serverProviderApiFactory!
|
return ApiController.currentServerProviderApiFactory!
|
||||||
.getServerProvider()
|
.getServerProvider()
|
||||||
.getAvailableLocations();
|
.getAvailableLocations();
|
||||||
}
|
}
|
||||||
|
@ -109,11 +120,11 @@ class ServerInstallationCubit extends Cubit<ServerInstallationState> {
|
||||||
Future<List<ServerType>> fetchAvailableTypesByLocation(
|
Future<List<ServerType>> fetchAvailableTypesByLocation(
|
||||||
final ServerProviderLocation location,
|
final ServerProviderLocation location,
|
||||||
) async {
|
) async {
|
||||||
if (repository.serverProviderApiFactory == null) {
|
if (ApiController.currentServerProviderApiFactory == null) {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
return repository.serverProviderApiFactory!
|
return ApiController.currentServerProviderApiFactory!
|
||||||
.getServerProvider()
|
.getServerProvider()
|
||||||
.getServerTypesByLocation(location: location);
|
.getServerTypesByLocation(location: location);
|
||||||
}
|
}
|
||||||
|
@ -141,8 +152,16 @@ class ServerInstallationCubit extends Cubit<ServerInstallationState> {
|
||||||
void setServerType(final ServerType serverType) async {
|
void setServerType(final ServerType serverType) async {
|
||||||
await repository.saveServerType(serverType);
|
await repository.saveServerType(serverType);
|
||||||
|
|
||||||
repository.serverProviderApiFactory =
|
ApiController.initServerProviderApiFactory(
|
||||||
ApiFactoryCreator.createServerProviderApiFactory(
|
ServerProviderApiFactorySettings(
|
||||||
|
provider: getIt<ApiConfigModel>().serverProvider!,
|
||||||
|
location: serverType.location.identifier,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
// All server providers support volumes for now,
|
||||||
|
// so it's safe to initialize.
|
||||||
|
ApiController.initVolumeProviderApiFactory(
|
||||||
ServerProviderApiFactorySettings(
|
ServerProviderApiFactorySettings(
|
||||||
provider: getIt<ApiConfigModel>().serverProvider!,
|
provider: getIt<ApiConfigModel>().serverProvider!,
|
||||||
location: serverType.location.identifier,
|
location: serverType.location.identifier,
|
||||||
|
@ -162,6 +181,7 @@ class ServerInstallationCubit extends Cubit<ServerInstallationState> {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
await repository.saveCloudFlareKey(cloudFlareKey);
|
await repository.saveCloudFlareKey(cloudFlareKey);
|
||||||
|
|
||||||
emit(
|
emit(
|
||||||
(state as ServerInstallationNotFinished)
|
(state as ServerInstallationNotFinished)
|
||||||
.copyWith(cloudFlareKey: cloudFlareKey),
|
.copyWith(cloudFlareKey: cloudFlareKey),
|
||||||
|
@ -677,7 +697,7 @@ class ServerInstallationCubit extends Cubit<ServerInstallationState> {
|
||||||
|
|
||||||
void clearAppConfig() {
|
void clearAppConfig() {
|
||||||
closeTimer();
|
closeTimer();
|
||||||
|
ApiController.clearProviderApiFactories();
|
||||||
repository.clearAppConfig();
|
repository.clearAppConfig();
|
||||||
emit(const ServerInstallationEmpty());
|
emit(const ServerInstallationEmpty());
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,14 +9,12 @@ import 'package:hive/hive.dart';
|
||||||
import 'package:pub_semver/pub_semver.dart';
|
import 'package:pub_semver/pub_semver.dart';
|
||||||
import 'package:selfprivacy/config/get_it_config.dart';
|
import 'package:selfprivacy/config/get_it_config.dart';
|
||||||
import 'package:selfprivacy/config/hive_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/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.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_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/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.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/cubit/server_installation/server_installation_cubit.dart';
|
||||||
import 'package:selfprivacy/logic/models/hive/backblaze_credential.dart';
|
import 'package:selfprivacy/logic/models/hive/backblaze_credential.dart';
|
||||||
import 'package:selfprivacy/logic/models/hive/server_details.dart';
|
import 'package:selfprivacy/logic/models/hive/server_details.dart';
|
||||||
|
@ -43,13 +41,6 @@ class ServerAuthorizationException implements Exception {
|
||||||
class ServerInstallationRepository {
|
class ServerInstallationRepository {
|
||||||
Box box = Hive.box(BNames.serverInstallationBox);
|
Box box = Hive.box(BNames.serverInstallationBox);
|
||||||
Box<User> usersBox = Hive.box(BNames.usersBox);
|
Box<User> usersBox = Hive.box(BNames.usersBox);
|
||||||
ServerProviderApiFactory? serverProviderApiFactory;
|
|
||||||
DnsProviderApiFactory? dnsProviderApiFactory =
|
|
||||||
ApiFactoryCreator.createDnsProviderApiFactory(
|
|
||||||
DnsProviderApiFactorySettings(
|
|
||||||
provider: DnsProvider.cloudflare,
|
|
||||||
), // TODO: HARDCODE FOR NOW!!!
|
|
||||||
);
|
|
||||||
|
|
||||||
Future<ServerInstallationState> load() async {
|
Future<ServerInstallationState> load() async {
|
||||||
final String? providerApiToken = getIt<ApiConfigModel>().serverProviderKey;
|
final String? providerApiToken = getIt<ApiConfigModel>().serverProviderKey;
|
||||||
|
@ -67,8 +58,16 @@ class ServerInstallationRepository {
|
||||||
if (serverProvider != null ||
|
if (serverProvider != null ||
|
||||||
(serverDetails != null &&
|
(serverDetails != null &&
|
||||||
serverDetails.provider != ServerProvider.unknown)) {
|
serverDetails.provider != ServerProvider.unknown)) {
|
||||||
serverProviderApiFactory =
|
ApiController.initServerProviderApiFactory(
|
||||||
ApiFactoryCreator.createServerProviderApiFactory(
|
ServerProviderApiFactorySettings(
|
||||||
|
provider: serverProvider ?? serverDetails!.provider,
|
||||||
|
location: location,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
// All current providers support volumes
|
||||||
|
// so it's safe to hardcode for now
|
||||||
|
ApiController.initVolumeProviderApiFactory(
|
||||||
ServerProviderApiFactorySettings(
|
ServerProviderApiFactorySettings(
|
||||||
provider: serverProvider ?? serverDetails!.provider,
|
provider: serverProvider ?? serverDetails!.provider,
|
||||||
location: location,
|
location: location,
|
||||||
|
@ -77,7 +76,7 @@ class ServerInstallationRepository {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (serverDomain != null && serverDomain.provider != DnsProvider.unknown) {
|
if (serverDomain != null && serverDomain.provider != DnsProvider.unknown) {
|
||||||
dnsProviderApiFactory = ApiFactoryCreator.createDnsProviderApiFactory(
|
ApiController.initDnsProviderApiFactory(
|
||||||
DnsProviderApiFactorySettings(
|
DnsProviderApiFactorySettings(
|
||||||
provider: serverDomain.provider,
|
provider: serverDomain.provider,
|
||||||
),
|
),
|
||||||
|
@ -168,14 +167,16 @@ class ServerInstallationRepository {
|
||||||
) async {
|
) async {
|
||||||
ServerHostingDetails serverDetails;
|
ServerHostingDetails serverDetails;
|
||||||
|
|
||||||
final ServerProviderApi api = serverProviderApiFactory!.getServerProvider();
|
serverDetails = await ApiController.currentServerProviderApiFactory!
|
||||||
serverDetails = await api.powerOn();
|
.getServerProvider()
|
||||||
|
.powerOn();
|
||||||
|
|
||||||
return serverDetails;
|
return serverDetails;
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<String?> getDomainId(final String token, final String domain) async {
|
Future<String?> getDomainId(final String token, final String domain) async {
|
||||||
final DnsProviderApi dnsProviderApi = dnsProviderApiFactory!.getDnsProvider(
|
final DnsProviderApi dnsProviderApi =
|
||||||
|
ApiController.currentDnsProviderApiFactory!.getDnsProvider(
|
||||||
settings: DnsProviderApiSettings(
|
settings: DnsProviderApiSettings(
|
||||||
isWithToken: false,
|
isWithToken: false,
|
||||||
customToken: token,
|
customToken: token,
|
||||||
|
@ -244,7 +245,8 @@ class ServerInstallationRepository {
|
||||||
required final Future<void> Function(ServerHostingDetails serverDetails)
|
required final Future<void> Function(ServerHostingDetails serverDetails)
|
||||||
onSuccess,
|
onSuccess,
|
||||||
}) async {
|
}) async {
|
||||||
final ServerProviderApi api = serverProviderApiFactory!.getServerProvider();
|
final ServerProviderApi api =
|
||||||
|
ApiController.currentServerProviderApiFactory!.getServerProvider();
|
||||||
try {
|
try {
|
||||||
final ServerHostingDetails? serverDetails = await api.createServer(
|
final ServerHostingDetails? serverDetails = await api.createServer(
|
||||||
dnsApiToken: cloudFlareKey,
|
dnsApiToken: cloudFlareKey,
|
||||||
|
@ -328,9 +330,9 @@ class ServerInstallationRepository {
|
||||||
required final void Function() onCancel,
|
required final void Function() onCancel,
|
||||||
}) async {
|
}) async {
|
||||||
final DnsProviderApi dnsProviderApi =
|
final DnsProviderApi dnsProviderApi =
|
||||||
dnsProviderApiFactory!.getDnsProvider();
|
ApiController.currentDnsProviderApiFactory!.getDnsProvider();
|
||||||
final ServerProviderApi serverApi =
|
final ServerProviderApi serverApi =
|
||||||
serverProviderApiFactory!.getServerProvider();
|
ApiController.currentServerProviderApiFactory!.getServerProvider();
|
||||||
|
|
||||||
await dnsProviderApi.removeSimilarRecords(
|
await dnsProviderApi.removeSimilarRecords(
|
||||||
ip4: serverDetails.ip4,
|
ip4: serverDetails.ip4,
|
||||||
|
@ -370,7 +372,7 @@ class ServerInstallationRepository {
|
||||||
|
|
||||||
Future<void> createDkimRecord(final ServerDomain cloudFlareDomain) async {
|
Future<void> createDkimRecord(final ServerDomain cloudFlareDomain) async {
|
||||||
final DnsProviderApi dnsProviderApi =
|
final DnsProviderApi dnsProviderApi =
|
||||||
dnsProviderApiFactory!.getDnsProvider();
|
ApiController.currentDnsProviderApiFactory!.getDnsProvider();
|
||||||
final ServerApi api = ServerApi();
|
final ServerApi api = ServerApi();
|
||||||
|
|
||||||
late DnsRecord record;
|
late DnsRecord record;
|
||||||
|
@ -389,15 +391,15 @@ class ServerInstallationRepository {
|
||||||
return api.isHttpServerWorking();
|
return api.isHttpServerWorking();
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<ServerHostingDetails> restart() async {
|
Future<ServerHostingDetails> restart() async =>
|
||||||
final ServerProviderApi api = serverProviderApiFactory!.getServerProvider();
|
ApiController.currentServerProviderApiFactory!
|
||||||
return api.restart();
|
.getServerProvider()
|
||||||
}
|
.restart();
|
||||||
|
|
||||||
Future<ServerHostingDetails> powerOn() async {
|
Future<ServerHostingDetails> powerOn() async =>
|
||||||
final ServerProviderApi api = serverProviderApiFactory!.getServerProvider();
|
ApiController.currentServerProviderApiFactory!
|
||||||
return api.powerOn();
|
.getServerProvider()
|
||||||
}
|
.powerOn();
|
||||||
|
|
||||||
Future<ServerRecoveryCapabilities> getRecoveryCapabilities(
|
Future<ServerRecoveryCapabilities> getRecoveryCapabilities(
|
||||||
final ServerDomain serverDomain,
|
final ServerDomain serverDomain,
|
||||||
|
@ -632,10 +634,10 @@ class ServerInstallationRepository {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<List<ServerBasicInfo>> getServersOnProviderAccount() async {
|
Future<List<ServerBasicInfo>> getServersOnProviderAccount() async =>
|
||||||
final ServerProviderApi api = serverProviderApiFactory!.getServerProvider();
|
ApiController.currentServerProviderApiFactory!
|
||||||
return api.getServers();
|
.getServerProvider()
|
||||||
}
|
.getServers();
|
||||||
|
|
||||||
Future<void> saveServerDetails(
|
Future<void> saveServerDetails(
|
||||||
final ServerHostingDetails serverDetails,
|
final ServerHostingDetails serverDetails,
|
||||||
|
@ -724,13 +726,11 @@ class ServerInstallationRepository {
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> deleteServer(final ServerDomain serverDomain) async {
|
Future<void> deleteServer(final ServerDomain serverDomain) async {
|
||||||
final ServerProviderApi api = serverProviderApiFactory!.getServerProvider();
|
await ApiController.currentServerProviderApiFactory!
|
||||||
final DnsProviderApi dnsProviderApi =
|
.getServerProvider()
|
||||||
dnsProviderApiFactory!.getDnsProvider();
|
.deleteServer(
|
||||||
|
domainName: serverDomain.domainName,
|
||||||
await api.deleteServer(
|
);
|
||||||
domainName: serverDomain.domainName,
|
|
||||||
);
|
|
||||||
|
|
||||||
await box.put(BNames.hasFinalChecked, false);
|
await box.put(BNames.hasFinalChecked, false);
|
||||||
await box.put(BNames.isServerStarted, false);
|
await box.put(BNames.isServerStarted, false);
|
||||||
|
@ -739,7 +739,9 @@ class ServerInstallationRepository {
|
||||||
await box.put(BNames.isLoading, false);
|
await box.put(BNames.isLoading, false);
|
||||||
await box.put(BNames.serverDetails, null);
|
await box.put(BNames.serverDetails, null);
|
||||||
|
|
||||||
await dnsProviderApi.removeSimilarRecords(domain: serverDomain);
|
await ApiController.currentDnsProviderApiFactory!
|
||||||
|
.getDnsProvider()
|
||||||
|
.removeSimilarRecords(domain: serverDomain);
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> deleteServerRelatedRecords() async {
|
Future<void> deleteServerRelatedRecords() async {
|
||||||
|
|
|
@ -206,9 +206,8 @@ class InitializingPage extends StatelessWidget {
|
||||||
),
|
),
|
||||||
const Spacer(),
|
const Spacer(),
|
||||||
BrandButton.rised(
|
BrandButton.rised(
|
||||||
onPressed: formCubitState.isSubmitting
|
onPressed: () =>
|
||||||
? null
|
context.read<DnsProviderFormCubit>().trySubmit(),
|
||||||
: () => context.read<DnsProviderFormCubit>().trySubmit(),
|
|
||||||
text: 'basis.connect'.tr(),
|
text: 'basis.connect'.tr(),
|
||||||
),
|
),
|
||||||
const SizedBox(height: 10),
|
const SizedBox(height: 10),
|
||||||
|
|
Loading…
Add table
Reference in a new issue