From 09b8fadc70f9f18214f2fa46ab1498e3b43019d6 Mon Sep 17 00:00:00 2001 From: axolotle Date: Mon, 22 Mar 2021 13:16:18 +0100 Subject: [PATCH 01/18] update permission add/remove uris --- app/src/views/group/GroupList.vue | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/views/group/GroupList.vue b/app/src/views/group/GroupList.vue index f441eec9..ed177b81 100644 --- a/app/src/views/group/GroupList.vue +++ b/app/src/views/group/GroupList.vue @@ -216,11 +216,11 @@ export default { }, onPermissionChanged ({ item, index, name, groupType, action }) { - const uri = 'users/permissions/' + item - const data = { [action]: name } + // const uri = 'users/permissions/' + item + // const data = { [action]: name } const from = action === 'add' ? 'availablePermissions' : 'permissions' const to = action === 'add' ? 'permissions' : 'availablePermissions' - api.put(uri, data).then(() => { + api.put(`users/permissions/${item}/${action}/${name}`).then(() => { this[groupType + 'Groups'][name][from].splice(index, 1) this[groupType + 'Groups'][name][to].push(item) }) From 4592a7d79d93c0f80e726ca83aa1fad79ac9cf7e Mon Sep 17 00:00:00 2001 From: axolotle Date: Mon, 22 Mar 2021 13:50:04 +0100 Subject: [PATCH 02/18] update domains api routes --- app/src/views/domain/DomainCert.vue | 8 +++----- app/src/views/domain/DomainInfo.vue | 3 +-- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/app/src/views/domain/DomainCert.vue b/app/src/views/domain/DomainCert.vue index 9b8bea88..cb3d248a 100644 --- a/app/src/views/domain/DomainCert.vue +++ b/app/src/views/domain/DomainCert.vue @@ -84,7 +84,7 @@ export default { data () { return { queries: [ - ['GET', `domains/cert-status/${this.name}?full`] + ['GET', `domains/${this.name}/cert?full`] ], cert: undefined, actionsEnabled: undefined @@ -147,13 +147,11 @@ export default { const confirmed = await this.$askConfirmation(this.$i18n.t(`confirm_cert_${action}`)) if (!confirmed) return - let uri = 'domains/cert-install/' + this.name + let uri = `domains/${this.name}/cert` if (action === 'regen_selfsigned') uri += '?self_signed' else if (action === 'manual_renew_LE') uri += '?force' else if (action === 'revert_to_selfsigned') uri += '?self_signed&force' - // FIXME trigger loading ? while posting ? while getting ? - // this.$refs.view.fallback_loading = true - api.post(uri).then(this.$refs.view.fetchQueries) + api.put(uri).then(this.$refs.view.fetchQueries) } } } diff --git a/app/src/views/domain/DomainInfo.vue b/app/src/views/domain/DomainInfo.vue index d3e959a6..64a76b47 100644 --- a/app/src/views/domain/DomainInfo.vue +++ b/app/src/views/domain/DomainInfo.vue @@ -94,8 +94,7 @@ export default { if (!confirmed) return api.put( - { uri: 'domains/main', storeKey: 'main_domain' }, - { new_main_domain: this.name } + { uri: `domains/${this.name}/main`, storeKey: 'main_domain' } ).then(() => { // FIXME Have to commit by hand here since the response is empty (should return the given name) this.$store.commit('UPDATE_MAIN_DOMAIN', this.name) From 89086a8003b6736ce7a8a99aeed8f8c9af938c8e Mon Sep 17 00:00:00 2001 From: axolotle Date: Mon, 22 Mar 2021 16:34:08 +0100 Subject: [PATCH 03/18] update apps api routes --- app/src/views/app/AppActions.vue | 2 +- app/src/views/app/AppCatalog.vue | 2 +- app/src/views/app/AppConfigPanel.vue | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/views/app/AppActions.vue b/app/src/views/app/AppActions.vue index 729f0835..51a64e5f 100644 --- a/app/src/views/app/AppActions.vue +++ b/app/src/views/app/AppActions.vue @@ -100,7 +100,7 @@ export default { // FIXME api expects at least one argument ?! (fake one given with { dontmindthis } ) const args = objectToParams(action.form ? formatFormData(action.form) : { dontmindthis: undefined }) - api.put(`apps/${this.id}/actions/${action.id}`, { args }).then(response => { + api.put(`apps/${this.id}/actions/${action.id}`, { args }).then(() => { this.$refs.view.fetchQueries() }).catch(err => { if (err.name !== 'APIBadRequestError') throw err diff --git a/app/src/views/app/AppCatalog.vue b/app/src/views/app/AppCatalog.vue index 227c035d..2f495942 100644 --- a/app/src/views/app/AppCatalog.vue +++ b/app/src/views/app/AppCatalog.vue @@ -164,7 +164,7 @@ export default { data () { return { queries: [ - ['GET', 'appscatalog?full&with_categories'] + ['GET', 'apps/catalog?full&with_categories'] ], // Data diff --git a/app/src/views/app/AppConfigPanel.vue b/app/src/views/app/AppConfigPanel.vue index 3edc1672..eac466b0 100644 --- a/app/src/views/app/AppConfigPanel.vue +++ b/app/src/views/app/AppConfigPanel.vue @@ -103,7 +103,7 @@ export default { applyConfig (id_) { const args = objectToParams(formatFormData(this.forms[id_])) - api.post(`apps/${this.id}/config`, { args }).then(response => { + api.put(`apps/${this.id}/config`, { args }).then(response => { console.log('SUCCESS', response) }).catch(err => { if (err.name !== 'APIBadRequestError') throw err From 06eb2165eab3b9afe27b6a1f9ff476f4afaa6ffc Mon Sep 17 00:00:00 2001 From: axolotle Date: Mon, 22 Mar 2021 17:00:13 +0100 Subject: [PATCH 04/18] update backups api routes --- app/src/views/backup/BackupCreate.vue | 2 +- app/src/views/backup/BackupInfo.vue | 8 ++++---- app/src/views/backup/BackupList.vue | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/src/views/backup/BackupCreate.vue b/app/src/views/backup/BackupCreate.vue index 7d3dd5d3..1088bc83 100644 --- a/app/src/views/backup/BackupCreate.vue +++ b/app/src/views/backup/BackupCreate.vue @@ -164,7 +164,7 @@ export default { } } - api.post('backup', data).then(response => { + api.post('backups', data).then(response => { this.$router.push({ name: 'backup-list', params: { id: this.id } }) }) } diff --git a/app/src/views/backup/BackupInfo.vue b/app/src/views/backup/BackupInfo.vue index 3529e69d..c472357d 100644 --- a/app/src/views/backup/BackupInfo.vue +++ b/app/src/views/backup/BackupInfo.vue @@ -132,7 +132,7 @@ export default { data () { return { queries: [ - ['GET', `backup/archives/${this.name}?with_details`] + ['GET', `backups/${this.name}?with_details`] ], selected: [], error: '', @@ -210,7 +210,7 @@ export default { } } - api.post('backup/restore/' + this.name, data).then(response => { + api.put(`backups/${this.name}/restore`, data).then(response => { this.isValid = null }).catch(err => { if (err.name !== 'APIBadRequestError') throw err @@ -223,14 +223,14 @@ export default { const confirmed = await this.$askConfirmation(this.$i18n.t('confirm_delete', { name: this.name })) if (!confirmed) return - api.delete('backup/archives/' + this.name).then(() => { + api.delete('backups/' + this.name).then(() => { this.$router.push({ name: 'backup-list', params: { id: this.id } }) }) }, downloadBackup () { const host = this.$store.getters.host - window.open(`https://${host}/yunohost/api/backup/download/${this.name}`, '_blank') + window.open(`https://${host}/yunohost/api/backups/${this.name}/download`, '_blank') } }, diff --git a/app/src/views/backup/BackupList.vue b/app/src/views/backup/BackupList.vue index b15aa290..467a75a3 100644 --- a/app/src/views/backup/BackupList.vue +++ b/app/src/views/backup/BackupList.vue @@ -45,7 +45,7 @@ export default { data () { return { queries: [ - ['GET', 'backup/archives?with_info'] + ['GET', 'backups?with_info'] ], archives: undefined } From 9657fc410e042ef53f6958551448bcf525b7b953 Mon Sep 17 00:00:00 2001 From: axolotle Date: Mon, 22 Mar 2021 18:41:42 +0100 Subject: [PATCH 05/18] update groups api routes --- app/src/views/group/GroupList.vue | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/app/src/views/group/GroupList.vue b/app/src/views/group/GroupList.vue index ed177b81..da1606ab 100644 --- a/app/src/views/group/GroupList.vue +++ b/app/src/views/group/GroupList.vue @@ -227,11 +227,9 @@ export default { }, onUserChanged ({ item, index, name, action }) { - const uri = 'users/groups/' + name - const data = { [action]: item } const from = action === 'add' ? 'availableMembers' : 'members' const to = action === 'add' ? 'members' : 'availableMembers' - api.put(uri, data).then(() => { + api.put(`users/groups/${name}/${action}/${item}`).then(() => { this.normalGroups[name][from].splice(index, 1) this.normalGroups[name][to].push(item) }) From e94d43566ad4805a89247e03817f56580c654f67 Mon Sep 17 00:00:00 2001 From: axolotle Date: Mon, 22 Mar 2021 18:55:05 +0100 Subject: [PATCH 06/18] update services api routes --- app/src/views/service/ServiceInfo.vue | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/app/src/views/service/ServiceInfo.vue b/app/src/views/service/ServiceInfo.vue index 1e8d7f0f..273307bd 100644 --- a/app/src/views/service/ServiceInfo.vue +++ b/app/src/views/service/ServiceInfo.vue @@ -120,13 +120,7 @@ export default { ) if (!confirmed) return - if (!['start', 'restart', 'stop'].includes(action)) return - const method = action === 'stop' ? 'delete' : 'put' - const uri = action === 'restart' - ? `services/${this.name}/restart` - : 'services/' + this.name - - api[method](uri).then(this.$refs.view.fetchQueries) + api.put(`services/${this.name}/${action}`).then(this.$refs.view.fetchQueries) }, shareLogs () { From 6438ea541477d5cabe37c2b6635cb6dd75a165ff Mon Sep 17 00:00:00 2001 From: axolotle Date: Mon, 22 Mar 2021 20:30:04 +0100 Subject: [PATCH 07/18] update firewall api routes --- app/src/views/tool/ToolFirewall.vue | 42 +++++++++++------------------ 1 file changed, 16 insertions(+), 26 deletions(-) diff --git a/app/src/views/tool/ToolFirewall.vue b/app/src/views/tool/ToolFirewall.vue index 2ba645c2..7829a7ab 100644 --- a/app/src/views/tool/ToolFirewall.vue +++ b/app/src/views/tool/ToolFirewall.vue @@ -115,8 +115,8 @@ export default { // Ports form data actionChoices: [ - { value: 'open', text: this.$i18n.t('open') }, - { value: 'close', text: this.$i18n.t('close') } + { value: 'allow', text: this.$i18n.t('open') }, + { value: 'disallow', text: this.$i18n.t('close') } ], connectionChoices: [ { value: 'ipv4', text: this.$i18n.t('ipv4') }, @@ -128,7 +128,7 @@ export default { { value: 'Both', text: this.$i18n.t('both') } ], form: { - action: 'open', + action: 'allow', port: undefined, connection: 'ipv4', protocol: 'TCP' @@ -176,27 +176,17 @@ export default { this.upnpEnabled = data.uPnP.enabled }, - togglePort ({ action, port, protocol, connection }) { - return new Promise((resolve, reject) => { - this.$askConfirmation( - this.$i18n.t('confirm_firewall_' + action, { port, protocol, connection }) - ).then(confirmed => { - if (confirmed) { - const method = action === 'open' ? 'post' : 'delete' - api[method]( - `/firewall/port?${connection}_only`, - { port, protocol }, - { wait: false } - ).then(() => { - resolve(confirmed) - }).catch(error => { - reject(error) - }) - } else { - resolve(confirmed) - } - }) - }) + async togglePort ({ action, port, protocol, connection }) { + const confirmed = await this.$askConfirmation( + this.$i18n.t('confirm_firewall_' + action, { port, protocol, connection }) + ) + if (!confirmed) { + return Promise.resolve(confirmed) + } + return api.put( + `firewall/${protocol}/${action}/${port}?${connection}_only`, + { wait: false } + ).then(() => confirmed) }, async toggleUpnp (value) { @@ -204,7 +194,7 @@ export default { const confirmed = await this.$askConfirmation(this.$i18n.t('confirm_upnp_' + action)) if (!confirmed) return - api.get('firewall/upnp?action=' + action, null, { websocket: true, wait: true }).then(() => { + api.put('firewall/upnp/' + action).then(() => { // FIXME Couldn't test when it works. this.$refs.view.fetchQueries() }).catch(err => { @@ -215,7 +205,7 @@ export default { onTablePortToggling (port, protocol, connection, index, value) { this.$set(this.protocols[protocol][index], connection, value) - const action = value ? 'open' : 'close' + const action = value ? 'allow' : 'disallow' this.togglePort({ action, port, protocol, connection }).then(toggled => { // Revert change on cancel if (!toggled) { From 227e359e42ab7c85d4cc50b983486e9a62a062ac Mon Sep 17 00:00:00 2001 From: axolotle Date: Mon, 22 Mar 2021 22:07:03 +0100 Subject: [PATCH 08/18] update upgrade api routes --- app/src/views/update/SystemUpdate.vue | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/app/src/views/update/SystemUpdate.vue b/app/src/views/update/SystemUpdate.vue index 37c717ce..282e64a6 100644 --- a/app/src/views/update/SystemUpdate.vue +++ b/app/src/views/update/SystemUpdate.vue @@ -74,7 +74,7 @@ export default { return { queries: [ ['GET', 'migrations?pending'], - ['PUT', 'update'] + ['PUT', 'update/all'] ], // API data migrationsNotDone: undefined, @@ -95,10 +95,7 @@ export default { const confirmed = await this.$askConfirmation(confirmMsg) if (!confirmed) return - const uri = type === 'specific_app' - ? 'upgrade/apps?app=' + id - : 'upgrade?' + type - + const uri = id !== null ? `apps/${id}/upgrade` : 'upgrade/' + type api.put(uri).then(() => { this.$router.push({ name: 'tool-logs' }) }) From ebda02a777a82bd1c474b0dc3b3cf2fef23e29e3 Mon Sep 17 00:00:00 2001 From: axolotle Date: Mon, 22 Mar 2021 22:32:34 +0100 Subject: [PATCH 09/18] update migrations api routes --- app/src/views/tool/ToolMigrations.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/views/tool/ToolMigrations.vue b/app/src/views/tool/ToolMigrations.vue index 400b3627..83d77550 100644 --- a/app/src/views/tool/ToolMigrations.vue +++ b/app/src/views/tool/ToolMigrations.vue @@ -121,7 +121,7 @@ export default { } // Check that every migration's disclaimer has been checked. if (Object.values(this.checked).every(value => value === true)) { - api.post('migrations/run', { accept_disclaimer: true }).then(() => { + api.put('migrations', { accept_disclaimer: true }).then(() => { this.$refs.view.fetchQueries() }) } @@ -131,7 +131,7 @@ export default { const confirmed = await this.$askConfirmation(this.$i18n.t('confirm_migrations_skip')) if (!confirmed) return - api.post('/migrations/run', { skip: true, targets: id }).then(() => { + api.put('migrations/' + id, { skip: '' }).then(() => { this.$refs.view.fetchQueries() }) } From 88b488857c6276c047239fe64d4f67529d37bfc9 Mon Sep 17 00:00:00 2001 From: axolotle Date: Mon, 22 Mar 2021 22:37:59 +0100 Subject: [PATCH 10/18] update logs api routes --- app/src/views/tool/ToolLog.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/views/tool/ToolLog.vue b/app/src/views/tool/ToolLog.vue index 6653d4d9..e7e3ed00 100644 --- a/app/src/views/tool/ToolLog.vue +++ b/app/src/views/tool/ToolLog.vue @@ -127,7 +127,7 @@ export default { }, shareLogs () { - api.get(`logs/${this.name}?share`, null, { websocket: true }).then(({ url }) => { + api.get(`logs/${this.name}/share`, null, { websocket: true }).then(({ url }) => { window.open(url, '_blank') }) } From 849a13853ea06e451196331cf952e5a37680220f Mon Sep 17 00:00:00 2001 From: axolotle Date: Mon, 22 Mar 2021 22:38:38 +0100 Subject: [PATCH 11/18] fix adminpw api route --- app/src/views/tool/ToolAdminpw.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/views/tool/ToolAdminpw.vue b/app/src/views/tool/ToolAdminpw.vue index d8f25c3d..538846a0 100644 --- a/app/src/views/tool/ToolAdminpw.vue +++ b/app/src/views/tool/ToolAdminpw.vue @@ -45,7 +45,7 @@ export default { api.fetchAll( [['POST', 'login', { password: currentPassword }, { websocket: false }], - ['PUT', 'admisnpw', { new_password: password }]], + ['PUT', 'adminpw', { new_password: password }]], { wait: true } ).then(() => { this.$store.dispatch('DISCONNECT') From 3ef1f049e3bd1a903e4df74af12f8889006ef2e2 Mon Sep 17 00:00:00 2001 From: axolotle Date: Mon, 22 Mar 2021 23:42:00 +0100 Subject: [PATCH 12/18] update diagnosis api routes --- app/src/views/diagnosis/Diagnosis.vue | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/app/src/views/diagnosis/Diagnosis.vue b/app/src/views/diagnosis/Diagnosis.vue index f5df4967..b3708e50 100644 --- a/app/src/views/diagnosis/Diagnosis.vue +++ b/app/src/views/diagnosis/Diagnosis.vue @@ -64,13 +64,13 @@
{{ $t('unignore') }} {{ $t('ignore') }} @@ -115,8 +115,8 @@ export default { data () { return { queries: [ - ['POST', 'diagnosis/run?except_if_never_ran_yet'], - ['GET', 'diagnosis/show?full'] + ['PUT', 'diagnosis/run?except_if_never_ran_yet'], + ['GET', 'diagnosis?full'] ], reports: undefined } @@ -177,16 +177,15 @@ export default { api.post('diagnosis/run' + param, data).then(this.$refs.view.fetchQueries) }, - toggleIgnoreIssue (ignore, report, item) { - const key = (ignore ? 'add' : 'remove') + '_filter' + toggleIgnoreIssue (action, report, item) { const filterArgs = Object.entries(item.meta).reduce((filterArgs, entries) => { filterArgs.push(entries.join('=')) return filterArgs }, [report.id]) - api.post('diagnosis/ignore', { [key]: filterArgs }).then(() => { - item.ignored = ignore - if (ignore) { + api.put('diagnosis/' + action, { filter: filterArgs }).then(() => { + item.ignored = action === 'ignore' + if (item.ignored) { report[item.status.toLowerCase() + 's']-- } else { report.ignoreds-- From 5c937a53523d3d865862903a64bd4b53977a8461 Mon Sep 17 00:00:00 2001 From: axolotle Date: Mon, 22 Mar 2021 23:49:54 +0100 Subject: [PATCH 13/18] fix allow/disallow firewall port i18n keys --- app/src/i18n/locales/en.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/i18n/locales/en.json b/app/src/i18n/locales/en.json index 71f20d8a..11052ad2 100644 --- a/app/src/i18n/locales/en.json +++ b/app/src/i18n/locales/en.json @@ -91,8 +91,8 @@ "confirm_app_default": "Are you sure you want to make this app default?", "confirm_change_maindomain": "Are you sure you want to change the main domain?", "confirm_delete": "Are you sure you want to delete {name}?", - "confirm_firewall_open": "Are you sure you want to open port {port} (protocol: {protocol}, connection: {connection})", - "confirm_firewall_close": "Are you sure you want to close port {port} (protocol: {protocol}, connection: {connection})", + "confirm_firewall_allow": "Are you sure you want to open port {port} (protocol: {protocol}, connection: {connection})", + "confirm_firewall_disallow": "Are you sure you want to close port {port} (protocol: {protocol}, connection: {connection})", "confirm_install_custom_app": "WARNING! Installing 3rd party applications may compromise the integrity and security of your system. You should probably NOT install it unless you know what you are doing. Are you willing to take that risk?", "confirm_install_domain_root": "Are you sure you want to install this application on '/'? You will not be able to install any other app on {domain}", "confirm_app_install": "Are you sure you want to install this application?", From e2cdaa10be280330ddcb86651d93ced0ecad0381 Mon Sep 17 00:00:00 2001 From: axolotle Date: Fri, 9 Apr 2021 21:32:00 +0200 Subject: [PATCH 14/18] moved objectToParams helper to api module to avoid 'store' import in a helper file --- app/src/api/api.js | 26 +++++++++++++++++++++++++- app/src/api/index.js | 2 +- app/src/helpers/commons.js | 28 ---------------------------- app/src/views/app/AppActions.vue | 3 +-- app/src/views/app/AppConfigPanel.vue | 3 +-- app/src/views/app/AppInstall.vue | 3 +-- app/src/views/tool/ToolLog.vue | 4 ++-- 7 files changed, 31 insertions(+), 38 deletions(-) diff --git a/app/src/api/api.js b/app/src/api/api.js index d199dccb..29cd73ba 100644 --- a/app/src/api/api.js +++ b/app/src/api/api.js @@ -5,7 +5,6 @@ import store from '@/store' import { openWebSocket, getResponseData, handleError } from './handlers' -import { objectToParams } from '@/helpers/commons' /** @@ -31,6 +30,31 @@ import { objectToParams } from '@/helpers/commons' */ +/** + * Converts an object literal into an `URLSearchParams` that can be turned into a + * query string or used as a body in a `fetch` call. + * + * @param {Object} obj - An object literal to convert. + * @param {Object} options + * @param {Boolean} [options.addLocale=false] - Option to append the locale to the query string. + * @return {URLSearchParams} + */ +export function objectToParams (obj, { addLocale = false } = {}) { + const urlParams = new URLSearchParams() + for (const [key, value] of Object.entries(obj)) { + if (Array.isArray(value)) { + value.forEach(v => urlParams.append(key, v)) + } else { + urlParams.append(key, value) + } + } + if (addLocale) { + urlParams.append('locale', store.getters.locale) + } + return urlParams +} + + export default { options: { credentials: 'include', diff --git a/app/src/api/index.js b/app/src/api/index.js index 4c919aa1..c3f1ae7f 100644 --- a/app/src/api/index.js +++ b/app/src/api/index.js @@ -1,2 +1,2 @@ -export { default } from './api' +export { default, objectToParams } from './api' export { handleError, registerGlobalErrorHandlers } from './handlers' diff --git a/app/src/helpers/commons.js b/app/src/helpers/commons.js index 7a94f386..b9510510 100644 --- a/app/src/helpers/commons.js +++ b/app/src/helpers/commons.js @@ -1,6 +1,3 @@ -import store from '@/store' - - /** * Allow to set a timeout on a `Promise` expected response. * The returned Promise will be rejected if the original Promise is not resolved or @@ -19,31 +16,6 @@ export function timeout (promise, delay) { } -/** - * Converts an object literal into an `URLSearchParams` that can be turned into a - * query string or used as a body in a `fetch` call. - * - * @param {Object} obj - An object literal to convert. - * @param {Object} options - * @param {Boolean} [options.addLocale=false] - Option to append the locale to the query string. - * @return {URLSearchParams} - */ -export function objectToParams (obj, { addLocale = false } = {}) { - const urlParams = new URLSearchParams() - for (const [key, value] of Object.entries(obj)) { - if (Array.isArray(value)) { - value.forEach(v => urlParams.append(key, v)) - } else { - urlParams.append(key, value) - } - } - if (addLocale) { - urlParams.append('locale', store.getters.locale) - } - return urlParams -} - - /** * Check if passed value is an object literal. * diff --git a/app/src/views/app/AppActions.vue b/app/src/views/app/AppActions.vue index 51a64e5f..117a1325 100644 --- a/app/src/views/app/AppActions.vue +++ b/app/src/views/app/AppActions.vue @@ -38,11 +38,10 @@