
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.
88 lines
2.6 KiB
Dart
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);
|
|
}
|
|
}
|