Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor(core,schemas): refactor CodeVerification #6277

Merged
merged 3 commits into from
Jul 22, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ import { createMockProvider } from '#src/test-utils/oidc-provider.js';
import { MockTenant } from '#src/test-utils/tenant.js';
import { createContextWithRouteParameters } from '#src/utils/test-utils.js';

import { CodeVerification } from './verifications/code-verification.js';
import { EmailCodeVerification } from './verifications/code-verification.js';

const { jest } = import.meta;
const { mockEsm } = createMockUtils(jest);
Expand Down Expand Up @@ -75,9 +75,9 @@ describe('ExperienceInteraction class', () => {
};
const { libraries, queries } = tenant;

const emailVerificationRecord = new CodeVerification(libraries, queries, {
const emailVerificationRecord = new EmailCodeVerification(libraries, queries, {
id: 'mock_email_verification_id',
type: VerificationType.VerificationCode,
type: VerificationType.EmailVerificationCode,
identifier: {
type: SignInIdentifier.Email,
value: mockEmail,
Expand Down
12 changes: 10 additions & 2 deletions packages/core/src/routes/experience/classes/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
VerificationType,
type InteractionIdentifier,
type User,
type VerificationCodeSignInIdentifier,
} from '@logto/schemas';
import { conditional } from '@silverhand/essentials';

Expand Down Expand Up @@ -41,7 +42,8 @@
): Promise<InteractionProfile> => {
switch (verificationRecord.type) {
case VerificationType.NewPasswordIdentity:
case VerificationType.VerificationCode: {
case VerificationType.EmailVerificationCode:
case VerificationType.PhoneVerificationCode: {
return verificationRecord.toUserProfile();
}
case VerificationType.EnterpriseSso:
Expand Down Expand Up @@ -86,7 +88,8 @@

switch (verificationRecord.type) {
case VerificationType.Password:
case VerificationType.VerificationCode: {
case VerificationType.EmailVerificationCode:
case VerificationType.PhoneVerificationCode: {

Check warning on line 92 in packages/core/src/routes/experience/classes/utils.ts

View check run for this annotation

Codecov / codecov/patch

packages/core/src/routes/experience/classes/utils.ts#L91-L92

Added lines #L91 - L92 were not covered by tests
return { user: await verificationRecord.identifyUser() };
}
case VerificationType.Social: {
Expand Down Expand Up @@ -171,3 +174,8 @@
phoneNumber: primaryPhone ?? undefined,
};
}

export const codeVerificationIdentifierRecordTypeMap = Object.freeze({
[SignInIdentifier.Email]: VerificationType.EmailVerificationCode,
[SignInIdentifier.Phone]: VerificationType.PhoneVerificationCode,
}) satisfies Record<VerificationCodeSignInIdentifier, VerificationType>;
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import { mockSignInExperience } from '#src/__mocks__/sign-in-experience.js';
import RequestError from '#src/errors/RequestError/index.js';
import { MockTenant } from '#src/test-utils/tenant.js';

import { CodeVerification } from '../verifications/code-verification.js';
import { createNewCodeVerificationRecord } from '../verifications/code-verification.js';
import { EnterpriseSsoVerification } from '../verifications/enterprise-sso-verification.js';
import { type VerificationRecord } from '../verifications/index.js';
import { NewPasswordIdentityVerification } from '../verifications/new-password-identity-verification.js';
Expand Down Expand Up @@ -53,7 +53,7 @@ const passwordVerificationRecords = Object.fromEntries(
) as Record<SignInIdentifier, PasswordVerification>;

const verificationCodeVerificationRecords = Object.freeze({
[SignInIdentifier.Email]: CodeVerification.create(
[SignInIdentifier.Email]: createNewCodeVerificationRecord(
mockTenant.libraries,
mockTenant.queries,
{
Expand All @@ -62,7 +62,7 @@ const verificationCodeVerificationRecords = Object.freeze({
},
InteractionEvent.SignIn
),
[SignInIdentifier.Phone]: CodeVerification.create(
[SignInIdentifier.Phone]: createNewCodeVerificationRecord(
mockTenant.libraries,
mockTenant.queries,
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import {
InteractionEvent,
type SignInExperience,
SignInIdentifier,
SignInMode,
VerificationType,
} from '@logto/schemas';
Expand All @@ -18,12 +19,13 @@
const getEmailIdentifierFromVerificationRecord = (verificationRecord: VerificationRecord) => {
switch (verificationRecord.type) {
case VerificationType.Password:
case VerificationType.VerificationCode: {
case VerificationType.EmailVerificationCode:
case VerificationType.PhoneVerificationCode: {
const {
identifier: { type, value },
} = verificationRecord;

return type === 'email' ? value : undefined;
return type === SignInIdentifier.Email ? value : undefined;
}
case VerificationType.Social: {
const { socialUserInfo } = verificationRecord;
Expand Down Expand Up @@ -174,7 +176,8 @@

switch (verificationRecord.type) {
case VerificationType.Password:
case VerificationType.VerificationCode: {
case VerificationType.EmailVerificationCode:
case VerificationType.PhoneVerificationCode: {
const {
identifier: { type },
} = verificationRecord;
Expand Down Expand Up @@ -224,7 +227,8 @@
);
break;
}
case VerificationType.VerificationCode: {
case VerificationType.EmailVerificationCode:
case VerificationType.PhoneVerificationCode: {
const {
identifier: { type },
} = verificationRecord;
Expand Down Expand Up @@ -255,7 +259,8 @@
/** Forgot password only supports verification code type verification record */
private guardForgotPasswordVerificationMethod(verificationRecord: VerificationRecord) {
assertThat(
verificationRecord.type === VerificationType.VerificationCode,
verificationRecord.type === VerificationType.EmailVerificationCode ||
verificationRecord.type === VerificationType.PhoneVerificationCode,

Check warning on line 263 in packages/core/src/routes/experience/classes/validators/sign-in-experience-validator.ts

View check run for this annotation

Codecov / codecov/patch

packages/core/src/routes/experience/classes/validators/sign-in-experience-validator.ts#L262-L263

Added lines #L262 - L263 were not covered by tests
new RequestError({ code: 'session.not_supported_for_forgot_password', status: 422 })
);
}
Expand Down
Loading
Loading