mirror of
https://codeberg.org/shroff/phylum.git
synced 2026-04-30 09:10:18 -05:00
[client] Only serialize LoggedInUser in the account
This commit is contained in:
@@ -1,7 +1,9 @@
|
||||
import 'dart:async';
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:offtheline/offtheline.dart';
|
||||
import 'package:phylum/libphylum/db/db.dart';
|
||||
import 'package:phylum/libphylum/logged_in_user.dart';
|
||||
import 'package:phylum/libphylum/repositories/bookmark_repository.dart';
|
||||
import 'package:phylum/libphylum/repositories/publink_repository.dart';
|
||||
import 'package:phylum/libphylum/repositories/resource_repository.dart';
|
||||
@@ -11,11 +13,7 @@ import 'package:phylum/libphylum/responses/responses.dart';
|
||||
import 'package:phylum/util/logging.dart';
|
||||
|
||||
const _persistKeyAccessToken = 'accessToken';
|
||||
const _persistKeyUserId = 'userId';
|
||||
const _persistKeyUserEmail = 'userEmail';
|
||||
const _persistKeyUserName = 'userName';
|
||||
const _persistKeyUserHome = 'userHome';
|
||||
const _persistKeyUserPermissions = 'userPermissions';
|
||||
const _persistKeyUser = 'user';
|
||||
|
||||
AccountManager<PhylumAccount> createAccountManager(bool autoInitialize) => AccountManager((id) async {
|
||||
final account = PhylumAccount.restore(id: id);
|
||||
@@ -47,6 +45,8 @@ class PhylumAccount extends Account<PhylumAccount> {
|
||||
Dispatcher dispatcher = HttpClientDispatcher();
|
||||
|
||||
String? _initialAccessToken;
|
||||
LoggedInUser? _initialLoggedInUser;
|
||||
|
||||
String? get accessToken => getPersisted(_persistKeyAccessToken);
|
||||
set _accessToken(String? value) {
|
||||
if (value != accessToken) {
|
||||
@@ -55,33 +55,23 @@ class PhylumAccount extends Account<PhylumAccount> {
|
||||
apiClient.setHeader('Authorization', 'bearer $value');
|
||||
}
|
||||
|
||||
int get userId => getPersisted<num>(_persistKeyUserId)?.toInt() ?? 0;
|
||||
set userId(int value) {
|
||||
persist(_persistKeyUserId, value);
|
||||
late LoggedInUser _loggedInUser;
|
||||
set loggedInUser(LoggedInUser value) {
|
||||
if (_loggedInUser != value) {
|
||||
_loggedInUser = value;
|
||||
persist(_persistKeyUser, value.toJson());
|
||||
}
|
||||
}
|
||||
|
||||
String get userEmail => getPersisted(_persistKeyUserEmail);
|
||||
set userEmail(String value) {
|
||||
persist(_persistKeyUserEmail, value);
|
||||
}
|
||||
int get userId => _loggedInUser.id;
|
||||
String get userEmail => _loggedInUser.email;
|
||||
String get userName => _loggedInUser.name;
|
||||
String get userHome => _loggedInUser.home;
|
||||
int get userPermissions => _loggedInUser.permissions;
|
||||
|
||||
String get userName => getPersisted(_persistKeyUserName);
|
||||
set userName(String value) {
|
||||
persist(_persistKeyUserName, value);
|
||||
}
|
||||
|
||||
String get userHome => getPersisted(_persistKeyUserHome);
|
||||
set userHome(String value) {
|
||||
persist(_persistKeyUserHome, value);
|
||||
}
|
||||
|
||||
int get userPermissions => getPersisted<num>(_persistKeyUserPermissions)?.toInt() ?? 0;
|
||||
set userPermissions(int value) {
|
||||
persist(_persistKeyUserPermissions, value);
|
||||
}
|
||||
|
||||
PhylumAccount.create({required super.serverUri, required String accessToken})
|
||||
PhylumAccount.create({required super.serverUri, required String accessToken, required LoggedInUser user})
|
||||
: _initialAccessToken = accessToken,
|
||||
_initialLoggedInUser = user,
|
||||
super.create();
|
||||
|
||||
PhylumAccount.restore({required super.id}) : super.restore();
|
||||
@@ -110,6 +100,7 @@ class PhylumAccount extends Account<PhylumAccount> {
|
||||
}
|
||||
}
|
||||
});
|
||||
_loggedInUser = _initialLoggedInUser ?? LoggedInUser.fromJson(jsonDecode(getPersisted(_persistKeyUser)));
|
||||
}
|
||||
|
||||
@override
|
||||
|
||||
@@ -40,11 +40,7 @@ class BootstrapLoginResponse extends PhylumApiSuccessResponse {
|
||||
batch.insertAll(account.db.users, users, mode: InsertMode.replace);
|
||||
});
|
||||
|
||||
account.userEmail = user.email;
|
||||
account.userName = user.name;
|
||||
account.userId = user.id;
|
||||
account.userHome = user.home;
|
||||
account.userPermissions = user.permissions;
|
||||
account.loggedInUser = user;
|
||||
|
||||
for (final b in bookmarks) {
|
||||
await account.datastore.get<Bookmark>().replaceRemoteData(b.resourceId, b);
|
||||
|
||||
@@ -12,6 +12,7 @@ import 'package:phylum/ui/common/logo_row.dart';
|
||||
import 'package:phylum/ui/login/instance_url_fragment.dart';
|
||||
import 'package:phylum/ui/login/password_login_fragment.dart';
|
||||
import 'package:phylum/util/dialogs.dart';
|
||||
import 'package:phylum/util/logging.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:uri/uri.dart';
|
||||
|
||||
@@ -136,13 +137,17 @@ class _LoginPageState extends State<LoginPage> {
|
||||
try {
|
||||
final response =
|
||||
BootstrapLoginResponse.fromResponse((jsonDecode(responseString) as Map).cast<String, dynamic>());
|
||||
final account = PhylumAccount.create(serverUri: instanceUri, accessToken: response.accessToken!);
|
||||
final account = PhylumAccount.create(
|
||||
serverUri: instanceUri,
|
||||
accessToken: response.accessToken!,
|
||||
user: response.user,
|
||||
);
|
||||
await account.initialized;
|
||||
await response.process(account);
|
||||
|
||||
await accountManager.addAccount(account);
|
||||
navigator.pop();
|
||||
} catch (e) {
|
||||
} catch (e, stack) {
|
||||
navigator.pop();
|
||||
if (context.mounted) {
|
||||
showAlertDialog(
|
||||
@@ -152,6 +157,7 @@ class _LoginPageState extends State<LoginPage> {
|
||||
message: e.toString(),
|
||||
);
|
||||
}
|
||||
logger.w('Login Error', error: e, stackTrace: stack);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user