server - 복사본.js 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877
  1. const express = require('express');
  2. const cookieParser = require('cookie-parser');
  3. const cors = require("cors");
  4. const fs = require("fs");
  5. const path = require("path");
  6. // const bodyParser = require('body-parser');
  7. const session = require('express-session');
  8. const multer = require('multer');
  9. const {pool, sql} = require('./config/sql.js');
  10. const app = express();
  11. app.use(session({
  12. secret: 'secret',
  13. resave: false,
  14. saveUninitialized: true,
  15. cookie: {
  16. httpOnly: true,
  17. secure: true, // set this to true on production
  18. sameSite: 'none',
  19. maxAge: 60 * 60 * 24 * 1000
  20. }
  21. }));
  22. app.use(express.json());
  23. app.use(cookieParser());
  24. app.use(express.urlencoded({ extended: true }));
  25. app.use(cors());
  26. app.use("/static", express.static(path.join(__dirname, 'static')));
  27. app.get('/', (req, res) => {
  28. // if (req.session) {
  29. // console.log(res.session);
  30. // }
  31. res.sendFile(path.join(__dirname, '/view/dashboard.html'))
  32. // res.sendFile(path.join(__dirname, '/view/login.html'));
  33. });
  34. app.get('/dashboard', (req, res, next)=>{
  35. res.sendFile(path.join(__dirname, '/view/dashboard.html'));
  36. });
  37. app.get('/trackingLog', (req, res, next)=>{
  38. res.sendFile(path.join(__dirname, '/view/trackingLog.html'));
  39. });
  40. app.get('/gatewayLog', (req, res, next)=>{
  41. res.sendFile(path.join(__dirname, '/view/gatewayLog.html'));
  42. });
  43. app.get('/eventLog', (req, res, next)=>{
  44. res.sendFile(path.join(__dirname, '/view/eventLog.html'));
  45. });
  46. app.get('/shareAppLog', (req, res, next)=>{
  47. res.sendFile(path.join(__dirname, '/view/shareAppLog.html'));
  48. });
  49. app.get('/fileEventLog', (req, res, next)=>{
  50. res.sendFile(path.join(__dirname, '/view/fileEventLog.html'));
  51. });
  52. app.get('/logAnalytics', (req, res, next)=>{
  53. res.sendFile(path.join(__dirname, '/view/logAnalytics.html'));
  54. });
  55. app.get('/alarmReceive', (req, res, next)=>{
  56. res.sendFile(path.join(__dirname, '/view/alarmReceive.html'));
  57. });
  58. app.get('/manager', (req, res, next)=>{
  59. res.sendFile(path.join(__dirname, '/view/manager.html'));
  60. });
  61. app.get('/linked-management/:systemId',(req, res, next)=>{
  62. if (!req.params.systemId) {
  63. next();
  64. }
  65. res.sendFile(path.join(__dirname, '/view/linked-management-edit.html'));
  66. });
  67. app.get('/linked-management',(req, res, next)=>{
  68. res.sendFile(path.join(__dirname, '/view/linked-management.html'));
  69. });
  70. app.post('/api/login',(req, res, next)=>{
  71. const {username, password} = req.body;
  72. // console.log(username, password);
  73. // const sqlQuery =
  74. // `select `;
  75. return res.json({success: 'F', message:'test'})
  76. });
  77. app.post('/api/findSeverName', async (req, res, next)=>{
  78. const systemName = req.body.SystemName;
  79. if (systemName) {
  80. const sqlQuery = `select count(*) as COUNT from TB_LINKED_SYSTEM where SystemName = @systemName and UseYn = 1`;
  81. const {success, data, error} = await queryHandler(sqlQuery, {systemName: systemName});
  82. if (success) {
  83. if (data && data.recordset) {
  84. return res.json(data.recordset[0]);
  85. }
  86. }
  87. else {
  88. res.status(500).send(error);
  89. }
  90. }
  91. else{
  92. return res.json({error: '연동 시스템 명칭을 확인해주세요.\n시스템 명칭 : '+systemName});
  93. }
  94. })
  95. app.post('/api/addLinkedSystem', async (req, res, next)=>{
  96. const resultObject = {success : 'F', message : '추가하실 연동 시스템 정보를 찾을 수 없습니다.\n파라미터 정보를 다시 확인 해주세요'};
  97. const {SystemName, SystemDesc} = req.body;
  98. if (SystemName) {
  99. const sqlQuery =
  100. `INSERT INTO TB_LINKED_SYSTEM (SystemName, SystemDesc) values (@SystemName, @SystemDesc)`;
  101. const param = {
  102. SystemName : SystemName,
  103. SystemDesc : SystemDesc,
  104. }
  105. const {success, data, error} = await queryHandler(sqlQuery, param);
  106. if (success) {
  107. if (data && data.rowsAffected[0]) {
  108. resultObject.success = 'S';
  109. resultObject.message = '연동 시스템 정보가 추가되었습니다.';
  110. }
  111. else {
  112. resultObject.message = '연동 시스템 정보가 추가 되지 않았습니다.'
  113. }
  114. }
  115. else {
  116. res.status(500).send(error);
  117. }
  118. }
  119. return res.send(resultObject);
  120. });
  121. app.post('/api/deleteLinkedSystem', async (req, res, next)=>{
  122. const resultObj = {success : 'F', message : '삭제하실 연동 시스템 정보를 찾을 수 없습니다.\n파라미터 정보를 다시 확인 해주세요'};
  123. const {SystemId} = req.body;
  124. if (SystemId) {
  125. try {
  126. const que = await pool;
  127. let transaction = new sql.Transaction(que);
  128. const sqlQuery =
  129. `UPDATE TB_LINKED_SYSTEM SET DeletedAt = GETDATE(), UseYn = 0 WHERE SystemId = ${SystemId}`;
  130. const serverQuery =
  131. `UPDATE TB_LINKED_SERVER SET UseYn = 0, DeletedAt = GETDATE() WHERE SystemId = ${SystemId}`;
  132. const serverListQuery =
  133. `SELECT * FROM TB_LINKED_SERVER WHERE SystemId = ${SystemId}`;
  134. await transaction.begin().then(async() => {
  135. const request = new sql.Request(transaction);
  136. const result = await request.query(sqlQuery);
  137. if (result && result.rowsAffected && result.rowsAffected[0] > 0) {
  138. const result1 = await request.query(serverListQuery);
  139. if (result1 && result1.recordset.length > 0) {
  140. let ServerIds = '';
  141. result1.recordset.forEach((obj, idx)=>{
  142. ServerIds += obj.ServerId;
  143. if (result1.recordset.length !== idx + 1 ) {
  144. ServerIds += ', ';
  145. }
  146. });
  147. const result2 = await request.query(serverQuery);
  148. if (result2 && result2.rowsAffected[0] > 0) {
  149. resultObj.success = 'S';
  150. resultObj.message = '선택하신 연동 시스템 정보를 삭제하였습니다.'
  151. }
  152. else {
  153. resultObj.success = 'F';
  154. resultObj.message = '선택하신 연동 시스템 정보가 삭제 되지 않았습니다.'
  155. }
  156. const apiListQuery =
  157. `SELECT * FROM TB_LINKED_API_KEY WHERE ServerId IN (${ServerIds})`;
  158. const result3 = await request.query(apiListQuery);
  159. if (result3 && result3.recordset.length > 0) {
  160. const apiQuery =
  161. `UPDATE TB_LINKED_API_KEY SET UseYn = 0, DeletedAt = GETDATE() WHERE ServerId IN (${ServerIds})`;
  162. const result4 = await request.query(apiQuery);
  163. if (result4 && result4.rowsAffected && result4.rowsAffected[0] > 0) {
  164. transaction.commit();
  165. resultObj.success = 'S';
  166. resultObj.message = '선택하신 연동 시스템 정보를 삭제하였습니다.';
  167. }
  168. else {
  169. transaction.rollback();
  170. resultObj.success = 'F';
  171. resultObj.message = '선택하신 연동 시스템 정보가 삭제 되지 않았습니다.';
  172. }
  173. return res.json(resultObj);
  174. }
  175. else {
  176. transaction.commit();
  177. return res.json(resultObj);
  178. }
  179. }
  180. else {
  181. transaction.commit();
  182. resultObj.success = 'S';
  183. resultObj.message = '선택하신 연동 시스템 정보를 삭제하였습니다.'
  184. }
  185. res.json(resultObj);
  186. }
  187. else {
  188. transaction.rollback();
  189. resultObj.message = '서버 삭제 작업 중 오류가 발생하였습니다.';
  190. return res.json(resultObj);
  191. }
  192. });
  193. }
  194. catch (error) {
  195. transaction.rollback();
  196. console.log(error);
  197. resultObj.message = '서버 삭제 작업 중 오류가 발생하였습니다.';
  198. resultObj.error = error;
  199. return res.json(resultObj);
  200. }
  201. }
  202. else {
  203. return res.send(resultObj);
  204. }
  205. })
  206. app.post('/api/linked-system/list', async (req, res, next)=>{
  207. const {page} = req.body;
  208. let pageNo = 1;
  209. if (page) {
  210. pageNo = parseInt(page);
  211. }
  212. const pagePerCount = 12;
  213. const pageSize = 10;
  214. const totalQuery = `select count(*) as total from TB_LINKED_SYSTEM WHERE UseYn = 1`;
  215. const query =
  216. `SELECT
  217. ROW_NUMBER() OVER(ORDER BY SystemId asc) AS rownum,
  218. S.SystemId as system_id,
  219. S.SystemName as system_name,
  220. S.SystemDesc as system_desc,
  221. COALESCE(CONVERT(CHAR(19), S.CreatedAt, 120), '-') as created_at,
  222. (SELECT count(*) FROM TB_LINKED_SERVER WHERE SystemId = S.SystemId AND UseYn = 1) as server_count
  223. FROM TB_LINKED_SYSTEM S WHERE UseYn = 1`;
  224. await paginationList(page, query, totalQuery, pagePerCount, pageSize, res, null);
  225. })
  226. app.post('/api/linked-system/:systemId', async (req, res, next)=>{
  227. const {systemId} = req.params;
  228. if (systemId) {
  229. const sqlQuery = `SELECT
  230. SystemId as system_id,
  231. SystemName as system_name,
  232. SystemDesc as system_desc
  233. FROM TB_LINKED_SYSTEM
  234. WHERE SystemId = @systemId
  235. AND UseYn = 1`;
  236. try {
  237. const query = await pool;
  238. const result = await query.request().input('systemId', systemId).query(sqlQuery);
  239. if (result) {
  240. res.json(result.recordset)
  241. }
  242. }
  243. catch(err) {
  244. res.status(500).send(err);
  245. }
  246. }
  247. });
  248. app.post('/api/getSeverList', (req, res, next)=>{
  249. const {page, systemId} = req.body;
  250. const pagePerCount = 12;
  251. const pageSize = 10;
  252. if (page, systemId) {
  253. const totalQuery = `select count(*) as total from TB_LINKED_SERVER WHERE SystemId=${systemId} AND UseYn = 1`;
  254. const query =
  255. `SELECT
  256. ROW_NUMBER() OVER(ORDER BY tls.ServerId asc) AS rownum,
  257. tls.ServerId as server_id,
  258. tls.SystemId as system_id,
  259. tls.ServerIpAddr as server_ip,
  260. tls.ServerDesc as server_desc,
  261. COALESCE(CONVERT(CHAR(19), tls.CreatedAt, 120), '-') as server_created_at,
  262. tlak.id api_id,
  263. ISNULL(tlak.ApiKey, '-') as api_key,
  264. COALESCE(CONVERT(CHAR(10), tlak.ExpiredAt, 120), '-') as expired_at,
  265. tlak.policyLookupYn as policy_lookup_yn,
  266. tlak.fileInfoLookupYn as file_info_lookup_yn,
  267. tlak.applyLabelYn as apply_label_yn,
  268. tlak.releaseLabelYn as release_label_yn,
  269. tlak.encryptionFileYn as encryption_file_yn,
  270. tlak.decryptionFileYn as decryption_file_yn
  271. FROM
  272. (select * from TB_LINKED_SERVER where SystemId = @systemId and UseYn = 1) tls
  273. left outer join (SELECT * FROM TB_LINKED_API_KEY WHERE UseYn = 1) tlak on tls.ServerId = tlak.ServerId`;
  274. paginationList(page, query, totalQuery, pagePerCount, pageSize, res, {systemId : systemId});
  275. }
  276. else {
  277. res.status(500).send('Not Found Page or SystemId');
  278. }
  279. });
  280. app.post('/api/getApiList', (req, res, next)=>{
  281. const {page, systemId} = req.body;
  282. const pagePerCount = 12;
  283. const pageSize = 10;
  284. if (page, systemId) {
  285. const totalCount = `select count(*) as total from TB_LINKED_SERVER WHERE SystemId=${systemId} AND UseYn = 1`;
  286. pool.request().query(totalCount, (error, result)=>{
  287. if (error) {
  288. console.error('Error executing query:', err.originalError);
  289. res.status(500).send(err.originalError.info.message);
  290. }
  291. if (result.recordset && result.recordset.length) {
  292. const resultObj = new Pagination(page, pageSize, pagePerCount, result.recordset[0].total);
  293. const sqlQuery =
  294. `SELECT A.*
  295. FROM (
  296. SELECT
  297. ROW_NUMBER() OVER(ORDER BY tls.ServerId asc) AS rownum,
  298. tls.ServerId as server_id,
  299. tls.SystemId as system_id,
  300. tlak.id api_id,
  301. tlak.ApiKey as api_key,
  302. COALESCE(CONVERT(CHAR(10), tlak.ExpiredAt, 120), '-') as expired_at,
  303. tlak.policyLookupYn as policy_lookup_yn,
  304. tlak.fileInfoLookupYn as file_info_lookup_yn,
  305. tlak.applyLabelYn as apply_label_yn,
  306. tlak.releaseLabelYn as release_label_yn,
  307. tlak.encryptionFileYn as encryption_file_yn,
  308. tlak.decryptionFileYn as decryption_file_yn
  309. FROM
  310. (select * from TB_LINKED_SERVER where SystemId = ${systemId} and UseYn = 1) tls
  311. join (SELECT * FROM TB_LINKED_API_KEY WHERE UseYn = 1) tlak on tls.ServerId = tlak.ServerId
  312. ) A WHERE rownum BETWEEN ${resultObj.startRow} and ${resultObj.endRow}`;
  313. pool.request().query(sqlQuery, (err, result) => {
  314. if (err) {
  315. console.error('Error executing query:', err.originalError);
  316. res.status(500).send(err.originalError.info.message);
  317. }
  318. resultObj.list = result.recordset;
  319. return res.json(resultObj);
  320. })
  321. }
  322. })
  323. }
  324. else {
  325. res.status(500).send('Not Found Page or SystemId');
  326. }
  327. });
  328. app.post('/api/systemUpdate', async (req, res, next)=>{
  329. const {SystemDesc, SystemName, SystemId} = req.body;
  330. const resultObj = { success: 'F', message : '파라미터 정보를 확인해주세요.'};
  331. if (SystemName, SystemId) {
  332. let desc = SystemDesc;
  333. if (!desc) {
  334. desc = "";
  335. }
  336. const sqlQuery =
  337. `UPDATE TB_LINKED_SYSTEM SET SystemName = @SystemName, SystemDesc = @SystemDesc WHERE SystemId = @SystemId`;
  338. const param = {
  339. SystemName : SystemName,
  340. SystemDesc : desc,
  341. SystemId : SystemId,
  342. }
  343. const {data, success, error} = await queryHandler(sqlQuery, param);
  344. if (success) {
  345. if (data && data.rowsAffected && data.rowsAffected[0] > 0) {
  346. resultObj.message = '시스템 정보가 수정되었습니다.';
  347. resultObj.success = 'S';
  348. }
  349. else {
  350. resultObj.message = '시스템 정보가 수정되지 않았습니다.';
  351. }
  352. }
  353. else {
  354. return res.status(500).send(error);
  355. }
  356. }
  357. res.json(resultObj);
  358. });
  359. app.post('/api/findIpServer', async (req, res, next)=>{
  360. const {ServerIpAddr, SystemId} = req.body;
  361. const sqlQuery =
  362. `SELECT COUNT(*) AS count FROM TB_LINKED_SERVER WHERE UseYn = 1 AND ServerIpAddr = @ServerIpAddr AND SystemId = @SystemId`;
  363. const param = {
  364. ServerIpAddr : ServerIpAddr,
  365. SystemId : SystemId,
  366. }
  367. const {success, error, data} = await queryHandler(sqlQuery, param);
  368. if (success && data && data.recordset && data.recordset[0]) {
  369. return res.json(data.recordset[0])
  370. }
  371. else {
  372. return res.status(500).send(error);
  373. }
  374. });
  375. app.post('/api/addServer', async (req, res, next)=>{
  376. const {
  377. ServerIpAddr,
  378. ServerDesc,
  379. SystemId,
  380. policyLookupYn,
  381. fileInfoLookupYn,
  382. applyLabelYn,
  383. releaseLabelYn,
  384. encryptionFileYn,
  385. decryptionFileYn,
  386. ApiKey,
  387. ExpiredAt,
  388. } = req.body;
  389. const resultObj = { success: 'F', message : '파라미터 정보를 확인해주세요.'};
  390. if (ServerIpAddr, SystemId) {
  391. let desc = ServerDesc;
  392. if (!desc) {
  393. desc = "";
  394. }
  395. const sqlQuery =
  396. `INSERT INTO TB_LINKED_SERVER (SystemId, ServerIpAddr, ServerDesc) VALUES('${SystemId}', '${ServerIpAddr}', '${ServerDesc}');SELECT @@identity as id;`;
  397. try {
  398. const que = await pool;
  399. let transaction = new sql.Transaction(que);
  400. await transaction.begin().then(async() => {
  401. const request = new sql.Request(transaction);
  402. request.query(sqlQuery, async (err, result)=>{
  403. if (err) {
  404. console.error('Error executing query:', err.originalError);
  405. res.status(500).send(err.originalError.info.message);
  406. }
  407. if (result && result.rowsAffected && result.rowsAffected[0] > 0 && result.recordset && result.recordset[0]) {
  408. const ServerId = result.recordset[0].id;
  409. const apiSqlQuery =
  410. `INSERT INTO
  411. TB_LINKED_API_KEY ( ServerId, ApiKey, ExpiredAt, policyLookupYn, fileInfoLookupYn, applyLabelYn, releaseLabelYn,
  412. encryptionFileYn, decryptionFileYn )
  413. VALUES ('${ServerId}', '${ApiKey}', '${ExpiredAt}', ${policyLookupYn}, ${fileInfoLookupYn}, ${applyLabelYn}, ${releaseLabelYn},
  414. ${encryptionFileYn}, ${decryptionFileYn})`;
  415. let result2 = await request.query(apiSqlQuery);
  416. if (result2 && result2.rowsAffected && result2.rowsAffected[0] > 0) {
  417. transaction.commit();
  418. resultObj.success = 'S';
  419. resultObj.message = '요청하신 서버 정보가 추가 되었습니다.';
  420. }
  421. else {
  422. resultObj.message = '서버 추가 작업 중 오류가 발생하였습니다.';
  423. transaction.rollback();
  424. }
  425. return res.json(resultObj);
  426. }
  427. else {
  428. resultObj.message = '서버 추가 작업 중 오류가 발생하였습니다.';
  429. transaction.rollback();
  430. return res.json(resultObj);
  431. }
  432. });
  433. })
  434. }
  435. catch (error) {
  436. // console.error('Error executing query:', err.originalError);
  437. // res.status(500).send(err.originalError.info.message);
  438. console.log(error);
  439. resultObj.message = '서버 추가 작업 중 오류가 발생하였습니다.';
  440. resultObj.error = error;
  441. return res.json(resultObj);
  442. }
  443. }
  444. else {
  445. res.json(resultObj);
  446. }
  447. });
  448. app.post('/api/editServer', async (req, res, next)=>{
  449. const {
  450. api_id,
  451. system_id,
  452. server_ip,
  453. server_id,
  454. server_desc,
  455. expired_at,
  456. file_info_lookup_yn,
  457. policy_lookup_yn,
  458. release_label_yn,
  459. decryption_file_yn,
  460. encryption_file_yn,
  461. apply_label_yn,
  462. } = req.body;
  463. const resultObj = { success: 'F', message : '파라미터 정보를 확인해주세요.'};
  464. if (system_id, server_ip, expired_at, api_id, server_id) {
  465. let desc = server_desc;
  466. if (!desc) {
  467. desc = "";
  468. }
  469. const sqlQuery =
  470. `UPDATE TB_LINKED_SERVER SET
  471. ServerIpAddr = @server_ip
  472. , ServerDesc = @desc
  473. WHERE ServerId = @server_id`;
  474. try {
  475. const que = await pool;
  476. let transaction = new sql.Transaction(que);
  477. await transaction.begin().then(async() => {
  478. const request = new sql.Request(transaction);
  479. request.input('server_ip', server_ip);
  480. request.input('desc', desc);
  481. request.input('server_id', server_id);
  482. request.input('expired_at', expired_at);
  483. request.input('policy_lookup_yn', policy_lookup_yn);
  484. request.input('file_info_lookup_yn', file_info_lookup_yn);
  485. request.input('apply_label_yn', apply_label_yn);
  486. request.input('release_label_yn', release_label_yn);
  487. request.input('encryption_file_yn', encryption_file_yn);
  488. request.input('decryption_file_yn', decryption_file_yn);
  489. request.input('api_id', api_id);
  490. request.query(sqlQuery, async (err, result)=>{
  491. if (err) {
  492. console.error('Error executing query:', err.originalError);
  493. res.status(500).send(err.originalError.info.message);
  494. }
  495. if (result && result.rowsAffected && result.rowsAffected[0] > 0) {
  496. const apiSqlQuery =
  497. `UPDATE TB_LINKED_API_KEY SET
  498. ExpiredAt = @expired_at,
  499. policyLookupYn = @policy_lookup_yn,
  500. fileInfoLookupYn = @file_info_lookup_yn,
  501. applyLabelYn = @apply_label_yn,
  502. releaseLabelYn = @release_label_yn,
  503. encryptionFileYn = @encryption_file_yn,
  504. decryptionFileYn = @decryption_file_yn
  505. WHERE id = @api_id`;
  506. let result2 = await request.query(apiSqlQuery);
  507. if (result2 && result2.rowsAffected && result2.rowsAffected[0] > 0) {
  508. transaction.commit();
  509. resultObj.success = 'S';
  510. resultObj.message = '요청하신 서버 정보가 수정 되었습니다.';
  511. }
  512. else {
  513. resultObj.message = '서버 수정 작업 중 오류가 발생하였습니다.';
  514. transaction.rollback();
  515. }
  516. return res.json(resultObj);
  517. }
  518. else {
  519. resultObj.message = '서버 수정 작업 중 오류가 발생하였습니다.';
  520. transaction.rollback();
  521. return res.json(resultObj);
  522. }
  523. });
  524. })
  525. }
  526. catch (error) {
  527. console.log(error);
  528. resultObj.message = '서버 수정 작업 중 오류가 발생하였습니다.';
  529. resultObj.error = error;
  530. return res.json(resultObj);
  531. }
  532. }
  533. else {
  534. res.json(resultObj);
  535. }
  536. });
  537. app.post('/api/deleteServer', async (req, res, next)=>{
  538. const {ServerId} = req.body;
  539. const resultObj = { success: 'F', message : '파라미터 정보를 확인해주세요.'};
  540. if (ServerId) {
  541. try {
  542. const que = await pool;
  543. let transaction = new sql.Transaction(que);
  544. const sqlQuery =
  545. `UPDATE TB_LINKED_SERVER SET UseYn = 0, DeletedAt = GETDATE() WHERE ServerId = @ServerId`;
  546. await transaction.begin().then(async() => {
  547. const request = new sql.Request(transaction);
  548. request.input('ServerId', ServerId);
  549. request.query(sqlQuery, async (err, result)=>{
  550. if (err) {
  551. console.error('Error executing query:', err.originalError);
  552. res.status(500).send(err.originalError.info.message);
  553. }
  554. if (result && result.rowsAffected && result.rowsAffected[0]) {
  555. const apiSqlQuery =
  556. `UPDATE TB_LINKED_API_KEY SET UseYn = 0, DeletedAt = GETDATE() WHERE ServerId = @ServerId`;
  557. let result2 = await request.query(apiSqlQuery, ServerId);
  558. if (result2 && result2.rowsAffected && result2.rowsAffected[0] > 0) {
  559. transaction.commit();
  560. resultObj.success = 'S';
  561. resultObj.message = '요청하신 서버 정보가 삭제 되었습니다.';
  562. }
  563. else {
  564. resultObj.message = '서버 삭제 작업 중 오류가 발생하였습니다.';
  565. transaction.rollback();
  566. }
  567. return res.json(resultObj);
  568. }
  569. else {
  570. resultObj.message = '서버 삭제 작업 중 오류가 발생하였습니다.';
  571. transaction.rollback();
  572. return res.json(resultObj);
  573. }
  574. });
  575. })
  576. }
  577. catch (error) {
  578. console.log(error);
  579. resultObj.message = '서버 삭제 작업 중 오류가 발생하였습니다.';
  580. resultObj.error = error;
  581. return res.json(resultObj);
  582. }
  583. }
  584. else {
  585. res.json(resultObj);
  586. }
  587. });
  588. app.post('/api/addApiKey', async (req, res, next)=>{
  589. const {ServerIpAddr, ServerDesc, SystemId} = req.body;
  590. const resultObj = { success: 'F', message : '파라미터 정보를 확인해주세요.'};
  591. if (ServerIpAddr, SystemId) {
  592. let desc = ServerDesc;
  593. if (!desc) {
  594. desc = "";
  595. }
  596. const sqlQuery =
  597. `INSERT INTO TB_LINKED_API_KEY (SystemId, ServerIpAddr, ServerDesc) VALUES(@SystemId, @ServerIpAddr, @ServerDesc)`;
  598. const param = {
  599. ServerIpAddr : ServerIpAddr,
  600. ServerDesc : desc,
  601. SystemId : SystemId
  602. }
  603. const {error, data, success} = await queryHandler(sqlQuery, param);
  604. if (!success) {
  605. res.status(500).send(error);
  606. }
  607. else {
  608. if (data && data.rowsAffected && data.rowsAffected[0] > 0) {
  609. resultObj.message = 'API 키가 추가 되었습니다.';
  610. resultObj.success = 'S';
  611. }
  612. else {
  613. resultObj.message = 'API 키가 추가 되지 않았습니다.';
  614. }
  615. }
  616. }
  617. return res.json(resultObj);
  618. });
  619. /**
  620. * 쿼리 핸들러
  621. * @param {*} query 쿼리
  622. * @param {*} param 쿼리 사용 파라미터
  623. * @returns
  624. */
  625. async function queryHandler(query, param) {
  626. const resultObj = {success: false, error: null, data: null};
  627. try {
  628. const que = await pool;
  629. const request = que.request();
  630. if (param) {
  631. for (let key in param) {
  632. request.input(key, param[key]);
  633. }
  634. }
  635. const result = await request.query(query);
  636. if (result) {
  637. resultObj.data = result;
  638. resultObj.success = true;
  639. }
  640. }
  641. catch(err) {
  642. resultObj.error = err;
  643. }
  644. return resultObj;
  645. }
  646. app.post('/api/deleteApiKey',async (req, res, next)=>{
  647. const {ServerId} = req.body;
  648. const resultObj = { success: 'F', message : '파라미터 정보를 확인해주세요.'};
  649. if (ServerId) {
  650. const sqlQuery =
  651. `UPDATE TB_LINKED_API_KEY SET UseYn = 0, DeletedAt = GETDATE() WHERE ServerId = @ServerId`;
  652. const {data, success, error} = await queryHandler(sqlQuery, {ServerId : ServerId});
  653. if (success && data) {
  654. if (data.rowsAffected && data.rowsAffected[0] > 0) {
  655. resultObj.message = 'API 키가 삭제 되었습니다.';
  656. resultObj.success = 'S';
  657. }
  658. else {
  659. resultObj.message = 'API 키가 삭제 되지 않았습니다.';
  660. }
  661. }
  662. else {
  663. res.status(500).send(error);
  664. }
  665. }
  666. return res.json(resultObj);
  667. });
  668. app.post('/api/getGatewayLogs', (req, res, next)=>{
  669. const {page, startDate, endDate, searchType, searchText} = req.body;
  670. let searchValue = '';
  671. const pagePerCount = 15;
  672. const pageSize = 10;
  673. if (page, startDate, endDate) {
  674. let totalQuery =
  675. `SELECT COUNT(*) total FROM TB_AIP_FILE_JOB_LOG WHERE LogDate BETWEEN CONVERT(DATETIME, '${startDate}') and CONVERT(DATETIME, '${endDate}')`;
  676. if (searchType && searchText) {
  677. searchValue = ` AND ${searchType} like '%${searchText}%'`;
  678. if (searchType === 'FileName' || searchType === 'FileOwner') {
  679. searchValue += ` OR New${searchType} like '%${searchText}%'`;
  680. }
  681. }
  682. totalQuery += searchValue;
  683. const query =
  684. `SELECT
  685. ROW_NUMBER() OVER(ORDER BY A.LogDate DESC) AS rownum,
  686. A.Id id,
  687. COALESCE(CONVERT(CHAR(19), A.LogDate, 120), '-') as log_date,
  688. A.ApiId api_id,
  689. B.ApiName api_name,
  690. B.ApiDesc api_desc,
  691. A.FileId file_id,
  692. A.FileOwner file_owner,
  693. A.FileName file_name,
  694. A.FileLabelGuid file_label_guid,
  695. C.LabelDesc file_label_desc,
  696. A.FileSize file_size,
  697. A.NewFileName new_file_name,
  698. A.NewFileOwner new_file_owner,
  699. A.NewFileLabelGuid new_file_label_guid,
  700. D.LabelDesc new_file_label_desc,
  701. A.NewFileSize new_file_size,
  702. A.JobOwner job_owner,
  703. A.JobResult job_result,
  704. A.JobTime job_time,
  705. A.JobMessage job_message,
  706. A.ServerIpAddr server_ip_addr,
  707. A.ApiGuid api_guid,
  708. A.ApiKey api_key
  709. FROM TB_AIP_FILE_JOB_LOG A
  710. LEFT JOIN TB_AIP_API_INFO B
  711. ON A.ApiId = B.ApiId
  712. LEFT JOIN TB_AIP_LABEL C
  713. ON A.FileLabelGuid = C.LabelGuid
  714. LEFT JOIN TB_AIP_LABEL D
  715. ON A.NewFileLabelGuid = D.LabelGuid
  716. WHERE A.LogDate BETWEEN CONVERT(DATETIME, '${startDate}') and CONVERT(DATETIME, '${endDate}')
  717. ${searchValue}`;
  718. paginationList(page, query, totalQuery, pagePerCount, pageSize, res);
  719. }
  720. else {
  721. res.status(500).send('파라미터 정보를 찾을 수 없습니다.');
  722. }
  723. });
  724. class Pagination {
  725. constructor(page, pageSize, pagePerCount, totalCount) {
  726. this.page = parseInt(page) || 1;
  727. this.currentPage = this.page;
  728. this.pageSize = pageSize;
  729. this.pagePerCount = pagePerCount;
  730. this.totalCount = totalCount;
  731. this.totalPageCount = this.getTotalPageCount(this.totalCount, this.pagePerCount);
  732. this.startPage = this.getStartPage(this.page, this.pageSize);
  733. this.endPage = this.getEndPage(this.startPage, this.totalPageCount, this.pageSize);
  734. this.startRow = this.getStartRow(this.page, this.pagePerCount);
  735. this.endRow = this.getEndRow(this.startRow, this.pagePerCount, this.totalCount);
  736. this.prev = this.getPrev(this.pageSize, this.startPage);
  737. this.next = this.getNext(this.endPage, this.totalPageCount);
  738. this.list = [];
  739. }
  740. getStartPage(page, pageSize) {
  741. let start = Math.floor(page / pageSize);
  742. if (page % pageSize === 0) {
  743. start--;
  744. }
  745. return (start * pageSize) + 1;
  746. }
  747. getEndPage(startPage, totalPageCount, pageSize) {
  748. let endPage = (startPage - 1) + pageSize;
  749. if (endPage > totalPageCount) {
  750. endPage = totalPageCount;
  751. }
  752. return endPage;
  753. }
  754. getStartRow(page, pagePerCount) {
  755. return ((page - 1) * pagePerCount) + 1;
  756. }
  757. getEndRow(startRow, pagePerCount, totalCount) {
  758. let endRow = startRow + pagePerCount - 1;
  759. if (endRow > totalCount) {
  760. endRow = totalCount;
  761. }
  762. return endRow;
  763. }
  764. getPrev(pageSize, startPage) {
  765. return (pageSize < startPage) ? (startPage - pageSize) : 0;
  766. }
  767. getNext(endPage, totalPageCount) {
  768. return (endPage + 1 <= totalPageCount) ? (endPage + 1 ) : 0;
  769. }
  770. getTotalPageCount(totalCount, pagePerCount) {
  771. return Math.ceil(totalCount * 1.0 / pagePerCount);
  772. }
  773. }
  774. async function paginationList(page, query, totalQuery, pagePerCount, pageSize, res, param) {
  775. try {
  776. let pageNo = 1;
  777. if (page) {
  778. pageNo = parseInt(page);
  779. }
  780. const que = await pool;
  781. const request = que.request();
  782. const result = await request.query(totalQuery);
  783. if (result && result.recordset && result.recordset.length) {
  784. const resultObj = new Pagination(pageNo, pageSize, pagePerCount, result.recordset[0].total);
  785. const sqlQuery =
  786. `SELECT A.* FROM (
  787. ${query}
  788. ) A
  789. WHERE rownum BETWEEN @startRow AND @endRow`;
  790. request.input('startRow', resultObj.startRow);
  791. request.input('endRow', resultObj.endRow);
  792. if (param) {
  793. for (let key in param) {
  794. request.input(key, param[key]);
  795. }
  796. }
  797. const result1 = await request.query(sqlQuery);
  798. if (result1 && result1.recordset) {
  799. resultObj.list = result1.recordset;
  800. }
  801. return res.json(resultObj);
  802. }
  803. }
  804. catch(err) {
  805. console.log(err);
  806. res.status(500).send(err);
  807. }
  808. }
  809. app.listen(5000)