diff --git a/dashboard/src/components/ExternalLdap.vue b/dashboard/src/components/ExternalLdap.vue index 2d3f55a5f..9b42cfee4 100644 --- a/dashboard/src/components/ExternalLdap.vue +++ b/dashboard/src/components/ExternalLdap.vue @@ -229,6 +229,7 @@ onMounted(async () => { :confirm-busy="editBusy" :confirm-active="!editBusy && isValid" :reject-label="$t('main.dialog.cancel')" + reject-style="secondary" @confirm="onSubmit()" >

{{ editError.generic }}

diff --git a/dashboard/src/models/NetworkModel.js b/dashboard/src/models/NetworkModel.js index b3fe2f086..28eb2f7c6 100644 --- a/dashboard/src/models/NetworkModel.js +++ b/dashboard/src/models/NetworkModel.js @@ -7,14 +7,14 @@ function create() { return { async getIpv4Config() { - let error, result; + let result; try { result = await fetcher.get(`${origin}/api/v1/network/ipv4_config`, { access_token: accessToken }); } catch (e) { - error = e; + return [e]; } - if (error || result.status !== 200) return [error || result]; + if (result.status !== 200) return [result]; return [null, result.body]; }, async setIpv4Config(provider, ip, ifname) { @@ -23,36 +23,36 @@ function create() { if (provider === 'fixed') data.ip = ip; else if (provider === 'network-interface') data.ifname = ifname; - let error, result; + let result; try { result = await fetcher.post(`${origin}/api/v1/network/ipv4_config`, data, { access_token: accessToken }); } catch (e) { - error = e; + return [e]; } - if (error || result.status !== 200) return [error || result]; + if (result.status !== 200) return [result]; return [null]; }, async getIpv4() { - let error, result; + let result; try { result = await fetcher.get(`${origin}/api/v1/network/ipv4`, { access_token: accessToken }); } catch (e) { - error = e; + return [e]; } - if (error || result.status !== 200) return [error || result]; + if (result.status !== 200) return [result]; return [null, result.body.ip]; }, async getIpv6Config() { - let error, result; + let result; try { result = await fetcher.get(`${origin}/api/v1/network/ipv6_config`, { access_token: accessToken }); } catch (e) { - error = e; + return [e]; } - if (error || result.status !== 200) return [error || result]; + if (result.status !== 200) return [result]; return [null, result.body]; }, async setIpv6Config(provider, ip, ifname) { @@ -61,91 +61,91 @@ function create() { if (provider === 'fixed') data.ip = ip; else if (provider === 'network-interface') data.ifname = ifname; - let error, result; + let result; try { result = await fetcher.post(`${origin}/api/v1/network/ipv6_config`, data, { access_token: accessToken }); } catch (e) { - error = e; + return [e]; } - if (error || result.status !== 200) return [error || result]; + if (result.status !== 200) return [result]; return [null]; }, async getIpv6() { - let error, result; + let result; try { result = await fetcher.get(`${origin}/api/v1/network/ipv6`, { access_token: accessToken }); } catch (e) { - error = e; + return [e]; } - if (error || result.status !== 200) return [error || result]; + if (result.status !== 200) return [result]; return [null, result.body.ip]; }, async getDynDnsConfig() { - let error, result; + let result; try { result = await fetcher.get(`${origin}/api/v1/network/dynamic_dns`, { access_token: accessToken }); } catch (e) { - error = e; + return [e]; } - if (error || result.status !== 200) return [error || result]; + if (result.status !== 200) return [result]; return [null, result.body]; }, async setDynDnsConfig(enabled) { - let error, result; + let result; try { result = await fetcher.post(`${origin}/api/v1/network/dynamic_dns`, { enabled }, { access_token: accessToken }); } catch (e) { - error = e; + return [e]; } - if (error || result.status !== 200) return [error || result]; + if (result.status !== 200) return [result]; return [null]; }, async getBlocklist() { - let error, result; + let result; try { result = await fetcher.get(`${origin}/api/v1/network/blocklist`, { access_token: accessToken }); } catch (e) { - error = e; + return [e]; } - if (error || result.status !== 200) return [error || result]; + if (result.status !== 200) return [result]; return [null, result.body.blocklist]; }, async setBlocklist(blocklist) { - let error, result; + let result; try { result = await fetcher.post(`${origin}/api/v1/network/blocklist`, { blocklist }, { access_token: accessToken }); } catch (e) { - error = e; + return [e]; } - if (error || result.status !== 200) return [error || result]; + if (result.status !== 200) return [result]; return [null]; }, async getTrustedIps() { - let error, result; + let result; try { result = await fetcher.get(`${origin}/api/v1/reverseproxy/trusted_ips`, { access_token: accessToken }); } catch (e) { - error = e; + return [e]; } - if (error || result.status !== 200) return [error || result]; + if (result.status !== 200) return [result]; return [null, result.body.trustedIps]; }, async setTrustedIps(trustedIps) { - let error, result; + let result; try { result = await fetcher.post(`${origin}/api/v1/reverseproxy/trusted_ips`, { trustedIps }, { access_token: accessToken }); } catch (e) { - error = e; + return [e]; } - if (error || result.status !== 200) return [error || result]; + if (result.status !== 200) return [result]; return [null]; }, }; diff --git a/dashboard/src/models/UsersModel.js b/dashboard/src/models/UsersModel.js index d5b4a164a..94aa769a4 100644 --- a/dashboard/src/models/UsersModel.js +++ b/dashboard/src/models/UsersModel.js @@ -13,14 +13,14 @@ function create() { let users = []; while (true) { - let error, result; + let result; try { result = await fetcher.get(`${origin}/api/v1/users`, { page, per_page: perPage, access_token: accessToken }); } catch (e) { - error = e; + return [e]; } - if (error || result.status !== 200) return [error || result]; + if (result.status !== 200) return [result]; users = users.concat(result.body.users); @@ -31,6 +31,17 @@ function create() { return [null, users]; }, + async remove(id) { + let result; + try { + result = await fetcher.del(`${origin}/api/v1/users/${id}`, { access_token: accessToken }); + } catch (e) { + return [e]; + } + + if (result.status !== 204) return [result]; + return [null]; + }, }; } diff --git a/dashboard/src/views/UsersView.vue b/dashboard/src/views/UsersView.vue index 7d042a608..29e817f40 100644 --- a/dashboard/src/views/UsersView.vue +++ b/dashboard/src/views/UsersView.vue @@ -134,6 +134,23 @@ async function onRemoveGroup(group) { await refreshGroups(); } +async function onRemoveUser(user) { + const yes = await inputDialog.value.confirm({ + title: t('users.deleteUserDialog.title', { username: (user.username || user.email) }), + message: t('users.deleteUserDialog.description'), + confirmStyle: 'danger', + confirmLabel: t('users.deleteUserDialog.deleteAction'), + rejectLabel: t('main.dialog.cancel') + }); + + if (!yes) return; + + const [error] = await usersModel.remove(user.id); + if (error) console.error(error); + + await refreshUsers(); +} + onMounted(async () => { const [error, result] = await profileModel.get(); if (error) return console.error(error); @@ -193,7 +210,7 @@ onMounted(async () => {