shared/lib/auth/config.ts

56 lines
2.2 KiB
TypeScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// shared/lib/auth/config.ts — 认证配置工厂(各站点统一使用)
import type { AuthConfig } from './types'
export interface SiteAuthConfig {
/** 站点名称,用于日志和调试 */
siteName: string
/** 本地 cookie 名(如 'session_issue'),不设则不使用本地 cookie 回退 */
localCookieName?: string
/** 需要 admin 权限的路径前缀,默认 ['/admin'] */
adminPaths?: string[]
/** 公开路径(不需要认证),默认 ['/login', '/api/auth', '/api/health', '/_next', '/favicon.ico'] */
publicPaths?: string[]
/** OIDC client ID默认 `${siteName}-oidc`,可手动覆盖 */
oidcClientId?: string
/** OIDC client secret默认从 OIDC_CLIENT_SECRET 环境变量读取 */
oidcClientSecret?: string
/** OIDC redirect URI默认从 OIDC_REDIRECT_URI 环境变量读取 */
oidcRedirectUri?: string
/** 启用 API Key 认证(读取 ALLOWED_API_KEYS 环境变量),默认 false */
enableApiKey?: boolean
}
/**
* 创建统一的认证配置
*
* @example
* ```ts
* // src/lib/auth-config.ts
* import { createAuthConfig } from '@shared/lib/auth/config'
* export const authConfig = createAuthConfig({
* siteName: 'issue-ai',
* localCookieName: 'session_issue',
* adminPaths: ['/settings'],
* enableApiKey: true,
* })
* ```
*/
export function createAuthConfig(site: SiteAuthConfig): AuthConfig & {
localCookieName?: string
enableApiKey?: boolean
} {
return {
jwtSecret: process.env.JWT_SECRET || 'default-secret-change-me',
cookieDomain: process.env.COOKIE_DOMAIN || '',
autheliaUrl: process.env.AUTHELIA_URL || 'https://127.0.0.1:6180',
oidcClientId: site.oidcClientId || process.env.OIDC_CLIENT_ID || `${site.siteName}-oidc`,
oidcClientSecret: site.oidcClientSecret || process.env.OIDC_CLIENT_SECRET || '',
oidcRedirectUri: site.oidcRedirectUri || process.env.OIDC_REDIRECT_URI || '',
ldapUrl: process.env.LDAP_URL || 'ldap://localhost:3890',
publicPaths: site.publicPaths || ['/login', '/api/auth', '/api/health', '/_next', '/favicon.ico'],
adminPaths: site.adminPaths || ['/admin'],
localCookieName: site.localCookieName,
enableApiKey: site.enableApiKey || false,
}
}