barcode_scanner/lib/services/token_provider.dart
mandreshope 9435907c28 feat: Adds session management and reception detail view
Updates the sign-in API endpoint to `/simpos/v1/sign_in`.
Captures the `set-cookie` header from successful sign-in responses and stores it as a `sessionId`.
Persists the session ID using secure storage and includes it in subsequent API requests via the `Cookie` header for improved session management.
Extends the `AuthModel` to include the new `sessionId` field.

Enables navigation from the reception list to a new reception details page, passing the selected reception's ID.
Refactors the `StockPickingCard` into a dedicated component and adds loading indicators to the reception list.
2025-07-29 13:45:24 +03:00

88 lines
2.6 KiB
Dart

import 'dart:convert';
import 'package:barcode_scanner/backend/schema/user/user_struct.dart';
import 'package:barcode_scanner/services/secure_storage.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
final tokenProvider = Provider((ref) {
final storage = ref.watch(sharedPrefsProvider);
return TokenProvider(storage);
});
class TokenProvider {
TokenProvider(this._storage);
final FlutterSecureStorage _storage;
static const String tokenKey = "tokenKey";
static const String sessionIdKey = "sessionIdKey";
static const String refreshTokenKey = "refreshTokenKey";
Future<void> setToken(String token) async {
return _storage.write(key: tokenKey, value: token);
}
Future<void> setSessionId(String sessionId) async {
return _storage.write(key: sessionIdKey, value: sessionId);
}
Future<void> setRefreshToken(String token) async {
return _storage.write(key: refreshTokenKey, value: token);
}
// Method to get the token from secure storage and check if it's expired
Future<String?> getToken() async {
final token = await _storage.read(key: tokenKey);
debugPrint("Token expired: $token");
return token;
}
Future<String?> getSessionId() async {
final value = await _storage.read(key: sessionIdKey);
return value;
}
Future<String?> getRefreshToken() async {
final refreshToken = await _storage.read(key: refreshTokenKey);
debugPrint("Refresh token: $refreshToken");
return refreshToken;
}
// Method to delete the token from secure storage
Future<void> deleteToken() async {
await _storage.delete(key: tokenKey);
await _storage.delete(key: refreshTokenKey);
await _storage.delete(key: sessionIdKey);
}
}
final userConnectedProvider = Provider((ref) {
final storage = ref.watch(sharedPrefsProvider);
return UserConnectedProvider(storage);
});
class UserConnectedProvider {
UserConnectedProvider(this._storage);
final FlutterSecureStorage _storage;
static const String key = "userConnectedKey";
Future<void> set(UserStruct user) async {
return _storage.write(key: key, value: jsonEncode(user.toJson()));
}
// Method to get the token from secure storage and check if it's expired
Future<UserStruct?> get() async {
final res = await _storage.read(key: key);
if (res == null) {
return null;
} else {
return UserStruct.fromJson(jsonDecode(res));
}
}
// Method to delete the token from secure storage
Future<void> delete() async {
await _storage.delete(key: key);
}
}