From 78ca650166203b8a9d7b664bb7e855baeb29878c Mon Sep 17 00:00:00 2001 From: otsmr Date: Thu, 19 Jun 2025 08:53:56 +0200 Subject: [PATCH] rename files --- lib/main.dart | 2 +- lib/src/services/api/media_upload.dart | 2 +- .../services/twonly_safe/common.service.dart | 87 +++++++++++++++++++ .../create_backup.service.dart} | 81 +---------------- .../views/settings/backup/backup.view.dart | 3 +- .../backup/twonly_safe_backup.view.dart | 2 +- 6 files changed, 93 insertions(+), 84 deletions(-) create mode 100644 lib/src/services/twonly_safe/common.service.dart rename lib/src/services/{twonly_safe.service.dart => twonly_safe/create_backup.service.dart} (76%) diff --git a/lib/main.dart b/lib/main.dart index 11eaca3..ca13af3 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -10,9 +10,9 @@ import 'package:twonly/src/services/api.service.dart'; import 'package:flutter/material.dart'; import 'package:twonly/src/providers/connection.provider.dart'; import 'package:twonly/src/providers/settings.provider.dart'; -import 'package:twonly/src/services/twonly_safe.service.dart'; import 'package:twonly/src/services/fcm.service.dart'; import 'package:twonly/src/services/notification.service.dart'; +import 'package:twonly/src/services/twonly_safe/create_backup.service.dart'; import 'package:twonly/src/utils/log.dart'; import 'package:twonly/src/utils/storage.dart'; import 'app.dart'; diff --git a/lib/src/services/api/media_upload.dart b/lib/src/services/api/media_upload.dart index ba8110e..eefa597 100644 --- a/lib/src/services/api/media_upload.dart +++ b/lib/src/services/api/media_upload.dart @@ -21,9 +21,9 @@ import 'package:twonly/src/model/json/message.dart'; import 'package:twonly/src/model/protobuf/api/http/http_requests.pb.dart'; import 'package:twonly/src/model/protobuf/api/websocket/error.pb.dart'; import 'package:twonly/src/services/api/media_download.dart'; -import 'package:twonly/src/services/twonly_safe.service.dart'; import 'package:twonly/src/services/notification.service.dart'; import 'package:twonly/src/services/signal/encryption.signal.dart'; +import 'package:twonly/src/services/twonly_safe/create_backup.service.dart'; import 'package:twonly/src/utils/log.dart'; import 'package:twonly/src/utils/misc.dart'; import 'package:twonly/src/utils/storage.dart'; diff --git a/lib/src/services/twonly_safe/common.service.dart b/lib/src/services/twonly_safe/common.service.dart new file mode 100644 index 0000000..87d2952 --- /dev/null +++ b/lib/src/services/twonly_safe/common.service.dart @@ -0,0 +1,87 @@ +import 'dart:convert'; +import 'package:drift/drift.dart'; +import 'package:hashlib/hashlib.dart'; +import 'package:http/http.dart' as http; +import 'package:twonly/src/model/json/userdata.dart'; +import 'package:twonly/src/services/api/media_upload.dart'; +import 'package:twonly/src/services/twonly_safe/create_backup.service.dart'; +import 'package:twonly/src/utils/log.dart'; +import 'package:twonly/src/utils/storage.dart'; + +Future getTwonlySafeBackupUrl() async { + final user = await getUser(); + if (user == null || user.twonlySafeBackup == null) return null; + + String backupServerUrl = "https://safe.twonly.eu/"; + + if (user.backupServer != null) { + backupServerUrl = user.backupServer!.serverUrl; + } + + String backupId = + uint8ListToHex(user.twonlySafeBackup!.backupId).toLowerCase(); + + return "${backupServerUrl}backups/$backupId"; +} + +Future enableTwonlySafe(String password) async { + final user = await getUser(); + if (user == null) return; + + final (backupId, encryptionKey) = await getMasterKey(password, user.username); + + await updateUserdata((user) { + user.twonlySafeBackup = TwonlySafeBackup( + encryptionKey: encryptionKey, + backupId: backupId, + ); + return user; + }); + performTwonlySafeBackup(force: true); +} + +Future disableTwonlySafe() async { + final serverUrl = await getTwonlySafeBackupUrl(); + if (serverUrl != null) { + try { + final response = await http.delete( + Uri.parse(serverUrl), + headers: { + 'Content-Type': 'application/json', // Set the content type if needed + // Add any other headers if required + }, + ); + Log.info("Download deleted with: ${response.statusCode}"); + } catch (e) { + Log.error("Could not connect to the server."); + } + } + await updateUserdata((user) { + user.twonlySafeBackup = null; + return user; + }); +} + +Future<(Uint8List, Uint8List)> getMasterKey( + String password, + String username, +) async { + List passwordBytes = utf8.encode(password); + List saltBytes = utf8.encode(username); + + // Parameters for scrypt + + // Create an instance of Scrypt + final scrypt = Scrypt( + cost: 65536, + blockSize: 8, + parallelism: 1, + derivedKeyLength: 64, + salt: saltBytes, + ); + + // Derive the key + // final key = (await compute(scrypt.convert, passwordBytes)).bytes; + final key = (scrypt.convert(passwordBytes)).bytes; + return (key.sublist(0, 32), key.sublist(32, 64)); +} diff --git a/lib/src/services/twonly_safe.service.dart b/lib/src/services/twonly_safe/create_backup.service.dart similarity index 76% rename from lib/src/services/twonly_safe.service.dart rename to lib/src/services/twonly_safe/create_backup.service.dart index 166f7b7..37ccbe3 100644 --- a/lib/src/services/twonly_safe.service.dart +++ b/lib/src/services/twonly_safe/create_backup.service.dart @@ -5,8 +5,6 @@ import 'package:cryptography_plus/cryptography_plus.dart'; import 'package:drift/drift.dart'; import 'package:drift_flutter/drift_flutter.dart'; import 'package:flutter_secure_storage/flutter_secure_storage.dart'; -import 'package:hashlib/hashlib.dart'; -import 'package:http/http.dart' as http; import 'package:path/path.dart'; import 'package:path_provider/path_provider.dart'; import 'package:twonly/src/constants/secure_storage_keys.dart'; @@ -14,26 +12,11 @@ import 'package:twonly/src/database/twonly_database.dart'; import 'package:twonly/src/model/json/userdata.dart'; import 'package:twonly/src/model/protobuf/backup/backup.pb.dart'; import 'package:twonly/src/services/api/media_upload.dart'; +import 'package:twonly/src/services/twonly_safe/common.service.dart'; import 'package:twonly/src/utils/log.dart'; import 'package:twonly/src/utils/storage.dart'; import 'package:twonly/src/views/settings/backup/backup.view.dart'; -Future getTwonlySafeBackupUrl() async { - final user = await getUser(); - if (user == null || user.twonlySafeBackup == null) return null; - - String backupServerUrl = "https://safe.twonly.eu/"; - - if (user.backupServer != null) { - backupServerUrl = user.backupServer!.serverUrl; - } - - String backupId = - uint8ListToHex(user.twonlySafeBackup!.backupId).toLowerCase(); - - return "${backupServerUrl}backups/$backupId"; -} - Future performTwonlySafeBackup({bool force = false}) async { final user = await getUser(); @@ -227,65 +210,3 @@ Future handleBackupStatusUpdate(TaskStatusUpdate update) async { } gUpdateBackupView(); } - -Future enableTwonlySafe(String password) async { - final user = await getUser(); - if (user == null) return; - - final (backupId, encryptionKey) = await getMasterKey(password, user.username); - - await updateUserdata((user) { - user.twonlySafeBackup = TwonlySafeBackup( - encryptionKey: encryptionKey, - backupId: backupId, - ); - return user; - }); - performTwonlySafeBackup(force: true); -} - -Future disableTwonlySafe() async { - final serverUrl = await getTwonlySafeBackupUrl(); - if (serverUrl != null) { - try { - final response = await http.delete( - Uri.parse(serverUrl), - headers: { - 'Content-Type': 'application/json', // Set the content type if needed - // Add any other headers if required - }, - ); - Log.info("Download deleted with: ${response.statusCode}"); - } catch (e) { - Log.error("Could not connect to the server."); - } - } - await updateUserdata((user) { - user.twonlySafeBackup = null; - return user; - }); -} - -Future<(Uint8List, Uint8List)> getMasterKey( - String password, - String username, -) async { - List passwordBytes = utf8.encode(password); - List saltBytes = utf8.encode(username); - - // Parameters for scrypt - - // Create an instance of Scrypt - final scrypt = Scrypt( - cost: 65536, - blockSize: 8, - parallelism: 1, - derivedKeyLength: 64, - salt: saltBytes, - ); - - // Derive the key - // final key = (await compute(scrypt.convert, passwordBytes)).bytes; - final key = (scrypt.convert(passwordBytes)).bytes; - return (key.sublist(0, 32), key.sublist(32, 64)); -} diff --git a/lib/src/views/settings/backup/backup.view.dart b/lib/src/views/settings/backup/backup.view.dart index bff5eb5..4b8bb63 100644 --- a/lib/src/views/settings/backup/backup.view.dart +++ b/lib/src/views/settings/backup/backup.view.dart @@ -1,7 +1,8 @@ import 'package:flutter/material.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:twonly/src/model/json/userdata.dart'; -import 'package:twonly/src/services/twonly_safe.service.dart'; +import 'package:twonly/src/services/twonly_safe/common.service.dart'; +import 'package:twonly/src/services/twonly_safe/create_backup.service.dart'; import 'package:twonly/src/utils/misc.dart'; import 'package:twonly/src/utils/storage.dart'; import 'package:twonly/src/views/components/alert_dialog.dart'; diff --git a/lib/src/views/settings/backup/twonly_safe_backup.view.dart b/lib/src/views/settings/backup/twonly_safe_backup.view.dart index 61791b3..bd1041a 100644 --- a/lib/src/views/settings/backup/twonly_safe_backup.view.dart +++ b/lib/src/views/settings/backup/twonly_safe_backup.view.dart @@ -2,7 +2,7 @@ import 'package:flutter/services.dart' show rootBundle; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; -import 'package:twonly/src/services/twonly_safe.service.dart'; +import 'package:twonly/src/services/twonly_safe/common.service.dart'; import 'package:twonly/src/utils/misc.dart'; import 'package:twonly/src/views/components/alert_dialog.dart'; import 'package:twonly/src/views/settings/backup/twonly_safe_server.view.dart';