Scaffold backend gateway and integration docs
This commit is contained in:
@@ -0,0 +1,20 @@
|
||||
import 'package:relationship_saver/core/auth/token_store.dart';
|
||||
import 'package:relationship_saver/integrations/backend/models/backend_models.dart';
|
||||
|
||||
/// Simple in-memory [TokenStore] used in tests and local fakes.
|
||||
class InMemoryTokenStore implements TokenStore {
|
||||
AuthSession? _session;
|
||||
|
||||
@override
|
||||
Future<void> clear() async {
|
||||
_session = null;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<AuthSession?> read() async => _session;
|
||||
|
||||
@override
|
||||
Future<void> write(AuthSession session) async {
|
||||
_session = session;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
|
||||
import 'package:relationship_saver/core/auth/token_store.dart';
|
||||
import 'package:relationship_saver/integrations/backend/models/backend_models.dart';
|
||||
|
||||
/// [TokenStore] backed by platform secure storage.
|
||||
class SecureTokenStore implements TokenStore {
|
||||
SecureTokenStore({FlutterSecureStorage? storage})
|
||||
: _storage = storage ?? const FlutterSecureStorage();
|
||||
|
||||
static const String _sessionKey = 'backend_auth_session_v1';
|
||||
final FlutterSecureStorage _storage;
|
||||
|
||||
@override
|
||||
Future<AuthSession?> read() async {
|
||||
final String? raw = await _storage.read(key: _sessionKey);
|
||||
if (raw == null || raw.isEmpty) {
|
||||
return null;
|
||||
}
|
||||
|
||||
try {
|
||||
final Map<String, dynamic> json = jsonDecode(raw) as Map<String, dynamic>;
|
||||
return AuthSession.fromJson(json);
|
||||
} on FormatException {
|
||||
await clear();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> write(AuthSession session) async {
|
||||
final String raw = jsonEncode(session.toJson());
|
||||
await _storage.write(key: _sessionKey, value: raw);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> clear() => _storage.delete(key: _sessionKey);
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
import 'package:relationship_saver/integrations/backend/models/backend_models.dart';
|
||||
|
||||
/// Session token persistence abstraction.
|
||||
abstract interface class TokenStore {
|
||||
/// Reads the current session, if any.
|
||||
Future<AuthSession?> read();
|
||||
|
||||
/// Persists a full auth session.
|
||||
Future<void> write(AuthSession session);
|
||||
|
||||
/// Clears all stored auth state.
|
||||
Future<void> clear();
|
||||
}
|
||||
Reference in New Issue
Block a user