fix: Seahorse does not properly work on many Linux devices
- stop use of `flutter_secure_storage` for Linux in favor of unencrypted storage Unlike many other platforms, many Linux distributions have built-in support for FDE or home directory encryption. As long as `flutter_secure_storage` makes FluffyChat useles on many Linuxes, this seems to be the only solution until they stop using Seahorse. Signed-off-by: TheOneWithTheBraid <the-one@with-the-braid.cf>
This commit is contained in:
parent
de7e678962
commit
4c6bae722e
@ -39,11 +39,11 @@ class AddStoryController extends State<AddStoryPage> {
|
||||
|
||||
bool get hasMedia => image != null || video != null;
|
||||
|
||||
void updateColors(String text) => hasMedia
|
||||
void updateColors() => hasMedia
|
||||
? null
|
||||
: setState(() {
|
||||
backgroundColor = text.color;
|
||||
backgroundColorDark = text.darkColor;
|
||||
backgroundColor = controller.text.color;
|
||||
backgroundColorDark = controller.text.darkColor;
|
||||
});
|
||||
|
||||
void importMedia() async {
|
||||
|
@ -98,7 +98,7 @@ class AddStoryView extends StatelessWidget {
|
||||
color: Colors.white,
|
||||
backgroundColor: !controller.hasMedia ? null : Colors.black,
|
||||
),
|
||||
onChanged: controller.updateColors,
|
||||
onEditingComplete: controller.updateColors,
|
||||
decoration: InputDecoration(
|
||||
border: InputBorder.none,
|
||||
hintText: controller.hasMedia
|
||||
|
@ -40,6 +40,8 @@ class FlutterFluffyBoxDatabase extends FluffyBoxDatabase {
|
||||
final containsEncryptionKey =
|
||||
await secureStorage.containsKey(key: _cipherStorageKey);
|
||||
if (!containsEncryptionKey) {
|
||||
// do not try to create a buggy secure storage for new Linux users
|
||||
if (Platform.isLinux) throw MissingPluginException();
|
||||
final key = Hive.generateSecureKey();
|
||||
await secureStorage.write(
|
||||
key: _cipherStorageKey,
|
||||
|
@ -31,7 +31,7 @@ class FlutterMatrixHiveStore extends FamedlySdkHiveDatabase {
|
||||
HiveCipher hiverCipher;
|
||||
try {
|
||||
// Workaround for secure storage is calling Platform.operatingSystem on web
|
||||
if (kIsWeb) throw MissingPluginException();
|
||||
if (kIsWeb || Platform.isLinux) throw MissingPluginException();
|
||||
|
||||
const secureStorage = FlutterSecureStorage();
|
||||
final containsEncryptionKey =
|
||||
|
@ -4,6 +4,7 @@ import 'package:flutter_app_lock/flutter_app_lock.dart';
|
||||
import 'package:flutter_gen/gen_l10n/l10n.dart';
|
||||
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
|
||||
import 'package:pin_code_text_field/pin_code_text_field.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
||||
import 'package:fluffychat/config/app_config.dart';
|
||||
import 'package:fluffychat/config/setting_keys.dart';
|
||||
@ -71,8 +72,12 @@ class _LockScreenState extends State<LockScreen> {
|
||||
hasError: _wrongInput,
|
||||
onDone: (String input) async {
|
||||
if (input ==
|
||||
await const FlutterSecureStorage()
|
||||
.read(key: SettingKeys.appLockKey)) {
|
||||
await ([TargetPlatform.linux]
|
||||
.contains(Theme.of(context).platform)
|
||||
? SharedPreferences.getInstance().then((prefs) =>
|
||||
prefs.getString(SettingKeys.appLockKey))
|
||||
: const FlutterSecureStorage()
|
||||
.read(key: SettingKeys.appLockKey))) {
|
||||
AppLock.of(context).didUnlock();
|
||||
} else {
|
||||
_textEditingController.clear();
|
||||
|
@ -14,6 +14,7 @@ import 'package:http/http.dart' as http;
|
||||
import 'package:matrix/encryption.dart';
|
||||
import 'package:matrix/matrix.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import 'package:universal_html/html.dart' as html;
|
||||
import 'package:url_launcher/url_launcher.dart';
|
||||
import 'package:vrouter/vrouter.dart';
|
||||
@ -32,6 +33,8 @@ import '../utils/background_push.dart';
|
||||
import '../utils/famedlysdk_store.dart';
|
||||
import '../utils/platform_infos.dart';
|
||||
|
||||
// import 'package:flutter_secure_storage/flutter_secure_storage.dart';
|
||||
|
||||
class Matrix extends StatefulWidget {
|
||||
static const String callNamespace = 'chat.fluffy.jitsi_call';
|
||||
|
||||
@ -407,8 +410,11 @@ class MatrixState extends State<Matrix> with WidgetsBindingObserver {
|
||||
// Display the app lock
|
||||
if (PlatformInfos.isMobile) {
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
const FlutterSecureStorage()
|
||||
.read(key: SettingKeys.appLockKey)
|
||||
([TargetPlatform.linux].contains(Theme.of(context).platform)
|
||||
? SharedPreferences.getInstance()
|
||||
.then((prefs) => prefs.getString(SettingKeys.appLockKey))
|
||||
: const FlutterSecureStorage()
|
||||
.read(key: SettingKeys.appLockKey))
|
||||
.then((lock) {
|
||||
if (lock?.isNotEmpty ?? false) {
|
||||
AppLock.of(widget.context).enable();
|
||||
|
@ -1233,12 +1233,12 @@ packages:
|
||||
source: hosted
|
||||
version: "2.0.4"
|
||||
shared_preferences:
|
||||
dependency: transitive
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: shared_preferences
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.0.11"
|
||||
version: "2.0.12"
|
||||
shared_preferences_android:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -66,6 +66,7 @@ dependencies:
|
||||
scroll_to_index: ^2.1.0
|
||||
sentry: ^6.0.1
|
||||
share: ^2.0.4
|
||||
shared_preferences: ^2.0.12
|
||||
slugify: ^2.0.0
|
||||
swipe_to_action: ^0.2.0
|
||||
uni_links: ^0.5.1
|
||||
|
Loading…
Reference in New Issue
Block a user