Files
drinkmarble/lib/auth/mode.ts

47 lines
1.7 KiB
TypeScript

/**
* 개발: 채널 ID 입장 + 치지직 로그인 모두 허용
* 릴리즈(production): 치지직 로그인(세션)으로만 채널 룸 입장
*
* 강제 오버라이드:
* - DRINKMARBLE_ALLOW_CHANNEL_ID_JOIN=true → production에서도 채널 ID 입장 허용
* - DRINKMARBLE_REQUIRE_CHZZK_LOGIN=true → development에서도 로그인 필수
*/
export function allowChannelIdJoin(): boolean {
if (process.env.DRINKMARBLE_REQUIRE_CHZZK_LOGIN === 'true') return false;
if (process.env.DRINKMARBLE_ALLOW_CHANNEL_ID_JOIN === 'true') return true;
return process.env.NODE_ENV !== 'production';
}
export function requireChzzkLoginForChannelRooms(): boolean {
return !allowChannelIdJoin();
}
export function isChzzkOAuthConfigured(): boolean {
return Boolean(
process.env.CHZZK_CLIENT_ID?.trim() &&
process.env.CHZZK_CLIENT_SECRET?.trim() &&
process.env.CHZZK_REDIRECT_URI?.trim(),
);
}
export function getChzzkOAuthConfig() {
const clientId = process.env.CHZZK_CLIENT_ID?.trim() || '';
const clientSecret = process.env.CHZZK_CLIENT_SECRET?.trim() || '';
const redirectUri = process.env.CHZZK_REDIRECT_URI?.trim() || '';
if (!clientId || !clientSecret || !redirectUri) {
throw new Error(
'치지직 OAuth 환경변수(CHZZK_CLIENT_ID, CHZZK_CLIENT_SECRET, CHZZK_REDIRECT_URI)가 필요합니다.',
);
}
return { clientId, clientSecret, redirectUri };
}
export function getAuthSessionSecret(): string {
const explicit = process.env.AUTH_SESSION_SECRET?.trim();
if (explicit) return explicit;
const fallback = process.env.CHZZK_CLIENT_SECRET?.trim();
if (fallback) return fallback;
// 개발 전용 폴백 (production에서는 OAuth 설정이 있어야 함)
return 'drinkmarble-dev-session-secret';
}