/** * DB Console 복호화 기능 * - SafeDB 암호화 데이터 복호화 */ (function(DbConsole) { 'use strict'; // 암호화된 값인지 확인 (16진수 패턴, 32자 이상) DbConsole.isEncryptedValue = function(value) { if (!value || typeof value !== 'string' || value.length < 32) { return false; } return /^[0-9A-Fa-f]{32,}$/.test(value); }; // 셀 복호화 DbConsole.decryptCell = function(btn) { var $cell = $(btn).closest('.cell-encrypted'); var encryptedValue = $cell.data('value'); if (!encryptedValue) { alert('복호화할 값이 없습니다.'); return; } // 버튼 비활성화 $(btn).prop('disabled', true); $.ajax({ url: DbConsole.getContextPath() + '/admin/dbconsole/decrypt.do', type: 'POST', contentType: 'application/json', data: JSON.stringify({ value: encryptedValue }), success: function(response) { if (response.success) { $cell.html('' + DbConsole.escapeHtml(response.decryptedValue) + ''); } else { alert('복호화 실패: ' + (response.message || '알 수 없는 오류')); $(btn).prop('disabled', false); } }, error: function(xhr) { alert('복호화 요청 오류: ' + xhr.statusText); $(btn).prop('disabled', false); } }); }; // 컬럼 전체 복호화 DbConsole.decryptColumn = function(columnName) { var encryptedValues = []; var $cells = $('.cell-encrypted[data-column="' + columnName + '"]'); $cells.each(function() { var value = $(this).data('value'); if (value) { encryptedValues.push(value); } }); if (encryptedValues.length === 0) { alert('복호화할 암호화 데이터가 없습니다.'); return; } $.ajax({ url: DbConsole.getContextPath() + '/admin/dbconsole/decryptBatch.do', type: 'POST', contentType: 'application/json', data: JSON.stringify({ values: encryptedValues }), success: function(response) { if (response.success) { var decryptedMap = response.decrypted; $cells.each(function() { var value = $(this).data('value'); if (decryptedMap[value]) { $(this).html('' + DbConsole.escapeHtml(decryptedMap[value]) + ''); } }); } else { alert('일괄 복호화 실패: ' + (response.message || '알 수 없는 오류')); } }, error: function(xhr) { alert('복호화 요청 오류: ' + xhr.statusText); } }); }; // 암호화 셀 렌더러 확장 DbConsole.encryptedCellRenderer = function(params, escapeHtml) { if (params.value === null || params.value === undefined) { return '(NULL)'; } var strValue = String(params.value); // 암호화된 값인지 확인 if (DbConsole.isEncryptedValue(strValue)) { var displayValue = strValue.length > 20 ? strValue.substring(0, 20) + '...' : strValue; return '' + escapeHtml(displayValue) + ''; } return escapeHtml(strValue); }; })(window.DbConsole || (window.DbConsole = {}));