import { NextRequest, NextResponse } from 'next/server' // Mock IdP 엔드포인트 - SAML Response HTML 폼 반환 export async function GET(request: NextRequest) { try { // RelayState 파라미터 추출 const url = new URL(request.url) const relayState = url.searchParams.get('RelayState') || 'mock_test' console.log('🎭 Mock IdP endpoint accessed', { relayState }); // Mock SAML Response 데이터 (실제 형태와 일치하도록 문자열 형태) const mockSAMLResponseData = { nameID: "testuser@samsung.com", nameIDFormat: "urn:oasis:names:tc:SAML:2.0:nameid-format:emailAddress", attributes: { email: "testuser@samsung.com", name: "홍길동", } }; // Mock XML SAML Response 생성 const mockXML = ` MockIdP MockIdP ${mockSAMLResponseData.nameID} ${mockSAMLResponseData.attributes.email} ${mockSAMLResponseData.attributes.name} `.trim(); // Base64 인코딩 const encodedSAMLResponse = Buffer.from(mockXML, 'utf-8').toString('base64'); console.log("🎭 Mock SAML Response created:", { nameID: mockSAMLResponseData.nameID, email: mockSAMLResponseData.attributes.email, name: mockSAMLResponseData.attributes.name, encodedLength: encodedSAMLResponse.length }); // 콜백 URL로 POST 요청을 시뮬레이션하는 HTML 폼 반환 const callbackUrl = `${process.env.NEXTAUTH_URL}/api/saml/callback`; // process.env.SAML_SP_CALLBACK_URL const mockFormHTML = ` Mock SAML IdP

🎭 Mock SAML IdP

테스트 모드: 실제 IdP 대신 Mock 응답을 사용합니다.
실제 데이터 형태와 일치하도록 attributes를 문자열로 전송합니다.

테스트 사용자 정보:

5초 후 자동으로 로그인을 진행합니다...

프로덕션 환경에서는 SAML_MOCKING_IDP=false로 설정하세요.

`; return new NextResponse(mockFormHTML, { headers: { 'Content-Type': 'text/html; charset=utf-8', 'Cache-Control': 'no-cache, no-store, must-revalidate' } }); } catch (error) { console.error('💥 Mock IdP error:', error); return NextResponse.json({ error: 'Mock IdP failed', details: error instanceof Error ? error.message : 'Unknown error' }, { status: 500 }); } }