ekyc

Electronic KYC process with uploading ID document using OAuth 2.1 (experimental)
Log | Files | Refs | README | LICENSE

login.ts (1243B)


      1 import { AuthRepository } from "#core/application/authn/auth_repository.ts";
      2 import { ExceedingLimit } from "#core/domain/limiter.ts";
      3 import { PasswordMismatch } from "#core/domain/password.ts";
      4 import { UUID } from "#core/domain/uuid.ts";
      5 
      6 export type AuthLoginRequest = {
      7   uuid: string;
      8   password: string;
      9 };
     10 
     11 export type AuthLoginResponse = {
     12   status: "loggedIn" | "invalid" | "blocked";
     13   delay: number;
     14   sessionToken: string | null;
     15 };
     16 
     17 export class AuthLoginUseCase {
     18   constructor(private readonly authRepo: AuthRepository) {
     19   }
     20 
     21   async execute(request: AuthLoginRequest): Promise<AuthLoginResponse> {
     22     try {
     23       const uuid = new UUID(request.uuid);
     24       const auth = await this.authRepo.find(uuid);
     25       const sessionToken = auth.login(request.password).toString();
     26       await this.authRepo.store(auth);
     27       return {
     28         status: "loggedIn",
     29         delay: 0,
     30         sessionToken,
     31       };
     32     } catch (error) {
     33       if (
     34         error instanceof ExceedingLimit || error instanceof PasswordMismatch
     35       ) {
     36         return {
     37           status: error instanceof PasswordMismatch ? "invalid" : "blocked",
     38           delay: error.delay,
     39           sessionToken: null,
     40         };
     41       }
     42       throw error;
     43     }
     44   }
     45 }