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 startServer( String hetznerKey, HetznerServerDetails hetznerServer, ) async { var hetznerApi = HetznerApi(hetznerKey); var serverDetails = await hetznerApi.startServer(server: hetznerServer); hetznerApi.close(); return serverDetails; } Future saveServerDetails(HetznerServerDetails serverDetails) async { await box.put(BNames.hetznerServer, serverDetails); } Future isDnsAddressesMatch(String domainName, String ip4) async { var addresses = [ '$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().addMessage( Message( text: 'DnsLookup: address: $address, $RRecordType, provider: CLOUDFLARE, ip4: $ip4', ), ); getIt.get().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 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 createDnsRecords( String cloudFlareKey, String ip4, CloudFlareDomain cloudFlareDomain, ) async { var cloudflareApi = CloudflareApi(cloudFlareKey); await cloudflareApi.createMultipleDnsRecords( ip4: ip4, cloudFlareDomain: cloudFlareDomain, ); cloudflareApi.close(); } }