super-harness / src /lib /auth /config.ts
Cyber Catalyst Team
Deploy to HF Spaces with LFS
4782147
Raw
History Blame Contribute Delete
3.83 kB
import {
GitHubConfigSchema,
GoogleConfigSchema,
MicrosoftConfigSchema,
GitHubConfig,
GoogleConfig,
MicrosoftConfig,
AuthConfig,
AuthConfigSchema,
} from "app-types/authentication";
// Conditionally import React taint
let experimental_taintUniqueValue: any = () => {};
try {
// Only use taint in Next.js runtime
if (typeof window !== "undefined" || process.env.NEXT_RUNTIME) {
// eslint-disable-next-line @typescript-eslint/no-require-imports
const react = require("react");
experimental_taintUniqueValue = react.experimental_taintUniqueValue;
}
} catch (_e) {
// No-op for non-React contexts
}
import { parseEnvBoolean } from "../utils";
function parseSocialAuthConfigs() {
const configs: {
github?: GitHubConfig;
google?: GoogleConfig;
microsoft?: MicrosoftConfig;
} = {};
// DISABLE_SIGN_UP only applies to OAuth signups, not email signups
const disableSignUp = parseEnvBoolean(process.env.DISABLE_SIGN_UP);
if (process.env.GITHUB_CLIENT_ID && process.env.GITHUB_CLIENT_SECRET) {
const githubResult = GitHubConfigSchema.safeParse({
clientId: process.env.GITHUB_CLIENT_ID,
clientSecret: process.env.GITHUB_CLIENT_SECRET,
disableSignUp,
});
if (githubResult.success) {
configs.github = githubResult.data;
experimental_taintUniqueValue(
"Do not pass GITHUB_CLIENT_SECRET to the client",
configs,
configs.github.clientSecret,
);
}
}
if (process.env.GOOGLE_CLIENT_ID && process.env.GOOGLE_CLIENT_SECRET) {
const forceAccountSelection = parseEnvBoolean(
process.env.GOOGLE_FORCE_ACCOUNT_SELECTION,
);
const googleConfig: GoogleConfig = {
clientId: process.env.GOOGLE_CLIENT_ID,
clientSecret: process.env.GOOGLE_CLIENT_SECRET,
...(forceAccountSelection && { prompt: "select_account" as const }),
disableSignUp,
};
const googleResult = GoogleConfigSchema.safeParse(googleConfig);
if (googleResult.success) {
configs.google = googleResult.data;
experimental_taintUniqueValue(
"Do not pass GOOGLE_CLIENT_SECRET to the client",
configs,
configs.google.clientSecret,
);
}
}
if (process.env.MICROSOFT_CLIENT_ID && process.env.MICROSOFT_CLIENT_SECRET) {
const forceAccountSelection = parseEnvBoolean(
process.env.MICROSOFT_FORCE_ACCOUNT_SELECTION,
);
const tenantId = process.env.MICROSOFT_TENANT_ID || "common";
const microsoftConfig: MicrosoftConfig = {
clientId: process.env.MICROSOFT_CLIENT_ID,
clientSecret: process.env.MICROSOFT_CLIENT_SECRET,
tenantId,
...(forceAccountSelection && { prompt: "select_account" as const }),
disableSignUp,
};
const microsoftResult = MicrosoftConfigSchema.safeParse(microsoftConfig);
if (microsoftResult.success) {
configs.microsoft = microsoftResult.data;
experimental_taintUniqueValue(
"Do not pass MICROSOFT_CLIENT_SECRET to the client",
configs,
configs.microsoft.clientSecret,
);
}
}
return configs;
}
export function getAuthConfig(): AuthConfig {
const rawConfig = {
emailAndPasswordEnabled: process.env.DISABLE_EMAIL_SIGN_IN
? !parseEnvBoolean(process.env.DISABLE_EMAIL_SIGN_IN)
: true,
// signUpEnabled now only applies to email signups
// OAuth signups are controlled separately via DISABLE_SIGN_UP in parseSocialAuthConfigs
signUpEnabled: process.env.DISABLE_EMAIL_SIGN_UP
? !parseEnvBoolean(process.env.DISABLE_EMAIL_SIGN_UP)
: true,
socialAuthenticationProviders: parseSocialAuthConfigs(),
};
const result = AuthConfigSchema.safeParse(rawConfig);
if (!result.success) {
throw new Error(`Invalid auth configuration: ${result.error.message}`);
}
return result.data;
}