mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-20 00:46:01 +00:00
SYNC: Merge branch 'feature/audit-logs'
This commit is contained in:
committed by
Diflow
parent
e3c6d05a0a
commit
90bbdd563b
@@ -60,10 +60,9 @@
|
||||
installNewCloudTokenListener();
|
||||
initializeAppUpdates();
|
||||
installCloudListeners();
|
||||
refreshPublicCloudFiles();
|
||||
}
|
||||
|
||||
refreshPublicCloudFiles();
|
||||
|
||||
loadedApi = loadedApiValue;
|
||||
|
||||
if (!loadedApi) {
|
||||
|
||||
@@ -18,41 +18,6 @@
|
||||
testEnabled: () => getCurrentEditor() != null && hasPermission('dbops/export'),
|
||||
onClick: () => getCurrentEditor().exportGrid(),
|
||||
});
|
||||
|
||||
async function loadDataPage(props, offset, limit) {
|
||||
const { display, conid, database } = props;
|
||||
|
||||
const select = display.getPageQuery(offset, limit);
|
||||
|
||||
const response = await apiCall('database-connections/sql-select', {
|
||||
conid,
|
||||
database,
|
||||
select,
|
||||
});
|
||||
|
||||
if (response.errorMessage) return response;
|
||||
return response.rows;
|
||||
}
|
||||
|
||||
function dataPageAvailable(props) {
|
||||
const { display } = props;
|
||||
const select = display.getPageQuery(0, 1);
|
||||
return !!select;
|
||||
}
|
||||
|
||||
async function loadRowCount(props) {
|
||||
const { display, conid, database } = props;
|
||||
|
||||
const select = display.getCountQuery();
|
||||
|
||||
const response = await apiCall('database-connections/sql-select', {
|
||||
conid,
|
||||
database,
|
||||
select,
|
||||
});
|
||||
|
||||
return parseInt(response.rows[0].count);
|
||||
}
|
||||
</script>
|
||||
|
||||
<script lang="ts">
|
||||
@@ -217,6 +182,42 @@
|
||||
function handleSetLoadedRows(rows) {
|
||||
loadedRows = rows;
|
||||
}
|
||||
|
||||
async function loadDataPage(props, offset, limit) {
|
||||
const { display, conid, database } = props;
|
||||
|
||||
const select = display.getPageQuery(offset, limit);
|
||||
|
||||
const response = await apiCall('database-connections/sql-select', {
|
||||
conid,
|
||||
database,
|
||||
select,
|
||||
auditLogSessionGroup: 'data-grid',
|
||||
});
|
||||
|
||||
if (response.errorMessage) return response;
|
||||
return response.rows;
|
||||
}
|
||||
|
||||
function dataPageAvailable(props) {
|
||||
const { display } = props;
|
||||
const select = display.getPageQuery(0, 1);
|
||||
return !!select;
|
||||
}
|
||||
|
||||
async function loadRowCount(props) {
|
||||
const { display, conid, database } = props;
|
||||
|
||||
const select = display.getCountQuery();
|
||||
|
||||
const response = await apiCall('database-connections/sql-select', {
|
||||
conid,
|
||||
database,
|
||||
select,
|
||||
});
|
||||
|
||||
return parseInt(response.rows[0].count);
|
||||
}
|
||||
</script>
|
||||
|
||||
<LoadingDataGridCore
|
||||
|
||||
33
packages/web/src/elements/Chip.svelte
Normal file
33
packages/web/src/elements/Chip.svelte
Normal file
@@ -0,0 +1,33 @@
|
||||
<script lang="ts">
|
||||
import FontIcon from "../icons/FontIcon.svelte";
|
||||
|
||||
export let onClose;
|
||||
</script>
|
||||
|
||||
<div class="chip">
|
||||
<slot />
|
||||
{#if onClose}
|
||||
<span class="close" on:click={onClose}><FontIcon icon="icon close" /></span>
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
<style>
|
||||
.chip {
|
||||
display: inline-block;
|
||||
padding: 0.25em 0.5em;
|
||||
border-radius: 1em;
|
||||
background-color: var(--theme-bg-2);
|
||||
color: var(--theme-text-1);
|
||||
font-size: 0.875em;
|
||||
cursor: pointer;
|
||||
margin: 2px;
|
||||
}
|
||||
.chip .close {
|
||||
margin-left: 0.2em;
|
||||
color: var(--theme-text-2);
|
||||
cursor: pointer;
|
||||
}
|
||||
.chip .close:hover {
|
||||
color: var(--theme-font-hover);
|
||||
}
|
||||
</style>
|
||||
32
packages/web/src/elements/DateRangeSelector.svelte
Normal file
32
packages/web/src/elements/DateRangeSelector.svelte
Normal file
@@ -0,0 +1,32 @@
|
||||
<script lang="ts">
|
||||
import flatpickr from 'flatpickr';
|
||||
import 'flatpickr/dist/flatpickr.min.css';
|
||||
import 'flatpickr/dist/themes/dark.css';
|
||||
|
||||
import { onMount } from 'svelte';
|
||||
|
||||
let flatpickrInstance;
|
||||
let inputElement;
|
||||
|
||||
export let defaultValue = ['today', 'today'];
|
||||
export let onChange: (value) => void;
|
||||
|
||||
onMount(() => {
|
||||
flatpickrInstance = flatpickr(inputElement, {
|
||||
mode: 'range',
|
||||
maxDate: 'today',
|
||||
dateFormat: 'Y-m-d',
|
||||
defaultDate: defaultValue,
|
||||
|
||||
onClose: selectedDates => {
|
||||
console.log('Selected dates:', selectedDates);
|
||||
if (selectedDates.length === 1) {
|
||||
flatpickrInstance.setDate([selectedDates[0], selectedDates[0]], true);
|
||||
}
|
||||
onChange(selectedDates.length == 1 ? [selectedDates[0], selectedDates[0]] : selectedDates);
|
||||
},
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
<input bind:this={inputElement} type="text" class="input1" />
|
||||
@@ -8,6 +8,7 @@
|
||||
conid,
|
||||
database,
|
||||
select,
|
||||
auditLogSessionGroup: 'data-form',
|
||||
});
|
||||
|
||||
if (response.errorMessage) return response;
|
||||
|
||||
@@ -143,6 +143,7 @@
|
||||
'icon markdown': 'mdi mdi-application',
|
||||
'icon preview': 'mdi mdi-file-find',
|
||||
'icon eye': 'mdi mdi-eye',
|
||||
'icon auditlog': 'mdi mdi-eye',
|
||||
'icon check-all': 'mdi mdi-check-all',
|
||||
'icon checkbox-blank': 'mdi mdi-checkbox-blank-outline',
|
||||
'icon checkbox-marked': 'mdi mdi-checkbox-marked-outline',
|
||||
@@ -307,6 +308,7 @@
|
||||
'img filter': 'mdi mdi-filter',
|
||||
'img group': 'mdi mdi-group',
|
||||
'img perspective': 'mdi mdi-eye color-icon-yellow',
|
||||
'img auditlog': 'mdi mdi-eye color-icon-blue',
|
||||
'img parent-filter': 'mdi mdi-home-alert color-icon-yellow',
|
||||
|
||||
'img folder': 'mdi mdi-folder color-icon-yellow',
|
||||
|
||||
@@ -104,7 +104,8 @@
|
||||
const response = await apiCall('database-connections/sql-select', {
|
||||
conid,
|
||||
database,
|
||||
select
|
||||
select,
|
||||
auditLogSessionGroup: 'lookup',
|
||||
});
|
||||
|
||||
rows = response.rows;
|
||||
|
||||
@@ -185,6 +185,7 @@ export async function apiCall(
|
||||
cache: 'no-cache',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'x-api-session-id': getApiSessionId(),
|
||||
...resolveApiHeaders(),
|
||||
},
|
||||
body: JSON.stringify(args, serializeJsTypesReplacer),
|
||||
@@ -318,6 +319,20 @@ export function refreshPublicCloudFiles(force = false) {
|
||||
sessionStorage.setItem('publicCloudFilesLoaded', 'true');
|
||||
}
|
||||
|
||||
let apiSessionIdValue = null;
|
||||
function getApiSessionId() {
|
||||
if (!apiSessionIdValue) {
|
||||
apiSessionIdValue = uuidv1();
|
||||
}
|
||||
return apiSessionIdValue;
|
||||
|
||||
// if (!sessionStorage.getItem('apiSessionId')) {
|
||||
// const sessionId = uuidv1();
|
||||
// sessionStorage.setItem('apiSessionId', sessionId);
|
||||
// }
|
||||
// return sessionStorage.getItem('apiSessionId');
|
||||
}
|
||||
|
||||
function enableApiLog() {
|
||||
apiLogging = true;
|
||||
console.log('API loggin enabled');
|
||||
|
||||
Reference in New Issue
Block a user