Next.js website for Rocky Mountain Vending company featuring: - Product catalog with Stripe integration - Service areas and parts pages - Admin dashboard with Clerk authentication - SEO optimized pages with JSON-LD structured data Co-authored-by: Cursor <cursoragent@cursor.com>
42 lines
2.1 KiB
Text
42 lines
2.1 KiB
Text
import { getSmithyContext } from "@smithy/util-middleware";
|
|
import { resolveAuthOptions } from "./resolveAuthOptions";
|
|
function convertHttpAuthSchemesToMap(httpAuthSchemes) {
|
|
const map = new Map();
|
|
for (const scheme of httpAuthSchemes) {
|
|
map.set(scheme.schemeId, scheme);
|
|
}
|
|
return map;
|
|
}
|
|
export const httpAuthSchemeMiddleware = (config, mwOptions) => (next, context) => async (args) => {
|
|
const options = config.httpAuthSchemeProvider(await mwOptions.httpAuthSchemeParametersProvider(config, context, args.input));
|
|
const authSchemePreference = config.authSchemePreference ? await config.authSchemePreference() : [];
|
|
const resolvedOptions = resolveAuthOptions(options, authSchemePreference);
|
|
const authSchemes = convertHttpAuthSchemesToMap(config.httpAuthSchemes);
|
|
const smithyContext = getSmithyContext(context);
|
|
const failureReasons = [];
|
|
for (const option of resolvedOptions) {
|
|
const scheme = authSchemes.get(option.schemeId);
|
|
if (!scheme) {
|
|
failureReasons.push(`HttpAuthScheme \`${option.schemeId}\` was not enabled for this service.`);
|
|
continue;
|
|
}
|
|
const identityProvider = scheme.identityProvider(await mwOptions.identityProviderConfigProvider(config));
|
|
if (!identityProvider) {
|
|
failureReasons.push(`HttpAuthScheme \`${option.schemeId}\` did not have an IdentityProvider configured.`);
|
|
continue;
|
|
}
|
|
const { identityProperties = {}, signingProperties = {} } = option.propertiesExtractor?.(config, context) || {};
|
|
option.identityProperties = Object.assign(option.identityProperties || {}, identityProperties);
|
|
option.signingProperties = Object.assign(option.signingProperties || {}, signingProperties);
|
|
smithyContext.selectedHttpAuthScheme = {
|
|
httpAuthOption: option,
|
|
identity: await identityProvider(option.identityProperties),
|
|
signer: scheme.signer,
|
|
};
|
|
break;
|
|
}
|
|
if (!smithyContext.selectedHttpAuthScheme) {
|
|
throw new Error(failureReasons.join("\n"));
|
|
}
|
|
return next(args);
|
|
};
|