diff --git a/assets/translations/en.json b/assets/translations/en.json index 4cc240b9..908ef5e1 100644 --- a/assets/translations/en.json +++ b/assets/translations/en.json @@ -300,6 +300,7 @@ "checks": "Checks have been completed \n{} out of {}" }, "recovering": { + "generic_error": "Operation failed, please try again.", "recovery_main_header": "Connect to an existing server", "domain_recovery_description": "Enter a server domain you want to get access for:", "domain_recover_placeholder": "Your domain", @@ -319,9 +320,9 @@ "fallback_select_provider_console": "Access to the server console of my prodiver.", "authorization_failed": "Couldn't log in with this key", "fallback_select_provider_console_hint": "For example: Hetzner.", - "hetzner_connected": "Connect to Hetzner", - "hetzner_connected_description": "Communication established. Enter Hetzner token with access to {}:", - "hetzner_connected_placeholder": "Hetzner token", + "server_provider_connected": "Connect to your Server Provider", + "server_provider_connected_description": "Communication established. Enter you token with access to {}:", + "server_provider_connected_placeholder": "Server Provider token", "confirm_server": "Confirm server", "confirm_server_description": "Found your server! Confirm it is the right one:", "confirm_server_accept": "Yes! That's it", diff --git a/assets/translations/ru.json b/assets/translations/ru.json index 49c08079..ee056a3d 100644 --- a/assets/translations/ru.json +++ b/assets/translations/ru.json @@ -299,6 +299,7 @@ "checks": "Проверок выполнено: \n{} / {}" }, "recovering": { + "generic_error": "Ошибка проведения операции, попробуйте ещё раз.", "recovery_main_header": "Подключиться к существующему серверу", "domain_recovery_description": "Введите домен, по которому вы хотите получить доступ к серверу:", "domain_recover_placeholder": "Домен", diff --git a/lib/logic/api_maps/graphql_maps/schema/disk_volumes.graphql.dart b/lib/logic/api_maps/graphql_maps/schema/disk_volumes.graphql.dart index 2464c561..359a7a27 100644 --- a/lib/logic/api_maps/graphql_maps/schema/disk_volumes.graphql.dart +++ b/lib/logic/api_maps/graphql_maps/schema/disk_volumes.graphql.dart @@ -4,7 +4,7 @@ import 'package:graphql/client.dart' as graphql; import 'package:json_annotation/json_annotation.dart'; import 'package:selfprivacy/utils/scalars.dart'; import 'schema.graphql.dart'; -import 'services.graphql.dart'; +import 'server_api.graphql.dart'; part 'disk_volumes.graphql.g.dart'; @JsonSerializable(explicitToJson: true) diff --git a/lib/logic/api_maps/graphql_maps/schema/schema.graphql b/lib/logic/api_maps/graphql_maps/schema/schema.graphql index 5da67b2c..ed167742 100644 --- a/lib/logic/api_maps/graphql_maps/schema/schema.graphql +++ b/lib/logic/api_maps/graphql_maps/schema/schema.graphql @@ -173,6 +173,7 @@ input RecoveryKeyLimitsInput { enum ServerProvider { HETZNER + DIGITALOCEAN } type Service { diff --git a/lib/logic/api_maps/graphql_maps/schema/schema.graphql.dart b/lib/logic/api_maps/graphql_maps/schema/schema.graphql.dart index 7187e0e2..11d49a43 100644 --- a/lib/logic/api_maps/graphql_maps/schema/schema.graphql.dart +++ b/lib/logic/api_maps/graphql_maps/schema/schema.graphql.dart @@ -693,6 +693,8 @@ enum Enum$DnsProvider { enum Enum$ServerProvider { @JsonValue('HETZNER') HETZNER, + @JsonValue('DIGITALOCEAN') + DIGITALOCEAN, $unknown } diff --git a/lib/logic/api_maps/graphql_maps/schema/server_api.graphql b/lib/logic/api_maps/graphql_maps/schema/server_api.graphql index 96374fad..d4339094 100644 --- a/lib/logic/api_maps/graphql_maps/schema/server_api.graphql +++ b/lib/logic/api_maps/graphql_maps/schema/server_api.graphql @@ -64,6 +64,14 @@ mutation RebootSystem { } } +query SystemServerProvider { + system { + provider { + provider + } + } +} + query GetApiTokens { api { devices { diff --git a/lib/logic/api_maps/graphql_maps/schema/server_api.graphql.dart b/lib/logic/api_maps/graphql_maps/schema/server_api.graphql.dart index c31a3487..325ee89d 100644 --- a/lib/logic/api_maps/graphql_maps/schema/server_api.graphql.dart +++ b/lib/logic/api_maps/graphql_maps/schema/server_api.graphql.dart @@ -4,7 +4,6 @@ import 'package:graphql/client.dart' as graphql; import 'package:json_annotation/json_annotation.dart'; import 'package:selfprivacy/utils/scalars.dart'; import 'schema.graphql.dart'; -import 'services.graphql.dart'; part 'server_api.graphql.g.dart'; @JsonSerializable(explicitToJson: true) @@ -3178,6 +3177,425 @@ class _CopyWithStubImpl$Mutation$RebootSystem$rebootSystem _res; } +@JsonSerializable(explicitToJson: true) +class Query$SystemServerProvider { + Query$SystemServerProvider({required this.system, required this.$__typename}); + + @override + factory Query$SystemServerProvider.fromJson(Map json) => + _$Query$SystemServerProviderFromJson(json); + + final Query$SystemServerProvider$system system; + + @JsonKey(name: '__typename') + final String $__typename; + + Map toJson() => _$Query$SystemServerProviderToJson(this); + int get hashCode { + final l$system = system; + final l$$__typename = $__typename; + return Object.hashAll([l$system, l$$__typename]); + } + + @override + bool operator ==(Object other) { + if (identical(this, other)) return true; + if (!(other is Query$SystemServerProvider) || + runtimeType != other.runtimeType) return false; + final l$system = system; + final lOther$system = other.system; + if (l$system != lOther$system) return false; + final l$$__typename = $__typename; + final lOther$$__typename = other.$__typename; + if (l$$__typename != lOther$$__typename) return false; + return true; + } +} + +extension UtilityExtension$Query$SystemServerProvider + on Query$SystemServerProvider { + CopyWith$Query$SystemServerProvider + get copyWith => CopyWith$Query$SystemServerProvider(this, (i) => i); +} + +abstract class CopyWith$Query$SystemServerProvider { + factory CopyWith$Query$SystemServerProvider( + Query$SystemServerProvider instance, + TRes Function(Query$SystemServerProvider) then) = + _CopyWithImpl$Query$SystemServerProvider; + + factory CopyWith$Query$SystemServerProvider.stub(TRes res) = + _CopyWithStubImpl$Query$SystemServerProvider; + + TRes call({Query$SystemServerProvider$system? system, String? $__typename}); + CopyWith$Query$SystemServerProvider$system get system; +} + +class _CopyWithImpl$Query$SystemServerProvider + implements CopyWith$Query$SystemServerProvider { + _CopyWithImpl$Query$SystemServerProvider(this._instance, this._then); + + final Query$SystemServerProvider _instance; + + final TRes Function(Query$SystemServerProvider) _then; + + static const _undefined = {}; + + TRes call({Object? system = _undefined, Object? $__typename = _undefined}) => + _then(Query$SystemServerProvider( + system: system == _undefined || system == null + ? _instance.system + : (system as Query$SystemServerProvider$system), + $__typename: $__typename == _undefined || $__typename == null + ? _instance.$__typename + : ($__typename as String))); + CopyWith$Query$SystemServerProvider$system get system { + final local$system = _instance.system; + return CopyWith$Query$SystemServerProvider$system( + local$system, (e) => call(system: e)); + } +} + +class _CopyWithStubImpl$Query$SystemServerProvider + implements CopyWith$Query$SystemServerProvider { + _CopyWithStubImpl$Query$SystemServerProvider(this._res); + + TRes _res; + + call({Query$SystemServerProvider$system? system, String? $__typename}) => + _res; + CopyWith$Query$SystemServerProvider$system get system => + CopyWith$Query$SystemServerProvider$system.stub(_res); +} + +const documentNodeQuerySystemServerProvider = DocumentNode(definitions: [ + OperationDefinitionNode( + type: OperationType.query, + name: NameNode(value: 'SystemServerProvider'), + variableDefinitions: [], + directives: [], + selectionSet: SelectionSetNode(selections: [ + FieldNode( + name: NameNode(value: 'system'), + alias: null, + arguments: [], + directives: [], + selectionSet: SelectionSetNode(selections: [ + FieldNode( + name: NameNode(value: 'provider'), + alias: null, + arguments: [], + directives: [], + selectionSet: SelectionSetNode(selections: [ + FieldNode( + name: NameNode(value: 'provider'), + alias: null, + arguments: [], + directives: [], + selectionSet: null), + FieldNode( + name: NameNode(value: '__typename'), + alias: null, + arguments: [], + directives: [], + selectionSet: null) + ])), + FieldNode( + name: NameNode(value: '__typename'), + alias: null, + arguments: [], + directives: [], + selectionSet: null) + ])), + FieldNode( + name: NameNode(value: '__typename'), + alias: null, + arguments: [], + directives: [], + selectionSet: null) + ])), +]); +Query$SystemServerProvider _parserFn$Query$SystemServerProvider( + Map data) => + Query$SystemServerProvider.fromJson(data); + +class Options$Query$SystemServerProvider + extends graphql.QueryOptions { + Options$Query$SystemServerProvider( + {String? operationName, + graphql.FetchPolicy? fetchPolicy, + graphql.ErrorPolicy? errorPolicy, + graphql.CacheRereadPolicy? cacheRereadPolicy, + Object? optimisticResult, + Duration? pollInterval, + graphql.Context? context}) + : super( + operationName: operationName, + fetchPolicy: fetchPolicy, + errorPolicy: errorPolicy, + cacheRereadPolicy: cacheRereadPolicy, + optimisticResult: optimisticResult, + pollInterval: pollInterval, + context: context, + document: documentNodeQuerySystemServerProvider, + parserFn: _parserFn$Query$SystemServerProvider); +} + +class WatchOptions$Query$SystemServerProvider + extends graphql.WatchQueryOptions { + WatchOptions$Query$SystemServerProvider( + {String? operationName, + graphql.FetchPolicy? fetchPolicy, + graphql.ErrorPolicy? errorPolicy, + graphql.CacheRereadPolicy? cacheRereadPolicy, + Object? optimisticResult, + graphql.Context? context, + Duration? pollInterval, + bool? eagerlyFetchResults, + bool carryForwardDataOnException = true, + bool fetchResults = false}) + : super( + operationName: operationName, + fetchPolicy: fetchPolicy, + errorPolicy: errorPolicy, + cacheRereadPolicy: cacheRereadPolicy, + optimisticResult: optimisticResult, + context: context, + document: documentNodeQuerySystemServerProvider, + pollInterval: pollInterval, + eagerlyFetchResults: eagerlyFetchResults, + carryForwardDataOnException: carryForwardDataOnException, + fetchResults: fetchResults, + parserFn: _parserFn$Query$SystemServerProvider); +} + +class FetchMoreOptions$Query$SystemServerProvider + extends graphql.FetchMoreOptions { + FetchMoreOptions$Query$SystemServerProvider( + {required graphql.UpdateQuery updateQuery}) + : super( + updateQuery: updateQuery, + document: documentNodeQuerySystemServerProvider); +} + +extension ClientExtension$Query$SystemServerProvider on graphql.GraphQLClient { + Future> + query$SystemServerProvider( + [Options$Query$SystemServerProvider? options]) async => + await this.query(options ?? Options$Query$SystemServerProvider()); + graphql.ObservableQuery + watchQuery$SystemServerProvider( + [WatchOptions$Query$SystemServerProvider? options]) => + this.watchQuery(options ?? WatchOptions$Query$SystemServerProvider()); + void writeQuery$SystemServerProvider( + {required Query$SystemServerProvider data, bool broadcast = true}) => + this.writeQuery( + graphql.Request( + operation: graphql.Operation( + document: documentNodeQuerySystemServerProvider)), + data: data.toJson(), + broadcast: broadcast); + Query$SystemServerProvider? readQuery$SystemServerProvider( + {bool optimistic = true}) { + final result = this.readQuery( + graphql.Request( + operation: graphql.Operation( + document: documentNodeQuerySystemServerProvider)), + optimistic: optimistic); + return result == null ? null : Query$SystemServerProvider.fromJson(result); + } +} + +@JsonSerializable(explicitToJson: true) +class Query$SystemServerProvider$system { + Query$SystemServerProvider$system( + {required this.provider, required this.$__typename}); + + @override + factory Query$SystemServerProvider$system.fromJson( + Map json) => + _$Query$SystemServerProvider$systemFromJson(json); + + final Query$SystemServerProvider$system$provider provider; + + @JsonKey(name: '__typename') + final String $__typename; + + Map toJson() => + _$Query$SystemServerProvider$systemToJson(this); + int get hashCode { + final l$provider = provider; + final l$$__typename = $__typename; + return Object.hashAll([l$provider, l$$__typename]); + } + + @override + bool operator ==(Object other) { + if (identical(this, other)) return true; + if (!(other is Query$SystemServerProvider$system) || + runtimeType != other.runtimeType) return false; + final l$provider = provider; + final lOther$provider = other.provider; + if (l$provider != lOther$provider) return false; + final l$$__typename = $__typename; + final lOther$$__typename = other.$__typename; + if (l$$__typename != lOther$$__typename) return false; + return true; + } +} + +extension UtilityExtension$Query$SystemServerProvider$system + on Query$SystemServerProvider$system { + CopyWith$Query$SystemServerProvider$system + get copyWith => + CopyWith$Query$SystemServerProvider$system(this, (i) => i); +} + +abstract class CopyWith$Query$SystemServerProvider$system { + factory CopyWith$Query$SystemServerProvider$system( + Query$SystemServerProvider$system instance, + TRes Function(Query$SystemServerProvider$system) then) = + _CopyWithImpl$Query$SystemServerProvider$system; + + factory CopyWith$Query$SystemServerProvider$system.stub(TRes res) = + _CopyWithStubImpl$Query$SystemServerProvider$system; + + TRes call( + {Query$SystemServerProvider$system$provider? provider, + String? $__typename}); + CopyWith$Query$SystemServerProvider$system$provider get provider; +} + +class _CopyWithImpl$Query$SystemServerProvider$system + implements CopyWith$Query$SystemServerProvider$system { + _CopyWithImpl$Query$SystemServerProvider$system(this._instance, this._then); + + final Query$SystemServerProvider$system _instance; + + final TRes Function(Query$SystemServerProvider$system) _then; + + static const _undefined = {}; + + TRes call( + {Object? provider = _undefined, Object? $__typename = _undefined}) => + _then(Query$SystemServerProvider$system( + provider: provider == _undefined || provider == null + ? _instance.provider + : (provider as Query$SystemServerProvider$system$provider), + $__typename: $__typename == _undefined || $__typename == null + ? _instance.$__typename + : ($__typename as String))); + CopyWith$Query$SystemServerProvider$system$provider get provider { + final local$provider = _instance.provider; + return CopyWith$Query$SystemServerProvider$system$provider( + local$provider, (e) => call(provider: e)); + } +} + +class _CopyWithStubImpl$Query$SystemServerProvider$system + implements CopyWith$Query$SystemServerProvider$system { + _CopyWithStubImpl$Query$SystemServerProvider$system(this._res); + + TRes _res; + + call( + {Query$SystemServerProvider$system$provider? provider, + String? $__typename}) => + _res; + CopyWith$Query$SystemServerProvider$system$provider get provider => + CopyWith$Query$SystemServerProvider$system$provider.stub(_res); +} + +@JsonSerializable(explicitToJson: true) +class Query$SystemServerProvider$system$provider { + Query$SystemServerProvider$system$provider( + {required this.provider, required this.$__typename}); + + @override + factory Query$SystemServerProvider$system$provider.fromJson( + Map json) => + _$Query$SystemServerProvider$system$providerFromJson(json); + + @JsonKey(unknownEnumValue: Enum$ServerProvider.$unknown) + final Enum$ServerProvider provider; + + @JsonKey(name: '__typename') + final String $__typename; + + Map toJson() => + _$Query$SystemServerProvider$system$providerToJson(this); + int get hashCode { + final l$provider = provider; + final l$$__typename = $__typename; + return Object.hashAll([l$provider, l$$__typename]); + } + + @override + bool operator ==(Object other) { + if (identical(this, other)) return true; + if (!(other is Query$SystemServerProvider$system$provider) || + runtimeType != other.runtimeType) return false; + final l$provider = provider; + final lOther$provider = other.provider; + if (l$provider != lOther$provider) return false; + final l$$__typename = $__typename; + final lOther$$__typename = other.$__typename; + if (l$$__typename != lOther$$__typename) return false; + return true; + } +} + +extension UtilityExtension$Query$SystemServerProvider$system$provider + on Query$SystemServerProvider$system$provider { + CopyWith$Query$SystemServerProvider$system$provider< + Query$SystemServerProvider$system$provider> + get copyWith => + CopyWith$Query$SystemServerProvider$system$provider(this, (i) => i); +} + +abstract class CopyWith$Query$SystemServerProvider$system$provider { + factory CopyWith$Query$SystemServerProvider$system$provider( + Query$SystemServerProvider$system$provider instance, + TRes Function(Query$SystemServerProvider$system$provider) then) = + _CopyWithImpl$Query$SystemServerProvider$system$provider; + + factory CopyWith$Query$SystemServerProvider$system$provider.stub(TRes res) = + _CopyWithStubImpl$Query$SystemServerProvider$system$provider; + + TRes call({Enum$ServerProvider? provider, String? $__typename}); +} + +class _CopyWithImpl$Query$SystemServerProvider$system$provider + implements CopyWith$Query$SystemServerProvider$system$provider { + _CopyWithImpl$Query$SystemServerProvider$system$provider( + this._instance, this._then); + + final Query$SystemServerProvider$system$provider _instance; + + final TRes Function(Query$SystemServerProvider$system$provider) _then; + + static const _undefined = {}; + + TRes call( + {Object? provider = _undefined, Object? $__typename = _undefined}) => + _then(Query$SystemServerProvider$system$provider( + provider: provider == _undefined || provider == null + ? _instance.provider + : (provider as Enum$ServerProvider), + $__typename: $__typename == _undefined || $__typename == null + ? _instance.$__typename + : ($__typename as String))); +} + +class _CopyWithStubImpl$Query$SystemServerProvider$system$provider + implements CopyWith$Query$SystemServerProvider$system$provider { + _CopyWithStubImpl$Query$SystemServerProvider$system$provider(this._res); + + TRes _res; + + call({Enum$ServerProvider? provider, String? $__typename}) => _res; +} + @JsonSerializable(explicitToJson: true) class Query$GetApiTokens { Query$GetApiTokens({required this.api, required this.$__typename}); diff --git a/lib/logic/api_maps/graphql_maps/schema/server_api.graphql.g.dart b/lib/logic/api_maps/graphql_maps/schema/server_api.graphql.g.dart index 525f8d64..f0ec390c 100644 --- a/lib/logic/api_maps/graphql_maps/schema/server_api.graphql.g.dart +++ b/lib/logic/api_maps/graphql_maps/schema/server_api.graphql.g.dart @@ -330,6 +330,58 @@ Map _$Mutation$RebootSystem$rebootSystemToJson( '__typename': instance.$__typename, }; +Query$SystemServerProvider _$Query$SystemServerProviderFromJson( + Map json) => + Query$SystemServerProvider( + system: Query$SystemServerProvider$system.fromJson( + json['system'] as Map), + $__typename: json['__typename'] as String, + ); + +Map _$Query$SystemServerProviderToJson( + Query$SystemServerProvider instance) => + { + 'system': instance.system.toJson(), + '__typename': instance.$__typename, + }; + +Query$SystemServerProvider$system _$Query$SystemServerProvider$systemFromJson( + Map json) => + Query$SystemServerProvider$system( + provider: Query$SystemServerProvider$system$provider.fromJson( + json['provider'] as Map), + $__typename: json['__typename'] as String, + ); + +Map _$Query$SystemServerProvider$systemToJson( + Query$SystemServerProvider$system instance) => + { + 'provider': instance.provider.toJson(), + '__typename': instance.$__typename, + }; + +Query$SystemServerProvider$system$provider + _$Query$SystemServerProvider$system$providerFromJson( + Map json) => + Query$SystemServerProvider$system$provider( + provider: $enumDecode(_$Enum$ServerProviderEnumMap, json['provider'], + unknownValue: Enum$ServerProvider.$unknown), + $__typename: json['__typename'] as String, + ); + +Map _$Query$SystemServerProvider$system$providerToJson( + Query$SystemServerProvider$system$provider instance) => + { + 'provider': _$Enum$ServerProviderEnumMap[instance.provider]!, + '__typename': instance.$__typename, + }; + +const _$Enum$ServerProviderEnumMap = { + Enum$ServerProvider.HETZNER: 'HETZNER', + Enum$ServerProvider.DIGITALOCEAN: 'DIGITALOCEAN', + Enum$ServerProvider.$unknown: r'$unknown', +}; + Query$GetApiTokens _$Query$GetApiTokensFromJson(Map json) => Query$GetApiTokens( api: Query$GetApiTokens$api.fromJson(json['api'] as Map), diff --git a/lib/logic/api_maps/graphql_maps/schema/server_settings.graphql.dart b/lib/logic/api_maps/graphql_maps/schema/server_settings.graphql.dart index 5d036afa..a077cf7d 100644 --- a/lib/logic/api_maps/graphql_maps/schema/server_settings.graphql.dart +++ b/lib/logic/api_maps/graphql_maps/schema/server_settings.graphql.dart @@ -3,7 +3,7 @@ import 'package:gql/ast.dart'; import 'package:graphql/client.dart' as graphql; import 'package:json_annotation/json_annotation.dart'; import 'schema.graphql.dart'; -import 'services.graphql.dart'; +import 'server_api.graphql.dart'; part 'server_settings.graphql.g.dart'; @JsonSerializable(explicitToJson: true) diff --git a/lib/logic/api_maps/graphql_maps/schema/services.graphql.dart b/lib/logic/api_maps/graphql_maps/schema/services.graphql.dart index a31058c4..92138d02 100644 --- a/lib/logic/api_maps/graphql_maps/schema/services.graphql.dart +++ b/lib/logic/api_maps/graphql_maps/schema/services.graphql.dart @@ -4,6 +4,7 @@ import 'package:graphql/client.dart' as graphql; import 'package:json_annotation/json_annotation.dart'; import 'package:selfprivacy/utils/scalars.dart'; import 'schema.graphql.dart'; +import 'server_api.graphql.dart'; part 'services.graphql.g.dart'; @JsonSerializable(explicitToJson: true) diff --git a/lib/logic/api_maps/graphql_maps/schema/users.graphql.dart b/lib/logic/api_maps/graphql_maps/schema/users.graphql.dart index 18a15aa9..ce846b30 100644 --- a/lib/logic/api_maps/graphql_maps/schema/users.graphql.dart +++ b/lib/logic/api_maps/graphql_maps/schema/users.graphql.dart @@ -3,7 +3,7 @@ import 'package:gql/ast.dart'; import 'package:graphql/client.dart' as graphql; import 'package:json_annotation/json_annotation.dart'; import 'schema.graphql.dart'; -import 'services.graphql.dart'; +import 'server_api.graphql.dart'; part 'users.graphql.g.dart'; @JsonSerializable(explicitToJson: true) diff --git a/lib/logic/api_maps/graphql_maps/server_api/server_api.dart b/lib/logic/api_maps/graphql_maps/server_api/server_api.dart index c2cda13b..be5402ab 100644 --- a/lib/logic/api_maps/graphql_maps/server_api/server_api.dart +++ b/lib/logic/api_maps/graphql_maps/server_api/server_api.dart @@ -9,6 +9,7 @@ import 'package:selfprivacy/logic/api_maps/graphql_maps/schema/services.graphql. import 'package:selfprivacy/logic/api_maps/graphql_maps/schema/users.graphql.dart'; import 'package:selfprivacy/logic/models/auto_upgrade_settings.dart'; import 'package:selfprivacy/logic/models/hive/backblaze_bucket.dart'; +import 'package:selfprivacy/logic/models/hive/server_details.dart'; import 'package:selfprivacy/logic/models/hive/user.dart'; import 'package:selfprivacy/logic/models/json/api_token.dart'; import 'package:selfprivacy/logic/models/json/backup.dart'; @@ -88,6 +89,31 @@ class ServerApi extends ApiMap return apiVersion; } + Future getServerProviderType() async { + QueryResult response; + ServerProvider providerType = ServerProvider.unknown; + + try { + final GraphQLClient client = await getClient(); + response = await client.query$SystemServerProvider(); + if (response.hasException) { + print(response.exception.toString()); + } + final rawProviderValue = response.data!['system']['provider']['provider']; + switch (rawProviderValue) { + case 'HETZNER': + providerType = ServerProvider.hetzner; + break; + case 'DIGITALOCEAN': + providerType = ServerProvider.digitalOcean; + break; + } + } catch (e) { + print(e); + } + return providerType; + } + Future isUsingBinds() async { QueryResult response; bool usesBinds = false; diff --git a/lib/logic/cubit/server_installation/server_installation_cubit.dart b/lib/logic/cubit/server_installation/server_installation_cubit.dart index 9e82a780..3b972ac1 100644 --- a/lib/logic/cubit/server_installation/server_installation_cubit.dart +++ b/lib/logic/cubit/server_installation/server_installation_cubit.dart @@ -4,6 +4,7 @@ import 'package:flutter_bloc/flutter_bloc.dart'; 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_factory_settings.dart'; import 'package:selfprivacy/logic/api_maps/rest_maps/dns_providers/dns_provider_api_settings.dart'; @@ -478,6 +479,16 @@ class ServerInstallationCubit extends Cubit { token, dataState.recoveryCapabilities, ); + final ServerProvider provider = await ServerApi( + customToken: token, + isWithToken: true, + ).getServerProviderType(); + if (provider == ServerProvider.unknown) { + getIt() + .showSnackBar('recovering.generic_error'.tr()); + return; + } + setServerProviderType(provider); await repository.saveServerDetails(serverDetails); emit( dataState.copyWith( diff --git a/lib/ui/pages/setup/recovering/recovery_routing.dart b/lib/ui/pages/setup/recovering/recovery_routing.dart index c6f56560..c2fb1d13 100644 --- a/lib/ui/pages/setup/recovering/recovery_routing.dart +++ b/lib/ui/pages/setup/recovering/recovery_routing.dart @@ -13,7 +13,7 @@ import 'package:selfprivacy/ui/pages/setup/recovering/recover_by_new_device_key. import 'package:selfprivacy/ui/pages/setup/recovering/recovery_confirm_backblaze.dart'; import 'package:selfprivacy/ui/pages/setup/recovering/recovery_confirm_cloudflare.dart'; import 'package:selfprivacy/ui/pages/setup/recovering/recovery_confirm_server.dart'; -import 'package:selfprivacy/ui/pages/setup/recovering/recovery_hentzner_connected.dart'; +import 'package:selfprivacy/ui/pages/setup/recovering/recovery_server_provider_connected.dart'; import 'package:selfprivacy/ui/pages/setup/recovering/recovery_method_select.dart'; import 'package:selfprivacy/utils/route_transitions/basic.dart'; @@ -48,7 +48,7 @@ class RecoveryRouting extends StatelessWidget { currentPage = const RecoverByOldToken(); break; case RecoveryStep.serverProviderToken: - currentPage = const RecoveryHetznerConnected(); + currentPage = const RecoveryServerProviderConnected(); break; case RecoveryStep.serverSelection: currentPage = const RecoveryConfirmServer(); diff --git a/lib/ui/pages/setup/recovering/recovery_hentzner_connected.dart b/lib/ui/pages/setup/recovering/recovery_server_provider_connected.dart similarity index 89% rename from lib/ui/pages/setup/recovering/recovery_hentzner_connected.dart rename to lib/ui/pages/setup/recovering/recovery_server_provider_connected.dart index 76951395..152e4308 100644 --- a/lib/ui/pages/setup/recovering/recovery_hentzner_connected.dart +++ b/lib/ui/pages/setup/recovering/recovery_server_provider_connected.dart @@ -10,8 +10,8 @@ import 'package:cubit_form/cubit_form.dart'; import 'package:selfprivacy/logic/cubit/server_installation/server_installation_cubit.dart'; import 'package:selfprivacy/ui/components/brand_md/brand_md.dart'; -class RecoveryHetznerConnected extends StatelessWidget { - const RecoveryHetznerConnected({super.key}); +class RecoveryServerProviderConnected extends StatelessWidget { + const RecoveryServerProviderConnected({super.key}); @override Widget build(final BuildContext context) { @@ -26,8 +26,8 @@ class RecoveryHetznerConnected extends StatelessWidget { context.watch().state; return BrandHeroScreen( - heroTitle: 'recovering.hetzner_connected'.tr(), - heroSubtitle: 'recovering.hetzner_connected_description'.tr( + heroTitle: 'recovering.server_provider_connected'.tr(), + heroSubtitle: 'recovering.server_provider_connected_description'.tr( args: [appConfig.state.serverDomain?.domainName ?? 'your domain'], ), hasBackButton: true, @@ -40,7 +40,8 @@ class RecoveryHetznerConnected extends StatelessWidget { formFieldCubit: context.read().apiKey, decoration: InputDecoration( border: const OutlineInputBorder(), - labelText: 'recovering.hetzner_connected_placeholder'.tr(), + labelText: + 'recovering.server_provider_connected_placeholder'.tr(), ), ), const SizedBox(height: 16),