diff --git a/dashboard/src/components/AppInstallDialog.vue b/dashboard/src/components/AppInstallDialog.vue index db43e837e..d420cca2c 100644 --- a/dashboard/src/components/AppInstallDialog.vue +++ b/dashboard/src/components/AppInstallDialog.vue @@ -123,10 +123,11 @@ function onClose() { onMounted(async () => { domains.value = await domainsModel.list(); - const config = await dashboardModel.getConfig(); + const [error, result] = await dashboardModel.getConfig(); + if (error) return console.error(error); // preselect with dashboard domain - domain.value = domains.value.find(d => d.domain === config.adminDomain) || domains.value[0]; + domain.value = domains.value.find(d => d.domain === result.adminDomain) || domains.value[0]; }); defineExpose({ diff --git a/dashboard/src/components/ExposedLdap.vue b/dashboard/src/components/ExposedLdap.vue index 8985b6b6e..b2f24a3e9 100644 --- a/dashboard/src/components/ExposedLdap.vue +++ b/dashboard/src/components/ExposedLdap.vue @@ -55,12 +55,13 @@ async function onSubmit() { onMounted(async () => { const domains = await domainsModel.list(); - const config = await dashboardModel.getConfig(); + let [error, result] = await dashboardModel.getConfig(); + if (error) return console.error(error); - ldapUrl.value = 'ldaps://' + config.adminFqdn + ':636'; - adminDomain.value = domains.find(d => d.domain === config.adminDomain) || domains[0]; + ldapUrl.value = 'ldaps://' + result.adminFqdn + ':636'; + adminDomain.value = domains.find(d => d.domain === result.adminDomain) || domains[0]; - const [error, result] = await userDirectoryModel.getExposedLdapConfig(); + [error, result] = await userDirectoryModel.getExposedLdapConfig(); if (error) return console.error(error); enabled.value = result.enabled; diff --git a/dashboard/src/components/OpenIdClients.vue b/dashboard/src/components/OpenIdClients.vue index f857b83e2..9c0a215f1 100644 --- a/dashboard/src/components/OpenIdClients.vue +++ b/dashboard/src/components/OpenIdClients.vue @@ -109,8 +109,10 @@ function onCopyToClipboard(value) { } onMounted(async () => { - const config = await dashboardModel.getConfig(); - adminFqdn.value = config.adminFqdn; + const [error, result] = await dashboardModel.getConfig(); + if (error) return console.error(error); + + adminFqdn.value = result.adminFqdn; await refresh(); }); diff --git a/dashboard/src/components/SystemUpdate.vue b/dashboard/src/components/SystemUpdate.vue index 4a121b8f1..d3fc47992 100644 --- a/dashboard/src/components/SystemUpdate.vue +++ b/dashboard/src/components/SystemUpdate.vue @@ -1,21 +1,210 @@ + + + + {{ configureError }} + + + + + + + {{ $t('settings.updateScheduleDialog.days') }}: + {{ $t('settings.updateScheduleDialog.hours') }}: + + + + + + + {{ $t('settings.updates.version') }} + v{{ version }} ({{ ubuntuVersion }}) + + + + + {{ $t('settings.updates.schedule') }} + + {{ prettyAutoUpdateSchedule(currentPattern) }} + {{ $t('settings.updates.disabled') }} + + + + + + {{ message }} + + {{ $t('settings.updates.stopUpdateAction') }} + {{ $t('settings.updates.checkForUpdatesAction') }} + {{ $t('settings.updates.updateAvailableAction') }} + diff --git a/dashboard/src/models/DashboardModel.js b/dashboard/src/models/DashboardModel.js index 33fed29bf..d33ef63ae 100644 --- a/dashboard/src/models/DashboardModel.js +++ b/dashboard/src/models/DashboardModel.js @@ -3,7 +3,6 @@ import { fetcher } from 'pankow'; function create(origin, accessToken) { return { - name: 'DashboardModel', async getConfig() { let error, result; try { @@ -12,12 +11,8 @@ function create(origin, accessToken) { error = e; } - if (error || result.status !== 200) { - console.error('Failed to get dashboard config.', error || result.status); - return {}; - } - - return result.body; + if (error || result.status !== 200) return [error || result]; + return [null, result.body]; }, }; } diff --git a/dashboard/src/models/UpdaterModel.js b/dashboard/src/models/UpdaterModel.js new file mode 100644 index 000000000..f37490f08 --- /dev/null +++ b/dashboard/src/models/UpdaterModel.js @@ -0,0 +1,55 @@ + +import { fetcher } from 'pankow'; + +function create(origin, accessToken) { + return { + async info() { + let error, result; + try { + result = await fetcher.get(`${origin}/api/v1/updater/updates`, { access_token: accessToken }); + } catch (e) { + error = e; + } + + if (error || result.status !== 200) return [error || result]; + return [null, result.body.update]; + }, + async getAutoupdatePattern() { + let error, result; + try { + result = await fetcher.get(`${origin}/api/v1/updater/autoupdate_pattern`, { access_token: accessToken }); + } catch (e) { + error = e; + } + + if (error || result.status !== 200) return [error || result]; + return [null, result.body]; + }, + async setAutoupdatePattern(pattern) { + let error, result; + try { + result = await fetcher.post(`${origin}/api/v1/updater/autoupdate_pattern`, { pattern }, { access_token: accessToken }); + } catch (e) { + error = e; + } + + if (error || result.status !== 200) return [error || result]; + return [null]; + }, + async check() { + let error, result; + try { + result = await fetcher.post(`${origin}/api/v1/updater/check_for_updates`, {}, { access_token: accessToken }); + } catch (e) { + error = e; + } + + if (error || result.status !== 200) return [error || result]; + return [null]; + }, + }; +} + +export default { + create, +};
{{ configureError }}
{{ message }}