diff options
| author | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-05-13 04:09:32 +0000 |
|---|---|---|
| committer | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-05-13 04:09:32 +0000 |
| commit | 55264117d760fa7278094ee6b137c187f1ac660b (patch) | |
| tree | 54dea44a640efa054c3b040f87cd0042d561b115 /components/drm/drmUtils.ts | |
| parent | 4a817044e9a9d8e26642060616afb29a55a8d7a1 (diff) | |
(김준회) 복호화 유틸함수 추가, rfq 파일업로드시 복호화 유틸함수 사용
Diffstat (limited to 'components/drm/drmUtils.ts')
| -rw-r--r-- | components/drm/drmUtils.ts | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/components/drm/drmUtils.ts b/components/drm/drmUtils.ts new file mode 100644 index 00000000..c7b7ae5e --- /dev/null +++ b/components/drm/drmUtils.ts @@ -0,0 +1,62 @@ +/** + * drmUtils.ts + * 1. 복호화 엔드포인트 (/api/drm/decrypt)를 사용하는 함수 + * 2. 복호화 서버액션을 제공한다. + * + * decryptWithServerAction(file): 서버액션을 사용하여 복호화한 파일을 응답하는 함수 + * decryptWithRoute(file): 라우트를 사용하여 복호화한 파일을 응답하는 함수 (클라이언트용 함수는 drmClientUtils.ts에 구현됨) + * + */ + +'use server'; + +// 서버 액션을 사용하여 복호화하는 함수 +export async function decryptWithServerAction(file: File): Promise<ArrayBuffer> { + try { + const formData = new FormData(); + formData.append('file', file); + + // 로컬 6543 포트에 drm-proxy 서버가 실행되고 있어야 함 + const backendUrl = "http://localhost:6543/api/drm-proxy/decrypt"; + + // 로깅은 스프링 자체적으로도 진행하지만(log 파일), 필요시 db 액션을 호출해 eVCP 데이터베이스에 저장 + console.log(`[DRM] 파일 복호화 시도: ${file.name} (크기: ${file.size} bytes, 타입: ${file.type})`); + + // POST 요청으로 파일을 file 이라는 키로 Body에 담아 전송하면, 복호화된 파일을 응답받음 + // 응답 헤더에 원본 파일명이 있음. (현재는 미사용) + const response = await fetch(backendUrl, { + method: "POST", + body: formData, + }); + + if (!response.ok) { + const errorText = await response.text().catch(() => '응답 텍스트를 가져올 수 없음'); + throw new Error(`DRM 서버 응답 오류 [${response.status}]: ${errorText}`); + } + + // 응답을 ArrayBuffer로 받아서 리턴함 + const data = await response.arrayBuffer(); + console.log(`[DRM] 파일 복호화 성공: ${file.name} (결과 크기: ${data.byteLength} bytes)`); + + return data; + } catch (error) { + + // 오류 발생시 로깅하며, 폴백으로 복호화되지 않은 파일을 리턴 + const errorMessage = error instanceof Error + ? `${error.name}: ${error.message}` + : String(error); + + console.error(`[DRM] 복호화 오류: ${errorMessage}`, { + fileName: file.name, + fileSize: file.size, + fileType: file.type, + error + }); + + return await file.arrayBuffer(); + } +} + +// decryptWithRoute 함수는 클라이언트용이므로 drmClientUtils.ts로 이동함 +// 클라이언트에서는 'components/drm/drmClientUtils'의 decryptWithRoute를 사용할 것 + |
