db
This commit is contained in:
@@ -0,0 +1,114 @@
|
||||
/**
|
||||
* 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('<span class="cell-decrypted" title="원본: ' + DbConsole.escapeHtml(encryptedValue) + '">' +
|
||||
DbConsole.escapeHtml(response.decryptedValue) +
|
||||
'<i class="bi bi-check-circle text-success ms-1"></i></span>');
|
||||
} 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('<span class="cell-decrypted" title="원본: ' + DbConsole.escapeHtml(value) + '">' +
|
||||
DbConsole.escapeHtml(decryptedMap[value]) +
|
||||
'<i class="bi bi-check-circle text-success ms-1"></i></span>');
|
||||
}
|
||||
});
|
||||
} else {
|
||||
alert('일괄 복호화 실패: ' + (response.message || '알 수 없는 오류'));
|
||||
}
|
||||
},
|
||||
error: function(xhr) {
|
||||
alert('복호화 요청 오류: ' + xhr.statusText);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
// 암호화 셀 렌더러 확장
|
||||
DbConsole.encryptedCellRenderer = function(params, escapeHtml) {
|
||||
if (params.value === null || params.value === undefined) {
|
||||
return '<span class="cell-null">(NULL)</span>';
|
||||
}
|
||||
|
||||
var strValue = String(params.value);
|
||||
|
||||
// 암호화된 값인지 확인
|
||||
if (DbConsole.isEncryptedValue(strValue)) {
|
||||
var displayValue = strValue.length > 20 ? strValue.substring(0, 20) + '...' : strValue;
|
||||
return '<span class="cell-encrypted" data-value="' + escapeHtml(strValue) + '" data-column="' + params.colDef.field + '">' +
|
||||
escapeHtml(displayValue) +
|
||||
'<button class="btn-decrypt" onclick="DbConsole.decryptCell(this)" title="복호화">' +
|
||||
'<i class="bi bi-unlock"></i></button></span>';
|
||||
}
|
||||
|
||||
return escapeHtml(strValue);
|
||||
};
|
||||
|
||||
})(window.DbConsole || (window.DbConsole = {}));
|
||||
Reference in New Issue
Block a user