From 6225cd8e6de9142c7be2c5aa7906c178f37a8a59 Mon Sep 17 00:00:00 2001 From: "icksishu@gmail.com" Date: Fri, 12 Dec 2025 14:12:57 +0900 Subject: [PATCH] =?UTF-8?q?Gradle=20-=20Version=20=EA=B4=80=EB=A6=AC=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80=20Key=20=EA=B4=80?= =?UTF-8?q?=EB=A6=AC=20=EA=B8=B0=EB=8A=A5=20=EC=9E=91=EC=97=85=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 23 ++++++- src/database/create-database.sql | 18 ++++- src/main/front/src/router/index.js | 7 ++ .../front/src/views/CryptoKeyManageView.vue | 64 +++++++++++++++++ src/main/front/src/views/MainView.vue | 6 ++ .../dfx/agent/listener/dto/CommandDto.java | 1 + .../app/agent/DfxAgentInfoController.java | 12 +++- .../agent/service/DfxAgentInfoService.java | 30 ++++++++ .../app/agent/service/DfxCryptoKeyDto.java | 19 ++++++ .../app/agent/service/DfxCryptoKeyMapper.java | 15 ++++ src/main/resources/application.yml | 4 +- .../mapper/app/dfx-agent-message-history.xml | 2 +- .../resources/mapper/app/dfx-crypto-key.xml | 68 +++++++++++++++++++ 13 files changed, 264 insertions(+), 5 deletions(-) create mode 100644 src/main/front/src/views/CryptoKeyManageView.vue create mode 100644 src/main/java/com/bsmlab/dfx/dfxconsole/app/agent/service/DfxCryptoKeyDto.java create mode 100644 src/main/java/com/bsmlab/dfx/dfxconsole/app/agent/service/DfxCryptoKeyMapper.java create mode 100644 src/main/resources/mapper/app/dfx-crypto-key.xml diff --git a/build.gradle b/build.gradle index 4bd8192..ff16a7e 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,28 @@ plugins { } group = 'com.bsmlab.dfx' -version = '0.0.1-SNAPSHOT' +version = '0.1' + +// git commit hash -> application.yml +def gitCommitId = '' +try { + def stdout = new ByteArrayOutputStream() + providers.exec { + commandLine 'git', 'rev-parse', '--short', 'HEAD' + standardOutput = stdout; + }.result.get() + gitCommitId = stdout.toString().trim() +} +catch (Exception ignored) { + print "git commit ID is not available." +} + +// gradle project properties -> application.yml +processResources { + filesMatching('**/application.yml') { + expand(project.properties + [commitId: gitCommitId, version: version]) + } +} java { toolchain { diff --git a/src/database/create-database.sql b/src/database/create-database.sql index 370b83c..5f3d934 100644 --- a/src/database/create-database.sql +++ b/src/database/create-database.sql @@ -172,5 +172,21 @@ COMMENT ON COLUMN TB_DFX_AGENT_MESSAGE_HISTORY.MESSAGE_DATA_COUNT IS '메시지 COMMENT ON COLUMN TB_DFX_AGENT_MESSAGE_HISTORY.PROCESS_ACK_TS IS '처리결과 수신 시간'; - +CREATE TABLE TB_DFX_CRYPTO_KEY ( + KEY_VALUE VARCHAR(256) NOT NULL + , HASH_VALUE VARCHAR(256) NOT NULL + , ALGORITHM_NAME VARCHAR(64) NOT NULL + , MODE_NAME VARCHAR(64) NOT NULL + , TARGET_AGENT_HOST_ID VARCHAR(256) + , APPLY_TS TIMESTAMPTZ(3) + , DATA_ENCRYPTION_YN VARCHAR(1) +); +COMMENT ON TABLE TB_DFX_CRYPTO_KEY IS '암호화키정보'; +COMMENT ON COLUMN TB_DFX_CRYPTO_KEY.KEY_VALUE IS 'KEY VALUE'; +COMMENT ON COLUMN TB_DFX_CRYPTO_KEY.HASH_VALUE IS 'HASH VALUE'; +COMMENT ON COLUMN TB_DFX_CRYPTO_KEY.ALGORITHM_NAME IS '알고리즘'; +COMMENT ON COLUMN TB_DFX_CRYPTO_KEY.MODE_NAME IS '모드'; +COMMENT ON COLUMN TB_DFX_CRYPTO_KEY.TARGET_AGENT_HOST_ID IS '적용 에이전트 ID'; +COMMENT ON COLUMN TB_DFX_CRYPTO_KEY.APPLY_TS IS '적용 시간'; +COMMENT ON COLUMN TB_DFX_CRYPTO_KEY.DATA_ENCRYPTION_YN IS '데이터 암호화 여부'; diff --git a/src/main/front/src/router/index.js b/src/main/front/src/router/index.js index dc5f632..d489b21 100644 --- a/src/main/front/src/router/index.js +++ b/src/main/front/src/router/index.js @@ -26,6 +26,13 @@ const router = createRouter({ props: { contentId: 'agent-manage-view' }, meta: { isRequiredAuth: true }, }, + { + path: '/key-manage.html', + name: 'key-manage', + component: MainView, + props: { contentId: 'key-manage-view' }, + meta: { isRequiredAuth: true }, + }, { path: '/message-history.html', name: 'message-history', diff --git a/src/main/front/src/views/CryptoKeyManageView.vue b/src/main/front/src/views/CryptoKeyManageView.vue new file mode 100644 index 0000000..0e8e38a --- /dev/null +++ b/src/main/front/src/views/CryptoKeyManageView.vue @@ -0,0 +1,64 @@ + + + + + diff --git a/src/main/front/src/views/MainView.vue b/src/main/front/src/views/MainView.vue index abf8bf5..fe7f888 100644 --- a/src/main/front/src/views/MainView.vue +++ b/src/main/front/src/views/MainView.vue @@ -4,6 +4,7 @@ import { userApi } from '@/components/userInfo' import { useRouter, RouterLink } from 'vue-router' import DashboardView from './DashboardView.vue' import AgentManageView from './AgentManageView.vue' +import CryptoKeyManageView from './CryptoKeyManageView.vue' import MessageHistoryView from './MessageHistoryView.vue' import { computed } from 'vue' @@ -25,6 +26,8 @@ const currentContent = computed(() => { return DashboardView } else if (props.contentId == 'agent-manage-view') { return AgentManageView + } else if (props.contentId == 'key-manage-view') { + return CryptoKeyManageView } else if (props.contentId == 'message-history-view') { return MessageHistoryView } else { @@ -65,6 +68,9 @@ const currentContent = computed(() => {
  • Agents
  • +
  • + Crypto Keys +
  • Messages
  • diff --git a/src/main/java/com/bsmlab/dfx/agent/listener/dto/CommandDto.java b/src/main/java/com/bsmlab/dfx/agent/listener/dto/CommandDto.java index 783dc9d..458ec34 100644 --- a/src/main/java/com/bsmlab/dfx/agent/listener/dto/CommandDto.java +++ b/src/main/java/com/bsmlab/dfx/agent/listener/dto/CommandDto.java @@ -15,5 +15,6 @@ public class CommandDto { public static enum CommandType { ALIVE, INFORMATION, + SAVE_CONFIG, } } diff --git a/src/main/java/com/bsmlab/dfx/dfxconsole/app/agent/DfxAgentInfoController.java b/src/main/java/com/bsmlab/dfx/dfxconsole/app/agent/DfxAgentInfoController.java index a7a2b97..7b9c8c4 100644 --- a/src/main/java/com/bsmlab/dfx/dfxconsole/app/agent/DfxAgentInfoController.java +++ b/src/main/java/com/bsmlab/dfx/dfxconsole/app/agent/DfxAgentInfoController.java @@ -1,7 +1,6 @@ package com.bsmlab.dfx.dfxconsole.app.agent; import com.bsmlab.dfx.agent.config.AgentConfigDto; -import com.bsmlab.dfx.agent.listener.dto.ReceiveMessageDto; import com.bsmlab.dfx.dfxconsole.app.agent.service.*; import com.bsmlab.dfx.dfxconsole.framework.dto.SearchParameterDto; import com.bsmlab.dfx.dfxconsole.framework.support.ResponseUtils; @@ -48,6 +47,17 @@ public class DfxAgentInfoController { } } + @PostMapping("/app-api/agent/saveAgentConfigDto") + public ResponseEntity saveAgentConfigDto(@RequestBody AgentConfigDto agentConfigDto) { + try { + dfxAgentInfoService.sendAgentConfigDtoToSave(agentConfigDto); + return ResponseEntity.ok().body(agentConfigDto); + } + catch(JsonProcessingException e) { + return ResponseEntity.internalServerError().body(ResponseUtils.toExceptionResponseDto(e)); + } + } + @PostMapping("/app-api/agent/getAgentMessageDtoListTotalCount") public ResponseEntity getAgentMessageDtoListTotalCount() { int totalCount = dfxAgentMessageHistoryService.selectDfxAgentMessageDtoListTotalCount(); diff --git a/src/main/java/com/bsmlab/dfx/dfxconsole/app/agent/service/DfxAgentInfoService.java b/src/main/java/com/bsmlab/dfx/dfxconsole/app/agent/service/DfxAgentInfoService.java index e4b7bac..bb8b21a 100644 --- a/src/main/java/com/bsmlab/dfx/dfxconsole/app/agent/service/DfxAgentInfoService.java +++ b/src/main/java/com/bsmlab/dfx/dfxconsole/app/agent/service/DfxAgentInfoService.java @@ -1,20 +1,33 @@ package com.bsmlab.dfx.dfxconsole.app.agent.service; import com.bsmlab.dfx.agent.config.AgentConfigDto; +import com.bsmlab.dfx.agent.listener.dto.CommandDto; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.Getter; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; import org.springframework.stereotype.Service; import java.util.List; +import java.util.UUID; @Slf4j @RequiredArgsConstructor @Service +@Getter public class DfxAgentInfoService { + @Value("${spring.application.name}") + private String applicationName; + @Value("${spring.application.version}") + private String applicationVersion; + @Value("${spring.application.commitId}") + private String applicationCommitId; private final DfxAgentInfoMapper dfxAgentInfoMapper; public List getDfxAgentInfoDtoList() { @@ -39,6 +52,23 @@ public class DfxAgentInfoService { } } + public void sendAgentConfigDtoToSave(AgentConfigDto agentConfigDto) throws JsonProcessingException { + ObjectMapper objectMapper = new ObjectMapper(); + + String agentConfigDtoString = objectMapper.writeValueAsString(agentConfigDto); + String messageUuid = UUID.randomUUID().toString(); + CommandDto commandDto = CommandDto.builder().commandType(CommandDto.CommandType.SAVE_CONFIG).messageUuid(messageUuid).data(agentConfigDtoString).build(); + + HttpHeaders httpHeaders = new HttpHeaders(); + httpHeaders.setContentType(MediaType.APPLICATION_JSON); + httpHeaders.set("User-Agent", this.getApplicationName() + ", version: " + this.getApplicationVersion() + "(" + this.getApplicationCommitId() + ")" + + ", host ID: " + agentConfigDto.getStatusChecker().getConsoleHostName() + + ", action: " + CommandDto.CommandType.SAVE_CONFIG + ); + //TODO agent에 agentConfigDto를 전송하려고 하였으나 암호화 적용하는 것이 좋을 듯 하여 암호화 적용 방법 모색중임 + + } + public void saveDetailForRefreshDfxAgentInfoDto(DfxAgentInfoDto dfxAgentInfoDto) throws JsonProcessingException { ObjectMapper objectMapper = new ObjectMapper(); AgentConfigDto agentConfigDto = objectMapper.readValue(dfxAgentInfoDto.getSettingsData(), new TypeReference(){}); diff --git a/src/main/java/com/bsmlab/dfx/dfxconsole/app/agent/service/DfxCryptoKeyDto.java b/src/main/java/com/bsmlab/dfx/dfxconsole/app/agent/service/DfxCryptoKeyDto.java new file mode 100644 index 0000000..7c89a42 --- /dev/null +++ b/src/main/java/com/bsmlab/dfx/dfxconsole/app/agent/service/DfxCryptoKeyDto.java @@ -0,0 +1,19 @@ +package com.bsmlab.dfx.dfxconsole.app.agent.service; + +import lombok.*; + +@NoArgsConstructor +@AllArgsConstructor +@Setter +@Getter +@Builder +@ToString +public class DfxCryptoKeyDto { + private String keyValue; + private String hashValue; + private String algorithmName; + private String modeName; + private String targetAgentHostId; + private long applyTs; + private String dataEncryptionYn; +} diff --git a/src/main/java/com/bsmlab/dfx/dfxconsole/app/agent/service/DfxCryptoKeyMapper.java b/src/main/java/com/bsmlab/dfx/dfxconsole/app/agent/service/DfxCryptoKeyMapper.java new file mode 100644 index 0000000..e317ffa --- /dev/null +++ b/src/main/java/com/bsmlab/dfx/dfxconsole/app/agent/service/DfxCryptoKeyMapper.java @@ -0,0 +1,15 @@ +package com.bsmlab.dfx.dfxconsole.app.agent.service; + +import com.bsmlab.dfx.dfxconsole.framework.dto.SearchParameterDto; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +@Mapper +public interface DfxCryptoKeyMapper { + List selectDfxCryptoKeyList(SearchParameterDto searchParameterDto); + int selectDfxCryptoKeyListTotalCount(SearchParameterDto searchParameterDto); + DfxCryptoKeyDto selectDfxCryptoKeyByKeyValue(DfxCryptoKeyDto dfxCryptoKeyDto); + void insertDfxCryptoKey(DfxCryptoKeyDto dfxCryptoKeyDto); + int updateDfxCryptoKeyToApply(DfxCryptoKeyDto dfxCryptoKeyDto); +} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index ae5e0c5..2312cc1 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,6 +1,8 @@ spring: application: - name: dfxconsole + name: DFXConsole + version: ${version} + commitId: ${commitId} devtools: restart: enabled: true diff --git a/src/main/resources/mapper/app/dfx-agent-message-history.xml b/src/main/resources/mapper/app/dfx-agent-message-history.xml index 4b4c937..020d67a 100644 --- a/src/main/resources/mapper/app/dfx-agent-message-history.xml +++ b/src/main/resources/mapper/app/dfx-agent-message-history.xml @@ -169,7 +169,7 @@ SET PROCESS_STATUS_CODE = #{processStatusCode} , PROCESS_ACK_TS = NOW() WHERE 1 = 1 - SENDER_AGENT_ID = #{senderAgentId} + AND SENDER_AGENT_ID = #{senderAgentId} AND MESSAGE_UUID = #{messageUuid} ]]> diff --git a/src/main/resources/mapper/app/dfx-crypto-key.xml b/src/main/resources/mapper/app/dfx-crypto-key.xml new file mode 100644 index 0000000..9ccbb07 --- /dev/null +++ b/src/main/resources/mapper/app/dfx-crypto-key.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + +