user static method

Future<User?> user(
  1. HttpRequest request
)

Implementation

static Future<User?> user(HttpRequest request) async {
  final cookie = request.cookies.firstWhereOrNull(
    (cookie) => cookie.name == "archery_session",
  );
  final authSessions = App().tryMake<List<AuthSession>>();

  if (cookie == null || authSessions == null || authSessions.isEmpty) {
    return null;
  }

  final session = authSessions.firstWhereOrNull(
    (session) => session.cookie?.value == cookie.value,
  );

  if (session == null) return null;
  if (!_validateSession(session)) {
    await logout(request);
    return null;
  }
  session.lastActivity = DateTime.now();

  // Todo - implement eager-loading and relationships (planned)
  // api
  // session?.user.email => if there's a session, a user led to it's creation
  // user.session?.lastActivity => does this user have an active session?
  final sessionRecord = await Model.firstWhere<AuthSession>(
    field: "email",
    value: session.email,
  );

  if (sessionRecord != null) {
    return await Model.firstWhere<User>(
      field: "email",
      value: sessionRecord.email,
    );
  }
  return null;
}