ekyc

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

auth.ts (2446B)


      1 import { Auth } from "#core/domain/auth.ts";
      2 import { Code } from "#core/domain/code.ts";
      3 import { PasswordHash } from "#core/domain/crypto.ts";
      4 import { Email } from "#core/domain/email.ts";
      5 import { EmailChallenge } from "#core/domain/email_challenge.ts";
      6 import { Password } from "#core/domain/password.ts";
      7 import { SessionToken } from "#core/domain/session_token.ts";
      8 import { Token } from "#core/domain/token.ts";
      9 import { UUID } from "#core/domain/uuid.ts";
     10 
     11 export type AuthDto = {
     12   uuid: string;
     13   email: string;
     14   emailVerified: boolean;
     15   emailCode: string | null;
     16   emailCodeExpire: Date;
     17   emailChallengeRequest: number;
     18   emailChallengeRequestExpire: Date;
     19   emailChallengeAttempt: number;
     20   emailChallengeAttemptExpire: Date;
     21   passwordHash: string;
     22   passwordAttempt: number;
     23   passwordAttemptExpire: Date;
     24   sessionToken: string | null;
     25   sessionExpire: Date;
     26   version: number;
     27 };
     28 
     29 export function mapFromAuth(auth: Auth): AuthDto {
     30   return {
     31     uuid: auth.id.toString(),
     32     email: auth.email.address.toString(),
     33     emailVerified: auth.email.verified,
     34     emailCode: auth.email.code?.toString() ?? null,
     35     emailCodeExpire: new Date(auth.email.codeExpire),
     36     emailChallengeRequest: auth.email.request,
     37     emailChallengeRequestExpire: new Date(auth.email.requestExpire),
     38     emailChallengeAttempt: auth.email.attempt,
     39     emailChallengeAttemptExpire: new Date(auth.email.attemptExpire),
     40     passwordHash: auth.password.hash.toString(),
     41     passwordAttempt: auth.password.attemptCount,
     42     passwordAttemptExpire: new Date(auth.password.attemptExpire),
     43     sessionToken: auth.session.valueOf()?.toString() ?? null,
     44     sessionExpire: new Date(auth.session.expire),
     45     version: auth.version,
     46   };
     47 }
     48 
     49 export function mapToAuth(dto: AuthDto) {
     50   return new Auth(
     51     new UUID(dto.uuid),
     52     new EmailChallenge(
     53       new Email(dto.email),
     54       dto.emailVerified,
     55       dto.emailCode ? new Code(dto.emailCode) : undefined,
     56       dto.emailCodeExpire.getTime(),
     57       dto.emailChallengeRequest,
     58       dto.emailChallengeRequestExpire.getTime(),
     59       dto.emailChallengeAttempt,
     60       dto.emailChallengeAttemptExpire.getTime(),
     61     ),
     62     new Password(
     63       new PasswordHash(dto.passwordHash),
     64       dto.passwordAttempt,
     65       dto.passwordAttemptExpire?.getTime(),
     66     ),
     67     new SessionToken(
     68       dto.sessionToken ? new Token(dto.sessionToken) : undefined,
     69       dto.sessionExpire?.getTime(),
     70     ),
     71     dto.version,
     72   );
     73 }