UNPKG

@youngshand/payload-auth-plugin

Version:

A temporary fork for testing of Authentication plugin for Payload CMS, use @payload-auth-plugin

118 lines (101 loc) 2.95 kB
import type { BasePayload, Config, Endpoint, PayloadRequest, Plugin, } from "payload" import { EndpointsFactory, OAuthEndpointStrategy, PasskeyEndpointStrategy, } from "../core/endpoints.js" import type { AccountInfo, ProvidersConfig } from "../types.js" import { PayloadSession } from "../core/session/payload.js" import { InvalidServerURL } from "../core/errors/consoleErrors.js" import { getOAuthProviders, getPasskeyProvider } from "../providers/utils.js" import { preflightCollectionCheck } from "../core/preflights/collections.js" interface PluginOptions { /* Enable or disable plugin * @default true */ enabled?: boolean /* * OAuth Providers */ providers: ProvidersConfig[] /* * Accounts collections config */ accountsCollectionSlug: string /* Enable or disable user creation. WARNING: If applied to your admin users collection it will allow ANYONE to sign up as an admin. * @default false */ allowSignUp?: boolean } export const adminAuthPlugin = (pluginOptions: PluginOptions): Plugin => (incomingConfig: Config): Config => { const config = { ...incomingConfig } if (pluginOptions.enabled === false) { return config } if (!config.serverURL) { throw new InvalidServerURL() } const { accountsCollectionSlug, providers, allowSignUp } = pluginOptions preflightCollectionCheck( [config.admin?.user!, accountsCollectionSlug], config.collections, ) config.admin = { ...(config.admin ?? {}), } const session = new PayloadSession( { accountsCollectionSlug: accountsCollectionSlug, usersCollectionSlug: config.admin.user!, }, allowSignUp, ) const oauthProviders = getOAuthProviders(providers) const passkeyProvider = getPasskeyProvider(providers) const endpointsFactory = new EndpointsFactory("admin") let oauthEndpoints: Endpoint[] = [] let passkeyEndpoints: Endpoint[] = [] if (Object.keys(oauthProviders).length > 0) { endpointsFactory.registerStrategy( "oauth", new OAuthEndpointStrategy(oauthProviders), ) oauthEndpoints = endpointsFactory.createEndpoints("oauth", { sessionCallback: ( oauthAccountInfo: AccountInfo, scope: string, issuerName: string, request: PayloadRequest, clientOrigin: string, ) => session.createSession( oauthAccountInfo, scope, issuerName, request, clientOrigin, ), }) } if (passkeyProvider) { endpointsFactory.registerStrategy( "passkey", new PasskeyEndpointStrategy(), ) passkeyEndpoints = endpointsFactory.createEndpoints("passkey") } config.endpoints = [ ...(config.endpoints ?? []), ...oauthEndpoints, ...passkeyEndpoints, ] return config }