summaryrefslogtreecommitdiff
path: root/packages/frontend/src/pages/admin/system-webhook.vue
diff options
context:
space:
mode:
authordakkar <dakkar@thenautilus.net>2024-08-02 12:25:58 +0100
committerdakkar <dakkar@thenautilus.net>2024-08-02 12:25:58 +0100
commitcfa9b852df9e0293865b3acbd67d59265962e552 (patch)
treea408ad670956a45c4e162e4ecc97a3624e2b0f20 /packages/frontend/src/pages/admin/system-webhook.vue
parentmerge: rate limit all password checks - fixes #540 (!568) (diff)
parentMerge pull request #14233 from misskey-dev/develop (diff)
downloadsharkey-cfa9b852df9e0293865b3acbd67d59265962e552.tar.gz
sharkey-cfa9b852df9e0293865b3acbd67d59265962e552.tar.bz2
sharkey-cfa9b852df9e0293865b3acbd67d59265962e552.zip
Merge remote-tracking branch 'misskey/master' into feature/misskey-2024.07
Diffstat (limited to 'packages/frontend/src/pages/admin/system-webhook.vue')
-rw-r--r--packages/frontend/src/pages/admin/system-webhook.vue96
1 files changed, 96 insertions, 0 deletions
diff --git a/packages/frontend/src/pages/admin/system-webhook.vue b/packages/frontend/src/pages/admin/system-webhook.vue
new file mode 100644
index 0000000000..7a40eec944
--- /dev/null
+++ b/packages/frontend/src/pages/admin/system-webhook.vue
@@ -0,0 +1,96 @@
+<!--
+SPDX-FileCopyrightText: syuilo and misskey-project
+SPDX-License-Identifier: AGPL-3.0-only
+-->
+
+<template>
+<MkStickyContainer>
+ <template #header>
+ <XHeader :actions="headerActions" :tabs="headerTabs"/>
+ </template>
+
+ <MkSpacer :contentMax="900">
+ <div class="_gaps_m">
+ <MkButton :class="$style.linkButton" full @click="onCreateWebhookClicked">
+ {{ i18n.ts._webhookSettings.createWebhook }}
+ </MkButton>
+
+ <FormSection>
+ <div class="_gaps">
+ <XItem v-for="item in webhooks" :key="item.id" :entity="item" @edit="onEditButtonClicked" @delete="onDeleteButtonClicked"/>
+ </div>
+ </FormSection>
+ </div>
+ </MkSpacer>
+</MkStickyContainer>
+</template>
+
+<script lang="ts" setup>
+import { computed, onMounted, ref } from 'vue';
+import { entities } from 'misskey-js';
+import XItem from './system-webhook.item.vue';
+import FormSection from '@/components/form/section.vue';
+import { definePageMetadata } from '@/scripts/page-metadata.js';
+import { i18n } from '@/i18n.js';
+import XHeader from '@/pages/admin/_header_.vue';
+import MkButton from '@/components/MkButton.vue';
+import { misskeyApi } from '@/scripts/misskey-api.js';
+import { showSystemWebhookEditorDialog } from '@/components/MkSystemWebhookEditor.impl.js';
+import * as os from '@/os.js';
+
+const webhooks = ref<entities.SystemWebhook[]>([]);
+
+const headerActions = computed(() => []);
+const headerTabs = computed(() => []);
+
+async function onCreateWebhookClicked() {
+ await showSystemWebhookEditorDialog({
+ mode: 'create',
+ });
+
+ await fetchWebhooks();
+}
+
+async function onEditButtonClicked(webhook: entities.SystemWebhook) {
+ await showSystemWebhookEditorDialog({
+ mode: 'edit',
+ id: webhook.id,
+ });
+
+ await fetchWebhooks();
+}
+
+async function onDeleteButtonClicked(webhook: entities.SystemWebhook) {
+ const result = await os.confirm({
+ type: 'warning',
+ title: i18n.ts._webhookSettings.deleteConfirm,
+ });
+ if (!result.canceled) {
+ await misskeyApi('admin/system-webhook/delete', {
+ id: webhook.id,
+ });
+ await fetchWebhooks();
+ }
+}
+
+async function fetchWebhooks() {
+ const result = await misskeyApi('admin/system-webhook/list', {});
+ webhooks.value = result.sort((a, b) => a.id.localeCompare(b.id));
+}
+
+onMounted(async () => {
+ await fetchWebhooks();
+});
+
+definePageMetadata(() => ({
+ title: 'SystemWebhook',
+ icon: 'ti ti-webhook',
+}));
+</script>
+
+<style module lang="scss">
+.linkButton {
+ text-align: left;
+ padding: 10px 18px;
+}
+</style>