diff --git a/lib/logic/api_maps/rest_maps/server_providers/digital_ocean/digital_ocean_api.dart b/lib/logic/api_maps/rest_maps/server_providers/digital_ocean/digital_ocean_api.dart index 19d99a6c..f95047ae 100644 --- a/lib/logic/api_maps/rest_maps/server_providers/digital_ocean/digital_ocean_api.dart +++ b/lib/logic/api_maps/rest_maps/server_providers/digital_ocean/digital_ocean_api.dart @@ -326,7 +326,7 @@ class DigitalOceanApi extends ServerProviderApi with VolumeProviderApi { 'image': 'ubuntu-20-04-x64', 'user_data': '#cloud-config\n' 'runcmd:\n' - '- curl https://git.selfprivacy.org/SelfPrivacy/selfprivacy-nixos-infect/raw/branch/providers/digital-ocean/nixos-infect | ' + '- curl https://git.selfprivacy.org/SelfPrivacy/selfprivacy-nixos-infect/raw/branch/testing/final-digital-ocean/nixos-infect | ' "PROVIDER=$infectProviderName DNS_PROVIDER_TYPE=$dnsProviderType STAGING_ACME='$stagingAcme' DOMAIN='$domainName' " "LUSER='${rootUser.login}' ENCODED_PASSWORD='$base64Password' CF_TOKEN=$dnsApiToken DB_PASSWORD=$databasePassword " 'API_TOKEN=$serverApiToken HOSTNAME=$hostName bash 2>&1 | tee /tmp/infect.log', @@ -537,15 +537,18 @@ class DigitalOceanApi extends ServerProviderApi with VolumeProviderApi { return GenericResult(data: locations, success: true); } - Future> getAvailableServerTypes() async { - List types = []; + Future>> + getAvailableServerTypes() async { + final List types = []; final Dio client = await getClient(); try { final Response response = await client.get( '/sizes', ); - types = response.data!['sizes']; + for (final size in response.data!['sizes']) { + types.add(DigitalOceanServerType.fromJson(size)); + } } catch (e) { print(e); return GenericResult( diff --git a/lib/logic/api_maps/rest_maps/server_providers/hetzner/hetzner_api.dart b/lib/logic/api_maps/rest_maps/server_providers/hetzner/hetzner_api.dart index 7dc1bd28..77507cb7 100644 --- a/lib/logic/api_maps/rest_maps/server_providers/hetzner/hetzner_api.dart +++ b/lib/logic/api_maps/rest_maps/server_providers/hetzner/hetzner_api.dart @@ -372,7 +372,7 @@ class HetznerApi extends ServerProviderApi with VolumeProviderApi { 'networks': [], 'user_data': '#cloud-config\n' 'runcmd:\n' - '- curl https://git.selfprivacy.org/SelfPrivacy/selfprivacy-nixos-infect/raw/branch/providers/hetzner/nixos-infect | ' + '- curl https://git.selfprivacy.org/SelfPrivacy/selfprivacy-nixos-infect/raw/branch/testing/final-hetzner/nixos-infect | ' "STAGING_ACME='$stagingAcme' PROVIDER=$infectProviderName DNS_PROVIDER_TYPE=$dnsProviderType " "NIX_CHANNEL=nixos-21.05 DOMAIN='$domainName' LUSER='${rootUser.login}' ENCODED_PASSWORD='$base64Password' " 'CF_TOKEN=$dnsApiToken DB_PASSWORD=$databasePassword API_TOKEN=$serverApiToken HOSTNAME=$hostName bash 2>&1 | ' diff --git a/lib/logic/models/json/digital_ocean_server_info.dart b/lib/logic/models/json/digital_ocean_server_info.dart index ee9e9162..2a6ace8c 100644 --- a/lib/logic/models/json/digital_ocean_server_info.dart +++ b/lib/logic/models/json/digital_ocean_server_info.dart @@ -37,3 +37,29 @@ class DigitalOceanLocation { static DigitalOceanLocation fromJson(final Map json) => _$DigitalOceanLocationFromJson(json); } + +@JsonSerializable() +class DigitalOceanServerType { + DigitalOceanServerType( + this.regions, + this.memory, + this.description, + this.disk, + this.priceMonthly, + this.slug, + this.vcpus, + ); + + final List regions; + final double memory; + final String slug; + final String description; + final int vcpus; + final int disk; + + @JsonKey(name: 'price_monthly') + final double priceMonthly; + + static DigitalOceanServerType fromJson(final Map json) => + _$DigitalOceanServerTypeFromJson(json); +} diff --git a/lib/logic/models/json/digital_ocean_server_info.g.dart b/lib/logic/models/json/digital_ocean_server_info.g.dart index 6a6a9b45..a0e707c9 100644 --- a/lib/logic/models/json/digital_ocean_server_info.g.dart +++ b/lib/logic/models/json/digital_ocean_server_info.g.dart @@ -35,3 +35,27 @@ Map _$DigitalOceanLocationToJson( 'slug': instance.slug, 'name': instance.name, }; + +DigitalOceanServerType _$DigitalOceanServerTypeFromJson( + Map json) => + DigitalOceanServerType( + (json['regions'] as List).map((e) => e as String).toList(), + (json['memory'] as num).toDouble(), + json['description'] as String, + json['disk'] as int, + (json['price_monthly'] as num).toDouble(), + json['slug'] as String, + json['vcpus'] as int, + ); + +Map _$DigitalOceanServerTypeToJson( + DigitalOceanServerType instance) => + { + 'regions': instance.regions, + 'memory': instance.memory, + 'slug': instance.slug, + 'description': instance.description, + 'vcpus': instance.vcpus, + 'disk': instance.disk, + 'price_monthly': instance.priceMonthly, + }; diff --git a/lib/logic/providers/server_providers/digital_ocean.dart b/lib/logic/providers/server_providers/digital_ocean.dart index 53c24df7..98b67a90 100644 --- a/lib/logic/providers/server_providers/digital_ocean.dart +++ b/lib/logic/providers/server_providers/digital_ocean.dart @@ -291,20 +291,19 @@ class DigitalOceanServerProvider extends ServerProvider { ); } - final List rawSizes = result.data; + final List rawSizes = result.data; for (final rawSize in rawSizes) { - for (final rawRegion in rawSize['regions']) { - final ramMb = rawSize['memory'].toDouble(); - if (rawRegion.toString() == location.identifier && ramMb > 1024) { + for (final rawRegion in rawSize.regions) { + if (rawRegion == location.identifier && rawSize.memory > 1024) { types.add( ServerType( - title: rawSize['description'], - identifier: rawSize['slug'], - ram: ramMb / 1024, - cores: rawSize['vcpus'], - disk: DiskSize(byte: rawSize['disk'] * 1024 * 1024 * 1024), + title: rawSize.description, + identifier: rawSize.slug, + ram: rawSize.memory / 1024, + cores: rawSize.vcpus, + disk: DiskSize(byte: rawSize.disk * 1024 * 1024 * 1024), price: Price( - value: rawSize['price_monthly'], + value: rawSize.priceMonthly, currency: 'USD', ), location: location,