finishRegistration static method

Future<AuthSuccess> finishRegistration(
  1. Session session, {
  2. required UuidValue accountRequestId,
  3. required String verificationCode,
  4. Transaction? transaction,
})

Completes a new account registration, creating a new auth user with a profile and attaching the given email account to it.

Throws an EmailAccountRequestNotFoundException in case the accountRequestId does not point to an existing request. Throws an EmailAccountRequestExpiredException in case the request's validation window has elapsed. Throws an EmailAccountRequestTooManyAttemptsException in case too many attempts have been made at finishing the same account request. Throws an EmailAccountRequestUnauthorizedException in case the verificationCode is not valid.

Returns a session for the newly created user.

Implementation

static Future<AuthSuccess> finishRegistration(
  final Session session, {
  required final UuidValue accountRequestId,
  required final String verificationCode,
  final Transaction? transaction,
}) async {
  return DatabaseUtil.runInTransactionOrSavepoint(
    session.db,
    transaction,
    (final transaction) async {
      final accountRequest = await EmailAccounts.verifyAccountCreation(
        session,
        accountRequestId: accountRequestId,
        verificationCode: verificationCode,
        transaction: transaction,
      );

      final newUser = await AuthUsers.create(
        session,
        transaction: transaction,
      );
      final authUserId = newUser.id;

      await UserProfiles.createUserProfile(
        session,
        authUserId,
        UserProfileData(
          email: accountRequest.email,
        ),
        transaction: transaction,
      );

      await EmailAccounts.completeAccountCreation(
        session,
        accountRequestId: accountRequestId,
        authUserId: authUserId,
        transaction: transaction,
      );

      return admin.createSession(
        session,
        authUserId,
        transaction: transaction,
      );
    },
  );
}