| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- import 'dart:async';
- import 'dart:convert';
- import 'package:flutter/foundation.dart';
- import 'package:shared_preferences/shared_preferences.dart';
- import '/backend/schema/structs/index.dart';
- import 'custom_auth_user_provider.dart';
- export 'custom_auth_manager.dart';
- const _kAuthTokenKey = '_auth_authentication_token_';
- const _kRefreshTokenKey = '_auth_refresh_token_';
- const _kTokenExpirationKey = '_auth_token_expiration_';
- const _kUidKey = '_auth_uid_';
- const _kUserDataKey = '_auth_user_data_';
- class CustomAuthManager {
- // Auth session attributes
- String? authenticationToken;
- String? refreshToken;
- DateTime? tokenExpiration;
- // User attributes
- String? uid;
- UserStruct? userData;
- Future signOut() async {
- authenticationToken = null;
- refreshToken = null;
- tokenExpiration = null;
- uid = null;
- userData = null;
- // Update the current user.
- uitgaanskrantAuthUserSubject.add(
- UitgaanskrantAuthUser(loggedIn: false),
- );
- persistAuthData();
- }
- Future<UitgaanskrantAuthUser?> signIn({
- String? authenticationToken,
- String? refreshToken,
- DateTime? tokenExpiration,
- String? authUid,
- UserStruct? userData,
- }) async =>
- _updateCurrentUser(
- authenticationToken: authenticationToken,
- refreshToken: refreshToken,
- tokenExpiration: tokenExpiration,
- authUid: authUid,
- userData: userData,
- );
- void updateAuthUserData({
- String? authenticationToken,
- String? refreshToken,
- DateTime? tokenExpiration,
- String? authUid,
- UserStruct? userData,
- }) {
- assert(
- currentUser?.loggedIn ?? false,
- 'User must be logged in to update auth user data.',
- );
- _updateCurrentUser(
- authenticationToken: authenticationToken,
- refreshToken: refreshToken,
- tokenExpiration: tokenExpiration,
- authUid: authUid,
- userData: userData,
- );
- }
- UitgaanskrantAuthUser? _updateCurrentUser({
- String? authenticationToken,
- String? refreshToken,
- DateTime? tokenExpiration,
- String? authUid,
- UserStruct? userData,
- }) {
- this.authenticationToken = authenticationToken;
- this.refreshToken = refreshToken;
- this.tokenExpiration = tokenExpiration;
- this.uid = authUid;
- this.userData = userData;
- // Update the current user stream.
- final updatedUser = UitgaanskrantAuthUser(
- loggedIn: true,
- uid: authUid,
- userData: userData,
- );
- uitgaanskrantAuthUserSubject.add(updatedUser);
- persistAuthData();
- return updatedUser;
- }
- late SharedPreferences _prefs;
- Future initialize() async {
- _prefs = await SharedPreferences.getInstance();
- try {
- authenticationToken = _prefs.getString(_kAuthTokenKey);
- refreshToken = _prefs.getString(_kRefreshTokenKey);
- tokenExpiration = _prefs.getInt(_kTokenExpirationKey) != null
- ? DateTime.fromMillisecondsSinceEpoch(
- _prefs.getInt(_kTokenExpirationKey)!)
- : null;
- uid = _prefs.getString(_kUidKey);
- userData = _prefs.getString(_kUserDataKey) != null
- ? UserStruct.fromSerializableMap(
- (jsonDecode(_prefs.getString(_kUserDataKey)!) as Map)
- .cast<String, dynamic>(),
- )
- : null;
- } catch (e) {
- if (kDebugMode) {
- print('Error initializing auth: $e');
- }
- return;
- }
- final authTokenExists = authenticationToken != null;
- final tokenExpired =
- tokenExpiration != null && tokenExpiration!.isBefore(DateTime.now());
- final updatedUser = UitgaanskrantAuthUser(
- loggedIn: authTokenExists && !tokenExpired,
- uid: uid,
- userData: userData,
- );
- uitgaanskrantAuthUserSubject.add(updatedUser);
- }
- void persistAuthData() {
- authenticationToken != null
- ? _prefs.setString(_kAuthTokenKey, authenticationToken!)
- : _prefs.remove(_kAuthTokenKey);
- refreshToken != null
- ? _prefs.setString(_kRefreshTokenKey, refreshToken!)
- : _prefs.remove(_kRefreshTokenKey);
- tokenExpiration != null
- ? _prefs.setInt(
- _kTokenExpirationKey, tokenExpiration!.millisecondsSinceEpoch)
- : _prefs.remove(_kTokenExpirationKey);
- uid != null ? _prefs.setString(_kUidKey, uid!) : _prefs.remove(_kUidKey);
- userData != null
- ? _prefs.setString(
- _kUserDataKey, jsonEncode(userData!.toSerializableMap()))
- : _prefs.remove(_kUserDataKey);
- }
- }
- UitgaanskrantAuthUser? currentUser;
- bool get loggedIn => currentUser?.loggedIn ?? false;
|