fix: Move DNS entries creation step to server provider layer

pull/213/head
NaiJi ✨ 2023-04-28 14:19:52 -03:00
parent b242838339
commit da4b38b787
4 changed files with 29 additions and 9 deletions

View File

@ -230,7 +230,6 @@ class ServerInstallationCubit extends Cubit<ServerInstallationState> {
final ServerHostingDetails serverDetails, final ServerHostingDetails serverDetails,
) async { ) async {
await repository.saveServerDetails(serverDetails); await repository.saveServerDetails(serverDetails);
// TODO dns;
emit( emit(
(state as ServerInstallationNotFinished).copyWith( (state as ServerInstallationNotFinished).copyWith(
isLoading: false, isLoading: false,
@ -247,10 +246,12 @@ class ServerInstallationCubit extends Cubit<ServerInstallationState> {
rootUser: state.rootUser!, rootUser: state.rootUser!,
dnsApiToken: state.dnsApiToken!, dnsApiToken: state.dnsApiToken!,
dnsProviderType: state.serverDomain!.provider, dnsProviderType: state.serverDomain!.provider,
domainName: state.serverDomain!.domainName, serverDomain: state.serverDomain!,
serverTypeId: state.serverTypeIdentificator!, serverTypeId: state.serverTypeIdentificator!,
errorCallback: clearAppConfig, errorCallback: clearAppConfig,
successCallback: onCreateServerSuccess, successCallback: onCreateServerSuccess,
dnsProviderApi:
ApiController.currentDnsProviderApiFactory!.getDnsProvider(),
); );
final result = final result =

View File

@ -1,3 +1,4 @@
import 'package:selfprivacy/logic/api_maps/rest_maps/dns_providers/dns_provider.dart';
import 'package:selfprivacy/logic/models/hive/server_details.dart'; import 'package:selfprivacy/logic/models/hive/server_details.dart';
import 'package:selfprivacy/logic/models/hive/server_domain.dart'; import 'package:selfprivacy/logic/models/hive/server_domain.dart';
import 'package:selfprivacy/logic/models/hive/user.dart'; import 'package:selfprivacy/logic/models/hive/user.dart';
@ -7,7 +8,8 @@ class LaunchInstallationData {
required this.rootUser, required this.rootUser,
required this.dnsApiToken, required this.dnsApiToken,
required this.dnsProviderType, required this.dnsProviderType,
required this.domainName, required this.dnsProviderApi,
required this.serverDomain,
required this.serverTypeId, required this.serverTypeId,
required this.errorCallback, required this.errorCallback,
required this.successCallback, required this.successCallback,
@ -15,8 +17,9 @@ class LaunchInstallationData {
final User rootUser; final User rootUser;
final String dnsApiToken; final String dnsApiToken;
final String domainName; final ServerDomain serverDomain;
final DnsProviderType dnsProviderType; final DnsProviderType dnsProviderType;
final DnsProviderApi dnsProviderApi;
final String serverTypeId; final String serverTypeId;
final Function() errorCallback; final Function() errorCallback;
final Function(ServerHostingDetails details) successCallback; final Function(ServerHostingDetails details) successCallback;

View File

@ -135,11 +135,13 @@ class DigitalOceanServerProvider extends ServerProvider {
) async { ) async {
ServerHostingDetails? serverDetails; ServerHostingDetails? serverDetails;
final serverApiToken = StringGenerators.apiToken(); final serverApiToken = StringGenerators.apiToken();
final hostname = getHostnameFromDomain(installationData.domainName); final hostname = getHostnameFromDomain(
installationData.serverDomain.domainName,
);
final serverResult = await _adapter.api().createServer( final serverResult = await _adapter.api().createServer(
dnsApiToken: installationData.dnsApiToken, dnsApiToken: installationData.dnsApiToken,
rootUser: installationData.rootUser, rootUser: installationData.rootUser,
domainName: installationData.domainName, domainName: installationData.serverDomain.domainName,
serverType: installationData.serverTypeId, serverType: installationData.serverTypeId,
dnsProviderType: dnsProviderType:
dnsProviderToInfectName(installationData.dnsProviderType), dnsProviderToInfectName(installationData.dnsProviderType),
@ -308,6 +310,7 @@ class DigitalOceanServerProvider extends ServerProvider {
return GenericResult(success: true, data: types); return GenericResult(success: true, data: types);
} }
@override
Future<GenericResult<List<ServerBasicInfo>>> getServers() async { Future<GenericResult<List<ServerBasicInfo>>> getServers() async {
final List<ServerBasicInfo> servers = []; final List<ServerBasicInfo> servers = [];
final result = await _adapter.api().getServers(); final result = await _adapter.api().getServers();
@ -345,6 +348,7 @@ class DigitalOceanServerProvider extends ServerProvider {
return GenericResult(success: true, data: servers); return GenericResult(success: true, data: servers);
} }
@override
Future<GenericResult<List<ServerMetadataEntity>>> getMetadata( Future<GenericResult<List<ServerMetadataEntity>>> getMetadata(
final int serverId, final int serverId,
) async { ) async {
@ -547,6 +551,7 @@ class DigitalOceanServerProvider extends ServerProvider {
); );
} }
@override
Future<GenericResult<CallbackDialogueBranching?>> deleteServer( Future<GenericResult<CallbackDialogueBranching?>> deleteServer(
final String hostname, final String hostname,
) async { ) async {

View File

@ -437,12 +437,14 @@ class HetznerServerProvider extends ServerProvider {
final volume = volumeResult.data['volume']; final volume = volumeResult.data['volume'];
final serverApiToken = StringGenerators.apiToken(); final serverApiToken = StringGenerators.apiToken();
final hostname = getHostnameFromDomain(installationData.domainName); final hostname = getHostnameFromDomain(
installationData.serverDomain.domainName,
);
final serverResult = await _adapter.api().createServer( final serverResult = await _adapter.api().createServer(
dnsApiToken: installationData.dnsApiToken, dnsApiToken: installationData.dnsApiToken,
rootUser: installationData.rootUser, rootUser: installationData.rootUser,
domainName: installationData.domainName, domainName: installationData.serverDomain.domainName,
serverType: installationData.serverTypeId, serverType: installationData.serverTypeId,
dnsProviderType: dnsProviderType:
dnsProviderToInfectName(installationData.dnsProviderType), dnsProviderToInfectName(installationData.dnsProviderType),
@ -535,7 +537,7 @@ class HetznerServerProvider extends ServerProvider {
final createDnsResult = await _adapter.api().createReverseDns( final createDnsResult = await _adapter.api().createReverseDns(
serverId: serverDetails.id, serverId: serverDetails.id,
ip4: serverDetails.ip4, ip4: serverDetails.ip4,
dnsPtr: installationData.domainName, dnsPtr: installationData.serverDomain.domainName,
); );
if (!createDnsResult.success) { if (!createDnsResult.success) {
@ -578,6 +580,15 @@ class HetznerServerProvider extends ServerProvider {
} }
await installationData.successCallback(serverDetails); await installationData.successCallback(serverDetails);
await installationData.dnsProviderApi.removeSimilarRecords(
ip4: serverDetails.ip4,
domain: installationData.serverDomain,
);
await installationData.dnsProviderApi.createMultipleDnsRecords(
ip4: serverDetails.ip4,
domain: installationData.serverDomain,
);
return GenericResult(success: true, data: null); return GenericResult(success: true, data: null);
} }