Files
buzz/mobile/lib/shared/auth/credential_storage.dart
2026-04-14 20:20:35 -07:00

61 lines
1.7 KiB
Dart

import 'package:flutter_secure_storage/flutter_secure_storage.dart';
class StoredCredentials {
final String relayUrl;
final String token;
final String? pubkey;
final String? nsec;
const StoredCredentials({
required this.relayUrl,
required this.token,
this.pubkey,
this.nsec,
});
}
class CredentialStorage {
static const _keyRelayUrl = 'sprout_relay_url';
static const _keyToken = 'sprout_token';
static const _keyPubkey = 'sprout_pubkey';
static const _keyNsec = 'sprout_nsec';
final FlutterSecureStorage _storage;
CredentialStorage([FlutterSecureStorage? storage])
: _storage = storage ?? const FlutterSecureStorage();
Future<StoredCredentials?> load() async {
final relayUrl = await _storage.read(key: _keyRelayUrl);
final token = await _storage.read(key: _keyToken);
if (relayUrl == null || token == null) return null;
final pubkey = await _storage.read(key: _keyPubkey);
final nsec = await _storage.read(key: _keyNsec);
return StoredCredentials(
relayUrl: relayUrl,
token: token,
pubkey: pubkey,
nsec: nsec,
);
}
Future<void> save(StoredCredentials credentials) async {
await _storage.write(key: _keyRelayUrl, value: credentials.relayUrl);
await _storage.write(key: _keyToken, value: credentials.token);
if (credentials.pubkey != null) {
await _storage.write(key: _keyPubkey, value: credentials.pubkey);
}
if (credentials.nsec != null) {
await _storage.write(key: _keyNsec, value: credentials.nsec);
}
}
Future<void> clear() async {
await _storage.delete(key: _keyRelayUrl);
await _storage.delete(key: _keyToken);
await _storage.delete(key: _keyPubkey);
await _storage.delete(key: _keyNsec);
}
}