mirror of
https://github.com/lollipopkit/flutter_server_box.git
synced 2025-12-17 23:34:24 +01:00
opt.: backup
This commit is contained in:
@@ -1,6 +1,21 @@
|
||||
import 'dart:convert';
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:logging/logging.dart';
|
||||
import 'package:toolbox/data/model/server/private_key_info.dart';
|
||||
import 'package:toolbox/data/model/server/server_private_info.dart';
|
||||
import 'package:toolbox/data/model/server/snippet.dart';
|
||||
import 'package:toolbox/data/res/path.dart';
|
||||
import 'package:toolbox/data/store/docker.dart';
|
||||
import 'package:toolbox/data/store/private_key.dart';
|
||||
import 'package:toolbox/data/store/server.dart';
|
||||
import 'package:toolbox/data/store/setting.dart';
|
||||
import 'package:toolbox/data/store/snippet.dart';
|
||||
import 'package:toolbox/locator.dart';
|
||||
|
||||
const backupFormatVersion = 1;
|
||||
|
||||
final _logger = Logger('Backup');
|
||||
|
||||
class Backup {
|
||||
// backup format version
|
||||
@@ -45,4 +60,63 @@ class Backup {
|
||||
'dockerHosts': dockerHosts,
|
||||
'settings': settings,
|
||||
};
|
||||
|
||||
Backup.loadFromStore()
|
||||
: version = backupFormatVersion,
|
||||
date = DateTime.now().toString().split('.').first,
|
||||
spis = _server.fetch(),
|
||||
snippets = _snippet.fetch(),
|
||||
keys = _privateKey.fetch(),
|
||||
dockerHosts = _dockerHosts.fetchAll(),
|
||||
settings = _setting.toJson();
|
||||
|
||||
static Future<void> backup() async {
|
||||
final result = _diyEncrtpt(json.encode(Backup.loadFromStore()));
|
||||
await File(await backupPath).writeAsString(result);
|
||||
}
|
||||
|
||||
Future<void> restore() async {
|
||||
for (final s in snippets) {
|
||||
_snippet.put(s);
|
||||
}
|
||||
for (final s in spis) {
|
||||
_server.put(s);
|
||||
}
|
||||
for (final s in keys) {
|
||||
_privateKey.put(s);
|
||||
}
|
||||
for (final k in dockerHosts.keys) {
|
||||
final val = dockerHosts[k];
|
||||
if (val != null && val is String && val.isNotEmpty) {
|
||||
_dockerHosts.put(k, val);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Backup.fromJsonString(String raw)
|
||||
: this.fromJson(json.decode(_diyDecrypt(raw)));
|
||||
}
|
||||
|
||||
final _server = locator<ServerStore>();
|
||||
final _snippet = locator<SnippetStore>();
|
||||
final _privateKey = locator<PrivateKeyStore>();
|
||||
final _dockerHosts = locator<DockerStore>();
|
||||
final _setting = locator<SettingStore>();
|
||||
|
||||
String _diyEncrtpt(String raw) => json.encode(
|
||||
raw.codeUnits.map((e) => e * 2 + 1).toList(growable: false),
|
||||
);
|
||||
|
||||
String _diyDecrypt(String raw) {
|
||||
try {
|
||||
final list = json.decode(raw);
|
||||
final sb = StringBuffer();
|
||||
for (final e in list) {
|
||||
sb.writeCharCode((e - 1) ~/ 2);
|
||||
}
|
||||
return sb.toString();
|
||||
} catch (e, trace) {
|
||||
_logger.warning('Decrypt failed', e, trace);
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -144,7 +144,7 @@ class PsResult {
|
||||
procs.add(Proc.parse(line, map));
|
||||
} catch (e, trace) {
|
||||
errs.add('$line: $e');
|
||||
_logger.warning(trace);
|
||||
_logger.warning('Parse process failed', e, trace);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user