1 line
12 KiB
Plaintext
1 line
12 KiB
Plaintext
{"version":3,"file":"oauth2-settings-admin.mjs","sources":["../build/frontend/apps/oauth2/src/components/OAuthItem.vue","../build/frontend/apps/oauth2/src/views/AdminSettings.vue","../build/frontend/apps/oauth2/src/settings-admin.ts"],"sourcesContent":["<!--\n - SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<script setup lang=\"ts\">\nimport type { IOauthClient } from '../views/AdminSettings.vue'\n\nimport { t } from '@nextcloud/l10n'\nimport NcButton from '@nextcloud/vue/components/NcButton'\nimport NcPasswordField from '@nextcloud/vue/components/NcPasswordField'\nimport IconTrashCanOutline from 'vue-material-design-icons/TrashCanOutline.vue'\n\ndefineProps<{\n\t/**\n\t * The OAuth client to display\n\t */\n\tclient: IOauthClient\n}>()\n\ndefineEmits<{\n\tdelete: []\n}>()\n</script>\n\n<template>\n\t<tr>\n\t\t<td>{{ client.name }}</td>\n\t\t<td>\n\t\t\t<code :class=\"$style.oAuthItem__code\">{{ client.redirectUri }}</code>\n\t\t</td>\n\t\t<td>\n\t\t\t<code :class=\"$style.oAuthItem__code\">{{ client.clientId }}</code>\n\t\t</td>\n\t\t<td>\n\t\t\t<NcPasswordField\n\t\t\t\tv-if=\"client.clientSecret\"\n\t\t\t\t:class=\"$style.oAuthItem__clientSecret\"\n\t\t\t\t:aria-label=\"t('oauth2', 'Secret key')\"\n\t\t\t\tas-text\n\t\t\t\t:model-value=\"client.clientSecret\"\n\t\t\t\tshow-trailing-button />\n\t\t\t<span v-else>*****</span>\n\t\t</td>\n\t\t<td>\n\t\t\t<NcButton\n\t\t\t\t:aria-label=\"t('oauth2', 'Delete')\"\n\t\t\t\t:title=\"t('oauth2', 'Delete')\"\n\t\t\t\tvariant=\"error\"\n\t\t\t\t@click=\"$emit('delete')\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<IconTrashCanOutline :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t</NcButton>\n\t\t</td>\n\t</tr>\n</template>\n\n<style module>\n.oAuthItem__code {\n\tdisplay: inline-block;\n\toverflow-x: scroll;\n\tpadding-block: var(--default-grid-baseline);\n\ttext-wrap: nowrap;\n\tvertical-align: middle;\n\twidth: 100%;\n}\n\n.oAuthItem__clientSecret {\n\tmin-width: 200px;\n}\n</style>\n","<!--\n - SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<script setup lang=\"ts\">\nimport axios, { isAxiosError } from '@nextcloud/axios'\nimport { getCapabilities } from '@nextcloud/capabilities'\nimport { loadState } from '@nextcloud/initial-state'\nimport { t } from '@nextcloud/l10n'\nimport { generateUrl } from '@nextcloud/router'\nimport { ref } from 'vue'\nimport NcButton from '@nextcloud/vue/components/NcButton'\nimport NcNoteCard from '@nextcloud/vue/components/NcNoteCard'\nimport NcSettingsSection from '@nextcloud/vue/components/NcSettingsSection'\nimport NcTextField from '@nextcloud/vue/components/NcTextField'\nimport OAuthItem from '../components/OAuthItem.vue'\n\nexport interface IOauthClient {\n\tid: string\n\tname: string\n\tredirectUri: string\n\tclientId: string\n\tclientSecret: string\n}\n\nconst clients = defineModel<IOauthClient[]>({ required: true })\n\n// @ts-expect-error -- missing typing of the API\nconst instanceName = getCapabilities().theming.name\nconst oauthDocLink = loadState<string>('oauth2', 'oauth2-doc-link')\n\nconst showSecretWarning = ref(false)\nconst newClient = ref({\n\tname: '',\n\tredirectUri: '',\n\terrorMsg: '',\n\terror: false,\n})\n\n/**\n * @param id - The id of the client to delete\n */\nasync function deleteClient(id: string) {\n\tawait axios.delete(generateUrl('apps/oauth2/clients/{id}', { id }))\n\tclients.value = clients.value.filter((client) => client.id !== id)\n}\n\n/**\n * Add the generated client to the backend and display it in the list\n */\nasync function addClient() {\n\tnewClient.value.error = false\n\n\ttry {\n\t\tconst { data } = await axios.post(generateUrl('apps/oauth2/clients'), {\n\t\t\tname: newClient.value.name,\n\t\t\tredirectUri: newClient.value.redirectUri,\n\t\t})\n\t\tclients.value.push(data)\n\t\tshowSecretWarning.value = true\n\n\t\tnewClient.value.name = ''\n\t\tnewClient.value.redirectUri = ''\n\t} catch (error) {\n\t\tnewClient.value.error = true\n\t\tif (isAxiosError(error) && error.response) {\n\t\t\tnewClient.value.errorMsg = error.response.data.message\n\t\t} else {\n\t\t\tnewClient.value.errorMsg = t('oauth2', 'An unknown error occurred.')\n\t\t}\n\t}\n}\n</script>\n\n<template>\n\t<NcSettingsSection\n\t\t:name=\"t('oauth2', 'OAuth 2.0 clients')\"\n\t\t:description=\"t('oauth2', 'OAuth 2.0 allows external services to request access to {instanceName}.', { instanceName })\"\n\t\t:doc-url=\"oauthDocLink\">\n\t\t<table v-if=\"clients.length > 0\" :class=\"[$style.oauthApp__table, { [$style.oauthApp__table_withSecret]: showSecretWarning }]\">\n\t\t\t<thead>\n\t\t\t\t<tr>\n\t\t\t\t\t<th>\n\t\t\t\t\t\t{{ t('oauth2', 'Name') }}\n\t\t\t\t\t</th>\n\t\t\t\t\t<th>\n\t\t\t\t\t\t{{ t('oauth2', 'Redirection URI') }}\n\t\t\t\t\t</th>\n\t\t\t\t\t<th>\n\t\t\t\t\t\t{{ t('oauth2', 'Client identifier') }}\n\t\t\t\t\t</th>\n\t\t\t\t\t<th>\n\t\t\t\t\t\t{{ t('oauth2', 'Secret key') }}\n\t\t\t\t\t</th>\n\t\t\t\t\t<th>\n\t\t\t\t\t\t<span class=\"hidden-visually\">{{ t('oauth2', 'Delete client') }}</span>\n\t\t\t\t\t</th>\n\t\t\t\t</tr>\n\t\t\t</thead>\n\t\t\t<tbody>\n\t\t\t\t<OAuthItem\n\t\t\t\t\tv-for=\"client in clients\"\n\t\t\t\t\t:key=\"client.id\"\n\t\t\t\t\t:client=\"client\"\n\t\t\t\t\t@delete=\"deleteClient(client.id)\" />\n\t\t\t</tbody>\n\t\t</table>\n\t\t<NcNoteCard\n\t\t\tv-if=\"showSecretWarning\"\n\t\t\ttype=\"warning\">\n\t\t\t{{ t('oauth2', 'Make sure you store the secret key, it cannot be recovered.') }}\n\t\t</NcNoteCard>\n\n\t\t<br>\n\t\t<h3>{{ t('oauth2', 'Add client') }}</h3>\n\t\t<NcNoteCard v-if=\"newClient.error\" type=\"error\">\n\t\t\t{{ newClient.errorMsg }}\n\t\t</NcNoteCard>\n\t\t<form :class=\"$style.oauthApp__form\" @submit.prevent=\"addClient\">\n\t\t\t<NcTextField\n\t\t\t\tid=\"name\"\n\t\t\t\tv-model=\"newClient.name\"\n\t\t\t\t:class=\"$style.oauthApp__form__input\"\n\t\t\t\tname=\"name\"\n\t\t\t\t:label=\"t('oauth2', 'Name')\"\n\t\t\t\t:placeholder=\"t('oauth2', 'Name')\" />\n\t\t\t<NcTextField\n\t\t\t\tid=\"redirectUri\"\n\t\t\t\tv-model=\"newClient.redirectUri\"\n\t\t\t\ttype=\"url\"\n\t\t\t\t:class=\"$style.oauthApp__form__input\"\n\t\t\t\tname=\"redirectUri\"\n\t\t\t\t:label=\"t('oauth2', 'Redirection URI')\"\n\t\t\t\t:placeholder=\"t('oauth2', 'Redirection URI')\" />\n\t\t\t<NcButton type=\"submit\" :class=\"$style.oauthApp__submitButton\">\n\t\t\t\t{{ t('oauth2', 'Add') }}\n\t\t\t</NcButton>\n\t\t</form>\n\t</NcSettingsSection>\n</template>\n\n<style module lang=\"scss\">\n.oauthApp__form {\n\tdisplay: flex;\n\tflex-direction: row;\n}\n\n.oauthApp__form__input {\n\tmax-width: 260px;\n\tmargin-inline-end: 10px;\n}\n\n.oauthApp__table {\n\twidth: 100%;\n\tborder-collapse: collapse;\n\ttable-layout: fixed;\n\n\tth, td {\n\t\toverflow: hidden;\n\t\tpadding: var(--default-grid-baseline);\n\t\ttext-wrap: wrap;\n\t\tword-wrap: break-word;\n\t}\n\n\ttbody tr {\n\t\tborder-top: 1px solid var(--color-border);\n\t}\n\n\tth:nth-of-type(2), td:nth-of-type(2) {\n\t\twidth: 33%;\n\t}\n\n\tth:nth-of-type(3), td:nth-of-type(3) {\n\t\twidth: 50%;\n\t}\n\n\t// by default hide the secret column\n\tth:nth-of-type(4), td:nth-of-type(4) {\n\t\tdisplay: none;\n\t}\n\n\t// the action column only needs to have the button size\n\tth:nth-of-type(5), td:nth-of-type(5) {\n\t\twidth: calc(var(--default-clickable-area) + 2 * var(--default-grid-baseline));\n\t}\n}\n\n.oauthApp__table_withSecret {\n\tth:nth-of-type(2), td:nth-of-type(2) {\n\t\twidth: 25%;\n\t}\n\n\tth:nth-of-type(3), td:nth-of-type(3) {\n\t\twidth: 40%;\n\t}\n\tth:nth-of-type(4), td:nth-of-type(4) {\n\t\tdisplay: table-cell;\n\t\twidth: calc(200px + 2 * var(--default-grid-baseline));\n\t}\n}\n</style>\n","/**\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { loadState } from '@nextcloud/initial-state'\nimport { createApp } from 'vue'\nimport AdminSettings from './views/AdminSettings.vue'\n\nimport 'vite/modulepreload-polyfill'\n\nconst clients = loadState('oauth2', 'clients')\n\nconst app = createApp(AdminSettings, {\n\tmodelValue: clients,\n})\napp.mount('#oauth2')\n"],"names":["_createElementBlock","_createElementVNode","_toDisplayString","__props","_normalizeClass","$style","_createBlock","_unref","NcPasswordField","t","_openBlock","_createVNode","NcButton","$emit","IconTrashCanOutline","clients","_useModel","instanceName","getCapabilities","oauthDocLink","loadState","showSecretWarning","ref","newClient","deleteClient","id","axios","generateUrl","client","addClient","data","error","isAxiosError","NcSettingsSection","_hoisted_1","_Fragment","_renderList","OAuthItem","$event","NcNoteCard","_createTextVNode","NcTextField","_cache","app","createApp","AdminSettings"],"mappings":"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"} |