mirror of
https://git.selfprivacy.org/kherel/selfprivacy.org.app.git
synced 2025-02-02 14:16:58 +00:00
fix: Manage server deletion for Digital Ocean
This commit is contained in:
parent
41dc77103f
commit
f64f741a76
|
@ -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);
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue