diff --git a/.github/security.md b/.github/security.md index 2c3f35b..e6424e1 100644 --- a/.github/security.md +++ b/.github/security.md @@ -15,8 +15,8 @@ The following versions are currently covered by this security policy. | 버전 / Version | 지원 여부 / Supported | | --- | --- | -| `main` | ✅ | -| 이전 브랜치 또는 레거시 릴리스 / Previous branches or legacy releases | ❌ | +| `main` | 지원 / Supported | +| 이전 브랜치 또는 레거시 릴리스 / Previous branches or legacy releases | 미지원 / Not supported | 보안 수정은 현재 유지보수 중인 코드 라인을 기준으로 검토 및 반영됩니다. Security fixes are reviewed and applied based on the currently maintained code line. @@ -40,9 +40,6 @@ If private reporting is not available, please report the issue by email. - **egovframesupport@gmail.com** -암호화된 통신이 필요한 경우, 최초 연락 시 해당 필요사항을 알려 주시면 적절한 방법을 협의하겠습니다. -If encrypted communication is required, please let us know in your initial contact and we will discuss an appropriate method. - --- ## 제보 시 포함 사항 / What to Include in a Report @@ -185,4 +182,4 @@ Where appropriate, vulnerability disclosure and identifier assignment procedures ## 정책 변경 / Policy Updates 본 보안 정책은 유지보수 상태, 제보 절차 또는 저장소 운영 방식의 변경에 따라 수정될 수 있습니다. -This security policy may be updated from time to time to reflect changes in maintenance status, reporting procedures, or repository operations. \ No newline at end of file +This security policy may be updated from time to time to reflect changes in maintenance status, reporting procedures, or repository operations. diff --git a/README.md b/README.md index 22142d1..2ff8218 100644 --- a/README.md +++ b/README.md @@ -127,7 +127,7 @@ npm install ### 2. 백엔드 프로젝트 설정 -구동된 BackEnd 서버의 URL을 본 어플리케이션의 .env.development 파일의 VITE_EGOV_CONTEXT_URL에 설정해 준다. +구동된 BackEnd 서버의 URL을 본 어플리케이션의 .env.development 파일의 VITE_APP_EGOV_CONTEXT_URL에 설정해 준다. (단, 개발환경에서는 사용하는 환경변수 정보는 .env.development, build 시 사용하는 환경변수는 .env.production 에 기입해 준다.) ```bash diff --git a/src/api/egovFetch.jsx b/src/api/egovFetch.jsx index 1a9199f..73c2c7f 100644 --- a/src/api/egovFetch.jsx +++ b/src/api/egovFetch.jsx @@ -2,12 +2,30 @@ import { SERVER_URL } from "../config"; import URL from "@/constants/url"; import CODE from "@/constants/code"; +import { getSessionItem, setSessionItem } from "@/utils/storage"; + +export function getQueryString(params) { + return `?${Object.entries(params) + .map((e) => e.join("=")) + .join("&")}`; +} export function requestFetch(url, requestOptions, handler, errorHandler) { console.groupCollapsed("requestFetch"); console.log("requestFetch [URL] : ", SERVER_URL + url); console.log("requestFetch [requestOption] : ", requestOptions); + // Login 했을경우 JWT 설정 + const sessionUser = getSessionItem("loginUser"); + const sessionUserId = sessionUser?.id || null; + const jToken = getSessionItem("jToken"); + if (sessionUserId != null && sessionUserId !== undefined) { + if (!requestOptions["headers"]) requestOptions["headers"] = {}; + if (!requestOptions["headers"]["Authorization"]) + requestOptions["headers"]["Authorization"] = null; + requestOptions["headers"]["Authorization"] = jToken; + } + //CORS ISSUE 로 인한 조치 - origin 및 credentials 추가 // origin 추가 if (!requestOptions["origin"]) { @@ -27,7 +45,7 @@ export function requestFetch(url, requestOptions, handler, errorHandler) { .then((resp) => { if (Number(resp.resultCode) === Number(CODE.RCV_ERROR_AUTH)) { alert("Login Alert"); //index.jsx라우터파일에 jwtAuthentication 함수로 공통 인증을 사용하는 코드 추가로 alert 원상복구 - sessionStorage.setItem("loginUser", JSON.stringify({ id: "" })); + setSessionItem("loginUser", { id: "" }); window.location.href = URL.LOGIN; return false; } else { diff --git a/src/config/index.jsx b/src/config/index.jsx index 4448f35..837c5a9 100644 --- a/src/config/index.jsx +++ b/src/config/index.jsx @@ -1,4 +1,4 @@ -export const SERVER_URL = "http://"+import.meta.env.VITE_EGOV_CONTEXT_URL; // REST API 서버 Domain URL +export const SERVER_URL = "http://" + import.meta.env.VITE_APP_EGOV_CONTEXT_URL; // REST API 서버 Domain URL export const DEFAULT_BBS_ID = "BBSMSTR_AAAAAAAAAAAA"; // default = 공지사항 게시판 아이디 export const NOTICE_BBS_ID = "BBSMSTR_AAAAAAAAAAAA"; // 공지사항 게시판 아이디 export const GALLERY_BBS_ID = "BBSMSTR_BBBBBBBBBBBB"; // 갤러리 게시판 아이디 diff --git a/src/constants/url.jsx b/src/constants/url.jsx index b020f80..9c28bf2 100644 --- a/src/constants/url.jsx +++ b/src/constants/url.jsx @@ -1,88 +1,81 @@ const URL = { //COMMON - MAIN: "/egovframe-template-simple-react", //메인페이지 + MAIN: "/", //메인페이지 - LOGIN: "/egovframe-template-simple-react/login", //로그인 - ERROR: "/egovframe-template-simple-react/error", //로그인 + LOGIN: "/login", //로그인 + SNS_NAVER_CB: "/login/naver/callback", //Sns Naver Callback + SNS_KAKAO_CB: "/login/kakao/callback", //Sns Kakao Callback + ERROR: "/error", //로그인 //ABOUT - ABOUT: "/egovframe-template-simple-react/about", //사이트소개 - ABOUT_SITE: "/egovframe-template-simple-react/about/site", // 사이트소개/소개 - ABOUT_HISTORY: "/egovframe-template-simple-react/about/history", // 사이트소개/연혁 - ABOUT_ORGANIZATION: "/egovframe-template-simple-react/about/organization", // 사이트소개/조직소개 - ABOUT_LOCATION: "/egovframe-template-simple-react/about/location", // 사이트소개/찾아오시는길 + ABOUT: "/about", //사이트소개 + ABOUT_SITE: "/about/site", // 사이트소개/소개 + ABOUT_HISTORY: "/about/history", // 사이트소개/연혁 + ABOUT_ORGANIZATION: "/about/organization", // 사이트소개/조직소개 + ABOUT_LOCATION: "/about/location", // 사이트소개/찾아오시는길 //INTRO - INTRO: "/egovframe-template-simple-react/intro", //정보마당 - INTRO_WORKS: "/egovframe-template-simple-react/intro/works", // 정보마당/주요사업소개 - INTRO_SERVICE: "/egovframe-template-simple-react/intro/service", // 정보마당/주요서비스소개 + INTRO: "/intro", //정보마당 + INTRO_WORKS: "/intro/works", // 정보마당/주요사업소개 + INTRO_SERVICE: "/intro/service", // 정보마당/주요서비스소개 //SUPPORT - SUPPORT: "/egovframe-template-simple-react/support", // 고객지원 - SUPPORT_DOWNLOAD: "/egovframe-template-simple-react/support/download", // 고객지원/자료실 - SUPPORT_DOWNLOAD_DETAIL: - "/egovframe-template-simple-react/support/download/detail", // 고객지원/자료실/상세 - SUPPORT_DOWNLOAD_CREATE: - "/egovframe-template-simple-react/support/download/create", // 고객지원/자료실/등록 - SUPPORT_QNA: "/egovframe-template-simple-react/support/qna", // 고객지원/묻고답하기 - SUPPORT_QNA_DETAIL: "/egovframe-template-simple-react/support/qna/detail", // 고객지원/묻고답하기/상세 - SUPPORT_APPLY: "/egovframe-template-simple-react/support/apply", // 고객지원/서비스신청 + SUPPORT: "/support", // 고객지원 + SUPPORT_DOWNLOAD: "/support/download", // 고객지원/자료실 + SUPPORT_DOWNLOAD_DETAIL: "/support/download/detail", // 고객지원/자료실/상세 + SUPPORT_DOWNLOAD_CREATE: "/support/download/create", // 고객지원/자료실/등록 + SUPPORT_QNA: "/support/qna", // 고객지원/묻고답하기 + SUPPORT_QNA_DETAIL: "/support/qna/detail", // 고객지원/묻고답하기/상세 + SUPPORT_APPLY: "/support/apply", // 고객지원/서비스신청 //INFORM - INFORM: "/egovframe-template-simple-react/inform", // 알림마당 - INFORM_DAILY: "/egovframe-template-simple-react/inform/daily", // 알림마당/오늘의행사 - INFORM_DAILY_DETAIL: "/egovframe-template-simple-react/inform/daily/detail", // 알림마당/오늘의행사상세 - INFORM_WEEKLY: "/egovframe-template-simple-react/inform/weekly", // 알림마당/금주의행사 - INFORM_WEEKLY_DETAIL: "/egovframe-template-simple-react/inform/weekly/detail", // 알림마당/금주의행사상세 - INFORM_NOTICE: "/egovframe-template-simple-react/inform/notice", // 알림마당/공지사항 - INFORM_NOTICE_DETAIL: "/egovframe-template-simple-react/inform/notice/detail", // 알림마당/공지사항상세 - INFORM_NOTICE_CREATE: "/egovframe-template-simple-react/inform/notice/create", // 알림마당/공지사항등록 - INFORM_NOTICE_MODIFY: "/egovframe-template-simple-react/inform/notice/modify", // 알림마당/공지사항수정 - INFORM_NOTICE_REPLY: "/egovframe-template-simple-react/inform/notice/reply", // 알림마당/공지사항답글 - INFORM_GALLERY: "/egovframe-template-simple-react/inform/gallery", // 알림마당/사이트갤러리 - INFORM_GALLERY_DETAIL: - "/egovframe-template-simple-react/inform/gallery/detail", // 알림마당/사이트갤러리상세 - INFORM_GALLERY_CREATE: - "/egovframe-template-simple-react/inform/gallery/create", // 알림마당/사이트갤러리등록 - INFORM_GALLERY_MODIFY: - "/egovframe-template-simple-react/inform/gallery/modify", // 알림마당/사이트갤러리수정 - INFORM_GALLERY_REPLY: "/egovframe-template-simple-react/inform/gallery/reply", // 알림마당/사이트갤러리답글 + INFORM: "/inform", // 알림마당 + INFORM_DAILY: "/inform/daily", // 알림마당/오늘의행사 + INFORM_DAILY_DETAIL: "/inform/daily/detail", // 알림마당/오늘의행사상세 + INFORM_WEEKLY: "/inform/weekly", // 알림마당/금주의행사 + INFORM_WEEKLY_DETAIL: "/inform/weekly/detail", // 알림마당/금주의행사상세 + INFORM_NOTICE: "/inform/notice", // 알림마당/공지사항 + INFORM_NOTICE_DETAIL: "/inform/notice/detail", // 알림마당/공지사항상세 + INFORM_NOTICE_CREATE: "/inform/notice/create", // 알림마당/공지사항등록 + INFORM_NOTICE_MODIFY: "/inform/notice/modify", // 알림마당/공지사항수정 + INFORM_NOTICE_REPLY: "/inform/notice/reply", // 알림마당/공지사항답글 + INFORM_GALLERY: "/inform/gallery", // 알림마당/사이트갤러리 + INFORM_GALLERY_DETAIL: "/inform/gallery/detail", // 알림마당/사이트갤러리상세 + INFORM_GALLERY_CREATE: "/inform/gallery/create", // 알림마당/사이트갤러리등록 + INFORM_GALLERY_MODIFY: "/inform/gallery/modify", // 알림마당/사이트갤러리수정 + INFORM_GALLERY_REPLY: "/inform/gallery/reply", // 알림마당/사이트갤러리답글 //ADMIN - ADMIN: "/egovframe-template-simple-react/admin", // 사이트관리 - ADMIN_SCHEDULE: "/egovframe-template-simple-react/admin/schedule", // 사이트관리/일정관리 - ADMIN_SCHEDULE_DETAIL: - "/egovframe-template-simple-react/admin/schedule/detail", // 사이트관리/일정관리상세 - ADMIN_SCHEDULE_CREATE: - "/egovframe-template-simple-react/admin/schedule/create", // 사이트관리/일정관리생성 - ADMIN_SCHEDULE_MODIFY: - "/egovframe-template-simple-react/admin/schedule/modify", // 사이트관리/일정관리수정 + ADMIN: "/admin", // 사이트관리 + ADMIN_SCHEDULE: "/admin/schedule", // 사이트관리/일정관리 + ADMIN_SCHEDULE_DETAIL: "/admin/schedule/detail", // 사이트관리/일정관리상세 + ADMIN_SCHEDULE_CREATE: "/admin/schedule/create", // 사이트관리/일정관리생성 + ADMIN_SCHEDULE_MODIFY: "/admin/schedule/modify", // 사이트관리/일정관리수정 - ADMIN_BOARD: "/egovframe-template-simple-react/admin/board", // 사이트관리/게시판생성관리 목록 - ADMIN_BOARD_DETAIL: "/egovframe-template-simple-react/admin/board/detail", // 사이트관리/게시판생성관리 상세 - ADMIN_BOARD_CREATE: "/egovframe-template-simple-react/admin/board/create", // 사이트관리/게시판생성관리 등록 - ADMIN_BOARD_MODIFY: "/egovframe-template-simple-react/admin/board/modify", // 사이트관리/게시판생성관리 상세/수정 + ADMIN_BOARD: "/admin/board", // 사이트관리/게시판생성관리 목록 + ADMIN_BOARD_DETAIL: "/admin/board/detail", // 사이트관리/게시판생성관리 상세 + ADMIN_BOARD_CREATE: "/admin/board/create", // 사이트관리/게시판생성관리 등록 + ADMIN_BOARD_MODIFY: "/admin/board/modify", // 사이트관리/게시판생성관리 상세/수정 - ADMIN_USAGE: "/egovframe-template-simple-react/admin/usage", // 사이트관리/게시판사용관리 목록 - ADMIN_USAGE_DETAIL: "/egovframe-template-simple-react/admin/usage/detail", // 사이트관리/게시판사용관리 상세 - ADMIN_USAGE_CREATE: "/egovframe-template-simple-react/admin/usage/create", // 사이트관리/게시판사용관리 등록 - ADMIN_USAGE_MODIFY: "/egovframe-template-simple-react/admin/usage/modify", // 사이트관리/게시판사용관리 상세/수정 + ADMIN_USAGE: "/admin/usage", // 사이트관리/게시판사용관리 목록 + ADMIN_USAGE_DETAIL: "/admin/usage/detail", // 사이트관리/게시판사용관리 상세 + ADMIN_USAGE_CREATE: "/admin/usage/create", // 사이트관리/게시판사용관리 등록 + ADMIN_USAGE_MODIFY: "/admin/usage/modify", // 사이트관리/게시판사용관리 상세/수정 - ADMIN_NOTICE: "/egovframe-template-simple-react/admin/notice/", // 사이트관리/공지사항관리 목록 - ADMIN_NOTICE_DETAIL: "/egovframe-template-simple-react/admin/notice/detail", // 사이트관리/공지사항관리 상세 - ADMIN_NOTICE_CREATE: "/egovframe-template-simple-react/admin/notice/create", // 사이트관리/공지사항관리 등록 - ADMIN_NOTICE_MODIFY: "/egovframe-template-simple-react/admin/notice/modify", // 사이트관리/공지사항관리 수정 - ADMIN_NOTICE_REPLY: "/egovframe-template-simple-react/admin/notice/reply", // 사이트관리/공지사항관리 답글 등록 + ADMIN_NOTICE: "/admin/notice", // 사이트관리/공지사항관리 목록 + ADMIN_NOTICE_DETAIL: "/admin/notice/detail", // 사이트관리/공지사항관리 상세 + ADMIN_NOTICE_CREATE: "/admin/notice/create", // 사이트관리/공지사항관리 등록 + ADMIN_NOTICE_MODIFY: "/admin/notice/modify", // 사이트관리/공지사항관리 수정 + ADMIN_NOTICE_REPLY: "/admin/notice/reply", // 사이트관리/공지사항관리 답글 등록 - ADMIN_GALLERY: "/egovframe-template-simple-react/admin/gallery", // 사이트관리/사이트갤러리관리 - ADMIN_GALLERY_DETAIL: "/egovframe-template-simple-react/admin/gallery/detail", // 사이트관리/사이트갤러리관리 상세 - ADMIN_GALLERY_CREATE: "/egovframe-template-simple-react/admin/gallery/create", // 사이트관리/사이트갤러리관리 등록 - ADMIN_GALLERY_MODIFY: "/egovframe-template-simple-react/admin/gallery/modify", // 사이트관리/사이트갤러리관리 수정 - ADMIN_GALLERY_REPLY: "/egovframe-template-simple-react/admin/gallery/reply", // 사이트관리/사이트갤러리관리 답글 등록 + ADMIN_GALLERY: "/admin/gallery", // 사이트관리/사이트갤러리관리 + ADMIN_GALLERY_DETAIL: "/admin/gallery/detail", // 사이트관리/사이트갤러리관리 상세 + ADMIN_GALLERY_CREATE: "/admin/gallery/create", // 사이트관리/사이트갤러리관리 등록 + ADMIN_GALLERY_MODIFY: "/admin/gallery/modify", // 사이트관리/사이트갤러리관리 수정 + ADMIN_GALLERY_REPLY: "/admin/gallery/reply", // 사이트관리/사이트갤러리관리 답글 등록 - ADMIN_MANAGER: "/egovframe-template-simple-react/admin/manager/", // 사이트관리/사이트관리자 암호변경 기능 - - ADMIN_MEMBERS: "/admin/members/", // 사이트관리/회원관리 목록기능 + ADMIN_MANAGER: "/admin/manager", // 사이트관리/사이트관리자 암호변경 기능 + ADMIN_MEMBERS: "/admin/members", // 사이트관리/회원관리 목록기능 ADMIN_MEMBERS_DETAIL: "/admin/members/detail", // 사이트관리/회원관리 상세 ADMIN_MEMBERS_CREATE: "/admin/members/create", // 사이트관리/회원관리 등록 ADMIN_MEMBERS_MODIFY: "/admin/members/modify", // 사이트관리/회원관리 상세/수정 @@ -92,5 +85,5 @@ const URL = { MYPAGE_CREATE: "/mypage/create", // 고객지원/마이페이지/회원 등록 }; - + export default URL;