fix: Manage server deletion for Digital Ocean

pull/155/head
NaiJi ✨ 2022-12-23 00:17:48 +04:00
parent 41dc77103f
commit f64f741a76
3 changed files with 22 additions and 36 deletions

View File

@ -18,6 +18,7 @@ import 'package:selfprivacy/logic/models/server_metadata.dart';
import 'package:selfprivacy/logic/models/server_provider_location.dart'; import 'package:selfprivacy/logic/models/server_provider_location.dart';
import 'package:selfprivacy/logic/models/server_type.dart'; import 'package:selfprivacy/logic/models/server_type.dart';
import 'package:selfprivacy/utils/extensions/string_extensions.dart'; import 'package:selfprivacy/utils/extensions/string_extensions.dart';
import 'package:selfprivacy/utils/network_utils.dart';
import 'package:selfprivacy/utils/password_generator.dart'; import 'package:selfprivacy/utils/password_generator.dart';
class DigitalOceanApi extends ServerProviderApi with VolumeProviderApi { class DigitalOceanApi extends ServerProviderApi with VolumeProviderApi {
@ -325,23 +326,6 @@ class DigitalOceanApi extends ServerProviderApi with VolumeProviderApi {
return success; return success;
} }
static String getHostnameFromDomain(final String domain) {
// Replace all non-alphanumeric characters with an underscore
String hostname =
domain.split('.')[0].replaceAll(RegExp(r'[^a-zA-Z0-9]'), '-');
if (hostname.endsWith('-')) {
hostname = hostname.substring(0, hostname.length - 1);
}
if (hostname.startsWith('-')) {
hostname = hostname.substring(1);
}
if (hostname.isEmpty) {
hostname = 'selfprivacy-server';
}
return hostname;
}
@override @override
Future<APIGenericResult<ServerHostingDetails?>> createServer({ Future<APIGenericResult<ServerHostingDetails?>> createServer({
required final String dnsApiToken, required final String dnsApiToken,
@ -436,11 +420,12 @@ class DigitalOceanApi extends ServerProviderApi with VolumeProviderApi {
}) async { }) async {
final Dio client = await getClient(); final Dio client = await getClient();
final String hostname = getHostnameFromDomain(domainName);
final servers = await getServers(); final servers = await getServers();
final ServerBasicInfo serverToRemove; final ServerBasicInfo serverToRemove;
try { try {
serverToRemove = servers.firstWhere( serverToRemove = servers.firstWhere(
(final el) => el.name == domainName, (final el) => el.name == hostname,
); );
} catch (e) { } catch (e) {
print(e); print(e);
@ -473,7 +458,7 @@ class DigitalOceanApi extends ServerProviderApi with VolumeProviderApi {
try { try {
laterFutures.add(deleteVolume(volumeToRemove)); laterFutures.add(deleteVolume(volumeToRemove));
laterFutures.add(client.delete('/droplets/$serverToRemove.id')); laterFutures.add(client.delete('/droplets/${serverToRemove.id}'));
await Future.wait(laterFutures); await Future.wait(laterFutures);
} catch (e) { } catch (e) {
print(e); print(e);

View File

@ -19,6 +19,7 @@ import 'package:selfprivacy/logic/models/server_metadata.dart';
import 'package:selfprivacy/logic/models/server_provider_location.dart'; import 'package:selfprivacy/logic/models/server_provider_location.dart';
import 'package:selfprivacy/logic/models/server_type.dart'; import 'package:selfprivacy/logic/models/server_type.dart';
import 'package:selfprivacy/utils/extensions/string_extensions.dart'; import 'package:selfprivacy/utils/extensions/string_extensions.dart';
import 'package:selfprivacy/utils/network_utils.dart';
import 'package:selfprivacy/utils/password_generator.dart'; import 'package:selfprivacy/utils/password_generator.dart';
class HetznerApi extends ServerProviderApi with VolumeProviderApi { class HetznerApi extends ServerProviderApi with VolumeProviderApi {
@ -461,23 +462,6 @@ class HetznerApi extends ServerProviderApi with VolumeProviderApi {
); );
} }
static String getHostnameFromDomain(final String domain) {
// Replace all non-alphanumeric characters with an underscore
String hostname =
domain.split('.')[0].replaceAll(RegExp(r'[^a-zA-Z0-9]'), '-');
if (hostname.endsWith('-')) {
hostname = hostname.substring(0, hostname.length - 1);
}
if (hostname.startsWith('-')) {
hostname = hostname.substring(1);
}
if (hostname.isEmpty) {
hostname = 'selfprivacy-server';
}
return hostname;
}
@override @override
Future<APIGenericResult<bool>> deleteServer({ Future<APIGenericResult<bool>> deleteServer({
required final String domainName, required final String domainName,

View File

@ -133,3 +133,20 @@ DnsRecord? extractDkimRecord(final List<DnsRecord> records) {
return dkimRecord; return dkimRecord;
} }
String getHostnameFromDomain(final String domain) {
// Replace all non-alphanumeric characters with an underscore
String hostname =
domain.split('.')[0].replaceAll(RegExp(r'[^a-zA-Z0-9]'), '-');
if (hostname.endsWith('-')) {
hostname = hostname.substring(0, hostname.length - 1);
}
if (hostname.startsWith('-')) {
hostname = hostname.substring(1);
}
if (hostname.isEmpty) {
hostname = 'selfprivacy-server';
}
return hostname;
}