diff options
| author | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-10-30 10:17:29 +0000 |
|---|---|---|
| committer | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-10-30 10:17:29 +0000 |
| commit | 17b9d2016be7c0ab6571de6aba36b3f4ea37bdb1 (patch) | |
| tree | f38c9f0debb76e14ae10e8a82f18c7ed870f7f84 | |
| parent | 1db30643d32619a352e759799a24e8f54b8137bf (diff) | |
(임수민) 데이터룸 파일 이름 업로드 제한, 초대 메일 수정
| -rw-r--r-- | app/[lng]/evcp/data-room/[projectId]/members/page.tsx | 20 | ||||
| -rw-r--r-- | lib/file-stroage.ts | 2 |
2 files changed, 18 insertions, 4 deletions
diff --git a/app/[lng]/evcp/data-room/[projectId]/members/page.tsx b/app/[lng]/evcp/data-room/[projectId]/members/page.tsx index 244d957b..064f912c 100644 --- a/app/[lng]/evcp/data-room/[projectId]/members/page.tsx +++ b/app/[lng]/evcp/data-room/[projectId]/members/page.tsx @@ -72,6 +72,20 @@ import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs" import { Checkbox } from '@/components/ui/checkbox'; import { sendDataRoomInvitation, sendBulkDataRoomInvitations } from '@/components/project/dataroom-members'; +function extractLngFromPath(): string { + if (typeof window === 'undefined') return 'ko'; + const m = window.location.pathname.match(/^\/?([A-Za-z-]{2,5})\b/); + return m?.[1] ?? 'ko'; +} + +function buildDataRoomUrl(recipientDomain: string | undefined, projectId: string): string { + const lng = extractLngFromPath(); + const isPartners = recipientDomain === 'partners'; + const base = isPartners ? 'https://shidataroom.com' : 'https://sevcp.com'; + const path = isPartners ? 'partners/data-room' : 'evcp/data-room'; + return `${base}/${lng}/${path}/${projectId}/files`; +} + interface Member { id: string; userId: number; @@ -250,7 +264,7 @@ export default function ProjectMembersPage({ name: selectedUser.name, dataRoomName: projectName, role: newMemberRole, - dataRoomUrl: `${window.location.origin}/projects/${projectId}` + dataRoomUrl: buildDataRoomUrl(selectedUser.domain, projectId) }); if (emailResult.success) { @@ -304,7 +318,7 @@ export default function ProjectMembersPage({ name: m.user.name, dataRoomName: projectName, role: m.role, - dataRoomUrl: `${window.location.origin}/projects/${projectId}` + dataRoomUrl: buildDataRoomUrl(m.user.domain, projectId) })); const result = await sendBulkDataRoomInvitations(membersToEmail); @@ -392,7 +406,7 @@ export default function ProjectMembersPage({ name: member.user.name, dataRoomName: projectName, role: member.role, - dataRoomUrl: `${window.location.origin}/projects/${projectId}` + dataRoomUrl: buildDataRoomUrl(member.user.domain, projectId) }); if (result.success) { diff --git a/lib/file-stroage.ts b/lib/file-stroage.ts index 4063aa40..34b9983a 100644 --- a/lib/file-stroage.ts +++ b/lib/file-stroage.ts @@ -82,7 +82,7 @@ class FileSecurityValidator { // 위험한 문자 체크 (XSS 방지 강화) const dangerousPatterns = [ - /[<>:"'|?*]/, // HTML 태그 및 특수문자 + /[<>:"|?*]/, // HTML 태그 및 특수문자 /[\x00-\x1f]/, // 제어문자 /^\./, // 숨김 파일 /\.\./, // 상위 디렉토리 접근 |
