mirror of
https://git.selfprivacy.org/kherel/selfprivacy.org.app.git
synced 2025-02-04 07:20:39 +00:00
update
This commit is contained in:
parent
25a386d511
commit
a07a7247f5
|
@ -4,6 +4,7 @@ import 'dart:typed_data';
|
|||
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
|
||||
import 'package:hive/hive.dart';
|
||||
import 'package:hive_flutter/hive_flutter.dart';
|
||||
import 'package:selfprivacy/logic/models/backblaze_credential.dart';
|
||||
import 'package:selfprivacy/logic/models/cloudflare_domain.dart';
|
||||
import 'package:selfprivacy/logic/models/server_details.dart';
|
||||
import 'package:selfprivacy/logic/models/user.dart';
|
||||
|
@ -14,6 +15,7 @@ class HiveConfig {
|
|||
Hive.registerAdapter(UserAdapter());
|
||||
Hive.registerAdapter(HetznerServerDetailsAdapter());
|
||||
Hive.registerAdapter(CloudFlareDomainAdapter());
|
||||
Hive.registerAdapter(BackblazeCredentialAdapter());
|
||||
|
||||
await Hive.openBox(BNames.appSettings);
|
||||
var cipher = HiveAesCipher(await getEncriptedKey());
|
||||
|
|
|
@ -70,7 +70,7 @@ class HetznerApi extends ApiMap {
|
|||
);
|
||||
}
|
||||
|
||||
Future<HetznerServerDetails> reset({
|
||||
Future<HetznerServerDetails> restart({
|
||||
HetznerServerDetails server,
|
||||
}) async {
|
||||
await loggedClient.post('/${server.id}/actions/poweron');
|
||||
|
|
|
@ -3,6 +3,7 @@ import 'dart:async';
|
|||
import 'package:bloc/bloc.dart';
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:selfprivacy/logic/models/backblaze_credential.dart';
|
||||
import 'package:selfprivacy/logic/models/cloudflare_domain.dart';
|
||||
|
||||
import 'package:selfprivacy/logic/models/server_details.dart';
|
||||
|
@ -12,17 +13,23 @@ import 'app_config_repository.dart';
|
|||
|
||||
part 'app_config_state.dart';
|
||||
|
||||
/// initializeing steps:
|
||||
/// Initializing steps:
|
||||
/// 1. Hetzner key |setHetznerKey
|
||||
/// 2. Cloudflare key |setCloudflareKey
|
||||
/// 3. Set Domain address |setDomain
|
||||
/// 4. Set Root user name password |setRootUser
|
||||
/// 5. Set Create server ans set DNS-Records |createServerAndSetDnsRecords
|
||||
/// 3. Backblaze Id + Key |setBackblazeKey
|
||||
|
||||
/// 4. Set Domain address |setDomain
|
||||
/// 5. Set Root user name password |setRootUser
|
||||
/// 6. Set Create server ans set DNS-Records |createServerAndSetDnsRecords
|
||||
/// (without start)
|
||||
/// 6. ChecksAndSets:
|
||||
/// 6.1 checkDnsAndStartServer |checkDnsAndStartServer
|
||||
/// 6.2 setDkim |setDkim
|
||||
/// (checkServer + getDkim + Set DKIM)
|
||||
/// 7. ChecksAndSets:
|
||||
/// 7.1 checkDnsAndStartServer |checkDnsAndStartServer
|
||||
/// 7.2 setDkim |setDkim
|
||||
/// a. checkServer
|
||||
/// b. getDkim
|
||||
/// c. Set DKIM
|
||||
/// d. server restart
|
||||
|
||||
|
||||
class AppConfigCubit extends Cubit<AppConfigState> {
|
||||
AppConfigCubit() : super(InitialAppConfigState());
|
||||
|
@ -76,7 +83,8 @@ class AppConfigCubit extends Cubit<AppConfigState> {
|
|||
state.cloudFlareKey,
|
||||
state.cloudFlareDomain.zoneId,
|
||||
);
|
||||
var hetznerServerDetails = await repository.reset(
|
||||
|
||||
var hetznerServerDetails = await repository.restart(
|
||||
state.hetznerKey,
|
||||
state.hetznerServer,
|
||||
);
|
||||
|
@ -153,8 +161,12 @@ class AppConfigCubit extends Cubit<AppConfigState> {
|
|||
}
|
||||
}
|
||||
|
||||
void setBackblazeKey(String backblazeKey) {
|
||||
repository.saveBackblazeKey(backblazeKey);
|
||||
emit(state.copyWith(backblazeKey: backblazeKey));
|
||||
void setBackblazeKey(String keyId, String applicationKey) {
|
||||
var backblazeCredential = BackblazeCredential(
|
||||
keyId: keyId,
|
||||
applicationKey: applicationKey,
|
||||
);
|
||||
repository.saveBackblazeKey(backblazeCredential);
|
||||
emit(state.copyWith(backblazeCredential: backblazeCredential));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@ 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/api_maps/server.dart';
|
||||
import 'package:selfprivacy/logic/models/backblaze_credential.dart';
|
||||
import 'package:selfprivacy/logic/models/cloudflare_domain.dart';
|
||||
import 'package:selfprivacy/logic/models/server_details.dart';
|
||||
import 'package:selfprivacy/logic/models/user.dart';
|
||||
|
@ -20,7 +21,7 @@ class AppConfigRepository {
|
|||
hetznerKey: box.get(BNames.hetznerKey),
|
||||
cloudFlareKey: box.get(BNames.cloudFlareKey),
|
||||
cloudFlareDomain: box.get(BNames.cloudFlareDomain),
|
||||
backblazeKey: box.get(BNames.backblazeKey),
|
||||
backblazeCredential: box.get(BNames.backblazeKey),
|
||||
rootUser: box.get(BNames.rootUser),
|
||||
hetznerServer: box.get(BNames.hetznerServer),
|
||||
isServerStarted: box.get(BNames.isServerStarted, defaultValue: false),
|
||||
|
@ -37,8 +38,8 @@ class AppConfigRepository {
|
|||
box.put(BNames.hetznerKey, key);
|
||||
}
|
||||
|
||||
void saveBackblazeKey(String key) {
|
||||
box.put(BNames.backblazeKey, key);
|
||||
void saveBackblazeKey(BackblazeCredential backblazeCredential) {
|
||||
box.put(BNames.backblazeKey, backblazeCredential);
|
||||
}
|
||||
|
||||
void saveCloudFlare(String key) {
|
||||
|
@ -166,11 +167,11 @@ class AppConfigRepository {
|
|||
cloudflareApi.close();
|
||||
}
|
||||
|
||||
Future<HetznerServerDetails> reset(
|
||||
Future<HetznerServerDetails> restart(
|
||||
String hetznerKey,
|
||||
HetznerServerDetails server,
|
||||
) async {
|
||||
var hetznerApi = HetznerApi(hetznerKey);
|
||||
return await hetznerApi.reset(server: server);
|
||||
return await hetznerApi.restart(server: server);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@ class AppConfigState extends Equatable {
|
|||
const AppConfigState({
|
||||
this.hetznerKey,
|
||||
this.cloudFlareKey,
|
||||
this.backblazeKey,
|
||||
this.backblazeCredential,
|
||||
this.cloudFlareDomain,
|
||||
this.rootUser,
|
||||
this.hetznerServer,
|
||||
|
@ -21,7 +21,7 @@ class AppConfigState extends Equatable {
|
|||
List<Object> get props => [
|
||||
hetznerKey,
|
||||
cloudFlareKey,
|
||||
backblazeKey,
|
||||
backblazeCredential,
|
||||
cloudFlareDomain,
|
||||
rootUser,
|
||||
hetznerServer,
|
||||
|
@ -35,7 +35,7 @@ class AppConfigState extends Equatable {
|
|||
|
||||
final String hetznerKey;
|
||||
final String cloudFlareKey;
|
||||
final String backblazeKey;
|
||||
final BackblazeCredential backblazeCredential;
|
||||
final CloudFlareDomain cloudFlareDomain;
|
||||
final User rootUser;
|
||||
final HetznerServerDetails hetznerServer;
|
||||
|
@ -50,7 +50,7 @@ class AppConfigState extends Equatable {
|
|||
AppConfigState copyWith({
|
||||
String hetznerKey,
|
||||
String cloudFlareKey,
|
||||
String backblazeKey,
|
||||
BackblazeCredential backblazeCredential,
|
||||
CloudFlareDomain cloudFlareDomain,
|
||||
User rootUser,
|
||||
HetznerServerDetails hetznerServer,
|
||||
|
@ -65,7 +65,7 @@ class AppConfigState extends Equatable {
|
|||
AppConfigState(
|
||||
hetznerKey: hetznerKey ?? this.hetznerKey,
|
||||
cloudFlareKey: cloudFlareKey ?? this.cloudFlareKey,
|
||||
backblazeKey: backblazeKey ?? this.backblazeKey,
|
||||
backblazeCredential: backblazeCredential ?? this.backblazeCredential,
|
||||
cloudFlareDomain: cloudFlareDomain ?? this.cloudFlareDomain,
|
||||
rootUser: rootUser ?? this.rootUser,
|
||||
hetznerServer: hetznerServer ?? this.hetznerServer,
|
||||
|
@ -81,7 +81,7 @@ class AppConfigState extends Equatable {
|
|||
|
||||
bool get isHetznerFilled => hetznerKey != null;
|
||||
bool get isCloudFlareFilled => cloudFlareKey != null;
|
||||
bool get isBackblazeFilled => backblazeKey != null;
|
||||
bool get isBackblazeFilled => backblazeCredential != null;
|
||||
bool get isDomainFilled => cloudFlareDomain != null;
|
||||
bool get isUserFilled => rootUser != null;
|
||||
bool get isServerFilled => hetznerServer != null;
|
||||
|
|
|
@ -1,9 +1,8 @@
|
|||
|
||||
import 'dart:async';
|
||||
import 'dart:convert';
|
||||
import 'package:cubit_form/cubit_form.dart';
|
||||
import 'package:selfprivacy/logic/api_maps/backblaze.dart';
|
||||
import 'package:selfprivacy/logic/cubit/app_config/app_config_cubit.dart';
|
||||
import 'package:selfprivacy/logic/models/backblaze_credential.dart';
|
||||
|
||||
class BackblazeFormCubit extends FormCubit {
|
||||
BackblazeApi apiClient = BackblazeApi();
|
||||
|
@ -35,10 +34,10 @@ class BackblazeFormCubit extends FormCubit {
|
|||
|
||||
@override
|
||||
FutureOr<void> onSubmit() async {
|
||||
String encodedApiKey =
|
||||
encodeToBase64(keyId.state.value, applicationKey.state.value);
|
||||
|
||||
initializingCubit.setBackblazeKey(encodedApiKey);
|
||||
initializingCubit.setBackblazeKey(
|
||||
keyId.state.value,
|
||||
applicationKey.state.value,
|
||||
);
|
||||
}
|
||||
|
||||
final AppConfigCubit initializingCubit;
|
||||
|
@ -51,8 +50,10 @@ class BackblazeFormCubit extends FormCubit {
|
|||
FutureOr<bool> asyncValidation() async {
|
||||
bool isKeyValid;
|
||||
try {
|
||||
String encodedApiKey =
|
||||
encodeToBase64(keyId.state.value, applicationKey.state.value);
|
||||
String encodedApiKey = encodedBackblazeKey(
|
||||
keyId.state.value,
|
||||
applicationKey.state.value,
|
||||
);
|
||||
isKeyValid = await apiClient.isValid(encodedApiKey);
|
||||
} catch (e) {
|
||||
addError(e);
|
||||
|
@ -72,10 +73,4 @@ class BackblazeFormCubit extends FormCubit {
|
|||
|
||||
return super.close();
|
||||
}
|
||||
|
||||
String encodeToBase64(String keyId, String applicationKey) {
|
||||
String _apiKey = '$keyId:$applicationKey';
|
||||
String encodedApiKey = base64.encode(utf8.encode(_apiKey));
|
||||
return encodedApiKey;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
29
lib/logic/models/backblaze_credential.dart
Normal file
29
lib/logic/models/backblaze_credential.dart
Normal file
|
@ -0,0 +1,29 @@
|
|||
import 'dart:convert';
|
||||
|
||||
import 'package:hive/hive.dart';
|
||||
|
||||
part 'backblaze_credential.g.dart';
|
||||
|
||||
@HiveType(typeId: 4)
|
||||
class BackblazeCredential {
|
||||
BackblazeCredential({this.keyId, this.applicationKey});
|
||||
|
||||
@HiveField(0)
|
||||
final String keyId;
|
||||
|
||||
@HiveField(1)
|
||||
final String applicationKey;
|
||||
|
||||
get encodedApiKey => encodedBackblazeKey(keyId, applicationKey);
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return '$keyId: $encodedApiKey';
|
||||
}
|
||||
}
|
||||
|
||||
String encodedBackblazeKey(String keyId, String applicationKey) {
|
||||
String _apiKey = '$keyId:$applicationKey';
|
||||
String encodedApiKey = base64.encode(utf8.encode(_apiKey));
|
||||
return encodedApiKey;
|
||||
}
|
44
lib/logic/models/backblaze_credential.g.dart
Normal file
44
lib/logic/models/backblaze_credential.g.dart
Normal file
|
@ -0,0 +1,44 @@
|
|||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'backblaze_credential.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// TypeAdapterGenerator
|
||||
// **************************************************************************
|
||||
|
||||
class BackblazeCredentialAdapter extends TypeAdapter<BackblazeCredential> {
|
||||
@override
|
||||
final int typeId = 4;
|
||||
|
||||
@override
|
||||
BackblazeCredential read(BinaryReader reader) {
|
||||
final numOfFields = reader.readByte();
|
||||
final fields = <int, dynamic>{
|
||||
for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(),
|
||||
};
|
||||
return BackblazeCredential(
|
||||
keyId: fields[0] as String,
|
||||
applicationKey: fields[1] as String,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
void write(BinaryWriter writer, BackblazeCredential obj) {
|
||||
writer
|
||||
..writeByte(2)
|
||||
..writeByte(0)
|
||||
..write(obj.keyId)
|
||||
..writeByte(1)
|
||||
..write(obj.applicationKey);
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode => typeId.hashCode;
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) =>
|
||||
identical(this, other) ||
|
||||
other is BackblazeCredentialAdapter &&
|
||||
runtimeType == other.runtimeType &&
|
||||
typeId == other.typeId;
|
||||
}
|
|
@ -19,8 +19,8 @@ class HetznerServerDetailsAdapter extends TypeAdapter<HetznerServerDetails> {
|
|||
return HetznerServerDetails(
|
||||
ip4: fields[0] as String,
|
||||
id: fields[1] as int,
|
||||
startTime: fields[2] as DateTime,
|
||||
createTime: fields[3] as DateTime,
|
||||
startTime: fields[2] as DateTime,
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -32,10 +32,10 @@ class HetznerServerDetailsAdapter extends TypeAdapter<HetznerServerDetails> {
|
|||
..write(obj.ip4)
|
||||
..writeByte(1)
|
||||
..write(obj.id)
|
||||
..writeByte(2)
|
||||
..write(obj.startTime)
|
||||
..writeByte(3)
|
||||
..write(obj.createTime);
|
||||
..write(obj.createTime)
|
||||
..writeByte(2)
|
||||
..write(obj.startTime);
|
||||
}
|
||||
|
||||
@override
|
||||
|
|
Loading…
Reference in a new issue