Compare commits

...

3 Commits

Author SHA1 Message Date
Inex Code d06e8976c5 Fix infect stage and DKIM 2022-02-08 09:59:35 +03:00
Inex Code a0edbd636d Refactor DNS checks 2022-02-08 09:59:19 +03:00
Inex Code 9afe61db42 Migrate to Flutter 2.10 2022-02-08 09:58:12 +03:00
12 changed files with 207 additions and 116 deletions

View File

@ -26,7 +26,7 @@ apply plugin: 'kotlin-android'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
android { android {
compileSdkVersion 29 compileSdkVersion 31
sourceSets { sourceSets {
main.java.srcDirs += 'src/main/kotlin' main.java.srcDirs += 'src/main/kotlin'

View File

@ -7,7 +7,7 @@
additional functionality it is fine to subclass or reimplement additional functionality it is fine to subclass or reimplement
FlutterApplication and put your custom class here. --> FlutterApplication and put your custom class here. -->
<application <application
android:name="io.flutter.app.FlutterApplication" android:name="${applicationName}"
android:label="SelfPrivacy" android:label="SelfPrivacy"
android:icon="@mipmap/launcher_icon"> android:icon="@mipmap/launcher_icon">
<activity <activity

View File

@ -1,5 +1,5 @@
buildscript { buildscript {
ext.kotlin_version = '1.3.50' ext.kotlin_version = '1.5.10'
repositories { repositories {
google() google()
jcenter() jcenter()

View File

@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip distributionUrl=https\://services.gradle.org/distributions/gradle-6.9.1-all.zip

View File

@ -1,4 +1,3 @@
import 'dart:convert';
import 'dart:io'; import 'dart:io';
import 'package:dio/dio.dart'; import 'package:dio/dio.dart';
@ -134,8 +133,9 @@ class HetznerApi extends ApiMap {
/// add ssh key when you need it: e.g. "ssh_keys":["kherel"] /// add ssh key when you need it: e.g. "ssh_keys":["kherel"]
/// check the branch name, it could be "development" or "master". /// check the branch name, it could be "development" or "master".
/// ///
final userdataString = "#cloud-config\\nruncmd:\\n- curl https://git.selfprivacy.org/SelfPrivacy/selfprivacy-nixos-infect/raw/branch/master/nixos-infect | PROVIDER=hetzner NIX_CHANNEL=nixos-21.05 DOMAIN='$domainName' LUSER='${escapeQuotes(rootUser.login)}' PASSWORD='${escapeQuotes(rootUser.password)}' CF_TOKEN=$cloudFlareKey DB_PASSWORD=${escapeQuotes(dbPassword)} API_TOKEN=$apiToken HOSTNAME=${escapeQuotes(hostname)} bash 2>&1 | tee /tmp/infect.log"; final userdataString =
"#cloud-config\nruncmd:\n- curl https://git.selfprivacy.org/SelfPrivacy/selfprivacy-nixos-infect/raw/branch/master/nixos-infect | PROVIDER=hetzner NIX_CHANNEL=nixos-21.05 DOMAIN='$domainName' LUSER='${escapeQuotes(rootUser.login)}' PASSWORD='${escapeQuotes(rootUser.password)}' CF_TOKEN=$cloudFlareKey DB_PASSWORD=${escapeQuotes(dbPassword)} API_TOKEN=$apiToken HOSTNAME=${escapeQuotes(hostname)} bash 2>&1 | tee /tmp/infect.log";
print(userdataString); print(userdataString);
final data = { final data = {
@ -259,8 +259,11 @@ class HetznerApi extends ApiMap {
String escapeQuotes(String str) { String escapeQuotes(String str) {
// replace all single quotes with escaped single quotes for bash strong quotes (i.e. '\'' ) // replace all single quotes with escaped single quotes for bash strong quotes (i.e. '\'' )
print("Escaping single quotes for bash: $str"); // print("Escaping single quotes for bash: $str");
print("Escaping result: ${str.replaceAll(RegExp(r"'"), "'\\''")}"); // print("Escaping result: ${str.replaceAll(RegExp(r"'"), "'\\''")}");
// also escape all double quotes for json // also escape all double quotes for json
return str.replaceAll(RegExp(r"'"), "'\\''"); // return str.replaceAll(RegExp(r"'"), "'\\''");
// Pass for now
return str;
} }

View File

@ -1,6 +1,6 @@
import 'dart:async'; import 'dart:async';
import 'dart:io';
import 'dart:convert'; import 'dart:convert';
import 'dart:io';
import 'package:dio/dio.dart'; import 'package:dio/dio.dart';
import 'package:selfprivacy/config/get_it_config.dart'; import 'package:selfprivacy/config/get_it_config.dart';
@ -250,7 +250,11 @@ class ServerApi extends ApiMap {
final base64toString = utf8.fuse(base64); final base64toString = utf8.fuse(base64);
return base64toString.decode(response.data).split('(')[1].split(')')[0]; return base64toString
.decode(response.data)
.split('(')[1]
.split(')')[0]
.replaceAll('"', '');
} }
} }

View File

@ -6,11 +6,11 @@ import 'package:selfprivacy/config/get_it_config.dart';
import 'package:selfprivacy/logic/get_it/ssh.dart'; import 'package:selfprivacy/logic/get_it/ssh.dart';
import 'package:selfprivacy/logic/models/backblaze_credential.dart'; import 'package:selfprivacy/logic/models/backblaze_credential.dart';
import 'package:selfprivacy/logic/models/cloudflare_domain.dart'; import 'package:selfprivacy/logic/models/cloudflare_domain.dart';
import 'package:selfprivacy/logic/models/server_details.dart'; import 'package:selfprivacy/logic/models/server_details.dart';
import 'package:selfprivacy/logic/models/user.dart'; import 'package:selfprivacy/logic/models/user.dart';
import 'app_config_repository.dart'; import 'app_config_repository.dart';
export 'package:provider/provider.dart'; export 'package:provider/provider.dart';
part 'app_config_state.dart'; part 'app_config_state.dart';
@ -83,9 +83,10 @@ class AppConfigCubit extends Cubit<AppConfigState> {
var ip4 = state.hetznerServer!.ip4; var ip4 = state.hetznerServer!.ip4;
var domainName = state.cloudFlareDomain!.domainName; var domainName = state.cloudFlareDomain!.domainName;
var isMatch = await repository.isDnsAddressesMatch(domainName, ip4); var matches = await repository.isDnsAddressesMatch(
domainName, ip4, state.dnsMatches);
if (isMatch) { if (matches.values.every((value) => value)) {
var server = await repository.startServer( var server = await repository.startServer(
state.hetznerServer!, state.hetznerServer!,
); );
@ -101,6 +102,12 @@ class AppConfigCubit extends Cubit<AppConfigState> {
); );
resetServerIfServerIsOkay(); resetServerIfServerIsOkay();
} else { } else {
emit(
state.copyWith(
isLoading: false,
dnsMatches: matches,
),
);
startServerIfDnsIsOkay(); startServerIfDnsIsOkay();
} }
}; };
@ -108,7 +115,7 @@ class AppConfigCubit extends Cubit<AppConfigState> {
if (isImmediate) { if (isImmediate) {
work(); work();
} else { } else {
var pauseDuration = Duration(seconds: 60); var pauseDuration = Duration(seconds: 30);
emit(TimerState( emit(TimerState(
dataState: state, dataState: state,
timerStart: DateTime.now(), timerStart: DateTime.now(),
@ -289,6 +296,7 @@ class AppConfigCubit extends Cubit<AppConfigState> {
isServerResetedFirstTime: false, isServerResetedFirstTime: false,
isServerResetedSecondTime: false, isServerResetedSecondTime: false,
isLoading: false, isLoading: false,
dnsMatches: null,
)); ));
} }

View File

@ -1,20 +1,21 @@
import 'package:basic_utils/basic_utils.dart';
import 'package:dio/dio.dart'; import 'package:dio/dio.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:hive/hive.dart'; import 'package:hive/hive.dart';
import 'package:selfprivacy/config/get_it_config.dart';
import 'package:selfprivacy/config/hive_config.dart'; import 'package:selfprivacy/config/hive_config.dart';
import 'package:selfprivacy/logic/api_maps/cloudflare.dart'; import 'package:selfprivacy/logic/api_maps/cloudflare.dart';
import 'package:selfprivacy/logic/api_maps/hetzner.dart'; import 'package:selfprivacy/logic/api_maps/hetzner.dart';
import 'package:selfprivacy/logic/api_maps/server.dart'; import 'package:selfprivacy/logic/api_maps/server.dart';
import 'package:selfprivacy/logic/models/backblaze_credential.dart'; import 'package:selfprivacy/logic/models/backblaze_credential.dart';
import 'package:selfprivacy/logic/models/cloudflare_domain.dart'; import 'package:selfprivacy/logic/models/cloudflare_domain.dart';
import 'package:selfprivacy/logic/models/message.dart';
import 'package:selfprivacy/logic/models/server_details.dart'; import 'package:selfprivacy/logic/models/server_details.dart';
import 'package:selfprivacy/logic/models/user.dart'; import 'package:selfprivacy/logic/models/user.dart';
import 'package:selfprivacy/config/get_it_config.dart';
import 'package:selfprivacy/logic/models/message.dart';
import 'package:basic_utils/basic_utils.dart';
import 'package:selfprivacy/ui/components/action_button/action_button.dart'; import 'package:selfprivacy/ui/components/action_button/action_button.dart';
import 'package:selfprivacy/ui/components/brand_alert/brand_alert.dart'; import 'package:selfprivacy/ui/components/brand_alert/brand_alert.dart';
import 'app_config_cubit.dart'; import 'app_config_cubit.dart';
import 'package:easy_localization/easy_localization.dart';
class AppConfigRepository { class AppConfigRepository {
Box box = Hive.box(BNames.appConfig); Box box = Hive.box(BNames.appConfig);
@ -49,6 +50,7 @@ class AppConfigRepository {
isServerResetedSecondTime: isServerResetedSecondTime:
box.get(BNames.isServerResetedSecondTime, defaultValue: false), box.get(BNames.isServerResetedSecondTime, defaultValue: false),
isLoading: box.get(BNames.isLoading, defaultValue: false), isLoading: box.get(BNames.isLoading, defaultValue: false),
dnsMatches: null,
); );
} }
@ -68,7 +70,8 @@ class AppConfigRepository {
return serverDetails; return serverDetails;
} }
Future<bool> isDnsAddressesMatch(String? domainName, String? ip4) async { Future<Map<String, bool>> isDnsAddressesMatch(String? domainName, String? ip4,
Map<String, bool>? skippedMatches) async {
var addresses = <String>[ var addresses = <String>[
'$domainName', '$domainName',
'api.$domainName', 'api.$domainName',
@ -77,7 +80,13 @@ class AppConfigRepository {
'password.$domainName' 'password.$domainName'
]; ];
var matches = <String, bool>{};
for (var address in addresses) { for (var address in addresses) {
if (skippedMatches != null && skippedMatches[address] == true) {
matches[address] = true;
continue;
}
var lookupRecordRes = await DnsUtils.lookupRecord( var lookupRecordRes = await DnsUtils.lookupRecord(
address, address,
RRecordType.A, RRecordType.A,
@ -98,11 +107,13 @@ class AppConfigRepository {
if (lookupRecordRes == null || if (lookupRecordRes == null ||
lookupRecordRes.isEmpty || lookupRecordRes.isEmpty ||
lookupRecordRes[0].data != ip4) { lookupRecordRes[0].data != ip4) {
return false; matches[address] = false;
} else {
matches[address] = true;
} }
} }
return true; return matches;
} }
Future<void> createServer( Future<void> createServer(

View File

@ -89,6 +89,7 @@ class TimerState extends AppConfigNotFinished {
isServerResetedFirstTime: dataState.isServerResetedFirstTime, isServerResetedFirstTime: dataState.isServerResetedFirstTime,
isServerResetedSecondTime: dataState.isServerResetedSecondTime, isServerResetedSecondTime: dataState.isServerResetedSecondTime,
isLoading: isLoading, isLoading: isLoading,
dnsMatches: dataState.dnsMatches,
); );
final AppConfigNotFinished dataState; final AppConfigNotFinished dataState;
@ -105,6 +106,7 @@ class TimerState extends AppConfigNotFinished {
class AppConfigNotFinished extends AppConfigState { class AppConfigNotFinished extends AppConfigState {
final bool isLoading; final bool isLoading;
final Map<String, bool>? dnsMatches;
AppConfigNotFinished({ AppConfigNotFinished({
String? hetznerKey, String? hetznerKey,
@ -117,6 +119,7 @@ class AppConfigNotFinished extends AppConfigState {
required bool isServerResetedFirstTime, required bool isServerResetedFirstTime,
required bool isServerResetedSecondTime, required bool isServerResetedSecondTime,
required this.isLoading, required this.isLoading,
required this.dnsMatches,
}) : super( }) : super(
hetznerKey: hetznerKey, hetznerKey: hetznerKey,
cloudFlareKey: cloudFlareKey, cloudFlareKey: cloudFlareKey,
@ -139,7 +142,8 @@ class AppConfigNotFinished extends AppConfigState {
hetznerServer, hetznerServer,
isServerStarted, isServerStarted,
isServerResetedFirstTime, isServerResetedFirstTime,
isLoading isLoading,
dnsMatches,
]; ];
AppConfigNotFinished copyWith({ AppConfigNotFinished copyWith({
@ -153,6 +157,7 @@ class AppConfigNotFinished extends AppConfigState {
bool? isServerResetedFirstTime, bool? isServerResetedFirstTime,
bool? isServerResetedSecondTime, bool? isServerResetedSecondTime,
bool? isLoading, bool? isLoading,
Map<String, bool>? dnsMatches,
}) => }) =>
AppConfigNotFinished( AppConfigNotFinished(
hetznerKey: hetznerKey ?? this.hetznerKey, hetznerKey: hetznerKey ?? this.hetznerKey,
@ -167,6 +172,7 @@ class AppConfigNotFinished extends AppConfigState {
isServerResetedSecondTime: isServerResetedSecondTime:
isServerResetedSecondTime ?? this.isServerResetedSecondTime, isServerResetedSecondTime ?? this.isServerResetedSecondTime,
isLoading: isLoading ?? this.isLoading, isLoading: isLoading ?? this.isLoading,
dnsMatches: dnsMatches ?? this.dnsMatches,
); );
AppConfigFinished finish() => AppConfigFinished( AppConfigFinished finish() => AppConfigFinished(
@ -195,6 +201,7 @@ class AppConfigEmpty extends AppConfigNotFinished {
isServerResetedFirstTime: false, isServerResetedFirstTime: false,
isServerResetedSecondTime: false, isServerResetedSecondTime: false,
isLoading: false, isLoading: false,
dnsMatches: null,
); );
} }

View File

@ -1,14 +1,15 @@
import 'package:cubit_form/cubit_form.dart'; import 'package:cubit_form/cubit_form.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart'; import 'package:flutter/rendering.dart';
import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:selfprivacy/config/brand_theme.dart'; import 'package:selfprivacy/config/brand_theme.dart';
import 'package:selfprivacy/logic/cubit/app_config/app_config_cubit.dart';
import 'package:selfprivacy/logic/cubit/forms/initializing/backblaze_form_cubit.dart'; import 'package:selfprivacy/logic/cubit/forms/initializing/backblaze_form_cubit.dart';
import 'package:selfprivacy/logic/cubit/forms/initializing/cloudflare_form_cubit.dart'; import 'package:selfprivacy/logic/cubit/forms/initializing/cloudflare_form_cubit.dart';
import 'package:selfprivacy/logic/cubit/forms/initializing/domain_cloudflare.dart'; import 'package:selfprivacy/logic/cubit/forms/initializing/domain_cloudflare.dart';
import 'package:selfprivacy/logic/cubit/forms/initializing/hetzner_form_cubit.dart'; import 'package:selfprivacy/logic/cubit/forms/initializing/hetzner_form_cubit.dart';
import 'package:selfprivacy/logic/cubit/forms/initializing/root_user_form_cubit.dart'; import 'package:selfprivacy/logic/cubit/forms/initializing/root_user_form_cubit.dart';
import 'package:selfprivacy/logic/cubit/app_config/app_config_cubit.dart';
import 'package:selfprivacy/logic/cubit/providers/providers_cubit.dart'; import 'package:selfprivacy/logic/cubit/providers/providers_cubit.dart';
import 'package:selfprivacy/ui/components/brand_bottom_sheet/brand_bottom_sheet.dart'; import 'package:selfprivacy/ui/components/brand_bottom_sheet/brand_bottom_sheet.dart';
import 'package:selfprivacy/ui/components/brand_button/brand_button.dart'; import 'package:selfprivacy/ui/components/brand_button/brand_button.dart';
@ -19,7 +20,6 @@ import 'package:selfprivacy/ui/components/brand_timer/brand_timer.dart';
import 'package:selfprivacy/ui/components/progress_bar/progress_bar.dart'; import 'package:selfprivacy/ui/components/progress_bar/progress_bar.dart';
import 'package:selfprivacy/ui/pages/rootRoute.dart'; import 'package:selfprivacy/ui/pages/rootRoute.dart';
import 'package:selfprivacy/utils/route_transitions/basic.dart'; import 'package:selfprivacy/utils/route_transitions/basic.dart';
import 'package:easy_localization/easy_localization.dart';
class InitializingPage extends StatelessWidget { class InitializingPage extends StatelessWidget {
@override @override
@ -467,6 +467,22 @@ class InitializingPage extends StatelessWidget {
SizedBox(height: 10), SizedBox(height: 10),
BrandText.body2(text), BrandText.body2(text),
SizedBox(height: 10), SizedBox(height: 10),
if (doneCount == 0 && state.dnsMatches != null)
Column(
children: state.dnsMatches!.entries.map((entry) {
var domain = entry.key;
var isCorrect = entry.value;
return Row(
children: [
if (isCorrect) Icon(Icons.check, color: Colors.green),
if (!isCorrect) Icon(Icons.schedule, color: Colors.amber),
SizedBox(width: 10),
Text(domain),
],
);
}).toList(),
),
SizedBox(height: 10),
if (!state.isLoading) if (!state.isLoading)
Row( Row(
children: [ children: [

View File

@ -7,56 +7,56 @@ packages:
name: _fe_analyzer_shared name: _fe_analyzer_shared
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "22.0.0" version: "31.0.0"
analyzer: analyzer:
dependency: transitive dependency: transitive
description: description:
name: analyzer name: analyzer
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.7.2" version: "2.8.0"
archive: archive:
dependency: transitive dependency: transitive
description: description:
name: archive name: archive
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "3.1.2" version: "3.1.11"
args: args:
dependency: transitive dependency: transitive
description: description:
name: args name: args
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.2.0" version: "2.3.0"
asn1lib: asn1lib:
dependency: transitive dependency: transitive
description: description:
name: asn1lib name: asn1lib
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.0.2" version: "1.1.0"
async: async:
dependency: transitive dependency: transitive
description: description:
name: async name: async
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.8.1" version: "2.8.2"
auto_size_text: auto_size_text:
dependency: "direct main" dependency: "direct main"
description: description:
name: auto_size_text name: auto_size_text
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "3.0.0-nullsafety.0" version: "3.0.0"
basic_utils: basic_utils:
dependency: "direct main" dependency: "direct main"
description: description:
name: basic_utils name: basic_utils
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "3.5.0" version: "3.9.4"
bloc: bloc:
dependency: transitive dependency: transitive
description: description:
@ -77,7 +77,7 @@ packages:
name: build name: build
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.1.0" version: "2.2.1"
build_config: build_config:
dependency: transitive dependency: transitive
description: description:
@ -91,49 +91,49 @@ packages:
name: build_daemon name: build_daemon
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "3.0.0" version: "3.0.1"
build_resolvers: build_resolvers:
dependency: transitive dependency: transitive
description: description:
name: build_resolvers name: build_resolvers
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.0.4" version: "2.0.6"
build_runner: build_runner:
dependency: "direct dev" dependency: "direct dev"
description: description:
name: build_runner name: build_runner
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.1.1" version: "2.1.7"
build_runner_core: build_runner_core:
dependency: transitive dependency: transitive
description: description:
name: build_runner_core name: build_runner_core
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "7.1.0" version: "7.2.3"
built_collection: built_collection:
dependency: transitive dependency: transitive
description: description:
name: built_collection name: built_collection
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "5.1.0" version: "5.1.1"
built_value: built_value:
dependency: transitive dependency: transitive
description: description:
name: built_value name: built_value
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "8.1.2" version: "8.1.4"
characters: characters:
dependency: transitive dependency: transitive
description: description:
name: characters name: characters
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.1.0" version: "1.2.0"
charcode: charcode:
dependency: transitive dependency: transitive
description: description:
@ -154,7 +154,7 @@ packages:
name: cli_util name: cli_util
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.3.3" version: "0.3.5"
clock: clock:
dependency: transitive dependency: transitive
description: description:
@ -196,7 +196,7 @@ packages:
name: crypt name: crypt
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "4.0.1" version: "4.2.1"
crypto: crypto:
dependency: transitive dependency: transitive
description: description:
@ -217,21 +217,21 @@ packages:
name: cupertino_icons name: cupertino_icons
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.0.3" version: "1.0.4"
dart_style: dart_style:
dependency: transitive dependency: transitive
description: description:
name: dart_style name: dart_style
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.0.3" version: "2.2.1"
dio: dio:
dependency: "direct main" dependency: "direct main"
description: description:
name: dio name: dio
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "4.0.0" version: "4.0.4"
easy_localization: easy_localization:
dependency: "direct main" dependency: "direct main"
description: description:
@ -308,7 +308,7 @@ packages:
name: fl_chart name: fl_chart
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.40.0" version: "0.40.6"
flutter: flutter:
dependency: "direct main" dependency: "direct main"
description: flutter description: flutter
@ -339,14 +339,14 @@ packages:
name: flutter_markdown name: flutter_markdown
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.6.5" version: "0.6.9"
flutter_plugin_android_lifecycle: flutter_plugin_android_lifecycle:
dependency: transitive dependency: transitive
description: description:
name: flutter_plugin_android_lifecycle name: flutter_plugin_android_lifecycle
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.0.3" version: "2.0.5"
flutter_secure_storage: flutter_secure_storage:
dependency: "direct main" dependency: "direct main"
description: description:
@ -384,21 +384,21 @@ packages:
name: glob name: glob
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.0.1" version: "2.0.2"
graphs: graphs:
dependency: transitive dependency: transitive
description: description:
name: graphs name: graphs
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.0.0" version: "2.1.0"
hive: hive:
dependency: "direct main" dependency: "direct main"
description: description:
name: hive name: hive
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.0.4" version: "2.0.5"
hive_flutter: hive_flutter:
dependency: "direct main" dependency: "direct main"
description: description:
@ -412,14 +412,14 @@ packages:
name: hive_generator name: hive_generator
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.1.0" version: "1.1.2"
http: http:
dependency: transitive dependency: transitive
description: description:
name: http name: http
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.13.3" version: "0.13.4"
http_multi_server: http_multi_server:
dependency: transitive dependency: transitive
description: description:
@ -440,7 +440,7 @@ packages:
name: image name: image
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "3.0.2" version: "3.1.1"
intl: intl:
dependency: transitive dependency: transitive
description: description:
@ -475,42 +475,49 @@ packages:
name: json_annotation name: json_annotation
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "4.0.1" version: "4.4.0"
json_serializable: json_serializable:
dependency: "direct dev" dependency: "direct dev"
description: description:
name: json_serializable name: json_serializable
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "4.1.4" version: "6.1.4"
local_auth: local_auth:
dependency: "direct main" dependency: "direct main"
description: description:
name: local_auth name: local_auth
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.1.7" version: "1.1.10"
logging: logging:
dependency: transitive dependency: transitive
description: description:
name: logging name: logging
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.0.1" version: "1.0.2"
markdown: markdown:
dependency: transitive dependency: transitive
description: description:
name: markdown name: markdown
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "4.0.0" version: "4.0.1"
matcher: matcher:
dependency: transitive dependency: transitive
description: description:
name: matcher name: matcher
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.12.10" version: "0.12.11"
material_color_utilities:
dependency: transitive
description:
name: material_color_utilities
url: "https://pub.dartlang.org"
source: hosted
version: "0.1.3"
meta: meta:
dependency: transitive dependency: transitive
description: description:
@ -524,7 +531,7 @@ packages:
name: mime name: mime
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.0.0" version: "1.0.1"
modal_bottom_sheet: modal_bottom_sheet:
dependency: "direct main" dependency: "direct main"
description: description:
@ -559,7 +566,7 @@ packages:
name: package_config name: package_config
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.0.0" version: "2.0.2"
package_info: package_info:
dependency: "direct main" dependency: "direct main"
description: description:
@ -580,70 +587,77 @@ packages:
name: path_provider name: path_provider
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.0.2" version: "2.0.8"
path_provider_android:
dependency: transitive
description:
name: path_provider_android
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.11"
path_provider_ios:
dependency: transitive
description:
name: path_provider_ios
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.7"
path_provider_linux: path_provider_linux:
dependency: transitive dependency: transitive
description: description:
name: path_provider_linux name: path_provider_linux
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.0.2" version: "2.1.5"
path_provider_macos: path_provider_macos:
dependency: transitive dependency: transitive
description: description:
name: path_provider_macos name: path_provider_macos
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.0.2" version: "2.0.5"
path_provider_platform_interface: path_provider_platform_interface:
dependency: transitive dependency: transitive
description: description:
name: path_provider_platform_interface name: path_provider_platform_interface
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.0.1" version: "2.0.3"
path_provider_windows: path_provider_windows:
dependency: transitive dependency: transitive
description: description:
name: path_provider_windows name: path_provider_windows
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.0.3" version: "2.0.5"
pedantic:
dependency: transitive
description:
name: pedantic
url: "https://pub.dartlang.org"
source: hosted
version: "1.11.1"
petitparser: petitparser:
dependency: transitive dependency: transitive
description: description:
name: petitparser name: petitparser
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "4.1.0" version: "4.4.0"
platform: platform:
dependency: transitive dependency: transitive
description: description:
name: platform name: platform
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "3.0.2" version: "3.1.0"
plugin_platform_interface: plugin_platform_interface:
dependency: transitive dependency: transitive
description: description:
name: plugin_platform_interface name: plugin_platform_interface
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.0.1" version: "2.1.2"
pointycastle: pointycastle:
dependency: "direct main" dependency: "direct main"
description: description:
name: pointycastle name: pointycastle
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "3.3.2" version: "3.5.0"
pool: pool:
dependency: transitive dependency: transitive
description: description:
@ -664,35 +678,35 @@ packages:
name: process name: process
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "4.2.3" version: "4.2.4"
provider: provider:
dependency: "direct main" dependency: "direct main"
description: description:
name: provider name: provider
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "6.0.0" version: "6.0.2"
pub_semver: pub_semver:
dependency: transitive dependency: transitive
description: description:
name: pub_semver name: pub_semver
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.0.0" version: "2.1.0"
pubspec_parse: pubspec_parse:
dependency: transitive dependency: transitive
description: description:
name: pubspec_parse name: pubspec_parse
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.0.0" version: "1.2.0"
quiver: quiver:
dependency: transitive dependency: transitive
description: description:
name: quiver name: quiver
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "3.0.1" version: "3.0.1+1"
rsa_encrypt: rsa_encrypt:
dependency: "direct main" dependency: "direct main"
description: description:
@ -706,7 +720,7 @@ packages:
name: share_plus name: share_plus
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.1.4" version: "2.2.0"
share_plus_linux: share_plus_linux:
dependency: transitive dependency: transitive
description: description:
@ -748,14 +762,28 @@ packages:
name: shared_preferences name: shared_preferences
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.0.7" version: "2.0.13"
shared_preferences_android:
dependency: transitive
description:
name: shared_preferences_android
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.10"
shared_preferences_ios:
dependency: transitive
description:
name: shared_preferences_ios
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.9"
shared_preferences_linux: shared_preferences_linux:
dependency: transitive dependency: transitive
description: description:
name: shared_preferences_linux name: shared_preferences_linux
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.0.2" version: "2.0.4"
shared_preferences_macos: shared_preferences_macos:
dependency: transitive dependency: transitive
description: description:
@ -776,14 +804,14 @@ packages:
name: shared_preferences_web name: shared_preferences_web
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.0.2" version: "2.0.3"
shared_preferences_windows: shared_preferences_windows:
dependency: transitive dependency: transitive
description: description:
name: shared_preferences_windows name: shared_preferences_windows
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.0.2" version: "2.0.4"
shelf: shelf:
dependency: transitive dependency: transitive
description: description:
@ -823,14 +851,14 @@ packages:
name: source_gen name: source_gen
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.0.3" version: "1.2.1"
source_helper: source_helper:
dependency: transitive dependency: transitive
description: description:
name: source_helper name: source_helper
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.2.1" version: "1.3.1"
source_map_stack_trace: source_map_stack_trace:
dependency: transitive dependency: transitive
description: description:
@ -858,7 +886,7 @@ packages:
name: ssh_key name: ssh_key
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.7.0" version: "0.7.1"
stack_trace: stack_trace:
dependency: transitive dependency: transitive
description: description:
@ -900,21 +928,21 @@ packages:
name: test name: test
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.17.10" version: "1.19.5"
test_api: test_api:
dependency: transitive dependency: transitive
description: description:
name: test_api name: test_api
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.4.2" version: "0.4.8"
test_core: test_core:
dependency: transitive dependency: transitive
description: description:
name: test_core name: test_core
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.4.0" version: "0.4.9"
timing: timing:
dependency: transitive dependency: transitive
description: description:
@ -942,35 +970,49 @@ packages:
name: url_launcher name: url_launcher
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "6.0.9" version: "6.0.18"
url_launcher_android:
dependency: transitive
description:
name: url_launcher_android
url: "https://pub.dartlang.org"
source: hosted
version: "6.0.14"
url_launcher_ios:
dependency: transitive
description:
name: url_launcher_ios
url: "https://pub.dartlang.org"
source: hosted
version: "6.0.14"
url_launcher_linux: url_launcher_linux:
dependency: transitive dependency: transitive
description: description:
name: url_launcher_linux name: url_launcher_linux
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.0.1" version: "2.0.3"
url_launcher_macos: url_launcher_macos:
dependency: transitive dependency: transitive
description: description:
name: url_launcher_macos name: url_launcher_macos
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.0.1" version: "2.0.3"
url_launcher_platform_interface: url_launcher_platform_interface:
dependency: transitive dependency: transitive
description: description:
name: url_launcher_platform_interface name: url_launcher_platform_interface
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.0.4" version: "2.0.5"
url_launcher_web: url_launcher_web:
dependency: transitive dependency: transitive
description: description:
name: url_launcher_web name: url_launcher_web
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.0.4" version: "2.0.8"
url_launcher_windows: url_launcher_windows:
dependency: transitive dependency: transitive
description: description:
@ -984,56 +1026,56 @@ packages:
name: vector_math name: vector_math
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.1.0" version: "2.1.1"
vm_service: vm_service:
dependency: transitive dependency: transitive
description: description:
name: vm_service name: vm_service
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "6.2.0" version: "7.5.0"
wakelock: wakelock:
dependency: "direct main" dependency: "direct main"
description: description:
name: wakelock name: wakelock
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.5.3+3" version: "0.5.6"
wakelock_macos: wakelock_macos:
dependency: transitive dependency: transitive
description: description:
name: wakelock_macos name: wakelock_macos
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.1.0+2" version: "0.4.0"
wakelock_platform_interface: wakelock_platform_interface:
dependency: transitive dependency: transitive
description: description:
name: wakelock_platform_interface name: wakelock_platform_interface
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.2.1+2" version: "0.3.0"
wakelock_web: wakelock_web:
dependency: transitive dependency: transitive
description: description:
name: wakelock_web name: wakelock_web
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.2.0+2" version: "0.4.0"
wakelock_windows: wakelock_windows:
dependency: transitive dependency: transitive
description: description:
name: wakelock_windows name: wakelock_windows
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.1.0+1" version: "0.2.0"
watcher: watcher:
dependency: transitive dependency: transitive
description: description:
name: watcher name: watcher
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.0.0" version: "1.0.1"
web_socket_channel: web_socket_channel:
dependency: transitive dependency: transitive
description: description:
@ -1054,21 +1096,21 @@ packages:
name: win32 name: win32
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.2.7" version: "2.3.11"
xdg_directories: xdg_directories:
dependency: transitive dependency: transitive
description: description:
name: xdg_directories name: xdg_directories
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.2.0" version: "0.2.0+1"
xml: xml:
dependency: transitive dependency: transitive
description: description:
name: xml name: xml
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "5.1.2" version: "5.3.1"
yaml: yaml:
dependency: transitive dependency: transitive
description: description:
@ -1077,5 +1119,5 @@ packages:
source: hosted source: hosted
version: "3.1.0" version: "3.1.0"
sdks: sdks:
dart: ">=2.13.4 <3.0.0" dart: ">=2.15.0 <3.0.0"
flutter: ">=2.5.0" flutter: ">=2.10.0"

View File

@ -5,7 +5,7 @@ version: 0.4.2+10
environment: environment:
sdk: '>=2.13.4 <3.0.0' sdk: '>=2.13.4 <3.0.0'
flutter: ">=2.5.0" flutter: ">=2.10.0"
dependencies: dependencies:
flutter: flutter:
@ -47,7 +47,7 @@ dev_dependencies:
build_runner: ^2.1.1 build_runner: ^2.1.1
flutter_launcher_icons: ^0.9.0 flutter_launcher_icons: ^0.9.0
hive_generator: ^1.0.0 hive_generator: ^1.0.0
json_serializable: ^4.0.2 json_serializable: ^6.1.4
flutter_icons: flutter_icons:
android: "launcher_icon" android: "launcher_icon"