refactor(auth): Migrate session storage to flutter_secure_storage

This commit is contained in:
gasaichandesu
2026-06-19 22:58:27 +04:00
parent 8f6ed5504b
commit 07b9e44350
10 changed files with 181 additions and 103 deletions
@@ -1,5 +1,6 @@
import 'dart:convert';
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
import 'package:injectable/injectable.dart';
import 'package:moonwell_launcher/features/launcher/domain/entities/launcher_session.dart';
import 'package:moonwell_launcher/features/preferences/domain/repositories/preferences_repository.dart';
@@ -9,12 +10,15 @@ const _outputDirKey = 'output_dir';
const _launcherSessionKey = 'launcher_session';
@LazySingleton(as: PreferencesRepository, env: ['flutter'])
class SharedPrefsPreferencesRepository implements PreferencesRepository {
class LocalPreferencesRepository implements PreferencesRepository {
final SharedPreferences _preferences;
final FlutterSecureStorage _secureStorage;
const SharedPrefsPreferencesRepository({
const LocalPreferencesRepository({
required SharedPreferences preferences,
}) : _preferences = preferences;
required FlutterSecureStorage secureStorage,
}) : _preferences = preferences,
_secureStorage = secureStorage;
@override
Future<Uri?> getOutputDir() {
@@ -33,35 +37,45 @@ class SharedPrefsPreferencesRepository implements PreferencesRepository {
}
@override
Future<LauncherSession?> getLauncherSession() {
final rawSession = _preferences.getString(_launcherSessionKey);
Future<LauncherSession?> getLauncherSession() async {
await _maybeClearLegacyLauncherSession();
final rawSession = await _secureStorage.read(key: _launcherSessionKey);
if (rawSession == null || rawSession.isEmpty) {
return Future.value(null);
return null;
}
try {
final decoded = jsonDecode(rawSession);
if (decoded is! Map) {
return Future.value(null);
return null;
}
final json = decoded.map((key, value) => MapEntry(key.toString(), value));
return Future.value(LauncherSession.fromJson(json));
return LauncherSession.fromJson(json);
} catch (_) {
return Future.value(null);
return null;
}
}
@override
Future<void> setLauncherSession(LauncherSession session) {
return _preferences.setString(
_launcherSessionKey,
jsonEncode(session.toJson()),
Future<void> setLauncherSession(LauncherSession session) async {
await _secureStorage.write(
key: _launcherSessionKey,
value: jsonEncode(session.toJson()),
);
await _maybeClearLegacyLauncherSession();
}
@override
Future<void> clearLauncherSession() {
return _preferences.remove(_launcherSessionKey);
Future<void> clearLauncherSession() async {
await _secureStorage.delete(key: _launcherSessionKey);
await _maybeClearLegacyLauncherSession();
}
Future<void> _maybeClearLegacyLauncherSession() async {
if (_preferences.containsKey(_launcherSessionKey)) {
await _preferences.remove(_launcherSessionKey);
}
}
}