From 0607c97da940fe9fa73c8b5d368146d4dc0a20a3 Mon Sep 17 00:00:00 2001 From: kolaente Date: Sun, 17 Dec 2023 18:39:36 +0100 Subject: [PATCH] feat(api tokens): allow selecting all permissions --- src/i18n/lang/en.json | 1 + src/views/user/settings/ApiTokens.vue | 55 ++++++++++++++++++++++++--- 2 files changed, 50 insertions(+), 6 deletions(-) diff --git a/src/i18n/lang/en.json b/src/i18n/lang/en.json index a16ff0959..e35c6be9b 100644 --- a/src/i18n/lang/en.json +++ b/src/i18n/lang/en.json @@ -160,6 +160,7 @@ "expired": "This token has expired {ago}.", "tokenCreatedSuccess": "Here is your new api token: {token}", "tokenCreatedNotSeeAgain": "Store it in a secure location, you won't see it again!", + "selectAll": "Select all", "delete": { "header": "Delete this token", "text1": "Are you sure you want to delete the token \"{token}\"?", diff --git a/src/views/user/settings/ApiTokens.vue b/src/views/user/settings/ApiTokens.vue index 77ebb3536..5a56e1a48 100644 --- a/src/views/user/settings/ApiTokens.vue +++ b/src/views/user/settings/ApiTokens.vue @@ -23,6 +23,7 @@ const newToken = ref(new ApiTokenModel()) const newTokenExpiry = ref(30) const newTokenExpiryCustom = ref(new Date()) const newTokenPermissions = ref({}) +const newTokenPermissionsGroup = ref({}) const newTokenTitleValid = ref(true) const apiTokenTitle = ref() const tokenCreatedSuccessMessage = ref('') @@ -112,6 +113,32 @@ async function createToken() { function formatPermissionTitle(title: string): string { return title.replaceAll('_', ' ') } + +function selectPermissionGroup(group: string, checked: boolean) { + Object.entries(availableRoutes.value[group]).forEach(entry => { + const [key] = entry + newTokenPermissions.value[group][key] = checked + }) +} + +function toggleGroupPermissionsFromChild(group: string, checked: boolean) { + if (checked) { + // Check if all permissions of that group are checked and check the "select all" checkbox in that case + let allChecked = true + Object.entries(availableRoutes.value[group]).forEach(entry => { + const [key] = entry + if (!newTokenPermissions.value[group][key]) { + allChecked = false + } + }) + + if (allChecked) { + newTokenPermissionsGroup.value[group] = true + } + } else { + newTokenPermissionsGroup.value[group] = false + } +} +