Files
lis/mylis/lib/services/session_store.dart
T
2026-07-22 16:33:42 +07:00

102 lines
2.8 KiB
Dart

part of '../app/app.dart';
class SessionStore {
static const _tokenKey = 'mylis_token';
static const _baseUrlKey = 'mylis_base_url';
static const _usernameKey = 'mylis_username';
static const _passwordKey = 'mylis_password';
static Future<String?> token() async {
final prefs = await SharedPreferences.getInstance();
return prefs.getString(_tokenKey);
}
static Future<String> baseUrl() async {
final prefs = await SharedPreferences.getInstance();
return prefs.getString(_baseUrlKey) ?? kDefaultBaseUrl;
}
static Future<SessionData> session() async {
final prefs = await SharedPreferences.getInstance();
return SessionData(
token: prefs.getString(_tokenKey),
baseUrl: prefs.getString(_baseUrlKey) ?? kDefaultBaseUrl,
username: prefs.getString(_usernameKey),
password: prefs.getString(_passwordKey),
);
}
static Future<void> saveToken(String token) async {
final prefs = await SharedPreferences.getInstance();
await prefs.setString(_tokenKey, token);
}
static Future<void> saveLogin({
required String baseUrl,
required String token,
required String username,
required String password,
}) async {
final prefs = await SharedPreferences.getInstance();
await prefs.setString(_baseUrlKey, normalizeBaseUrl(baseUrl));
await prefs.setString(_tokenKey, token);
await prefs.setString(_usernameKey, username);
await prefs.setString(_passwordKey, password);
}
static Future<StoredCredentials?> credentials() async {
final prefs = await SharedPreferences.getInstance();
final username = prefs.getString(_usernameKey);
final password = prefs.getString(_passwordKey);
if (username == null ||
username.trim().isEmpty ||
password == null ||
password.isEmpty) {
return null;
}
return StoredCredentials(username: username, password: password);
}
static Future<void> saveBaseUrl(String baseUrl) async {
final prefs = await SharedPreferences.getInstance();
await prefs.setString(_baseUrlKey, normalizeBaseUrl(baseUrl));
}
static Future<void> clear() async {
final prefs = await SharedPreferences.getInstance();
await prefs.remove(_tokenKey);
}
}
class SessionData {
const SessionData({
this.token,
this.baseUrl = kDefaultBaseUrl,
this.username,
this.password,
});
final String? token;
final String baseUrl;
final String? username;
final String? password;
}
class StoredCredentials {
const StoredCredentials({required this.username, required this.password});
final String username;
final String password;
}
String normalizeBaseUrl(String value) {
var url = value.trim();
if (url.isEmpty) {
return kDefaultBaseUrl;
}
if (!url.startsWith('http://') && !url.startsWith('https://')) {
url = 'https://$url';
}
return url.replaceAll(RegExp(r'/+$'), '');
}