diff --git a/lib/logic/api_maps/hetzner.dart b/lib/logic/api_maps/hetzner.dart index 28c0a0d8..0313fe72 100644 --- a/lib/logic/api_maps/hetzner.dart +++ b/lib/logic/api_maps/hetzner.dart @@ -47,8 +47,8 @@ class HetznerApi extends ApiMap { "ssh_keys": [], "volumes": [], "networks": [], - "user_data": - "#cloud-config\nruncmd:\n- curl https://git.selfprivacy.org/ilchub/selfprivacy-nixos-infect/raw/branch/master/nixos-infect | PROVIDER=hetzner NIX_CHANNEL=nixos-20.09 DOMAIN=$domainName USER=${rootUser.login} PASSWORD=${rootUser.password} HASHED_PASSWORD=${rootUser.hashPassword} bash 2>&1 | tee /tmp/infect.log \nruncmd:\n- curl https://git.selfprivacy.org/ilchub/selfprivacy-nixos-infect/raw/branch/master/nixos-infect | PROVIDER=hetzner NIX_CHANNEL=nixos-20.09 DOMAIN=$domainName USER=${rootUser.login} PASSWORD=${rootUser.password} HASHED_PASSWORD=${rootUser.hashPassword} bash 2>&1 | tee /tmp/infect.log", + 'user-data': + '#cloud-config\nruncmd:\n- curl https://git.selfprivacy.org/ilchub/selfprivacy-nixos-infect/raw/branch/master/nixos-infect | PROVIDER=hetzner NIX_CHANNEL=nixos-20.09 DOMAIN=$domainName USER=${rootUser.login} PASSWORD=${rootUser.password} HASHED_PASSWORD=${rootUser.hashPassword} bash 2>&1 | tee /tmp/infect.log' }; Response response = await client.post( rootAddress, diff --git a/lib/logic/common_enum/common_enum.dart b/lib/logic/common_enum/common_enum.dart new file mode 100644 index 00000000..741a1bf4 --- /dev/null +++ b/lib/logic/common_enum/common_enum.dart @@ -0,0 +1,10 @@ +enum InitializingSteps { + setHeznerKey, + setCloudFlareKey, + setDomainName, + setRootUser, + createServer, + checkCloudFlareDns, + startServer, + checkSystemDnsAndDkimSet, +} diff --git a/lib/logic/cubit/app_config/app_config_cubit.dart b/lib/logic/cubit/app_config/app_config_cubit.dart index 9ae4e76e..6219dfeb 100644 --- a/lib/logic/cubit/app_config/app_config_cubit.dart +++ b/lib/logic/cubit/app_config/app_config_cubit.dart @@ -1,5 +1,3 @@ -import 'dart:io'; - import 'package:bloc/bloc.dart'; import 'package:equatable/equatable.dart'; import 'package:hive/hive.dart'; @@ -9,6 +7,7 @@ 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:basic_utils/basic_utils.dart'; part 'app_config_state.dart'; @@ -67,14 +66,20 @@ class AppConfigCubit extends Cubit { ]; var hasError = false; for (var address in addresses) { - var res = await InternetAddress.lookup(address); - if (res.isEmpty || res[0].address != ip4) { + var res = await DnsUtils.lookupRecord( + address, + RRecordType.A, + provider: DnsApiProvider.CLOUDFLARE, + ); + if (res.isEmpty || res[0].data != ip4) { hasError = true; break; } } if (hasError) { - emit(state.copyWith(error: Exception('dns checking error'))); + emit(state.copyWith(error: Exception('dns cloudflare checking error'))); + } else { + print('check complete'); } } diff --git a/lib/ui/pages/initializing/initializing.dart b/lib/ui/pages/initializing/initializing.dart index 099f5e17..47e66ea2 100644 --- a/lib/ui/pages/initializing/initializing.dart +++ b/lib/ui/pages/initializing/initializing.dart @@ -1,5 +1,3 @@ -import 'dart:io'; - import 'package:cubit_form/cubit_form.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; @@ -26,7 +24,6 @@ class InitializingPage extends StatelessWidget { @override Widget build(BuildContext context) { var cubit = context.watch(); - print(cubit.state.error); var actualPage = [ _stepHetzner(cubit), _stepCloudflare(cubit), @@ -269,9 +266,7 @@ class InitializingPage extends StatelessWidget { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Spacer( - flex: 2, - ), + Spacer(flex: 2), BrandText.h2('Создать сервер'), SizedBox(height: 10), BrandText.body2('Создать сервер'), @@ -280,9 +275,7 @@ class InitializingPage extends StatelessWidget { onPressed: isLoading ? null : appConfigCubit.createServer, title: isLoading ? 'loading' : 'Создать сервер', ), - Spacer( - flex: 2, - ), + Spacer(flex: 2), BrandButton.text( onPressed: () => _showModal(context, _HowHetzner()), title: 'Что это значит?', @@ -295,7 +288,6 @@ class InitializingPage extends StatelessWidget { Widget _stepCheck(AppConfigCubit appConfigCubit) { var state = appConfigCubit.state; var error = state.error; - print(error); return Builder(builder: (context) { return Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -320,7 +312,6 @@ class InitializingPage extends StatelessWidget { duration: Duration(minutes: 10), callback: () { appConfigCubit.checkDns(); - // print(state.server.ip4); }, ), ], @@ -341,9 +332,7 @@ class InitializingPage extends StatelessWidget { return Container( height: 500, padding: brandPagePadding2, - child: BrandCard( - child: child, - ), + child: BrandCard(child: child), ); } } diff --git a/pubspec.lock b/pubspec.lock index 58e73f3a..f91d82ee 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -36,6 +36,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.5.0-nullsafety.1" + basic_utils: + dependency: "direct dev" + description: + name: basic_utils + url: "https://pub.dartlang.org" + source: hosted + version: "2.7.0-rc.4" bloc: dependency: transitive description: @@ -539,6 +546,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.0.3" + pointycastle: + dependency: transitive + description: + name: pointycastle + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.0" pool: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index e7feef1c..3828554b 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -28,6 +28,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter + basic_utils: ^2.6.3 build_runner: ^1.10.11 flutter_launcher_icons: ^0.8.1 hive_generator: ^0.8.2