This commit is contained in:
2025-07-01 10:51:57 +09:00
90 changed files with 4706 additions and 2209 deletions
@@ -10,6 +10,7 @@ export interface GroupUserListResponseDto {
mode: string;
groupId: string;
userUnqId: string;
userId: string;
userName: string;
ogdpSeCd: string;
ogdpSeNm: string;
-1
View File
@@ -7,4 +7,3 @@ export {
type IpList,
type IP,
} from "./model/ip-interface";
export { ClientIpGuard } from "./lib/client-ip-guard";
@@ -1,48 +0,0 @@
import { useEffect, useState } from "react";
import { useQueryClient } from "@tanstack/react-query";
import { SiteApi } from "@/entities/site/@x/ip";
import { ENDPOINT, SITE_ID } from "@/shared/config";
import { IpApi } from "../api/ip-service";
type ClientIpResponse = {
originalIp: string;
normalizedIp: string;
};
const ClientIpGuard = ({ children }: { children: React.ReactNode }) => {
const queryClient = useQueryClient();
const [isAllowed, setIsAllowed] = useState(true);
useEffect(() => {
(async () => {
const response = await fetch("/api/getClientIp");
const { normalizedIp } = (await response.json()) as ClientIpResponse;
if (!normalizedIp || !SITE_ID) return;
const siteInfo = await queryClient.ensureQueryData({
queryKey: [ENDPOINT.CMS_SERVICE.SITES, SITE_ID],
queryFn: () => SiteApi.siteDetail(SITE_ID),
});
if (siteInfo.siteKndCd === "O") return;
const { content: ipList } = await IpApi.getIpList({
siteId: SITE_ID,
prmYn: "Y",
});
const allowedClientIp = ipList.some((ip) => ip.ipAddr === normalizedIp);
setIsAllowed(allowedClientIp);
})();
}, []);
if (!isAllowed) {
alert("허용되지 않은 IP로 접근하였습니다.");
return <></>;
}
return <>{children}</>;
};
export { ClientIpGuard };
+1
View File
@@ -13,4 +13,5 @@ export {
type PostUpdateFormData,
type PostService,
} from "./model/post-interface";
export { deleteReasonMessages } from "./model/delete-reason-messages";
export { PostPageGuard } from "./lib/post-page-guard";
@@ -0,0 +1,11 @@
export const deleteReasonMessages = {
"저작권 침해":
"타인의 저작물을 허락 없이 게시하는 경우 저작권 침해로 간주되어 삭제될 수 있습니다.",
명예훼손: "타인의 명예를 훼손하는 내용의 게시물은 삭제될 수 있습니다.",
"개인정보 노출": "타인의 개인정보를 노출하는 게시물도 삭제될 수 있습니다.",
"불법 정보 유통":
"불법적인 상품이나 서비스를 판매하거나 홍보하는 게시물은 삭제될 수 있습니다.",
"욕설 및 비방":
"심한 욕설이나 비방, 모욕적인 내용이 포함된 게시물은 삭제될 수 있습니다.",
"광고성 정보": "지나치게 광고성이 짙은 게시물은 삭제될 수 있습니다.",
};