forked from SelfPrivacy/selfprivacy.org.app
131 lines
3.6 KiB
Dart
131 lines
3.6 KiB
Dart
|
import 'package:hive/hive.dart';
|
||
|
import 'package:selfprivacy/config/hive_config.dart';
|
||
|
import 'package:selfprivacy/logic/api_maps/cloudflare.dart';
|
||
|
import 'package:selfprivacy/logic/api_maps/hetzner.dart';
|
||
|
import 'package:selfprivacy/logic/models/cloudflare_domain.dart';
|
||
|
import 'package:selfprivacy/logic/models/server_details.dart';
|
||
|
import 'package:selfprivacy/logic/models/user.dart';
|
||
|
import 'package:selfprivacy/config/get_it_config.dart';
|
||
|
import 'package:selfprivacy/logic/get_it/console.dart';
|
||
|
import 'package:selfprivacy/logic/models/message.dart';
|
||
|
import 'package:basic_utils/basic_utils.dart';
|
||
|
import 'app_config_cubit.dart';
|
||
|
|
||
|
class AppConfigRepository {
|
||
|
Box box = Hive.box(BNames.appConfig);
|
||
|
|
||
|
AppConfigState load() {
|
||
|
return AppConfigState(
|
||
|
hetznerKey: box.get(BNames.hetznerKey),
|
||
|
cloudFlareKey: box.get(BNames.cloudFlareKey),
|
||
|
cloudFlareDomain: box.get(BNames.cloudFlareDomain),
|
||
|
rootUser: box.get(BNames.rootUser),
|
||
|
hetznerServer: box.get(BNames.hetznerServer),
|
||
|
isDnsCheckedAndServerStarted: box.get(BNames.isDnsChecked),
|
||
|
);
|
||
|
}
|
||
|
|
||
|
void reset() {
|
||
|
box.clear();
|
||
|
}
|
||
|
|
||
|
void saveHetznerKey(String key) {
|
||
|
box.put(BNames.hetznerKey, key);
|
||
|
}
|
||
|
|
||
|
void saveCloudFlare(String key) {
|
||
|
box.put(BNames.cloudFlareKey, key);
|
||
|
}
|
||
|
|
||
|
void saveDomain(CloudFlareDomain cloudFlareDomain) {
|
||
|
box.put(BNames.cloudFlareDomain, cloudFlareDomain);
|
||
|
}
|
||
|
|
||
|
void saveRootUser(User rootUser) {
|
||
|
box.put(BNames.rootUser, rootUser);
|
||
|
}
|
||
|
|
||
|
Future<HetznerServerDetails> startServer(
|
||
|
String hetznerKey,
|
||
|
HetznerServerDetails hetznerServer,
|
||
|
) async {
|
||
|
var hetznerApi = HetznerApi(hetznerKey);
|
||
|
var serverDetails = await hetznerApi.startServer(server: hetznerServer);
|
||
|
hetznerApi.close();
|
||
|
|
||
|
return serverDetails;
|
||
|
}
|
||
|
|
||
|
Future<void> saveServerDetails(HetznerServerDetails serverDetails) async {
|
||
|
await box.put(BNames.hetznerServer, serverDetails);
|
||
|
}
|
||
|
|
||
|
Future<bool> isDnsAddressesMatch(String domainName, String ip4) async {
|
||
|
var addresses = <String>[
|
||
|
'$domainName',
|
||
|
'api.$domainName',
|
||
|
'cloud.$domainName',
|
||
|
'meet.$domainName',
|
||
|
'password.$domainName'
|
||
|
];
|
||
|
|
||
|
for (var address in addresses) {
|
||
|
var lookupRecordRes = await DnsUtils.lookupRecord(
|
||
|
address,
|
||
|
RRecordType.A,
|
||
|
provider: DnsApiProvider.CLOUDFLARE,
|
||
|
);
|
||
|
getIt.get<ConsoleModel>().addMessage(
|
||
|
Message(
|
||
|
text:
|
||
|
'DnsLookup: address: $address, $RRecordType, provider: CLOUDFLARE, ip4: $ip4',
|
||
|
),
|
||
|
);
|
||
|
getIt.get<ConsoleModel>().addMessage(
|
||
|
Message(
|
||
|
text:
|
||
|
'DnsLookup: ${lookupRecordRes.isEmpty ? (lookupRecordRes[0].data != ip4 ? 'wrong ip4' : 'right ip4') : 'empty'}',
|
||
|
),
|
||
|
);
|
||
|
if (lookupRecordRes.isEmpty || lookupRecordRes[0].data != ip4) {
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
Future<HetznerServerDetails> createServer(
|
||
|
String hetznerKey,
|
||
|
User rootUser,
|
||
|
String domainName,
|
||
|
) async {
|
||
|
var hetznerApi = HetznerApi(hetznerKey);
|
||
|
var serverDetails = await hetznerApi.createServer(
|
||
|
rootUser: rootUser,
|
||
|
domainName: domainName,
|
||
|
);
|
||
|
await box.put(BNames.hetznerServer, serverDetails);
|
||
|
|
||
|
hetznerApi.close();
|
||
|
|
||
|
return serverDetails;
|
||
|
}
|
||
|
|
||
|
Future<void> createDnsRecords(
|
||
|
String cloudFlareKey,
|
||
|
String ip4,
|
||
|
CloudFlareDomain cloudFlareDomain,
|
||
|
) async {
|
||
|
|
||
|
var cloudflareApi = CloudflareApi(cloudFlareKey);
|
||
|
|
||
|
await cloudflareApi.createMultipleDnsRecords(
|
||
|
ip4: ip4,
|
||
|
cloudFlareDomain: cloudFlareDomain,
|
||
|
);
|
||
|
|
||
|
cloudflareApi.close();
|
||
|
}
|
||
|
}
|