47 lines
1.7 KiB
TypeScript
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';
|
|
}
|