kempo 4.2.19 → 4.2.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app-public/CATCH.page.html +15 -0
- package/app-public/kempo-global.global.html +0 -6
- package/dist/admin/accounts/groups/[name]/index.page.html +112 -2
- package/dist/admin/accounts/groups/index.page.html +87 -2
- package/dist/admin/accounts/permissions/index.page.html +84 -2
- package/dist/admin/accounts/users/[id]/index.page.html +117 -3
- package/dist/admin/accounts/users/index.page.html +116 -2
- package/dist/admin/components/tableControls/InstallExtension.js +2 -2
- package/dist/admin/components/tableControls/InstallExtension.js.map +1 -1
- package/dist/admin/components/tableControls/UninstallExtension.js +2 -2
- package/dist/admin/components/tableControls/UninstallExtension.js.map +1 -1
- package/dist/admin/content/fragments/edit/index.page.html +8 -1
- package/dist/admin/content/fragments/index.page.html +87 -2
- package/dist/admin/content/globals/edit/index.page.html +8 -1
- package/dist/admin/content/globals/index.page.html +102 -7
- package/dist/admin/content/pages/edit/index.page.html +8 -1
- package/dist/admin/content/pages/index.page.html +224 -27
- package/dist/admin/content/templates/edit/index.page.html +8 -1
- package/dist/admin/content/templates/index.page.html +116 -2
- package/dist/admin/default.template.html +20 -1
- package/dist/admin/extensions/index.page.html +59 -2
- package/dist/admin/icons/extension_add.svg +1 -0
- package/dist/admin/icons/extension_remove.svg +1 -0
- package/dist/admin/index.page.html +5 -1
- package/dist/admin/nav.fragment.html +84 -2
- package/dist/admin/settings/[owner]/[name]/index.page.html +110 -4
- package/dist/admin/settings/index.page.html +87 -2
- package/dist/kempo/api/fragments/DELETE.js +1 -1
- package/dist/kempo/api/fragments/DELETE.js.map +1 -1
- package/dist/kempo/api/fragments/GET.js +1 -1
- package/dist/kempo/api/fragments/GET.js.map +1 -1
- package/dist/kempo/api/fragments/POST.js +1 -1
- package/dist/kempo/api/fragments/POST.js.map +1 -1
- package/dist/kempo/api/fragments/disable/PUT.js +1 -1
- package/dist/kempo/api/fragments/disable/PUT.js.map +1 -1
- package/dist/kempo/api/fragments/enable/PUT.js +1 -1
- package/dist/kempo/api/fragments/enable/PUT.js.map +1 -1
- package/dist/kempo/api/fragments/file/GET.js +1 -1
- package/dist/kempo/api/fragments/file/GET.js.map +1 -1
- package/dist/kempo/api/fragments/file/PATCH.js +1 -1
- package/dist/kempo/api/fragments/file/PATCH.js.map +1 -1
- package/dist/kempo/api/fragments/file/PUT.js +1 -1
- package/dist/kempo/api/fragments/file/PUT.js.map +1 -1
- package/dist/kempo/api/fragments/lock/PUT.js +1 -1
- package/dist/kempo/api/fragments/lock/PUT.js.map +1 -1
- package/dist/kempo/api/globals/DELETE.js +1 -1
- package/dist/kempo/api/globals/DELETE.js.map +1 -1
- package/dist/kempo/api/globals/GET.js +1 -1
- package/dist/kempo/api/globals/GET.js.map +1 -1
- package/dist/kempo/api/globals/POST.js +1 -1
- package/dist/kempo/api/globals/POST.js.map +1 -1
- package/dist/kempo/api/globals/disable/PUT.js +1 -1
- package/dist/kempo/api/globals/disable/PUT.js.map +1 -1
- package/dist/kempo/api/globals/enable/PUT.js +1 -1
- package/dist/kempo/api/globals/enable/PUT.js.map +1 -1
- package/dist/kempo/api/globals/entry/GET.js +1 -1
- package/dist/kempo/api/globals/entry/GET.js.map +1 -1
- package/dist/kempo/api/globals/entry/PUT.js +1 -1
- package/dist/kempo/api/globals/entry/PUT.js.map +1 -1
- package/dist/kempo/api/globals/lock/PUT.js +1 -1
- package/dist/kempo/api/globals/lock/PUT.js.map +1 -1
- package/dist/kempo/api/pages/DELETE.js +1 -1
- package/dist/kempo/api/pages/DELETE.js.map +1 -1
- package/dist/kempo/api/pages/GET.js +1 -1
- package/dist/kempo/api/pages/GET.js.map +1 -1
- package/dist/kempo/api/pages/POST.js +1 -1
- package/dist/kempo/api/pages/POST.js.map +1 -1
- package/dist/kempo/api/pages/directories/GET.js +1 -1
- package/dist/kempo/api/pages/directories/GET.js.map +1 -1
- package/dist/kempo/api/pages/disable/PUT.js +1 -1
- package/dist/kempo/api/pages/disable/PUT.js.map +1 -1
- package/dist/kempo/api/pages/enable/PUT.js +1 -1
- package/dist/kempo/api/pages/enable/PUT.js.map +1 -1
- package/dist/kempo/api/pages/file/GET.js +1 -1
- package/dist/kempo/api/pages/file/GET.js.map +1 -1
- package/dist/kempo/api/pages/file/PATCH.js +1 -1
- package/dist/kempo/api/pages/file/PATCH.js.map +1 -1
- package/dist/kempo/api/pages/file/PUT.js +1 -1
- package/dist/kempo/api/pages/file/PUT.js.map +1 -1
- package/dist/kempo/api/pages/lock/PUT.js +1 -1
- package/dist/kempo/api/pages/lock/PUT.js.map +1 -1
- package/dist/kempo/api/pages/rescan/POST.js +2 -0
- package/dist/kempo/api/pages/rescan/POST.js.map +1 -0
- package/dist/kempo/api/pages/search/GET.js +1 -1
- package/dist/kempo/api/pages/search/GET.js.map +1 -1
- package/dist/kempo/api/pages/templates/GET.js +1 -1
- package/dist/kempo/api/pages/templates/GET.js.map +1 -1
- package/dist/kempo/api/templates/DELETE.js +1 -1
- package/dist/kempo/api/templates/DELETE.js.map +1 -1
- package/dist/kempo/api/templates/GET.js +1 -1
- package/dist/kempo/api/templates/GET.js.map +1 -1
- package/dist/kempo/api/templates/POST.js +1 -1
- package/dist/kempo/api/templates/POST.js.map +1 -1
- package/dist/kempo/api/templates/disable/PUT.js +1 -1
- package/dist/kempo/api/templates/disable/PUT.js.map +1 -1
- package/dist/kempo/api/templates/enable/PUT.js +1 -1
- package/dist/kempo/api/templates/enable/PUT.js.map +1 -1
- package/dist/kempo/api/templates/file/GET.js +1 -1
- package/dist/kempo/api/templates/file/GET.js.map +1 -1
- package/dist/kempo/api/templates/file/PATCH.js +1 -1
- package/dist/kempo/api/templates/file/PATCH.js.map +1 -1
- package/dist/kempo/api/templates/file/PUT.js +1 -1
- package/dist/kempo/api/templates/file/PUT.js.map +1 -1
- package/dist/kempo/api/templates/lock/PUT.js +1 -1
- package/dist/kempo/api/templates/lock/PUT.js.map +1 -1
- package/dist/kempo/sdk.js +1 -1
- package/dist/kempo/sdk.js.map +1 -1
- package/middleware/kempo.js +50 -1
- package/package.json +3 -3
- package/server/utils/fragments/listFragments.js +10 -1
- package/server/utils/hooks/triggerHook.js +7 -12
- package/server/utils/pages/listPages.js +57 -7
- package/app-public/kempo-global.global-disabled.html +0 -0
- package/app-public/new-page.page.html +0 -17
- package/app-public/test.page.html +0 -21
|
@@ -1,7 +1,87 @@
|
|
|
1
1
|
<!--
|
|
2
2
|
locked: true
|
|
3
3
|
-->
|
|
4
|
-
<fragment
|
|
4
|
+
<fragment>
|
|
5
|
+
<k-aside
|
|
6
|
+
main="push"
|
|
7
|
+
state="expanded"
|
|
8
|
+
style="--aside_padding: 0;"
|
|
9
|
+
persistent-id="admin-nav"
|
|
10
|
+
>
|
|
11
|
+
<k-aside-toggle>
|
|
12
|
+
<h3 class="m0">Kempo Admin</h3>
|
|
13
|
+
</k-aside-toggle>
|
|
14
|
+
<k-aside-item
|
|
15
|
+
icon="preview"
|
|
16
|
+
href="/"
|
|
17
|
+
no-expand
|
|
18
|
+
>Site</k-aside-item>
|
|
19
|
+
<k-aside-item
|
|
20
|
+
icon="cards"
|
|
21
|
+
href="/admin"
|
|
22
|
+
no-expand
|
|
23
|
+
>Dashboard</k-aside-item>
|
|
24
|
+
<k-aside-menu
|
|
25
|
+
icon="manage-accounts"
|
|
26
|
+
label="Accounts"
|
|
27
|
+
>
|
|
28
|
+
<k-aside-item
|
|
29
|
+
icon="person"
|
|
30
|
+
href="/admin/accounts/users"
|
|
31
|
+
no-expand
|
|
32
|
+
>Users</k-aside-item>
|
|
33
|
+
<k-aside-item
|
|
34
|
+
icon="group"
|
|
35
|
+
href="/admin/accounts/groups"
|
|
36
|
+
no-expand
|
|
37
|
+
>Groups</k-aside-item>
|
|
38
|
+
<k-aside-item
|
|
39
|
+
icon="lock"
|
|
40
|
+
href="/admin/accounts/permissions"
|
|
41
|
+
no-expand
|
|
42
|
+
>Permissions</k-aside-item>
|
|
43
|
+
</k-aside-menu>
|
|
44
|
+
<k-aside-menu
|
|
45
|
+
icon="cards_stack"
|
|
46
|
+
label="Content"
|
|
47
|
+
>
|
|
48
|
+
<k-aside-item
|
|
49
|
+
icon="browse"
|
|
50
|
+
href="/admin/content/templates"
|
|
51
|
+
>Templates</k-aside-item>
|
|
52
|
+
<k-aside-item
|
|
53
|
+
icon="docs"
|
|
54
|
+
href="/admin/content/pages"
|
|
55
|
+
>Pages</k-aside-item>
|
|
56
|
+
<k-aside-item
|
|
57
|
+
icon="content"
|
|
58
|
+
href="/admin/content/fragments"
|
|
59
|
+
>Fragments</k-aside-item>
|
|
60
|
+
<k-aside-item
|
|
61
|
+
icon="globe"
|
|
62
|
+
href="/admin/content/globals"
|
|
63
|
+
>Global Content</k-aside-item>
|
|
64
|
+
</k-aside-menu>
|
|
65
|
+
<k-aside-item
|
|
66
|
+
icon="settings"
|
|
67
|
+
href="/admin/settings"
|
|
68
|
+
no-expand
|
|
69
|
+
>Settings</k-aside-item>
|
|
70
|
+
<k-aside-item
|
|
71
|
+
icon="extension"
|
|
72
|
+
href="/admin/extensions"
|
|
73
|
+
no-expand
|
|
74
|
+
>Extensions</k-aside-item>
|
|
75
|
+
<hr>
|
|
76
|
+
<location name="admin-nav-extensions"></location>
|
|
77
|
+
<k-aside-spacer></k-aside-spacer>
|
|
78
|
+
<k-theme-switcher
|
|
79
|
+
labels
|
|
80
|
+
style="--padding:var(--spacer_h);margin:var(--spacer_h) auto"
|
|
81
|
+
></k-theme-switcher>
|
|
82
|
+
</k-aside>
|
|
83
|
+
<script type="module">
|
|
84
|
+
import '/kempo-ui/components/ThemeSwitcher.js';
|
|
5
85
|
const items = document.querySelectorAll('k-aside-item');
|
|
6
86
|
const currentPath = window.location.pathname;
|
|
7
87
|
|
|
@@ -17,4 +97,6 @@
|
|
|
17
97
|
const menu = item.closest('k-aside-menu');
|
|
18
98
|
if (menu) menu.setAttribute('open', '');
|
|
19
99
|
}
|
|
20
|
-
})
|
|
100
|
+
});
|
|
101
|
+
</script>
|
|
102
|
+
</fragment>
|
|
@@ -1,7 +1,70 @@
|
|
|
1
1
|
<!--
|
|
2
2
|
locked: true
|
|
3
3
|
-->
|
|
4
|
-
<page title="Setting - Admin"
|
|
4
|
+
<page title="Setting - Admin">
|
|
5
|
+
<content>
|
|
6
|
+
<script type="module" src="/kempo-ui/components/Icon.js"></script>
|
|
7
|
+
<script type="module" src="/kempo-ui/components/Toggle.js"></script>
|
|
8
|
+
<script type="module" src="/admin/components/Monaco.js"></script>
|
|
9
|
+
<script type="module" src="/kempo/components/Permission.js"></script>
|
|
10
|
+
|
|
11
|
+
<div class="mb">
|
|
12
|
+
<a href="/admin/settings/" class="no-link">
|
|
13
|
+
<button class="mbh"><k-icon name="arrow" direction="left"></k-icon> Settings</button>
|
|
14
|
+
</a>
|
|
15
|
+
<div class="d-f mb0" style="align-items: center; justify-content: space-between;">
|
|
16
|
+
<div>
|
|
17
|
+
<h1 class="mb0" id="pageTitle">Setting</h1>
|
|
18
|
+
<p class="tc-muted mb0" id="settingDescription"></p>
|
|
19
|
+
</div>
|
|
20
|
+
<div class="d-f" style="gap: var(--spacer);">
|
|
21
|
+
<button id="saveBtn" class="primary" disabled>Save</button>
|
|
22
|
+
<button id="deleteBtn" class="danger" style="display: none;">Delete</button>
|
|
23
|
+
</div>
|
|
24
|
+
</div>
|
|
25
|
+
</div>
|
|
26
|
+
|
|
27
|
+
<div id="loading">Loading setting...</div>
|
|
28
|
+
<div id="notFound" style="display: none;">
|
|
29
|
+
<p>Setting not found.</p>
|
|
30
|
+
<a href="/admin/settings/">Back to Settings</a>
|
|
31
|
+
</div>
|
|
32
|
+
<div id="content" style="display: none;">
|
|
33
|
+
|
|
34
|
+
<div class="card">
|
|
35
|
+
<h2>Value</h2>
|
|
36
|
+
<div id="editorContainer" class="mb"></div>
|
|
37
|
+
</div>
|
|
38
|
+
|
|
39
|
+
<div class="card">
|
|
40
|
+
<h2>Metadata</h2>
|
|
41
|
+
<div class="mb">
|
|
42
|
+
<label class="d-b mbh">Type</label>
|
|
43
|
+
<select id="typeSelect" class="full">
|
|
44
|
+
<option value="string">String</option>
|
|
45
|
+
<option value="number">Number</option>
|
|
46
|
+
<option value="boolean">Boolean</option>
|
|
47
|
+
<option value="json">JSON</option>
|
|
48
|
+
</select>
|
|
49
|
+
</div>
|
|
50
|
+
<div class="mb d-f" style="align-items: center; gap: var(--spacer_h);">
|
|
51
|
+
<k-toggle id="publicToggle"></k-toggle>
|
|
52
|
+
<label>Public (accessible without authentication)</label>
|
|
53
|
+
</div>
|
|
54
|
+
<div class="mb">
|
|
55
|
+
<label class="d-b mbh">Description</label>
|
|
56
|
+
<textarea id="descriptionInput" class="full" rows="3"></textarea>
|
|
57
|
+
</div>
|
|
58
|
+
<div class="mb d-f" style="gap: var(--spacer);">
|
|
59
|
+
<div><span class="tc-muted">Created:</span> <span id="createdAt"></span></div>
|
|
60
|
+
<div><span class="tc-muted">Updated:</span> <span id="updatedAt"></span></div>
|
|
61
|
+
</div>
|
|
62
|
+
</div>
|
|
63
|
+
|
|
64
|
+
</div>
|
|
65
|
+
|
|
66
|
+
<script type="module">
|
|
67
|
+
import { getSetting, setSetting, deleteSetting, getAllCurrentUserPermissions } from '/kempo/sdk.js';
|
|
5
68
|
import Toast from '/kempo-ui/components/Toast.js';
|
|
6
69
|
import Dialog from '/kempo-ui/components/Dialog.js';
|
|
7
70
|
|
|
@@ -174,7 +237,9 @@
|
|
|
174
237
|
}
|
|
175
238
|
break;
|
|
176
239
|
}
|
|
240
|
+
currentType = newType;
|
|
177
241
|
await renderEditor(newType, converted);
|
|
242
|
+
setTimeout(checkDirty, 0);
|
|
178
243
|
});
|
|
179
244
|
|
|
180
245
|
/*
|
|
@@ -182,7 +247,7 @@
|
|
|
182
247
|
*/
|
|
183
248
|
|
|
184
249
|
if(canEditValue){
|
|
185
|
-
$saveBtn.disabled =
|
|
250
|
+
$saveBtn.disabled = true;
|
|
186
251
|
} else {
|
|
187
252
|
$typeSelect.disabled = true;
|
|
188
253
|
$descriptionInput.readOnly = true;
|
|
@@ -198,6 +263,36 @@
|
|
|
198
263
|
$deleteBtn.style.display = '';
|
|
199
264
|
}
|
|
200
265
|
|
|
266
|
+
/*
|
|
267
|
+
Change detection
|
|
268
|
+
*/
|
|
269
|
+
|
|
270
|
+
const checkDirty = () => {
|
|
271
|
+
if(!canEditValue){
|
|
272
|
+
$saveBtn.disabled = true;
|
|
273
|
+
return;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
let currentValue;
|
|
277
|
+
try { currentValue = getValueFromEditor(); }
|
|
278
|
+
catch(e){ currentValue = undefined; }
|
|
279
|
+
|
|
280
|
+
const dirty = currentValue !== settingData.value
|
|
281
|
+
|| $typeSelect.value !== settingData.type
|
|
282
|
+
|| $publicToggle.value !== settingData.isPublic
|
|
283
|
+
|| $descriptionInput.value.trim() !== (settingData.description || '');
|
|
284
|
+
|
|
285
|
+
$saveBtn.disabled = !dirty;
|
|
286
|
+
};
|
|
287
|
+
|
|
288
|
+
$typeSelect.addEventListener('change', () => {
|
|
289
|
+
setTimeout(checkDirty, 0);
|
|
290
|
+
});
|
|
291
|
+
$publicToggle.addEventListener('change', checkDirty);
|
|
292
|
+
$descriptionInput.addEventListener('input', checkDirty);
|
|
293
|
+
$editorContainer.addEventListener('input', checkDirty, true);
|
|
294
|
+
$editorContainer.addEventListener('change', checkDirty, true);
|
|
295
|
+
|
|
201
296
|
/*
|
|
202
297
|
Save
|
|
203
298
|
*/
|
|
@@ -219,14 +314,21 @@
|
|
|
219
314
|
isPublic: $publicToggle.value,
|
|
220
315
|
description: $descriptionInput.value.trim()
|
|
221
316
|
});
|
|
222
|
-
$saveBtn.disabled = !canEditValue;
|
|
223
317
|
|
|
224
318
|
if(saveError){
|
|
225
319
|
Toast.error(saveError.msg || 'Failed to save setting');
|
|
320
|
+
checkDirty();
|
|
226
321
|
return;
|
|
227
322
|
}
|
|
323
|
+
|
|
324
|
+
settingData.value = value;
|
|
325
|
+
settingData.type = $typeSelect.value;
|
|
326
|
+
settingData.isPublic = $publicToggle.value;
|
|
327
|
+
settingData.description = $descriptionInput.value.trim();
|
|
328
|
+
|
|
228
329
|
Toast.success('Setting saved');
|
|
229
330
|
document.getElementById('updatedAt').textContent = new Date().toLocaleString();
|
|
331
|
+
checkDirty();
|
|
230
332
|
};
|
|
231
333
|
|
|
232
334
|
$saveBtn.addEventListener('click', save);
|
|
@@ -257,4 +359,8 @@
|
|
|
257
359
|
}
|
|
258
360
|
);
|
|
259
361
|
});
|
|
260
|
-
}
|
|
362
|
+
}
|
|
363
|
+
</script>
|
|
364
|
+
|
|
365
|
+
</content>
|
|
366
|
+
</page>
|
|
@@ -1,7 +1,88 @@
|
|
|
1
1
|
<!--
|
|
2
2
|
locked: true
|
|
3
3
|
-->
|
|
4
|
-
<page title="Settings - Admin"
|
|
4
|
+
<page title="Settings - Admin">
|
|
5
|
+
<content>
|
|
6
|
+
<script type="module" src="/kempo-ui/components/Table.js"></script>
|
|
7
|
+
<script type="module" src="/kempo-ui/components/tableControls/FirstPage.js"></script>
|
|
8
|
+
<script type="module" src="/kempo-ui/components/tableControls/PrevPage.js"></script>
|
|
9
|
+
<script type="module" src="/kempo-ui/components/tableControls/NextPage.js"></script>
|
|
10
|
+
<script type="module" src="/kempo-ui/components/tableControls/LastPage.js"></script>
|
|
11
|
+
<script type="module" src="/kempo-ui/components/tableControls/PageSelect.js"></script>
|
|
12
|
+
<script type="module" src="/kempo-ui/components/tableControls/PageSize.js"></script>
|
|
13
|
+
<script type="module" src="/kempo-ui/components/tableControls/Edit.js"></script>
|
|
14
|
+
<script type="module" src="/kempo-ui/components/tableControls/DeleteRecord.js"></script>
|
|
15
|
+
<script type="module" src="/kempo-ui/components/tableControls/DeleteSelected.js"></script>
|
|
16
|
+
<script type="module" src="/admin/components/TableRowLink.js"></script>
|
|
17
|
+
<script type="module" src="/kempo/components/Permission.js"></script>
|
|
18
|
+
|
|
19
|
+
<div class="d-f mb" style="align-items: center; gap: var(--spacer);">
|
|
20
|
+
<h1 class="flex mb0">Settings</h1>
|
|
21
|
+
<k-permission has="system:custom-settings:manage">
|
|
22
|
+
<button id="createSettingBtn" class="primary">Create Setting</button>
|
|
23
|
+
</k-permission>
|
|
24
|
+
</div>
|
|
25
|
+
|
|
26
|
+
<h2>Custom Settings</h2>
|
|
27
|
+
<k-table id="customTable" enable-pages page-size="25" page-size-options="[10,25,50,100]" placeholder="No custom settings have been created yet.">
|
|
28
|
+
<admin-table-row-link slot="before" url-pattern="{_link}" field-name="_link"></admin-table-row-link>
|
|
29
|
+
<div slot="top" class="d-f full" style="align-items: center;">
|
|
30
|
+
<div>
|
|
31
|
+
<k-permission has="system:custom-settings:manage">
|
|
32
|
+
<k-tc-delete-selected></k-tc-delete-selected>
|
|
33
|
+
</k-permission>
|
|
34
|
+
</div>
|
|
35
|
+
</div>
|
|
36
|
+
<div class="d-f full" style="align-items: center;">
|
|
37
|
+
<div>
|
|
38
|
+
<k-tc-first-page></k-tc-first-page>
|
|
39
|
+
<k-tc-prev-page></k-tc-prev-page>
|
|
40
|
+
<k-tc-next-page></k-tc-next-page>
|
|
41
|
+
<k-tc-last-page></k-tc-last-page>
|
|
42
|
+
</div>
|
|
43
|
+
<div class="flex"></div>
|
|
44
|
+
<div><k-tc-page-select></k-tc-page-select></div>
|
|
45
|
+
<div class="flex"></div>
|
|
46
|
+
<div><k-tc-page-size></k-tc-page-size></div>
|
|
47
|
+
</div>
|
|
48
|
+
</k-table>
|
|
49
|
+
|
|
50
|
+
<h2>Extension Settings</h2>
|
|
51
|
+
<k-table id="extensionTable" enable-pages page-size="25" page-size-options="[10,25,50,100]" placeholder="No extension settings installed.">
|
|
52
|
+
<admin-table-row-link slot="before" url-pattern="{_link}" field-name="_link"></admin-table-row-link>
|
|
53
|
+
<div class="d-f full" style="align-items: center;">
|
|
54
|
+
<div>
|
|
55
|
+
<k-tc-first-page></k-tc-first-page>
|
|
56
|
+
<k-tc-prev-page></k-tc-prev-page>
|
|
57
|
+
<k-tc-next-page></k-tc-next-page>
|
|
58
|
+
<k-tc-last-page></k-tc-last-page>
|
|
59
|
+
</div>
|
|
60
|
+
<div class="flex"></div>
|
|
61
|
+
<div><k-tc-page-select></k-tc-page-select></div>
|
|
62
|
+
<div class="flex"></div>
|
|
63
|
+
<div><k-tc-page-size></k-tc-page-size></div>
|
|
64
|
+
</div>
|
|
65
|
+
</k-table>
|
|
66
|
+
|
|
67
|
+
<h2>System Settings</h2>
|
|
68
|
+
<k-table id="systemTable" enable-pages page-size="25" page-size-options="[10,25,50,100]" placeholder="No system settings found.">
|
|
69
|
+
<admin-table-row-link slot="before" url-pattern="{_link}" field-name="_link"></admin-table-row-link>
|
|
70
|
+
<div class="d-f full" style="align-items: center;">
|
|
71
|
+
<div>
|
|
72
|
+
<k-tc-first-page></k-tc-first-page>
|
|
73
|
+
<k-tc-prev-page></k-tc-prev-page>
|
|
74
|
+
<k-tc-next-page></k-tc-next-page>
|
|
75
|
+
<k-tc-last-page></k-tc-last-page>
|
|
76
|
+
</div>
|
|
77
|
+
<div class="flex"></div>
|
|
78
|
+
<div><k-tc-page-select></k-tc-page-select></div>
|
|
79
|
+
<div class="flex"></div>
|
|
80
|
+
<div><k-tc-page-size></k-tc-page-size></div>
|
|
81
|
+
</div>
|
|
82
|
+
</k-table>
|
|
83
|
+
|
|
84
|
+
<script type="module">
|
|
85
|
+
import { listSettings, setSetting, deleteSetting, getAllCurrentUserPermissions } from '/kempo/sdk.js';
|
|
5
86
|
import { html } from '/kempo-ui/lit-all.min.js';
|
|
6
87
|
import Toast from '/kempo-ui/components/Toast.js';
|
|
7
88
|
import Dialog from '/kempo-ui/components/Dialog.js';
|
|
@@ -200,4 +281,8 @@
|
|
|
200
281
|
cancelText: 'Cancel'
|
|
201
282
|
});
|
|
202
283
|
});
|
|
203
|
-
}
|
|
284
|
+
}
|
|
285
|
+
</script>
|
|
286
|
+
|
|
287
|
+
</content>
|
|
288
|
+
</page>
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{resolve as r}from"path";import
|
|
1
|
+
import{resolve as e,join as r}from"path";import s from"../../../../server/utils/permissions/currentUserHasPermission.js";import t from"../../../../server/utils/fragments/getFragmentMetadata.js";import o from"../../../../server/utils/fragments/deleteFragment.js";const i=import.meta.dirname.includes("node_modules")?r(process.cwd(),"public"):e(import.meta.dirname,"../../../../app-public");export default async(e,r)=>{const n=e.cookies.session_token,[a,m]=await s(n,"system:fragments:delete");if(a)return r.status(a.code).json({error:a.msg});if(!m)return r.status(403).json({error:"Insufficient permissions"});const{files:f}=e.body||{};if(!f?.length)return r.status(400).json({error:"No files specified"});for(const e of f){const[s,o]=await t({rootDir:i,file:e});if(!s&&o.locked)return r.status(403).json({error:`Cannot delete locked fragment: ${e}`})}const[c,u]=await o({rootDir:i,files:f});if(c)return r.status(c.code).json({error:c.msg});r.json(u)};
|
|
2
2
|
//# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\api\fragments\DELETE.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"src\\kempo\\api\\fragments\\DELETE.js","names":["resolve","currentUserHasPermission","getFragmentMetadata","deleteFragment","rootDir","dirname","async","request","response","token","cookies","session_token","permError","hasPermission","status","code","json","error","msg","files","body","length","file","metaError","metadata","locked","result"],"sources":["0"],"sourcesContent":["import { resolve } from 'path';\r\nimport currentUserHasPermission from '../../../../server/utils/permissions/currentUserHasPermission.js';\r\nimport getFragmentMetadata from '../../../../server/utils/fragments/getFragmentMetadata.js';\r\nimport deleteFragment from '../../../../server/utils/fragments/deleteFragment.js';\r\n\r\nconst rootDir = resolve(import.meta.dirname, '../../../../app-public');\r\n\r\nexport default async (request, response) => {\r\n\tconst token = request.cookies.session_token;\r\n\tconst [permError, hasPermission] = await currentUserHasPermission(token, 'system:fragments:delete');\r\n\r\n\tif(permError){\r\n\t\treturn response.status(permError.code).json({ error: permError.msg });\r\n\t}\r\n\r\n\tif(!hasPermission){\r\n\t\treturn response.status(403).json({ error: 'Insufficient permissions' });\r\n\t}\r\n\r\n\tconst { files } = request.body || {};\r\n\r\n\tif(!files?.length){\r\n\t\treturn response.status(400).json({ error: 'No files specified' });\r\n\t}\r\n\r\n\tfor(const file of files){\r\n\t\tconst [metaError, metadata] = await getFragmentMetadata({ rootDir, file });\r\n\t\tif(!metaError && metadata.locked){\r\n\t\t\treturn response.status(403).json({ error: `Cannot delete locked fragment: ${file}` });\r\n\t\t}\r\n\t}\r\n\r\n\tconst [error, result] = await deleteFragment({ rootDir, files });\r\n\r\n\tif(error){\r\n\t\treturn response.status(error.code).json({ error: error.msg });\r\n\t}\r\n\r\n\tresponse.json(result);\r\n};\r\n"],"mappings":"kBAASA,
|
|
1
|
+
{"version":3,"file":"src\\kempo\\api\\fragments\\DELETE.js","names":["resolve","join","currentUserHasPermission","getFragmentMetadata","deleteFragment","rootDir","dirname","includes","process","cwd","async","request","response","token","cookies","session_token","permError","hasPermission","status","code","json","error","msg","files","body","length","file","metaError","metadata","locked","result"],"sources":["0"],"sourcesContent":["import { resolve, join } from 'path';\r\nimport currentUserHasPermission from '../../../../server/utils/permissions/currentUserHasPermission.js';\r\nimport getFragmentMetadata from '../../../../server/utils/fragments/getFragmentMetadata.js';\r\nimport deleteFragment from '../../../../server/utils/fragments/deleteFragment.js';\r\n\r\nconst rootDir = import.meta.dirname.includes('node_modules') ? join(process.cwd(), 'public') : resolve(import.meta.dirname, '../../../../app-public');\r\n\r\nexport default async (request, response) => {\r\n\tconst token = request.cookies.session_token;\r\n\tconst [permError, hasPermission] = await currentUserHasPermission(token, 'system:fragments:delete');\r\n\r\n\tif(permError){\r\n\t\treturn response.status(permError.code).json({ error: permError.msg });\r\n\t}\r\n\r\n\tif(!hasPermission){\r\n\t\treturn response.status(403).json({ error: 'Insufficient permissions' });\r\n\t}\r\n\r\n\tconst { files } = request.body || {};\r\n\r\n\tif(!files?.length){\r\n\t\treturn response.status(400).json({ error: 'No files specified' });\r\n\t}\r\n\r\n\tfor(const file of files){\r\n\t\tconst [metaError, metadata] = await getFragmentMetadata({ rootDir, file });\r\n\t\tif(!metaError && metadata.locked){\r\n\t\t\treturn response.status(403).json({ error: `Cannot delete locked fragment: ${file}` });\r\n\t\t}\r\n\t}\r\n\r\n\tconst [error, result] = await deleteFragment({ rootDir, files });\r\n\r\n\tif(error){\r\n\t\treturn response.status(error.code).json({ error: error.msg });\r\n\t}\r\n\r\n\tresponse.json(result);\r\n};\r\n"],"mappings":"kBAASA,UAASC,MAAY,cACvBC,MAA8B,0EAC9BC,MAAyB,mEACzBC,MAAoB,uDAE3B,MAAMC,cAAsBC,QAAQC,SAAS,gBAAkBN,EAAKO,QAAQC,MAAO,UAAYT,cAAoBM,QAAS,yCAE7GI,MAAOC,EAASC,KAC9B,MAAMC,EAAQF,EAAQG,QAAQC,eACvBC,EAAWC,SAAuBf,EAAyBW,EAAO,2BAEzE,GAAGG,EACF,OAAOJ,EAASM,OAAOF,EAAUG,MAAMC,KAAK,CAAEC,MAAOL,EAAUM,MAGhE,IAAIL,EACH,OAAOL,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,6BAG3C,MAAME,MAAEA,GAAUZ,EAAQa,MAAQ,CAAC,EAEnC,IAAID,GAAOE,OACV,OAAOb,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,uBAG3C,IAAI,MAAMK,KAAQH,EAAM,CACvB,MAAOI,EAAWC,SAAkBzB,EAAoB,CAAEE,UAASqB,SACnE,IAAIC,GAAaC,EAASC,OACzB,OAAOjB,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,kCAAkCK,KAE9E,CAEA,MAAOL,EAAOS,SAAgB1B,EAAe,CAAEC,UAASkB,UAExD,GAAGF,EACF,OAAOT,EAASM,OAAOG,EAAMF,MAAMC,KAAK,CAAEC,MAAOA,EAAMC,MAGxDV,EAASQ,KAAKU","ignoreList":[]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{resolve as s}from"path";import
|
|
1
|
+
import{resolve as s,join as r}from"path";import e from"../../../../server/utils/permissions/currentUserHasPermission.js";import t from"../../../../server/utils/fragments/listFragments.js";const o=import.meta.dirname.includes("node_modules")?r(process.cwd(),"public"):s(import.meta.dirname,"../../../../app-public");export default async(s,r)=>{const i=s.cookies.session_token,[n,m]=await e(i,"system:fragments:read");if(n)return r.status(n.code).json({error:n.msg});if(!m)return r.status(403).json({error:"Insufficient permissions"});const[a,u]=await t({rootDir:o});if(a)return r.status(a.code).json({error:a.msg});r.json(u)};
|
|
2
2
|
//# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\api\fragments\GET.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"src\\kempo\\api\\fragments\\GET.js","names":["resolve","currentUserHasPermission","listFragments","rootDir","dirname","async","request","response","token","cookies","session_token","permError","hasPermission","status","code","json","error","msg","data"],"sources":["0"],"sourcesContent":["import { resolve } from 'path';\r\nimport currentUserHasPermission from '../../../../server/utils/permissions/currentUserHasPermission.js';\r\nimport listFragments from '../../../../server/utils/fragments/listFragments.js';\r\n\r\nconst rootDir = resolve(import.meta.dirname, '../../../../app-public');\r\n\r\nexport default async (request, response) => {\r\n\tconst token = request.cookies.session_token;\r\n\tconst [permError, hasPermission] = await currentUserHasPermission(token, 'system:fragments:read');\r\n\r\n\tif(permError){\r\n\t\treturn response.status(permError.code).json({ error: permError.msg });\r\n\t}\r\n\r\n\tif(!hasPermission){\r\n\t\treturn response.status(403).json({ error: 'Insufficient permissions' });\r\n\t}\r\n\r\n\tconst [error, data] = await listFragments({ rootDir });\r\n\r\n\tif(error){\r\n\t\treturn response.status(error.code).json({ error: error.msg });\r\n\t}\r\n\r\n\tresponse.json(data);\r\n};\r\n"],"mappings":"kBAASA,
|
|
1
|
+
{"version":3,"file":"src\\kempo\\api\\fragments\\GET.js","names":["resolve","join","currentUserHasPermission","listFragments","rootDir","dirname","includes","process","cwd","async","request","response","token","cookies","session_token","permError","hasPermission","status","code","json","error","msg","data"],"sources":["0"],"sourcesContent":["import { resolve, join } from 'path';\r\nimport currentUserHasPermission from '../../../../server/utils/permissions/currentUserHasPermission.js';\r\nimport listFragments from '../../../../server/utils/fragments/listFragments.js';\r\n\r\nconst rootDir = import.meta.dirname.includes('node_modules') ? join(process.cwd(), 'public') : resolve(import.meta.dirname, '../../../../app-public');\r\n\r\nexport default async (request, response) => {\r\n\tconst token = request.cookies.session_token;\r\n\tconst [permError, hasPermission] = await currentUserHasPermission(token, 'system:fragments:read');\r\n\r\n\tif(permError){\r\n\t\treturn response.status(permError.code).json({ error: permError.msg });\r\n\t}\r\n\r\n\tif(!hasPermission){\r\n\t\treturn response.status(403).json({ error: 'Insufficient permissions' });\r\n\t}\r\n\r\n\tconst [error, data] = await listFragments({ rootDir });\r\n\r\n\tif(error){\r\n\t\treturn response.status(error.code).json({ error: error.msg });\r\n\t}\r\n\r\n\tresponse.json(data);\r\n};\r\n"],"mappings":"kBAASA,UAASC,MAAY,cACvBC,MAA8B,0EAC9BC,MAAmB,sDAE1B,MAAMC,cAAsBC,QAAQC,SAAS,gBAAkBL,EAAKM,QAAQC,MAAO,UAAYR,cAAoBK,QAAS,yCAE7GI,MAAOC,EAASC,KAC9B,MAAMC,EAAQF,EAAQG,QAAQC,eACvBC,EAAWC,SAAuBd,EAAyBU,EAAO,yBAEzE,GAAGG,EACF,OAAOJ,EAASM,OAAOF,EAAUG,MAAMC,KAAK,CAAEC,MAAOL,EAAUM,MAGhE,IAAIL,EACH,OAAOL,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,6BAG3C,MAAOA,EAAOE,SAAcnB,EAAc,CAAEC,YAE5C,GAAGgB,EACF,OAAOT,EAASM,OAAOG,EAAMF,MAAMC,KAAK,CAAEC,MAAOA,EAAMC,MAGxDV,EAASQ,KAAKG","ignoreList":[]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{resolve as r}from"path";import
|
|
1
|
+
import{resolve as r,join as s}from"path";import e from"../../../../server/utils/permissions/currentUserHasPermission.js";import t from"../../../../server/utils/auth/getSession.js";import o from"../../../../server/utils/fragments/createFragment.js";const i=import.meta.dirname.includes("node_modules")?s(process.cwd(),"public"):r(import.meta.dirname,"../../../../app-public");export default async(r,s)=>{const n=r.cookies.session_token,[a,m]=await e(n,"system:fragments:create");if(a)return s.status(a.code).json({error:a.msg});if(!m)return s.status(403).json({error:"Insufficient permissions"});const{directory:u,name:c}=r.body;if(!c)return s.status(400).json({error:"Fragment name is required"});const[,p]=await t({token:n}),d=p?.user?.name||"",[f,j]=await o({rootDir:i,directory:u,name:c,author:d});if(f)return s.status(f.code).json({error:f.msg});s.status(201).json(j)};
|
|
2
2
|
//# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\api\fragments\POST.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"src\\kempo\\api\\fragments\\POST.js","names":["resolve","currentUserHasPermission","getSession","createFragment","rootDir","dirname","async","request","response","token","cookies","session_token","permError","hasPermission","status","code","json","error","msg","directory","name","body","sessionData","author","user","data"],"sources":["0"],"sourcesContent":["import { resolve } from 'path';\r\nimport currentUserHasPermission from '../../../../server/utils/permissions/currentUserHasPermission.js';\r\nimport getSession from '../../../../server/utils/auth/getSession.js';\r\nimport createFragment from '../../../../server/utils/fragments/createFragment.js';\r\n\r\nconst rootDir = resolve(import.meta.dirname, '../../../../app-public');\r\n\r\nexport default async (request, response) => {\r\n\tconst token = request.cookies.session_token;\r\n\tconst [permError, hasPermission] = await currentUserHasPermission(token, 'system:fragments:create');\r\n\r\n\tif(permError){\r\n\t\treturn response.status(permError.code).json({ error: permError.msg });\r\n\t}\r\n\r\n\tif(!hasPermission){\r\n\t\treturn response.status(403).json({ error: 'Insufficient permissions' });\r\n\t}\r\n\r\n\tconst { directory, name } = request.body;\r\n\r\n\tif(!name){\r\n\t\treturn response.status(400).json({ error: 'Fragment name is required' });\r\n\t}\r\n\r\n\tconst [, sessionData] = await getSession({ token });\r\n\tconst author = sessionData?.user?.name || '';\r\n\r\n\tconst [error, data] = await createFragment({ rootDir, directory, name, author });\r\n\r\n\tif(error){\r\n\t\treturn response.status(error.code).json({ error: error.msg });\r\n\t}\r\n\r\n\tresponse.status(201).json(data);\r\n};\r\n"],"mappings":"kBAASA,
|
|
1
|
+
{"version":3,"file":"src\\kempo\\api\\fragments\\POST.js","names":["resolve","join","currentUserHasPermission","getSession","createFragment","rootDir","dirname","includes","process","cwd","async","request","response","token","cookies","session_token","permError","hasPermission","status","code","json","error","msg","directory","name","body","sessionData","author","user","data"],"sources":["0"],"sourcesContent":["import { resolve, join } from 'path';\r\nimport currentUserHasPermission from '../../../../server/utils/permissions/currentUserHasPermission.js';\r\nimport getSession from '../../../../server/utils/auth/getSession.js';\r\nimport createFragment from '../../../../server/utils/fragments/createFragment.js';\r\n\r\nconst rootDir = import.meta.dirname.includes('node_modules') ? join(process.cwd(), 'public') : resolve(import.meta.dirname, '../../../../app-public');\r\n\r\nexport default async (request, response) => {\r\n\tconst token = request.cookies.session_token;\r\n\tconst [permError, hasPermission] = await currentUserHasPermission(token, 'system:fragments:create');\r\n\r\n\tif(permError){\r\n\t\treturn response.status(permError.code).json({ error: permError.msg });\r\n\t}\r\n\r\n\tif(!hasPermission){\r\n\t\treturn response.status(403).json({ error: 'Insufficient permissions' });\r\n\t}\r\n\r\n\tconst { directory, name } = request.body;\r\n\r\n\tif(!name){\r\n\t\treturn response.status(400).json({ error: 'Fragment name is required' });\r\n\t}\r\n\r\n\tconst [, sessionData] = await getSession({ token });\r\n\tconst author = sessionData?.user?.name || '';\r\n\r\n\tconst [error, data] = await createFragment({ rootDir, directory, name, author });\r\n\r\n\tif(error){\r\n\t\treturn response.status(error.code).json({ error: error.msg });\r\n\t}\r\n\r\n\tresponse.status(201).json(data);\r\n};\r\n"],"mappings":"kBAASA,UAASC,MAAY,cACvBC,MAA8B,0EAC9BC,MAAgB,qDAChBC,MAAoB,uDAE3B,MAAMC,cAAsBC,QAAQC,SAAS,gBAAkBN,EAAKO,QAAQC,MAAO,UAAYT,cAAoBM,QAAS,yCAE7GI,MAAOC,EAASC,KAC9B,MAAMC,EAAQF,EAAQG,QAAQC,eACvBC,EAAWC,SAAuBf,EAAyBW,EAAO,2BAEzE,GAAGG,EACF,OAAOJ,EAASM,OAAOF,EAAUG,MAAMC,KAAK,CAAEC,MAAOL,EAAUM,MAGhE,IAAIL,EACH,OAAOL,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,6BAG3C,MAAME,UAAEA,EAASC,KAAEA,GAASb,EAAQc,KAEpC,IAAID,EACH,OAAOZ,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,8BAG3C,MAAO,CAAEK,SAAqBvB,EAAW,CAAEU,UACrCc,EAASD,GAAaE,MAAMJ,MAAQ,IAEnCH,EAAOQ,SAAczB,EAAe,CAAEC,UAASkB,YAAWC,OAAMG,WAEvE,GAAGN,EACF,OAAOT,EAASM,OAAOG,EAAMF,MAAMC,KAAK,CAAEC,MAAOA,EAAMC,MAGxDV,EAASM,OAAO,KAAKE,KAAKS","ignoreList":[]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{resolve as r}from"path";import
|
|
1
|
+
import{resolve as r,join as s}from"path";import e from"../../../../../server/utils/permissions/currentUserHasPermission.js";import t from"../../../../../server/utils/fragments/getFragmentMetadata.js";import o from"../../../../../server/utils/fragments/disableFragment.js";const i=import.meta.dirname.includes("node_modules")?s(process.cwd(),"public"):r(import.meta.dirname,"../../../../../app-public");export default async(r,s)=>{const n=r.cookies.session_token,[a,m]=await e(n,"system:pages:update");if(a)return s.status(a.code).json({error:a.msg});if(!m)return s.status(403).json({error:"Insufficient permissions"});const{file:u}=r.body||{};if(!u)return s.status(400).json({error:"File path is required"});const[c,f]=await t({rootDir:i,file:u});if(!c&&f.locked)return s.status(403).json({error:"Cannot disable a locked fragment"});const[p,d]=await o({rootDir:i,file:u});if(p)return s.status(p.code).json({error:p.msg});s.json(d)};
|
|
2
2
|
//# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\api\fragments\disable\PUT.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"src\\kempo\\api\\fragments\\disable\\PUT.js","names":["resolve","currentUserHasPermission","getFragmentMetadata","disableFragment","rootDir","dirname","async","request","response","token","cookies","session_token","permError","hasPermission","status","code","json","error","msg","file","body","metaError","metadata","locked","result"],"sources":["0"],"sourcesContent":["import { resolve } from 'path';\r\nimport currentUserHasPermission from '../../../../../server/utils/permissions/currentUserHasPermission.js';\r\nimport getFragmentMetadata from '../../../../../server/utils/fragments/getFragmentMetadata.js';\r\nimport disableFragment from '../../../../../server/utils/fragments/disableFragment.js';\r\n\r\nconst rootDir = resolve(import.meta.dirname, '../../../../../app-public');\r\n\r\nexport default async (request, response) => {\r\n\tconst token = request.cookies.session_token;\r\n\tconst [permError, hasPermission] = await currentUserHasPermission(token, 'system:pages:update');\r\n\r\n\tif(permError){\r\n\t\treturn response.status(permError.code).json({ error: permError.msg });\r\n\t}\r\n\r\n\tif(!hasPermission){\r\n\t\treturn response.status(403).json({ error: 'Insufficient permissions' });\r\n\t}\r\n\r\n\tconst { file } = request.body || {};\r\n\r\n\tif(!file){\r\n\t\treturn response.status(400).json({ error: 'File path is required' });\r\n\t}\r\n\r\n\tconst [metaError, metadata] = await getFragmentMetadata({ rootDir, file });\r\n\tif(!metaError && metadata.locked){\r\n\t\treturn response.status(403).json({ error: 'Cannot disable a locked fragment' });\r\n\t}\r\n\r\n\tconst [error, result] = await disableFragment({ rootDir, file });\r\n\r\n\tif(error){\r\n\t\treturn response.status(error.code).json({ error: error.msg });\r\n\t}\r\n\r\n\tresponse.json(result);\r\n};\r\n"],"mappings":"kBAASA,
|
|
1
|
+
{"version":3,"file":"src\\kempo\\api\\fragments\\disable\\PUT.js","names":["resolve","join","currentUserHasPermission","getFragmentMetadata","disableFragment","rootDir","dirname","includes","process","cwd","async","request","response","token","cookies","session_token","permError","hasPermission","status","code","json","error","msg","file","body","metaError","metadata","locked","result"],"sources":["0"],"sourcesContent":["import { resolve, join } from 'path';\r\nimport currentUserHasPermission from '../../../../../server/utils/permissions/currentUserHasPermission.js';\r\nimport getFragmentMetadata from '../../../../../server/utils/fragments/getFragmentMetadata.js';\r\nimport disableFragment from '../../../../../server/utils/fragments/disableFragment.js';\r\n\r\nconst rootDir = import.meta.dirname.includes('node_modules') ? join(process.cwd(), 'public') : resolve(import.meta.dirname, '../../../../../app-public');\r\n\r\nexport default async (request, response) => {\r\n\tconst token = request.cookies.session_token;\r\n\tconst [permError, hasPermission] = await currentUserHasPermission(token, 'system:pages:update');\r\n\r\n\tif(permError){\r\n\t\treturn response.status(permError.code).json({ error: permError.msg });\r\n\t}\r\n\r\n\tif(!hasPermission){\r\n\t\treturn response.status(403).json({ error: 'Insufficient permissions' });\r\n\t}\r\n\r\n\tconst { file } = request.body || {};\r\n\r\n\tif(!file){\r\n\t\treturn response.status(400).json({ error: 'File path is required' });\r\n\t}\r\n\r\n\tconst [metaError, metadata] = await getFragmentMetadata({ rootDir, file });\r\n\tif(!metaError && metadata.locked){\r\n\t\treturn response.status(403).json({ error: 'Cannot disable a locked fragment' });\r\n\t}\r\n\r\n\tconst [error, result] = await disableFragment({ rootDir, file });\r\n\r\n\tif(error){\r\n\t\treturn response.status(error.code).json({ error: error.msg });\r\n\t}\r\n\r\n\tresponse.json(result);\r\n};\r\n"],"mappings":"kBAASA,UAASC,MAAY,cACvBC,MAA8B,6EAC9BC,MAAyB,sEACzBC,MAAqB,2DAE5B,MAAMC,cAAsBC,QAAQC,SAAS,gBAAkBN,EAAKO,QAAQC,MAAO,UAAYT,cAAoBM,QAAS,4CAE7GI,MAAOC,EAASC,KAC9B,MAAMC,EAAQF,EAAQG,QAAQC,eACvBC,EAAWC,SAAuBf,EAAyBW,EAAO,uBAEzE,GAAGG,EACF,OAAOJ,EAASM,OAAOF,EAAUG,MAAMC,KAAK,CAAEC,MAAOL,EAAUM,MAGhE,IAAIL,EACH,OAAOL,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,6BAG3C,MAAME,KAAEA,GAASZ,EAAQa,MAAQ,CAAC,EAElC,IAAID,EACH,OAAOX,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,0BAG3C,MAAOI,EAAWC,SAAkBvB,EAAoB,CAAEE,UAASkB,SACnE,IAAIE,GAAaC,EAASC,OACzB,OAAOf,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,qCAG3C,MAAOA,EAAOO,SAAgBxB,EAAgB,CAAEC,UAASkB,SAEzD,GAAGF,EACF,OAAOT,EAASM,OAAOG,EAAMF,MAAMC,KAAK,CAAEC,MAAOA,EAAMC,MAGxDV,EAASQ,KAAKQ","ignoreList":[]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{resolve as s}from"path";import
|
|
1
|
+
import{resolve as s,join as r}from"path";import e from"../../../../../server/utils/permissions/currentUserHasPermission.js";import t from"../../../../../server/utils/fragments/enableFragment.js";const o=import.meta.dirname.includes("node_modules")?r(process.cwd(),"public"):s(import.meta.dirname,"../../../../../app-public");export default async(s,r)=>{const i=s.cookies.session_token,[n,a]=await e(i,"system:pages:update");if(n)return r.status(n.code).json({error:n.msg});if(!a)return r.status(403).json({error:"Insufficient permissions"});const{file:m}=s.body||{};if(!m)return r.status(400).json({error:"File path is required"});const[u,p]=await t({rootDir:o,file:m});if(u)return r.status(u.code).json({error:u.msg});r.json(p)};
|
|
2
2
|
//# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\api\fragments\enable\PUT.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"src\\kempo\\api\\fragments\\enable\\PUT.js","names":["resolve","currentUserHasPermission","enableFragment","rootDir","dirname","async","request","response","token","cookies","session_token","permError","hasPermission","status","code","json","error","msg","file","body","result"],"sources":["0"],"sourcesContent":["import { resolve } from 'path';\r\nimport currentUserHasPermission from '../../../../../server/utils/permissions/currentUserHasPermission.js';\r\nimport enableFragment from '../../../../../server/utils/fragments/enableFragment.js';\r\n\r\nconst rootDir = resolve(import.meta.dirname, '../../../../../app-public');\r\n\r\nexport default async (request, response) => {\r\n\tconst token = request.cookies.session_token;\r\n\tconst [permError, hasPermission] = await currentUserHasPermission(token, 'system:pages:update');\r\n\r\n\tif(permError){\r\n\t\treturn response.status(permError.code).json({ error: permError.msg });\r\n\t}\r\n\r\n\tif(!hasPermission){\r\n\t\treturn response.status(403).json({ error: 'Insufficient permissions' });\r\n\t}\r\n\r\n\tconst { file } = request.body || {};\r\n\r\n\tif(!file){\r\n\t\treturn response.status(400).json({ error: 'File path is required' });\r\n\t}\r\n\r\n\tconst [error, result] = await enableFragment({ rootDir, file });\r\n\r\n\tif(error){\r\n\t\treturn response.status(error.code).json({ error: error.msg });\r\n\t}\r\n\r\n\tresponse.json(result);\r\n};\r\n"],"mappings":"kBAASA,
|
|
1
|
+
{"version":3,"file":"src\\kempo\\api\\fragments\\enable\\PUT.js","names":["resolve","join","currentUserHasPermission","enableFragment","rootDir","dirname","includes","process","cwd","async","request","response","token","cookies","session_token","permError","hasPermission","status","code","json","error","msg","file","body","result"],"sources":["0"],"sourcesContent":["import { resolve, join } from 'path';\r\nimport currentUserHasPermission from '../../../../../server/utils/permissions/currentUserHasPermission.js';\r\nimport enableFragment from '../../../../../server/utils/fragments/enableFragment.js';\r\n\r\nconst rootDir = import.meta.dirname.includes('node_modules') ? join(process.cwd(), 'public') : resolve(import.meta.dirname, '../../../../../app-public');\r\n\r\nexport default async (request, response) => {\r\n\tconst token = request.cookies.session_token;\r\n\tconst [permError, hasPermission] = await currentUserHasPermission(token, 'system:pages:update');\r\n\r\n\tif(permError){\r\n\t\treturn response.status(permError.code).json({ error: permError.msg });\r\n\t}\r\n\r\n\tif(!hasPermission){\r\n\t\treturn response.status(403).json({ error: 'Insufficient permissions' });\r\n\t}\r\n\r\n\tconst { file } = request.body || {};\r\n\r\n\tif(!file){\r\n\t\treturn response.status(400).json({ error: 'File path is required' });\r\n\t}\r\n\r\n\tconst [error, result] = await enableFragment({ rootDir, file });\r\n\r\n\tif(error){\r\n\t\treturn response.status(error.code).json({ error: error.msg });\r\n\t}\r\n\r\n\tresponse.json(result);\r\n};\r\n"],"mappings":"kBAASA,UAASC,MAAY,cACvBC,MAA8B,6EAC9BC,MAAoB,0DAE3B,MAAMC,cAAsBC,QAAQC,SAAS,gBAAkBL,EAAKM,QAAQC,MAAO,UAAYR,cAAoBK,QAAS,4CAE7GI,MAAOC,EAASC,KAC9B,MAAMC,EAAQF,EAAQG,QAAQC,eACvBC,EAAWC,SAAuBd,EAAyBU,EAAO,uBAEzE,GAAGG,EACF,OAAOJ,EAASM,OAAOF,EAAUG,MAAMC,KAAK,CAAEC,MAAOL,EAAUM,MAGhE,IAAIL,EACH,OAAOL,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,6BAG3C,MAAME,KAAEA,GAASZ,EAAQa,MAAQ,CAAC,EAElC,IAAID,EACH,OAAOX,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,0BAG3C,MAAOA,EAAOI,SAAgBrB,EAAe,CAAEC,UAASkB,SAExD,GAAGF,EACF,OAAOT,EAASM,OAAOG,EAAMF,MAAMC,KAAK,CAAEC,MAAOA,EAAMC,MAGxDV,EAASQ,KAAKK","ignoreList":[]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{resolve as r}from"path";import
|
|
1
|
+
import{resolve as r,join as s}from"path";import e from"../../../../../server/utils/permissions/currentUserHasPermission.js";import t from"../../../../../server/utils/fragments/getFragment.js";const o=import.meta.dirname.includes("node_modules")?s(process.cwd(),"public"):r(import.meta.dirname,"../../../../../app-public");export default async(r,s)=>{const i=r.cookies.session_token,[n,a]=await e(i,"system:fragments:read");if(n)return s.status(n.code).json({error:n.msg});if(!a)return s.status(403).json({error:"Insufficient permissions"});const{file:m}=r.query;if(!m)return s.status(400).json({error:"File path is required"});const[u,c]=await t({rootDir:o,file:m});if(u)return s.status(u.code).json({error:u.msg});s.json(c)};
|
|
2
2
|
//# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\api\fragments\file\GET.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"src\\kempo\\api\\fragments\\file\\GET.js","names":["resolve","currentUserHasPermission","getFragment","rootDir","dirname","async","request","response","token","cookies","session_token","permError","hasPermission","status","code","json","error","msg","file","query","data"],"sources":["0"],"sourcesContent":["import { resolve } from 'path';\r\nimport currentUserHasPermission from '../../../../../server/utils/permissions/currentUserHasPermission.js';\r\nimport getFragment from '../../../../../server/utils/fragments/getFragment.js';\r\n\r\nconst rootDir = resolve(import.meta.dirname, '../../../../../app-public');\r\n\r\nexport default async (request, response) => {\r\n\tconst token = request.cookies.session_token;\r\n\tconst [permError, hasPermission] = await currentUserHasPermission(token, 'system:fragments:read');\r\n\r\n\tif(permError){\r\n\t\treturn response.status(permError.code).json({ error: permError.msg });\r\n\t}\r\n\r\n\tif(!hasPermission){\r\n\t\treturn response.status(403).json({ error: 'Insufficient permissions' });\r\n\t}\r\n\r\n\tconst { file } = request.query;\r\n\r\n\tif(!file){\r\n\t\treturn response.status(400).json({ error: 'File path is required' });\r\n\t}\r\n\r\n\tconst [error, data] = await getFragment({ rootDir, file });\r\n\r\n\tif(error){\r\n\t\treturn response.status(error.code).json({ error: error.msg });\r\n\t}\r\n\r\n\tresponse.json(data);\r\n};\r\n"],"mappings":"kBAASA,
|
|
1
|
+
{"version":3,"file":"src\\kempo\\api\\fragments\\file\\GET.js","names":["resolve","join","currentUserHasPermission","getFragment","rootDir","dirname","includes","process","cwd","async","request","response","token","cookies","session_token","permError","hasPermission","status","code","json","error","msg","file","query","data"],"sources":["0"],"sourcesContent":["import { resolve, join } from 'path';\r\nimport currentUserHasPermission from '../../../../../server/utils/permissions/currentUserHasPermission.js';\r\nimport getFragment from '../../../../../server/utils/fragments/getFragment.js';\r\n\r\nconst rootDir = import.meta.dirname.includes('node_modules') ? join(process.cwd(), 'public') : resolve(import.meta.dirname, '../../../../../app-public');\r\n\r\nexport default async (request, response) => {\r\n\tconst token = request.cookies.session_token;\r\n\tconst [permError, hasPermission] = await currentUserHasPermission(token, 'system:fragments:read');\r\n\r\n\tif(permError){\r\n\t\treturn response.status(permError.code).json({ error: permError.msg });\r\n\t}\r\n\r\n\tif(!hasPermission){\r\n\t\treturn response.status(403).json({ error: 'Insufficient permissions' });\r\n\t}\r\n\r\n\tconst { file } = request.query;\r\n\r\n\tif(!file){\r\n\t\treturn response.status(400).json({ error: 'File path is required' });\r\n\t}\r\n\r\n\tconst [error, data] = await getFragment({ rootDir, file });\r\n\r\n\tif(error){\r\n\t\treturn response.status(error.code).json({ error: error.msg });\r\n\t}\r\n\r\n\tresponse.json(data);\r\n};\r\n"],"mappings":"kBAASA,UAASC,MAAY,cACvBC,MAA8B,6EAC9BC,MAAiB,uDAExB,MAAMC,cAAsBC,QAAQC,SAAS,gBAAkBL,EAAKM,QAAQC,MAAO,UAAYR,cAAoBK,QAAS,4CAE7GI,MAAOC,EAASC,KAC9B,MAAMC,EAAQF,EAAQG,QAAQC,eACvBC,EAAWC,SAAuBd,EAAyBU,EAAO,yBAEzE,GAAGG,EACF,OAAOJ,EAASM,OAAOF,EAAUG,MAAMC,KAAK,CAAEC,MAAOL,EAAUM,MAGhE,IAAIL,EACH,OAAOL,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,6BAG3C,MAAME,KAAEA,GAASZ,EAAQa,MAEzB,IAAID,EACH,OAAOX,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,0BAG3C,MAAOA,EAAOI,SAAcrB,EAAY,CAAEC,UAASkB,SAEnD,GAAGF,EACF,OAAOT,EAASM,OAAOG,EAAMF,MAAMC,KAAK,CAAEC,MAAOA,EAAMC,MAGxDV,EAASQ,KAAKK","ignoreList":[]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{resolve as r}from"path";import s from"../../../../../server/utils/permissions/currentUserHasPermission.js";import
|
|
1
|
+
import{resolve as r,join as e}from"path";import s from"../../../../../server/utils/permissions/currentUserHasPermission.js";import t from"../../../../../server/utils/fragments/moveFragment.js";const i=import.meta.dirname.includes("node_modules")?e(process.cwd(),"public"):r(import.meta.dirname,"../../../../../app-public");export default async(r,e)=>{const o=r.cookies.session_token,[n,a]=await s(o,"system:pages:update");if(n)return e.status(n.code).json({error:n.msg});if(!a)return e.status(403).json({error:"Insufficient permissions"});const{file:m,newFile:u}=r.body;if(!m)return e.status(400).json({error:"File path is required"});if(!u)return e.status(400).json({error:"New file path is required"});const[p,c]=await t({rootDir:i,file:m,newFile:u});if(p)return e.status(p.code).json({error:p.msg});e.json(c)};
|
|
2
2
|
//# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\api\fragments\file\PATCH.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"src\\kempo\\api\\fragments\\file\\PATCH.js","names":["resolve","currentUserHasPermission","moveFragment","rootDir","dirname","async","request","response","token","cookies","session_token","permError","hasPermission","status","code","json","error","msg","file","newFile","body","data"],"sources":["0"],"sourcesContent":["import { resolve } from 'path';\r\nimport currentUserHasPermission from '../../../../../server/utils/permissions/currentUserHasPermission.js';\r\nimport moveFragment from '../../../../../server/utils/fragments/moveFragment.js';\r\n\r\nconst rootDir = resolve(import.meta.dirname, '../../../../../app-public');\r\n\r\nexport default async (request, response) => {\r\n\tconst token = request.cookies.session_token;\r\n\tconst [permError, hasPermission] = await currentUserHasPermission(token, 'system:pages:update');\r\n\r\n\tif(permError){\r\n\t\treturn response.status(permError.code).json({ error: permError.msg });\r\n\t}\r\n\r\n\tif(!hasPermission){\r\n\t\treturn response.status(403).json({ error: 'Insufficient permissions' });\r\n\t}\r\n\r\n\tconst { file, newFile } = request.body;\r\n\r\n\tif(!file){\r\n\t\treturn response.status(400).json({ error: 'File path is required' });\r\n\t}\r\n\r\n\tif(!newFile){\r\n\t\treturn response.status(400).json({ error: 'New file path is required' });\r\n\t}\r\n\r\n\tconst [error, data] = await moveFragment({ rootDir, file, newFile });\r\n\r\n\tif(error){\r\n\t\treturn response.status(error.code).json({ error: error.msg });\r\n\t}\r\n\r\n\tresponse.json(data);\r\n};\r\n"],"mappings":"kBAASA,
|
|
1
|
+
{"version":3,"file":"src\\kempo\\api\\fragments\\file\\PATCH.js","names":["resolve","join","currentUserHasPermission","moveFragment","rootDir","dirname","includes","process","cwd","async","request","response","token","cookies","session_token","permError","hasPermission","status","code","json","error","msg","file","newFile","body","data"],"sources":["0"],"sourcesContent":["import { resolve, join } from 'path';\r\nimport currentUserHasPermission from '../../../../../server/utils/permissions/currentUserHasPermission.js';\r\nimport moveFragment from '../../../../../server/utils/fragments/moveFragment.js';\r\n\r\nconst rootDir = import.meta.dirname.includes('node_modules') ? join(process.cwd(), 'public') : resolve(import.meta.dirname, '../../../../../app-public');\r\n\r\nexport default async (request, response) => {\r\n\tconst token = request.cookies.session_token;\r\n\tconst [permError, hasPermission] = await currentUserHasPermission(token, 'system:pages:update');\r\n\r\n\tif(permError){\r\n\t\treturn response.status(permError.code).json({ error: permError.msg });\r\n\t}\r\n\r\n\tif(!hasPermission){\r\n\t\treturn response.status(403).json({ error: 'Insufficient permissions' });\r\n\t}\r\n\r\n\tconst { file, newFile } = request.body;\r\n\r\n\tif(!file){\r\n\t\treturn response.status(400).json({ error: 'File path is required' });\r\n\t}\r\n\r\n\tif(!newFile){\r\n\t\treturn response.status(400).json({ error: 'New file path is required' });\r\n\t}\r\n\r\n\tconst [error, data] = await moveFragment({ rootDir, file, newFile });\r\n\r\n\tif(error){\r\n\t\treturn response.status(error.code).json({ error: error.msg });\r\n\t}\r\n\r\n\tresponse.json(data);\r\n};\r\n"],"mappings":"kBAASA,UAASC,MAAY,cACvBC,MAA8B,6EAC9BC,MAAkB,wDAEzB,MAAMC,cAAsBC,QAAQC,SAAS,gBAAkBL,EAAKM,QAAQC,MAAO,UAAYR,cAAoBK,QAAS,4CAE7GI,MAAOC,EAASC,KAC9B,MAAMC,EAAQF,EAAQG,QAAQC,eACvBC,EAAWC,SAAuBd,EAAyBU,EAAO,uBAEzE,GAAGG,EACF,OAAOJ,EAASM,OAAOF,EAAUG,MAAMC,KAAK,CAAEC,MAAOL,EAAUM,MAGhE,IAAIL,EACH,OAAOL,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,6BAG3C,MAAME,KAAEA,EAAIC,QAAEA,GAAYb,EAAQc,KAElC,IAAIF,EACH,OAAOX,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,0BAG3C,IAAIG,EACH,OAAOZ,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,8BAG3C,MAAOA,EAAOK,SAActB,EAAa,CAAEC,UAASkB,OAAMC,YAE1D,GAAGH,EACF,OAAOT,EAASM,OAAOG,EAAMF,MAAMC,KAAK,CAAEC,MAAOA,EAAMC,MAGxDV,EAASQ,KAAKM","ignoreList":[]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{resolve as r}from"path";import
|
|
1
|
+
import{resolve as r,join as e}from"path";import s from"../../../../../server/utils/permissions/currentUserHasPermission.js";import t from"../../../../../server/utils/fragments/getFragmentMetadata.js";import o from"../../../../../server/utils/fragments/updateFragment.js";const i=import.meta.dirname.includes("node_modules")?e(process.cwd(),"public"):r(import.meta.dirname,"../../../../../app-public");export default async(r,e)=>{const a=r.cookies.session_token,[n,m]=await s(a,"system:fragments:update");if(n)return e.status(n.code).json({error:n.msg});if(!m)return e.status(403).json({error:"Insufficient permissions"});const{file:u,name:p,author:c,markup:d}=r.body;if(!u)return e.status(400).json({error:"File path is required"});const[f,l]=await t({rootDir:i,file:u});if(!f&&l.locked)return e.status(403).json({error:"This fragment is locked and cannot be edited"});const[g,j]=await o({rootDir:i,file:u,name:p,author:c,markup:d});if(g)return e.status(g.code).json({error:g.msg});e.json(j)};
|
|
2
2
|
//# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\api\fragments\file\PUT.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"src\\kempo\\api\\fragments\\file\\PUT.js","names":["resolve","currentUserHasPermission","getFragmentMetadata","updateFragment","rootDir","dirname","async","request","response","token","cookies","session_token","permError","hasPermission","status","code","json","error","msg","file","name","author","markup","body","metaError","metadata","locked","data"],"sources":["0"],"sourcesContent":["import { resolve } from 'path';\r\nimport currentUserHasPermission from '../../../../../server/utils/permissions/currentUserHasPermission.js';\r\nimport getFragmentMetadata from '../../../../../server/utils/fragments/getFragmentMetadata.js';\r\nimport updateFragment from '../../../../../server/utils/fragments/updateFragment.js';\r\n\r\nconst rootDir = resolve(import.meta.dirname, '../../../../../app-public');\r\n\r\nexport default async (request, response) => {\r\n\tconst token = request.cookies.session_token;\r\n\tconst [permError, hasPermission] = await currentUserHasPermission(token, 'system:fragments:update');\r\n\r\n\tif(permError){\r\n\t\treturn response.status(permError.code).json({ error: permError.msg });\r\n\t}\r\n\r\n\tif(!hasPermission){\r\n\t\treturn response.status(403).json({ error: 'Insufficient permissions' });\r\n\t}\r\n\r\n\tconst { file, name, author, markup } = request.body;\r\n\r\n\tif(!file){\r\n\t\treturn response.status(400).json({ error: 'File path is required' });\r\n\t}\r\n\r\n\tconst [metaError, metadata] = await getFragmentMetadata({ rootDir, file });\r\n\tif(!metaError && metadata.locked){\r\n\t\treturn response.status(403).json({ error: 'This fragment is locked and cannot be edited' });\r\n\t}\r\n\r\n\tconst [error, data] = await updateFragment({ rootDir, file, name, author, markup });\r\n\r\n\tif(error){\r\n\t\treturn response.status(error.code).json({ error: error.msg });\r\n\t}\r\n\r\n\tresponse.json(data);\r\n};\r\n"],"mappings":"kBAASA,
|
|
1
|
+
{"version":3,"file":"src\\kempo\\api\\fragments\\file\\PUT.js","names":["resolve","join","currentUserHasPermission","getFragmentMetadata","updateFragment","rootDir","dirname","includes","process","cwd","async","request","response","token","cookies","session_token","permError","hasPermission","status","code","json","error","msg","file","name","author","markup","body","metaError","metadata","locked","data"],"sources":["0"],"sourcesContent":["import { resolve, join } from 'path';\r\nimport currentUserHasPermission from '../../../../../server/utils/permissions/currentUserHasPermission.js';\r\nimport getFragmentMetadata from '../../../../../server/utils/fragments/getFragmentMetadata.js';\r\nimport updateFragment from '../../../../../server/utils/fragments/updateFragment.js';\r\n\r\nconst rootDir = import.meta.dirname.includes('node_modules') ? join(process.cwd(), 'public') : resolve(import.meta.dirname, '../../../../../app-public');\r\n\r\nexport default async (request, response) => {\r\n\tconst token = request.cookies.session_token;\r\n\tconst [permError, hasPermission] = await currentUserHasPermission(token, 'system:fragments:update');\r\n\r\n\tif(permError){\r\n\t\treturn response.status(permError.code).json({ error: permError.msg });\r\n\t}\r\n\r\n\tif(!hasPermission){\r\n\t\treturn response.status(403).json({ error: 'Insufficient permissions' });\r\n\t}\r\n\r\n\tconst { file, name, author, markup } = request.body;\r\n\r\n\tif(!file){\r\n\t\treturn response.status(400).json({ error: 'File path is required' });\r\n\t}\r\n\r\n\tconst [metaError, metadata] = await getFragmentMetadata({ rootDir, file });\r\n\tif(!metaError && metadata.locked){\r\n\t\treturn response.status(403).json({ error: 'This fragment is locked and cannot be edited' });\r\n\t}\r\n\r\n\tconst [error, data] = await updateFragment({ rootDir, file, name, author, markup });\r\n\r\n\tif(error){\r\n\t\treturn response.status(error.code).json({ error: error.msg });\r\n\t}\r\n\r\n\tresponse.json(data);\r\n};\r\n"],"mappings":"kBAASA,UAASC,MAAY,cACvBC,MAA8B,6EAC9BC,MAAyB,sEACzBC,MAAoB,0DAE3B,MAAMC,cAAsBC,QAAQC,SAAS,gBAAkBN,EAAKO,QAAQC,MAAO,UAAYT,cAAoBM,QAAS,4CAE7GI,MAAOC,EAASC,KAC9B,MAAMC,EAAQF,EAAQG,QAAQC,eACvBC,EAAWC,SAAuBf,EAAyBW,EAAO,2BAEzE,GAAGG,EACF,OAAOJ,EAASM,OAAOF,EAAUG,MAAMC,KAAK,CAAEC,MAAOL,EAAUM,MAGhE,IAAIL,EACH,OAAOL,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,6BAG3C,MAAME,KAAEA,EAAIC,KAAEA,EAAIC,OAAEA,EAAMC,OAAEA,GAAWf,EAAQgB,KAE/C,IAAIJ,EACH,OAAOX,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,0BAG3C,MAAOO,EAAWC,SAAkB1B,EAAoB,CAAEE,UAASkB,SACnE,IAAIK,GAAaC,EAASC,OACzB,OAAOlB,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,iDAG3C,MAAOA,EAAOU,SAAc3B,EAAe,CAAEC,UAASkB,OAAMC,OAAMC,SAAQC,WAE1E,GAAGL,EACF,OAAOT,EAASM,OAAOG,EAAMF,MAAMC,KAAK,CAAEC,MAAOA,EAAMC,MAGxDV,EAASQ,KAAKW","ignoreList":[]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{resolve as
|
|
1
|
+
import{resolve as s,join as e}from"path";import r from"../../../../../server/utils/permissions/currentUserHasPermission.js";import o from"../../../../../server/utils/fragments/setFragmentLocked.js";const t=import.meta.dirname.includes("node_modules")?e(process.cwd(),"public"):s(import.meta.dirname,"../../../../../app-public");export default async(s,e)=>{const i=s.cookies.session_token,[n,a]=await r(i,"system:fragments:update");if(n)return e.status(n.code).json({error:n.msg});if(!a)return e.status(403).json({error:"Insufficient permissions"});const{file:m,locked:u}=s.body;if(!m)return e.status(400).json({error:"File path is required"});if("boolean"!=typeof u)return e.status(400).json({error:"locked must be a boolean"});const[c,p]=await o({rootDir:t,file:m,locked:u});if(c)return e.status(c.code).json({error:c.msg});e.json(p)};
|
|
2
2
|
//# sourceMappingURL=C:\Users\dusti\dev\kempo\dist\kempo\api\fragments\lock\PUT.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"src\\kempo\\api\\fragments\\lock\\PUT.js","names":["resolve","currentUserHasPermission","setFragmentLocked","rootDir","dirname","async","request","response","token","cookies","session_token","permError","hasPermission","status","code","json","error","msg","file","locked","body","data"],"sources":["0"],"sourcesContent":["import { resolve } from 'path';\r\nimport currentUserHasPermission from '../../../../../server/utils/permissions/currentUserHasPermission.js';\r\nimport setFragmentLocked from '../../../../../server/utils/fragments/setFragmentLocked.js';\r\n\r\nconst rootDir = resolve(import.meta.dirname, '../../../../../app-public');\r\n\r\nexport default async (request, response) => {\r\n\tconst token = request.cookies.session_token;\r\n\tconst [permError, hasPermission] = await currentUserHasPermission(token, 'system:fragments:update');\r\n\r\n\tif(permError){\r\n\t\treturn response.status(permError.code).json({ error: permError.msg });\r\n\t}\r\n\r\n\tif(!hasPermission){\r\n\t\treturn response.status(403).json({ error: 'Insufficient permissions' });\r\n\t}\r\n\r\n\tconst { file, locked } = request.body;\r\n\r\n\tif(!file){\r\n\t\treturn response.status(400).json({ error: 'File path is required' });\r\n\t}\r\n\r\n\tif(typeof locked !== 'boolean'){\r\n\t\treturn response.status(400).json({ error: 'locked must be a boolean' });\r\n\t}\r\n\r\n\tconst [error, data] = await setFragmentLocked({ rootDir, file, locked });\r\n\r\n\tif(error){\r\n\t\treturn response.status(error.code).json({ error: error.msg });\r\n\t}\r\n\r\n\tresponse.json(data);\r\n};\r\n"],"mappings":"kBAASA,
|
|
1
|
+
{"version":3,"file":"src\\kempo\\api\\fragments\\lock\\PUT.js","names":["resolve","join","currentUserHasPermission","setFragmentLocked","rootDir","dirname","includes","process","cwd","async","request","response","token","cookies","session_token","permError","hasPermission","status","code","json","error","msg","file","locked","body","data"],"sources":["0"],"sourcesContent":["import { resolve, join } from 'path';\r\nimport currentUserHasPermission from '../../../../../server/utils/permissions/currentUserHasPermission.js';\r\nimport setFragmentLocked from '../../../../../server/utils/fragments/setFragmentLocked.js';\r\n\r\nconst rootDir = import.meta.dirname.includes('node_modules') ? join(process.cwd(), 'public') : resolve(import.meta.dirname, '../../../../../app-public');\r\n\r\nexport default async (request, response) => {\r\n\tconst token = request.cookies.session_token;\r\n\tconst [permError, hasPermission] = await currentUserHasPermission(token, 'system:fragments:update');\r\n\r\n\tif(permError){\r\n\t\treturn response.status(permError.code).json({ error: permError.msg });\r\n\t}\r\n\r\n\tif(!hasPermission){\r\n\t\treturn response.status(403).json({ error: 'Insufficient permissions' });\r\n\t}\r\n\r\n\tconst { file, locked } = request.body;\r\n\r\n\tif(!file){\r\n\t\treturn response.status(400).json({ error: 'File path is required' });\r\n\t}\r\n\r\n\tif(typeof locked !== 'boolean'){\r\n\t\treturn response.status(400).json({ error: 'locked must be a boolean' });\r\n\t}\r\n\r\n\tconst [error, data] = await setFragmentLocked({ rootDir, file, locked });\r\n\r\n\tif(error){\r\n\t\treturn response.status(error.code).json({ error: error.msg });\r\n\t}\r\n\r\n\tresponse.json(data);\r\n};\r\n"],"mappings":"kBAASA,UAASC,MAAY,cACvBC,MAA8B,6EAC9BC,MAAuB,6DAE9B,MAAMC,cAAsBC,QAAQC,SAAS,gBAAkBL,EAAKM,QAAQC,MAAO,UAAYR,cAAoBK,QAAS,4CAE7GI,MAAOC,EAASC,KAC9B,MAAMC,EAAQF,EAAQG,QAAQC,eACvBC,EAAWC,SAAuBd,EAAyBU,EAAO,2BAEzE,GAAGG,EACF,OAAOJ,EAASM,OAAOF,EAAUG,MAAMC,KAAK,CAAEC,MAAOL,EAAUM,MAGhE,IAAIL,EACH,OAAOL,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,6BAG3C,MAAME,KAAEA,EAAIC,OAAEA,GAAWb,EAAQc,KAEjC,IAAIF,EACH,OAAOX,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,0BAG3C,GAAqB,kBAAXG,EACT,OAAOZ,EAASM,OAAO,KAAKE,KAAK,CAAEC,MAAO,6BAG3C,MAAOA,EAAOK,SAActB,EAAkB,CAAEC,UAASkB,OAAMC,WAE/D,GAAGH,EACF,OAAOT,EAASM,OAAOG,EAAMF,MAAMC,KAAK,CAAEC,MAAOA,EAAMC,MAGxDV,EAASQ,KAAKM","ignoreList":[]}
|