login method
Implementation
Future<UserAccount> login({
required String username,
required String email,
required String password,
}) async {
final users = await _readUsers();
final user = users
.where((u) => u.email == email && u.username == username)
.firstOrNull;
if (user == null) {
throw StateError('user not found');
}
if (user.passwordHash != _hash(password)) {
throw StateError('invalid password');
}
final session = await _issueTokenForUser(users, users.indexOf(user));
await addActivity(
email: user.email,
action: 'login',
message: 'User logged in',
);
return session;
}