summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordujinkim <dujin.kim@dtsolution.co.kr>2025-10-30 10:17:29 +0000
committerdujinkim <dujin.kim@dtsolution.co.kr>2025-10-30 10:17:29 +0000
commit17b9d2016be7c0ab6571de6aba36b3f4ea37bdb1 (patch)
treef38c9f0debb76e14ae10e8a82f18c7ed870f7f84
parent1db30643d32619a352e759799a24e8f54b8137bf (diff)
(임수민) 데이터룸 파일 이름 업로드 제한, 초대 메일 수정
-rw-r--r--app/[lng]/evcp/data-room/[projectId]/members/page.tsx20
-rw-r--r--lib/file-stroage.ts2
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]/, // 제어문자
/^\./, // 숨김 파일
/\.\./, // 상위 디렉토리 접근