mirror of
https://git.selfprivacy.org/kherel/selfprivacy.org.app.git
synced 2025-02-02 14:16:58 +00:00
feat(region): Implement endpoints for listing available types by region
This commit is contained in:
parent
e032bd8a78
commit
b30e372322
|
@ -5,6 +5,7 @@ import 'package:dio/dio.dart';
|
|||
import 'package:selfprivacy/config/get_it_config.dart';
|
||||
import 'package:selfprivacy/logic/api_maps/rest_maps/server_providers/volume_provider.dart';
|
||||
import 'package:selfprivacy/logic/api_maps/rest_maps/server_providers/server_provider.dart';
|
||||
import 'package:selfprivacy/logic/models/disk_size.dart';
|
||||
import 'package:selfprivacy/logic/models/hive/server_domain.dart';
|
||||
import 'package:selfprivacy/logic/models/json/hetzner_server_info.dart';
|
||||
import 'package:selfprivacy/logic/models/hive/server_details.dart';
|
||||
|
@ -12,6 +13,7 @@ import 'package:selfprivacy/logic/models/hive/user.dart';
|
|||
import 'package:selfprivacy/logic/models/price.dart';
|
||||
import 'package:selfprivacy/logic/models/server_basic_info.dart';
|
||||
import 'package:selfprivacy/logic/models/server_provider_location.dart';
|
||||
import 'package:selfprivacy/logic/models/server_type.dart';
|
||||
import 'package:selfprivacy/utils/password_generator.dart';
|
||||
|
||||
class DigitalOceanApi extends ServerProviderApi with VolumeProviderApi {
|
||||
|
@ -582,7 +584,7 @@ class DigitalOceanApi extends ServerProviderApi with VolumeProviderApi {
|
|||
|
||||
final Dio client = await getClient();
|
||||
try {
|
||||
final Response response = await client.post(
|
||||
final Response response = await client.get(
|
||||
'/locations',
|
||||
);
|
||||
|
||||
|
@ -591,6 +593,7 @@ class DigitalOceanApi extends ServerProviderApi with VolumeProviderApi {
|
|||
title: location['slug'],
|
||||
description: location['name'],
|
||||
flag: getEmojiFlag(location['slug']),
|
||||
identifier: location['slug'],
|
||||
),
|
||||
);
|
||||
} catch (e) {
|
||||
|
@ -602,6 +605,46 @@ class DigitalOceanApi extends ServerProviderApi with VolumeProviderApi {
|
|||
return locations;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<List<ServerType>> getServerTypesByLocation({
|
||||
required final ServerProviderLocation location,
|
||||
}) async {
|
||||
final List<ServerType> types = [];
|
||||
|
||||
final Dio client = await getClient();
|
||||
try {
|
||||
final Response response = await client.get(
|
||||
'/sizes',
|
||||
);
|
||||
final rawSizes = response.data!['sizes'];
|
||||
for (final rawSize in rawSizes) {
|
||||
for (final rawRegion in rawSize['regions']) {
|
||||
if (rawRegion.toString() == location.identifier) {
|
||||
types.add(
|
||||
ServerType(
|
||||
title: rawSize['description'],
|
||||
identifier: rawSize['slug'],
|
||||
ram: rawSize['memory'],
|
||||
cores: rawSize['vcpus'],
|
||||
disk: DiskSize(byte: rawSize['disk'] * 1024 * 1024 * 1024),
|
||||
price: Price(
|
||||
value: rawSize['price_monthly'],
|
||||
currency: 'USD',
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
print(e);
|
||||
} finally {
|
||||
close(client);
|
||||
}
|
||||
|
||||
return types;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> createReverseDns({
|
||||
required final ServerHostingDetails serverDetails,
|
||||
|
|
|
@ -5,6 +5,7 @@ import 'package:dio/dio.dart';
|
|||
import 'package:selfprivacy/config/get_it_config.dart';
|
||||
import 'package:selfprivacy/logic/api_maps/rest_maps/server_providers/volume_provider.dart';
|
||||
import 'package:selfprivacy/logic/api_maps/rest_maps/server_providers/server_provider.dart';
|
||||
import 'package:selfprivacy/logic/models/disk_size.dart';
|
||||
import 'package:selfprivacy/logic/models/hive/server_domain.dart';
|
||||
import 'package:selfprivacy/logic/models/json/hetzner_server_info.dart';
|
||||
import 'package:selfprivacy/logic/models/hive/server_details.dart';
|
||||
|
@ -12,6 +13,7 @@ import 'package:selfprivacy/logic/models/hive/user.dart';
|
|||
import 'package:selfprivacy/logic/models/price.dart';
|
||||
import 'package:selfprivacy/logic/models/server_basic_info.dart';
|
||||
import 'package:selfprivacy/logic/models/server_provider_location.dart';
|
||||
import 'package:selfprivacy/logic/models/server_type.dart';
|
||||
import 'package:selfprivacy/utils/password_generator.dart';
|
||||
|
||||
class HetznerApi extends ServerProviderApi with VolumeProviderApi {
|
||||
|
@ -567,7 +569,7 @@ class HetznerApi extends ServerProviderApi with VolumeProviderApi {
|
|||
|
||||
final Dio client = await getClient();
|
||||
try {
|
||||
final Response response = await client.post(
|
||||
final Response response = await client.get(
|
||||
'/locations',
|
||||
);
|
||||
|
||||
|
@ -576,6 +578,7 @@ class HetznerApi extends ServerProviderApi with VolumeProviderApi {
|
|||
title: location['city'],
|
||||
description: location['description'],
|
||||
flag: getEmojiFlag(location['country']),
|
||||
identifier: location['name'],
|
||||
),
|
||||
);
|
||||
} catch (e) {
|
||||
|
@ -587,6 +590,46 @@ class HetznerApi extends ServerProviderApi with VolumeProviderApi {
|
|||
return locations;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<List<ServerType>> getServerTypesByLocation({
|
||||
required final ServerProviderLocation location,
|
||||
}) async {
|
||||
final List<ServerType> types = [];
|
||||
|
||||
final Dio client = await getClient();
|
||||
try {
|
||||
final Response response = await client.get(
|
||||
'/server_types',
|
||||
);
|
||||
final rawTypes = response.data!['server_types'];
|
||||
for (final rawType in rawTypes) {
|
||||
for (final rawPrice in rawType['prices']) {
|
||||
if (rawPrice['location'].toString() == location.identifier) {
|
||||
types.add(
|
||||
ServerType(
|
||||
title: rawType['description'],
|
||||
identifier: rawType['name'],
|
||||
ram: rawType['memory'],
|
||||
cores: rawType['cores'],
|
||||
disk: DiskSize(byte: rawType['disk'] * 1024 * 1024 * 1024),
|
||||
price: Price(
|
||||
value: rawPrice['price_monthly']['gross'],
|
||||
currency: 'EUR',
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
print(e);
|
||||
} finally {
|
||||
close(client);
|
||||
}
|
||||
|
||||
return types;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> createReverseDns({
|
||||
required final ServerHostingDetails serverDetails,
|
||||
|
|
|
@ -4,10 +4,14 @@ import 'package:selfprivacy/logic/models/hive/server_domain.dart';
|
|||
import 'package:selfprivacy/logic/models/hive/user.dart';
|
||||
import 'package:selfprivacy/logic/models/server_basic_info.dart';
|
||||
import 'package:selfprivacy/logic/models/server_provider_location.dart';
|
||||
import 'package:selfprivacy/logic/models/server_type.dart';
|
||||
|
||||
abstract class ServerProviderApi extends ApiMap {
|
||||
Future<List<ServerBasicInfo>> getServers();
|
||||
Future<List<ServerProviderLocation>> getAvailableLocations();
|
||||
Future<List<ServerType>> getServerTypesByLocation({
|
||||
required final ServerProviderLocation location,
|
||||
});
|
||||
|
||||
Future<ServerHostingDetails> restart();
|
||||
Future<ServerHostingDetails> powerOn();
|
||||
|
|
|
@ -1,11 +1,13 @@
|
|||
class ServerProviderLocation {
|
||||
ServerProviderLocation({
|
||||
required this.title,
|
||||
required this.identifier,
|
||||
this.description,
|
||||
this.flag,
|
||||
});
|
||||
|
||||
final String title;
|
||||
final String identifier;
|
||||
final String? description;
|
||||
|
||||
/// as emoji
|
||||
|
|
19
lib/logic/models/server_type.dart
Normal file
19
lib/logic/models/server_type.dart
Normal file
|
@ -0,0 +1,19 @@
|
|||
import 'package:selfprivacy/logic/models/disk_size.dart';
|
||||
import 'package:selfprivacy/logic/models/price.dart';
|
||||
|
||||
class ServerType {
|
||||
ServerType({
|
||||
required this.title,
|
||||
required this.identifier,
|
||||
required this.ram,
|
||||
required this.cores,
|
||||
required this.disk,
|
||||
required this.price,
|
||||
});
|
||||
final String title;
|
||||
final String identifier;
|
||||
final double ram;
|
||||
final DiskSize disk;
|
||||
final int cores;
|
||||
final Price price;
|
||||
}
|
Loading…
Reference in a new issue