Make tokens in AccountsStore private

This commit is contained in:
shilangyu 2021-01-17 16:35:47 +00:00
parent f0cfdc8bb8
commit f37da51137
5 changed files with 38 additions and 28 deletions

View File

@ -30,7 +30,7 @@ class ManageAccountPage extends HookWidget {
final userFuture = useMemoized(() async {
final site = await LemmyApi(instanceHost)
.v1
.getSite(auth: accountStore.tokens[instanceHost][username].raw);
.getSite(auth: accountStore.tokenFor(instanceHost, username).raw);
return site.myUser;
});
@ -98,7 +98,7 @@ class _ManageAccount extends HookWidget {
final deleteAccountPasswordController = useTextEditingController();
final token = accountsStore.tokens[user.instanceHost][user.name];
final token = accountsStore.tokenFor(user.instanceHost, user.name);
handleSubmit() async {
saveDelayedLoading.start();
@ -480,7 +480,7 @@ class _ImagePicker extends HookWidget {
final upload = await LemmyApi(user.instanceHost).pictrs.upload(
filePath: pic.path,
auth: accountsStore.tokens[user.instanceHost][user.name].raw,
auth: accountsStore.tokenFor(user.instanceHost, user.name).raw,
);
pictrsDeleteToken.value = upload.files[0];
url.value =

View File

@ -67,13 +67,12 @@ class UserProfileTab extends HookWidget {
context: context,
backgroundColor: Colors.transparent,
builder: (ctx) {
final userTags = <String>[];
accountsStore.tokens.forEach((instanceHost, value) {
value.forEach((username, _) {
userTags.add('$username@$instanceHost');
});
});
final userTags = <String>[
for (final instanceHost in accountsStore.loggedInInstances)
for (final username
in accountsStore.usernamesFor(instanceHost))
'$username@$instanceHost'
];
return BottomModal(
title: 'account',

View File

@ -187,7 +187,7 @@ class AccountsConfigPage extends HookWidget {
),
body: ListView(
children: [
if (accountsStore.tokens.isEmpty)
if (accountsStore.instances.isEmpty)
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
@ -228,7 +228,7 @@ class AccountsConfigPage extends HookWidget {
),
),
),
for (final username in accountsStore.tokens[instance].keys) ...[
for (final username in accountsStore.usernamesFor(instance)) ...[
Slidable(
actionPane: const SlidableBehindActionPane(),
key: Key('$username@$instance'),
@ -266,7 +266,7 @@ class AccountsConfigPage extends HookWidget {
),
),
],
if (accountsStore.tokens[instance].keys.isEmpty)
if (accountsStore.usernamesFor(instance).isEmpty)
ListTile(
leading: const Icon(Icons.add),
title: const Text('Add account'),

View File

@ -14,7 +14,6 @@ class AccountsStore extends ChangeNotifier {
/// If a token is in this map, the user is considered logged in
/// for that account.
/// `tokens['instanceHost']['username']`
HashMap<String, HashMap<String, Jwt>> get tokens => _tokens;
HashMap<String, HashMap<String, Jwt>> _tokens;
/// default account for a given instance
@ -64,7 +63,7 @@ class AccountsStore extends ChangeNotifier {
await prefs.setString(SharedPrefKeys.defaultAccount, _defaultAccount);
await prefs.setString(
SharedPrefKeys.defaultAccounts, jsonEncode(_defaultAccounts));
await prefs.setString(SharedPrefKeys.tokens, jsonEncode(tokens));
await prefs.setString(SharedPrefKeys.tokens, jsonEncode(_tokens));
}
/// automatically sets default accounts
@ -75,7 +74,7 @@ class AccountsStore extends ChangeNotifier {
final username = dft.value;
// if instance or username doesn't exist, remove
if (!instances.contains(instance) ||
!tokens[instance].containsKey(username)) {
!usernamesFor(instance).contains(username)) {
return instance;
}
}).forEach(_defaultAccounts.remove);
@ -84,7 +83,7 @@ class AccountsStore extends ChangeNotifier {
final username = _defaultAccount.split('@')[0];
// if instance or username doesn't exist, remove
if (!instances.contains(instance) ||
!tokens[instance].containsKey(username)) {
!usernamesFor(instance).contains(username)) {
_defaultAccount = null;
}
}
@ -95,7 +94,7 @@ class AccountsStore extends ChangeNotifier {
if (!_defaultAccounts.containsKey(instanceHost)) {
// select first account in this instance, if any
if (!isAnonymousFor(instanceHost)) {
setDefaultAccountFor(instanceHost, tokens[instanceHost].keys.first);
setDefaultAccountFor(instanceHost, usernamesFor(instanceHost).first);
}
}
}
@ -106,7 +105,7 @@ class AccountsStore extends ChangeNotifier {
for (final instanceHost in instances) {
// select first account in this instance, if any
if (!isAnonymousFor(instanceHost)) {
setDefaultAccount(instanceHost, tokens[instanceHost].keys.first);
setDefaultAccount(instanceHost, usernamesFor(instanceHost).first);
}
}
}
@ -142,7 +141,7 @@ class AccountsStore extends ChangeNotifier {
}
final userTag = _defaultAccount.split('@');
return tokens[userTag[1]][userTag[0]];
return _tokens[userTag[1]][userTag[0]];
}
Jwt defaultTokenFor(String instanceHost) {
@ -150,7 +149,15 @@ class AccountsStore extends ChangeNotifier {
return null;
}
return tokens[instanceHost][_defaultAccounts[instanceHost]];
return _tokens[instanceHost][_defaultAccounts[instanceHost]];
}
Jwt tokenFor(String instanceHost, String username) {
if (!usernamesFor(instanceHost).contains(username)) {
return null;
}
return _tokens[instanceHost][username];
}
/// sets globally default account
@ -176,17 +183,21 @@ class AccountsStore extends ChangeNotifier {
return true;
}
return tokens[instanceHost].isEmpty;
return _tokens[instanceHost].isEmpty;
}
/// `true` if no added instance has an account assigned to it
bool get hasNoAccount => loggedInInstances.isEmpty;
Iterable<String> get instances => tokens.keys;
Iterable<String> get instances => _tokens.keys;
Iterable<String> get loggedInInstances =>
instances.where((e) => !isAnonymousFor(e));
/// Usernames that are assigned to a given instance
Iterable<String> usernamesFor(String instanceHost) =>
_tokens[instanceHost].keys;
/// adds a new account
/// if it's the first account ever the account is
/// set as default for the app
@ -210,7 +221,7 @@ class AccountsStore extends ChangeNotifier {
final userData =
await lemmy.getSite(auth: token.raw).then((value) => value.myUser);
tokens[instanceHost][userData.name] = token;
_tokens[instanceHost][userData.name] = token;
_assignDefaultAccounts();
notifyListeners();
@ -237,7 +248,7 @@ class AccountsStore extends ChangeNotifier {
}
}
tokens[instanceHost] = HashMap();
_tokens[instanceHost] = HashMap();
_assignDefaultAccounts();
notifyListeners();
@ -246,7 +257,7 @@ class AccountsStore extends ChangeNotifier {
/// This also removes all accounts assigned to this instance
void removeInstance(String instanceHost) {
tokens.remove(instanceHost);
_tokens.remove(instanceHost);
_assignDefaultAccounts();
notifyListeners();
@ -254,7 +265,7 @@ class AccountsStore extends ChangeNotifier {
}
void removeAccount(String instanceHost, String username) {
tokens[instanceHost].remove(username);
_tokens[instanceHost].remove(username);
_assignDefaultAccounts();
notifyListeners();

View File

@ -330,7 +330,7 @@ class _AboutTab extends HookWidget {
final accStore = useAccountsStore();
final isOwnedAccount = accStore.loggedInInstances.contains(instanceHost) &&
accStore.tokens[instanceHost].containsKey(userDetails.user.name);
accStore.usernamesFor(instanceHost).contains(userDetails.user.name);
const wallPadding = EdgeInsets.symmetric(horizontal: 15);