mirror of
https://git.selfprivacy.org/kherel/selfprivacy.org.app.git
synced 2025-02-02 14:16:58 +00:00
fix(initializing): Make provider and server type picking work
This commit is contained in:
parent
eebff47d0c
commit
cb1fe6eafd
|
@ -87,6 +87,9 @@ class BNames {
|
||||||
/// A String field of [serverInstallationBox] box.
|
/// A String field of [serverInstallationBox] box.
|
||||||
static String hetznerKey = 'hetznerKey';
|
static String hetznerKey = 'hetznerKey';
|
||||||
|
|
||||||
|
/// A String field of [serverInstallationBox] box.
|
||||||
|
static String serverProvider = 'serverProvider';
|
||||||
|
|
||||||
/// A String field of [serverLocation] box.
|
/// A String field of [serverLocation] box.
|
||||||
static String serverLocation = 'serverLocation';
|
static String serverLocation = 'serverLocation';
|
||||||
|
|
||||||
|
|
|
@ -18,9 +18,9 @@ class ApiFactoryCreator {
|
||||||
) {
|
) {
|
||||||
switch (settings.provider) {
|
switch (settings.provider) {
|
||||||
case ServerProvider.hetzner:
|
case ServerProvider.hetzner:
|
||||||
return HetznerApiFactory();
|
return HetznerApiFactory(region: settings.location);
|
||||||
case ServerProvider.digitalOcean:
|
case ServerProvider.digitalOcean:
|
||||||
return DigitalOceanApiFactory();
|
return DigitalOceanApiFactory(region: settings.location);
|
||||||
case ServerProvider.unknown:
|
case ServerProvider.unknown:
|
||||||
throw UnknownApiProviderException('Unknown server provider');
|
throw UnknownApiProviderException('Unknown server provider');
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,13 +6,17 @@ import 'package:selfprivacy/logic/api_maps/rest_maps/server_providers/volume_pro
|
||||||
|
|
||||||
class DigitalOceanApiFactory extends ServerProviderApiFactory
|
class DigitalOceanApiFactory extends ServerProviderApiFactory
|
||||||
with VolumeProviderApiFactory {
|
with VolumeProviderApiFactory {
|
||||||
|
DigitalOceanApiFactory({this.region});
|
||||||
|
|
||||||
|
final String? region;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
ServerProviderApi getServerProvider({
|
ServerProviderApi getServerProvider({
|
||||||
final ServerProviderApiSettings settings =
|
final ServerProviderApiSettings settings =
|
||||||
const ServerProviderApiSettings(),
|
const ServerProviderApiSettings(),
|
||||||
}) =>
|
}) =>
|
||||||
DigitalOceanApi(
|
DigitalOceanApi(
|
||||||
region: settings.region,
|
region: settings.region ?? region,
|
||||||
hasLogger: settings.hasLogger,
|
hasLogger: settings.hasLogger,
|
||||||
isWithToken: settings.isWithToken,
|
isWithToken: settings.isWithToken,
|
||||||
);
|
);
|
||||||
|
@ -23,7 +27,7 @@ class DigitalOceanApiFactory extends ServerProviderApiFactory
|
||||||
const ServerProviderApiSettings(),
|
const ServerProviderApiSettings(),
|
||||||
}) =>
|
}) =>
|
||||||
DigitalOceanApi(
|
DigitalOceanApi(
|
||||||
region: settings.region,
|
region: settings.region ?? region,
|
||||||
hasLogger: settings.hasLogger,
|
hasLogger: settings.hasLogger,
|
||||||
isWithToken: settings.isWithToken,
|
isWithToken: settings.isWithToken,
|
||||||
);
|
);
|
||||||
|
|
|
@ -187,8 +187,9 @@ class HetznerApi extends ServerProviderApi with VolumeProviderApi {
|
||||||
return volumes;
|
return volumes;
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
Future<ServerVolume?> getVolume(
|
||||||
Future<ServerVolume?> getVolume(final String volumeId) async {
|
final String volumeId,
|
||||||
|
) async {
|
||||||
ServerVolume? volume;
|
ServerVolume? volume;
|
||||||
|
|
||||||
final Response dbGetResponse;
|
final Response dbGetResponse;
|
||||||
|
@ -230,7 +231,9 @@ class HetznerApi extends ServerProviderApi with VolumeProviderApi {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<bool> attachVolume(
|
Future<bool> attachVolume(
|
||||||
final ServerVolume volume, final int serverId) async {
|
final ServerVolume volume,
|
||||||
|
final int serverId,
|
||||||
|
) async {
|
||||||
bool success = false;
|
bool success = false;
|
||||||
|
|
||||||
final Response dbPostResponse;
|
final Response dbPostResponse;
|
||||||
|
@ -576,14 +579,16 @@ class HetznerApi extends ServerProviderApi with VolumeProviderApi {
|
||||||
'/locations',
|
'/locations',
|
||||||
);
|
);
|
||||||
|
|
||||||
locations = response.data!['locations'].map<ServerProviderLocation>(
|
locations = response.data!['locations']
|
||||||
|
.map<ServerProviderLocation>(
|
||||||
(final location) => ServerProviderLocation(
|
(final location) => ServerProviderLocation(
|
||||||
title: location['city'],
|
title: location['city'],
|
||||||
description: location['description'],
|
description: location['description'],
|
||||||
flag: getEmojiFlag(location['country']),
|
flag: getEmojiFlag(location['country']),
|
||||||
identifier: location['name'],
|
identifier: location['name'],
|
||||||
),
|
),
|
||||||
);
|
)
|
||||||
|
.toList();
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
print(e);
|
print(e);
|
||||||
} finally {
|
} finally {
|
||||||
|
@ -600,7 +605,7 @@ class HetznerApi extends ServerProviderApi with VolumeProviderApi {
|
||||||
final List<ServerType> types = [];
|
final List<ServerType> types = [];
|
||||||
|
|
||||||
final Dio client = await getClient();
|
final Dio client = await getClient();
|
||||||
try {
|
//try {
|
||||||
final Response response = await client.get(
|
final Response response = await client.get(
|
||||||
'/server_types',
|
'/server_types',
|
||||||
);
|
);
|
||||||
|
@ -616,7 +621,7 @@ class HetznerApi extends ServerProviderApi with VolumeProviderApi {
|
||||||
cores: rawType['cores'],
|
cores: rawType['cores'],
|
||||||
disk: DiskSize(byte: rawType['disk'] * 1024 * 1024 * 1024),
|
disk: DiskSize(byte: rawType['disk'] * 1024 * 1024 * 1024),
|
||||||
price: Price(
|
price: Price(
|
||||||
value: rawPrice['price_monthly']['gross'],
|
value: double.parse(rawPrice['price_monthly']['gross']),
|
||||||
currency: 'EUR',
|
currency: 'EUR',
|
||||||
),
|
),
|
||||||
location: location,
|
location: location,
|
||||||
|
@ -625,11 +630,11 @@ class HetznerApi extends ServerProviderApi with VolumeProviderApi {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (e) {
|
//} catch (e) {
|
||||||
print(e);
|
//print(e);
|
||||||
} finally {
|
//} finally {
|
||||||
close(client);
|
close(client);
|
||||||
}
|
//}
|
||||||
|
|
||||||
return types;
|
return types;
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,7 +55,8 @@ class ServerInstallationCubit extends Cubit<ServerInstallationState> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void setServerProviderType(final ServerProvider providerType) {
|
void setServerProviderType(final ServerProvider providerType) async {
|
||||||
|
await repository.saveServerProviderType(providerType);
|
||||||
repository.serverProviderApiFactory =
|
repository.serverProviderApiFactory =
|
||||||
ApiFactoryCreator.createServerProviderApiFactory(
|
ApiFactoryCreator.createServerProviderApiFactory(
|
||||||
ServerProviderApiFactorySettings(
|
ServerProviderApiFactorySettings(
|
||||||
|
@ -117,7 +118,6 @@ class ServerInstallationCubit extends Cubit<ServerInstallationState> {
|
||||||
|
|
||||||
void setServerProviderKey(final String serverProviderKey) async {
|
void setServerProviderKey(final String serverProviderKey) async {
|
||||||
await repository.saveServerProviderKey(serverProviderKey);
|
await repository.saveServerProviderKey(serverProviderKey);
|
||||||
|
|
||||||
if (state is ServerInstallationRecovery) {
|
if (state is ServerInstallationRecovery) {
|
||||||
emit(
|
emit(
|
||||||
(state as ServerInstallationRecovery).copyWith(
|
(state as ServerInstallationRecovery).copyWith(
|
||||||
|
@ -141,7 +141,7 @@ class ServerInstallationCubit extends Cubit<ServerInstallationState> {
|
||||||
repository.serverProviderApiFactory =
|
repository.serverProviderApiFactory =
|
||||||
ApiFactoryCreator.createServerProviderApiFactory(
|
ApiFactoryCreator.createServerProviderApiFactory(
|
||||||
ServerProviderApiFactorySettings(
|
ServerProviderApiFactorySettings(
|
||||||
provider: getIt<ApiConfigModel>().serverDetails!.provider,
|
provider: getIt<ApiConfigModel>().serverProvider!,
|
||||||
location: serverType.location.identifier,
|
location: serverType.location.identifier,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
|
@ -683,6 +683,10 @@ class ServerInstallationRepository {
|
||||||
getIt<ApiConfigModel>().init();
|
getIt<ApiConfigModel>().init();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<void> saveServerProviderType(final ServerProvider type) async {
|
||||||
|
await getIt<ApiConfigModel>().storeServerProviderType(type);
|
||||||
|
}
|
||||||
|
|
||||||
Future<void> saveServerProviderKey(final String key) async {
|
Future<void> saveServerProviderKey(final String key) async {
|
||||||
await getIt<ApiConfigModel>().storeServerProviderKey(key);
|
await getIt<ApiConfigModel>().storeServerProviderKey(key);
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,6 +13,7 @@ class ApiConfigModel {
|
||||||
String? get serverLocation => _serverLocation;
|
String? get serverLocation => _serverLocation;
|
||||||
String? get serverType => _serverType;
|
String? get serverType => _serverType;
|
||||||
String? get cloudFlareKey => _cloudFlareKey;
|
String? get cloudFlareKey => _cloudFlareKey;
|
||||||
|
ServerProvider? get serverProvider => _serverProvider;
|
||||||
BackblazeCredential? get backblazeCredential => _backblazeCredential;
|
BackblazeCredential? get backblazeCredential => _backblazeCredential;
|
||||||
ServerDomain? get serverDomain => _serverDomain;
|
ServerDomain? get serverDomain => _serverDomain;
|
||||||
BackblazeBucket? get backblazeBucket => _backblazeBucket;
|
BackblazeBucket? get backblazeBucket => _backblazeBucket;
|
||||||
|
@ -21,11 +22,17 @@ class ApiConfigModel {
|
||||||
String? _serverLocation;
|
String? _serverLocation;
|
||||||
String? _cloudFlareKey;
|
String? _cloudFlareKey;
|
||||||
String? _serverType;
|
String? _serverType;
|
||||||
|
ServerProvider? _serverProvider;
|
||||||
ServerHostingDetails? _serverDetails;
|
ServerHostingDetails? _serverDetails;
|
||||||
BackblazeCredential? _backblazeCredential;
|
BackblazeCredential? _backblazeCredential;
|
||||||
ServerDomain? _serverDomain;
|
ServerDomain? _serverDomain;
|
||||||
BackblazeBucket? _backblazeBucket;
|
BackblazeBucket? _backblazeBucket;
|
||||||
|
|
||||||
|
Future<void> storeServerProviderType(final ServerProvider value) async {
|
||||||
|
await _box.put(BNames.serverProvider, value);
|
||||||
|
_serverProvider = value;
|
||||||
|
}
|
||||||
|
|
||||||
Future<void> storeServerProviderKey(final String value) async {
|
Future<void> storeServerProviderKey(final String value) async {
|
||||||
await _box.put(BNames.hetznerKey, value);
|
await _box.put(BNames.hetznerKey, value);
|
||||||
_serverProviderKey = value;
|
_serverProviderKey = value;
|
||||||
|
|
|
@ -72,7 +72,8 @@ class InitializingPage extends StatelessWidget {
|
||||||
)
|
)
|
||||||
: ProgressBar(
|
: ProgressBar(
|
||||||
steps: const [
|
steps: const [
|
||||||
'Hetzner',
|
'Hosting',
|
||||||
|
'Server Type',
|
||||||
'CloudFlare',
|
'CloudFlare',
|
||||||
'Backblaze',
|
'Backblaze',
|
||||||
'Domain',
|
'Domain',
|
||||||
|
|
|
@ -114,9 +114,7 @@ class ProviderInputDataPage extends StatelessWidget {
|
||||||
const Spacer(),
|
const Spacer(),
|
||||||
FilledButton(
|
FilledButton(
|
||||||
title: 'basis.connect'.tr(),
|
title: 'basis.connect'.tr(),
|
||||||
onPressed: () => providerCubit.state.isSubmitting
|
onPressed: () => providerCubit.trySubmit(),
|
||||||
? null
|
|
||||||
: () => providerCubit.trySubmit(),
|
|
||||||
),
|
),
|
||||||
const SizedBox(height: 10),
|
const SizedBox(height: 10),
|
||||||
OutlinedButton(
|
OutlinedButton(
|
||||||
|
|
|
@ -147,14 +147,14 @@ class SelectTypePage extends StatelessWidget {
|
||||||
children: [
|
children: [
|
||||||
Text(type.title),
|
Text(type.title),
|
||||||
const SizedBox(height: 8),
|
const SizedBox(height: 8),
|
||||||
Text('cores: $type.cores'),
|
Text('cores: $type.cores.toString()'),
|
||||||
const SizedBox(height: 8),
|
const SizedBox(height: 8),
|
||||||
Text('ram: $type.ram'),
|
Text('ram: $type.ram.toString()'),
|
||||||
const SizedBox(height: 8),
|
const SizedBox(height: 8),
|
||||||
Text('disk: $type.disk.gibibyte'),
|
Text('disk: $type.disk.gibibyte.toString()'),
|
||||||
const SizedBox(height: 8),
|
const SizedBox(height: 8),
|
||||||
Text(
|
Text(
|
||||||
'price: $type.price.value $type.price.currency',
|
'price: $type.price.value.toString() $type.price.currency',
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
|
Loading…
Reference in a new issue