\n\n\n\n","/*\n * @copyright Copyright (c) 2018 John Molakvoæ \n *\n * @author John Molakvoæ \n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n */\n\nimport axios from 'axios'\nimport confirmPassword from 'nextcloud-password-confirmation' \n\nconst requestToken = document.getElementsByTagName('head')[0].getAttribute('data-requesttoken');\nconst tokenHeaders = { headers: { requesttoken: requestToken } };\n\nconst sanitize = function(url) {\n\treturn url.replace(/\\/$/, ''); // Remove last url slash\n};\n\nexport default {\n\n\t/**\n\t * This Promise is used to chain a request that require an admin password confirmation\n\t * Since chaining Promise have a very precise behavior concerning catch and then,\n\t * you'll need to be careful when using it.\n\t * e.g\n\t * // store\n\t * \taction(context) {\n\t *\t\treturn api.requireAdmin().then((response) => {\n\t *\t\t\treturn api.get('url')\n\t *\t\t\t\t.then((response) => {API success})\n\t *\t\t\t\t.catch((error) => {API failure});\n\t *\t\t}).catch((error) => {requireAdmin failure});\n\t *\t}\n\t * // vue\n\t *\tthis.$store.dispatch('action').then(() => {always executed})\n\t *\n\t * Since Promise.then().catch().then() will always execute the last then\n\t * this.$store.dispatch('action').then will always be executed\n\t * \n\t * If you want requireAdmin failure to also catch the API request failure\n\t * you will need to throw a new error in the api.get.catch()\n\t * \n\t * e.g\n\t *\tapi.requireAdmin().then((response) => {\n\t *\t\tapi.get('url')\n\t *\t\t\t.then((response) => {API success})\n\t *\t\t\t.catch((error) => {throw error;});\n\t *\t}).catch((error) => {requireAdmin OR API failure});\n\t * \n\t * @returns {Promise}\n\t */\n\trequireAdmin() {\n\t\treturn confirmPassword();\n\t},\n\tget(url) {\n\t\treturn axios.get(sanitize(url), tokenHeaders)\n\t\t\t.then((response) => Promise.resolve(response))\n\t\t\t.catch((error) => Promise.reject(error));\n\t},\n\tpost(url, data) {\n\t\treturn axios.post(sanitize(url), data, tokenHeaders)\n\t\t\t.then((response) => Promise.resolve(response))\n\t\t\t.catch((error) => Promise.reject(error));\n\t},\n\tpatch(url, data) {\n\t\treturn axios.patch(sanitize(url), data, tokenHeaders)\n\t\t\t.then((response) => Promise.resolve(response))\n\t\t\t.catch((error) => Promise.reject(error));\n\t},\n\tput(url, data) {\n\t\treturn axios.put(sanitize(url), data, tokenHeaders)\n\t\t\t.then((response) => Promise.resolve(response))\n\t\t\t.catch((error) => Promise.reject(error));\n\t},\n\tdelete(url, data) {\n\t\treturn axios.delete(sanitize(url), { data: data, headers: tokenHeaders.headers })\n\t\t\t.then((response) => Promise.resolve(response))\n\t\t\t.catch((error) => Promise.reject(error));\n\t}\n}\n","\n\n\n\t
{{ t('settings', 'This app has no minimum Nextcloud version assigned. This will be an error in the future.') }}
\n\t\t\t
{{ t('settings', 'This app has no maximum Nextcloud version assigned. This will be an error in the future.') }}
\n\t\t\t
\n\t\t\t\t{{ t('settings', 'This app cannot be installed because the following dependencies are not fulfilled:') }}\n\t\t\t\t
\n\t\t\t\t\t
{{ dep }}
\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\n\t\t\n\t
\n\n\n\n","import { render, staticRenderFns } from \"./appDetails.vue?vue&type=template&id=273c8e71&\"\nimport script from \"./appDetails.vue?vue&type=script&lang=js&\"\nexport * from \"./appDetails.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/admin/DockerTest/server/settings/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!module.hot.data) {\n api.createRecord('273c8e71', component.options)\n } else {\n api.reload('273c8e71', component.options)\n }\n module.hot.accept(\"./appDetails.vue?vue&type=template&id=273c8e71&\", function () {\n api.rerender('273c8e71', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"src/components/appDetails.vue\"\nexport default component.exports","\n\n\n\t
\n\t\t\n\t\t
\n\t\t\t\n\t\t
\n\t\t
\n\t\t\t\n\t\t
\n\t
\n\n\n\n\n","import { render, staticRenderFns } from \"./Apps.vue?vue&type=template&id=33a216a8&\"\nimport script from \"./Apps.vue?vue&type=script&lang=js&\"\nexport * from \"./Apps.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/admin/DockerTest/server/settings/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!module.hot.data) {\n api.createRecord('33a216a8', component.options)\n } else {\n api.reload('33a216a8', component.options)\n }\n module.hot.accept(\"./Apps.vue?vue&type=template&id=33a216a8&\", function () {\n api.rerender('33a216a8', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"src/views/Apps.vue\"\nexport default component.exports","/*\n * @copyright Copyright (c) 2018 John Molakvoæ \n *\n * @author John Molakvoæ \n * @author Julius Härtl \n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n */\n\nimport Vue from 'vue';\nimport Router from 'vue-router';\nimport Users from './views/Users';\nimport Apps from './views/Apps';\n\nVue.use(Router);\n\n/*\n * This is the list of routes where the vuejs app will\n * take over php to provide data\n * You need to forward the php routing (routes.php) to\n * the settings-vue template, where the vue-router will\n * ensure the proper route.\n * ⚠️ Routes needs to match the php routes.\n */\n\nexport default new Router({\n\tmode: 'history',\n\t// if index.php is in the url AND we got this far, then it's working:\n\t// let's keep using index.php in the url\n\tbase: OC.generateUrl(''),\n\tlinkActiveClass: 'active',\n\troutes: [\n\t\t{\n\t\t\tpath: '/:index(index.php/)?settings/users',\n\t\t\tcomponent: Users,\n\t\t\tprops: true,\n\t\t\tname: 'users',\n\t\t\tchildren: [\n\t\t\t\t{\n\t\t\t\t\tpath: ':selectedGroup(.*)',\n\t\t\t\t\tname: 'group',\n\t\t\t\t\tcomponent: Users\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\tpath: '/:index(index.php/)?settings/apps',\n\t\t\tcomponent: Apps,\n\t\t\tprops: true,\n\t\t\tname: 'apps',\n\t\t\tchildren: [\n\t\t\t\t{\n\t\t\t\t\tpath: ':category',\n\t\t\t\t\tname: 'apps-category',\n\t\t\t\t\tcomponent: Apps,\n\t\t\t\t\tchildren: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpath: ':id',\n\t\t\t\t\t\t\tname: 'apps-details',\n\t\t\t\t\t\t\tcomponent: Apps\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t]\n});\n","/**\n * vuex v3.0.1\n * (c) 2017 Evan You\n * @license MIT\n */\nvar applyMixin = function (Vue) {\n var version = Number(Vue.version.split('.')[0]);\n\n if (version >= 2) {\n Vue.mixin({ beforeCreate: vuexInit });\n } else {\n // override init and inject vuex init procedure\n // for 1.x backwards compatibility.\n var _init = Vue.prototype._init;\n Vue.prototype._init = function (options) {\n if ( options === void 0 ) options = {};\n\n options.init = options.init\n ? [vuexInit].concat(options.init)\n : vuexInit;\n _init.call(this, options);\n };\n }\n\n /**\n * Vuex init hook, injected into each instances init hooks list.\n */\n\n function vuexInit () {\n var options = this.$options;\n // store injection\n if (options.store) {\n this.$store = typeof options.store === 'function'\n ? options.store()\n : options.store;\n } else if (options.parent && options.parent.$store) {\n this.$store = options.parent.$store;\n }\n }\n};\n\nvar devtoolHook =\n typeof window !== 'undefined' &&\n window.__VUE_DEVTOOLS_GLOBAL_HOOK__;\n\nfunction devtoolPlugin (store) {\n if (!devtoolHook) { return }\n\n store._devtoolHook = devtoolHook;\n\n devtoolHook.emit('vuex:init', store);\n\n devtoolHook.on('vuex:travel-to-state', function (targetState) {\n store.replaceState(targetState);\n });\n\n store.subscribe(function (mutation, state) {\n devtoolHook.emit('vuex:mutation', mutation, state);\n });\n}\n\n/**\n * Get the first item that pass the test\n * by second argument function\n *\n * @param {Array} list\n * @param {Function} f\n * @return {*}\n */\n/**\n * Deep copy the given object considering circular structure.\n * This function caches all nested objects and its copies.\n * If it detects circular structure, use cached copy to avoid infinite loop.\n *\n * @param {*} obj\n * @param {Array