login method

Future<UserAccount> login({
  1. required String username,
  2. required String email,
  3. required String password,
})

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;
}