mirror of
https://github.com/logto-io/logto.git
synced 2025-02-17 22:04:19 -05:00
refactor(core): move connector session read/write to social verification (#3072)
This commit is contained in:
parent
514930eb21
commit
eea02cca70
2 changed files with 38 additions and 41 deletions
|
@ -1,5 +1,3 @@
|
|||
import type { ConnectorSession } from '@logto/connector-kit';
|
||||
import { connectorSessionGuard } from '@logto/connector-kit';
|
||||
import type { Profile } from '@logto/schemas';
|
||||
import { InteractionEvent } from '@logto/schemas';
|
||||
import { assert } from '@silverhand/essentials';
|
||||
|
@ -7,7 +5,6 @@ import type { Context } from 'koa';
|
|||
import { errors } from 'oidc-provider';
|
||||
import type { InteractionResults } from 'oidc-provider';
|
||||
import type Provider from 'oidc-provider';
|
||||
import { z } from 'zod';
|
||||
|
||||
import RequestError from '#src/errors/RequestError/index.js';
|
||||
import assertThat from '#src/utils/assert-that.js';
|
||||
|
@ -135,40 +132,6 @@ export const clearInteractionStorage = async (ctx: Context, provider: Provider)
|
|||
}
|
||||
};
|
||||
|
||||
export const assignConnectorSessionResult = async (
|
||||
ctx: Context,
|
||||
provider: Provider,
|
||||
connectorSession: ConnectorSession
|
||||
) => {
|
||||
const details = await provider.interactionDetails(ctx.req, ctx.res);
|
||||
await provider.interactionResult(ctx.req, ctx.res, {
|
||||
...details.result,
|
||||
connectorSession,
|
||||
});
|
||||
};
|
||||
|
||||
export const getConnectorSessionResult = async (
|
||||
ctx: Context,
|
||||
provider: Provider
|
||||
): Promise<ConnectorSession> => {
|
||||
const { result } = await provider.interactionDetails(ctx.req, ctx.res);
|
||||
|
||||
const signInResult = z
|
||||
.object({
|
||||
connectorSession: connectorSessionGuard,
|
||||
})
|
||||
.safeParse(result);
|
||||
|
||||
assertThat(result && signInResult.success, 'session.connector_validation_session_not_found');
|
||||
|
||||
const { connectorSession, ...rest } = result;
|
||||
await provider.interactionResult(ctx.req, ctx.res, {
|
||||
...rest,
|
||||
});
|
||||
|
||||
return signInResult.data.connectorSession;
|
||||
};
|
||||
|
||||
/**
|
||||
* The following three methods (`getInteractionFromProviderByJti`, `assignResultToInteraction`
|
||||
* and `epochTime`) refer to implementation in
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
import type { ConnectorSession, SocialUserInfo } from '@logto/connector-kit';
|
||||
import { connectorSessionGuard } from '@logto/connector-kit';
|
||||
import type { SocialConnectorPayload } from '@logto/schemas';
|
||||
import { ConnectorType } from '@logto/schemas';
|
||||
import type { Context } from 'koa';
|
||||
import type Provider from 'oidc-provider';
|
||||
import { z } from 'zod';
|
||||
|
||||
import type { WithLogContext } from '#src/middleware/koa-audit-log.js';
|
||||
import {
|
||||
assignConnectorSessionResult,
|
||||
getConnectorSessionResult,
|
||||
} from '#src/routes/interaction/utils/interaction.js';
|
||||
import type TenantContext from '#src/tenants/TenantContext.js';
|
||||
import assertThat from '#src/utils/assert-that.js';
|
||||
|
||||
|
@ -73,3 +73,37 @@ export const verifySocialIdentity = async (
|
|||
|
||||
return userInfo;
|
||||
};
|
||||
|
||||
const assignConnectorSessionResult = async (
|
||||
ctx: Context,
|
||||
provider: Provider,
|
||||
connectorSession: ConnectorSession
|
||||
) => {
|
||||
const details = await provider.interactionDetails(ctx.req, ctx.res);
|
||||
await provider.interactionResult(ctx.req, ctx.res, {
|
||||
...details.result,
|
||||
connectorSession,
|
||||
});
|
||||
};
|
||||
|
||||
const getConnectorSessionResult = async (
|
||||
ctx: Context,
|
||||
provider: Provider
|
||||
): Promise<ConnectorSession> => {
|
||||
const { result } = await provider.interactionDetails(ctx.req, ctx.res);
|
||||
|
||||
const signInResult = z
|
||||
.object({
|
||||
connectorSession: connectorSessionGuard,
|
||||
})
|
||||
.safeParse(result);
|
||||
|
||||
assertThat(result && signInResult.success, 'session.connector_validation_session_not_found');
|
||||
|
||||
const { connectorSession, ...rest } = result;
|
||||
await provider.interactionResult(ctx.req, ctx.res, {
|
||||
...rest,
|
||||
});
|
||||
|
||||
return signInResult.data.connectorSession;
|
||||
};
|
||||
|
|
Loading…
Add table
Reference in a new issue