1
|
{"version":3,"file":"settings-vue-settings-admin-security.js?v=927483f39977fb726634","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/apps/settings/src/components/AdminTwoFactor.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/settings/src/components/AdminTwoFactor.vue","webpack://nextcloud/./apps/settings/src/components/AdminTwoFactor.vue?31b9","webpack://nextcloud/./apps/settings/src/components/AdminTwoFactor.vue?66cc","webpack:///nextcloud/apps/settings/src/components/AdminTwoFactor.vue?vue&type=template&id=63855edf&scoped=true&","webpack:///nextcloud/apps/settings/src/store/admin-security.js","webpack:///nextcloud/apps/settings/src/main-admin-security.js","webpack:///nextcloud/apps/settings/src/components/AdminTwoFactor.vue?vue&type=style&index=0&id=63855edf&scoped=true&lang=css&","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/amd define","webpack:///nextcloud/webpack/runtime/amd options","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AdminTwoFactor.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AdminTwoFactor.vue?vue&type=script&lang=js&\"","<template>\n\t<SettingsSection :title=\"t('settings', 'Two-Factor Authentication')\"\n\t\t:description=\"t('settings', 'Two-factor authentication can be enforced for all users and specific groups. If they do not have a two-factor provider configured, they will be unable to log into the system.')\"\n\t\t:doc-url=\"twoFactorAdminDoc\">\n\t\t<p v-if=\"loading\">\n\t\t\t<span class=\"icon-loading-small two-factor-loading\" />\n\t\t\t<span>{{ t('settings', 'Enforce two-factor authentication') }}</span>\n\t\t</p>\n\t\t<CheckboxRadioSwitch v-else\n\t\t\tid=\"two-factor-enforced\"\n\t\t\t:checked.sync=\"enforced\"\n\t\t\ttype=\"switch\">\n\t\t\t{{ t('settings', 'Enforce two-factor authentication') }}\n\t\t</CheckboxRadioSwitch>\n\t\t<template v-if=\"enforced\">\n\t\t\t<h3>{{ t('settings', 'Limit to groups') }}</h3>\n\t\t\t{{ t('settings', 'Enforcement of two-factor authentication can be set for certain groups only.') }}\n\t\t\t<p class=\"top-margin\">\n\t\t\t\t{{ t('settings', 'Two-factor authentication is enforced for all members of the following groups.') }}\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\t<Multiselect v-model=\"enforcedGroups\"\n\t\t\t\t\t:options=\"groups\"\n\t\t\t\t\t:placeholder=\"t('settings', 'Enforced groups')\"\n\t\t\t\t\t:disabled=\"loading\"\n\t\t\t\t\t:multiple=\"true\"\n\t\t\t\t\t:searchable=\"true\"\n\t\t\t\t\t:loading=\"loadingGroups\"\n\t\t\t\t\t:show-no-options=\"false\"\n\t\t\t\t\t:close-on-select=\"false\"\n\t\t\t\t\t@search-change=\"searchGroup\" />\n\t\t\t</p>\n\t\t\t<p class=\"top-margin\">\n\t\t\t\t{{ t('settings', 'Two-factor authentication is not enforced for members of the following groups.') }}\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\t<Multiselect v-model=\"excludedGroups\"\n\t\t\t\t\t:options=\"groups\"\n\t\t\t\t\t:placeholder=\"t('settings', 'Excluded groups')\"\n\t\t\t\t\t:disabled=\"loading\"\n\t\t\t\t\t:multiple=\"true\"\n\t\t\t\t\t:searchable=\"true\"\n\t\t\t\t\t:loading=\"loadingGroups\"\n\t\t\t\t\t:show-no-options=\"false\"\n\t\t\t\t\t:close-on-select=\"false\"\n\t\t\t\t\t@search-change=\"searchGroup\" />\n\t\t\t</p>\n\t\t\t<p class=\"top-margin\">\n\t\t\t\t<em>\n\t\t\t\t\t<!-- this text is also found in the documentation. update it there as well if it ever changes -->\n\t\t\t\t\t{{ t('settings', 'When groups are selected/excluded, they use the following logic to determine if a user has 2FA enforced: If no groups are selected, 2FA is enabled for everyone except members of the excluded groups. If groups are selected, 2FA is enabled for all members of these. If a user is both in a selected and excluded group, the selected takes precedence and 2FA is enforced.') }}\n\t\t\t\t</em>\n\t\t\t</p>\n\t\t</template>\n\t\t<p class=\"top-margin\">\n\t\t\t<Button v-if=\"dirty\"\n\t\t\t\ttype=\"primary\"\n\t\t\t\t:disabled=\"loading\"\n\t\t\t\t@click=\"saveChanges\">\n\t\t\t\t{{ t('settings', 'Save changes') }}\n\t\t\t</Button>\n\t\t</p>\n\t</SettingsSection>\n</template>\n\n<script>\nimport axios from '@nextcloud/axios'\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\nimport Button from '@nextcloud/vue/dist/Components/Button'\nimport CheckboxRadioSwitch from '@nextcloud/vue/dist/Components/CheckboxRadioSwitch'\nimport SettingsSection from '@nextcloud/vue/dist/Components/SettingsSection'\nimport { loadState } from '@nextcloud/initial-state'\n\nimport _ from 'lodash'\nimport { generateUrl, generateOcsUrl } from '@nextcloud/router'\n\nexport default {\n\tname: 'AdminTwoFactor',\n\tcomponents: {\n\t\tMultiselect,\n\t\tButton,\n\t\tCheckboxRadioSwitch,\n\t\tSettingsSection,\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tloading: false,\n\t\t\tdirty: false,\n\t\t\tgroups: [],\n\t\t\tloadingGroups: false,\n\t\t\ttwoFactorAdminDoc: loadState('settings', 'two-factor-admin-doc'),\n\t\t}\n\t},\n\tcomputed: {\n\t\tenforced: {\n\t\t\tget() {\n\t\t\t\treturn this.$store.state.enforced\n\t\t\t},\n\t\t\tset(val) {\n\t\t\t\tthis.dirty = true\n\t\t\t\tthis.$store.commit('setEnforced', val)\n\t\t\t},\n\t\t},\n\t\tenforcedGroups: {\n\t\t\tget() {\n\t\t\t\treturn this.$store.state.enforcedGroups\n\t\t\t},\n\t\t\tset(val) {\n\t\t\t\tthis.dirty = true\n\t\t\t\tthis.$store.commit('setEnforcedGroups', val)\n\t\t\t},\n\t\t},\n\t\texcludedGroups: {\n\t\t\tget() {\n\t\t\t\treturn this.$store.state.excludedGroups\n\t\t\t},\n\t\t\tset(val) {\n\t\t\t\tthis.dirty = true\n\t\t\t\tthis.$store.commit('setExcludedGroups', val)\n\t\t\t},\n\t\t},\n\t},\n\tmounted() {\n\t\t// Groups are loaded dynamically, but the assigned ones *should*\n\t\t// be valid groups, so let's add them as initial state\n\t\tthis.groups = _.sortedUniq(_.uniq(this.enforcedGroups.concat(this.excludedGroups)))\n\n\t\t// Populate the groups with a first set so the dropdown is not empty\n\t\t// when opening the page the first time\n\t\tthis.searchGroup('')\n\t},\n\tmethods: {\n\t\tsearchGroup: _.debounce(function(query) {\n\t\t\tthis.loadingGroups = true\n\t\t\taxios.get(generateOcsUrl('cloud/groups?offset=0&search={query}&limit=20', { query }))\n\t\t\t\t.then(res => res.data.ocs)\n\t\t\t\t.then(ocs => ocs.data.groups)\n\t\t\t\t.then(groups => { this.groups = _.sortedUniq(_.uniq(this.groups.concat(groups))) })\n\t\t\t\t.catch(err => console.error('could not search groups', err))\n\t\t\t\t.then(() => { this.loadingGroups = false })\n\t\t}, 500),\n\n\t\tsaveChanges() {\n\t\t\tthis.loading = true\n\n\t\t\tconst data = {\n\t\t\t\tenforced: this.enforced,\n\t\t\t\tenforcedGroups: this.enforcedGroups,\n\t\t\t\texcludedGroups: this.excludedGroups,\n\t\t\t}\n\t\t\taxios.put(generateUrl('/settings/api/admin/twofactorauth'), data)\n\t\t\t\t.then(resp => resp.data)\n\t\t\t\t.then(state => {\n\t\t\t\t\tthis.state = state\n\t\t\t\t\tthis.dirty = false\n\t\t\t\t})\n\t\t\t\t.catch(err => {\n\t\t\t\t\tconsole.error('could not save changes', err)\n\t\t\t\t})\n\t\t\t\t.then(() => { this.loading = false })\n\t\t},\n\t},\n}\n</script>\n\n<style scoped>\n\t.two-factor-loading {\n\t\tdisplay: inline-block;\n\t\tvertical-align: sub;\n\t\tmargin-left: -2px;\n\t\tmargin-right: 1px;\n\t}\n\n\t.top-margin {\n\t\tmargin-top: 0.5rem;\n\t}\n</style>\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AdminTwoFactor.vue?vue&type=style&index=0&id=63855edf&scoped=true&lang=css&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AdminTwoFactor.vue?vue&type=style&index=0&id=63855edf&scoped=true&lang=css&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AdminTwoFactor.vue?vue&type=template&id=63855edf&scoped=true&\"\nimport script from \"./AdminTwoFactor.vue?vue&type=script&lang=js&\"\nexport * from \"./AdminTwoFactor.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AdminTwoFactor.vue?vue&type=style&index=0&id=63855edf&scoped=true&lang=css&\"\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 \"63855edf\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('SettingsSection',{attrs:{\"title\":_vm.t('settings', 'Two-Factor Authentication'),\"description\":_vm.t('settings', 'Two-factor authentication can be enforced for all users and specific groups. If they do not have a two-factor provider configured, they will be unable to log into the system.'),\"doc-url\":_vm.twoFactorAdminDoc}},[(_vm.loading)?_c('p',[_c('span',{staticClass:\"icon-loading-small two-factor-loading\"}),_vm._v(\" \"),_c('span',[_vm._v(_vm._s(_vm.t('settings', 'Enforce two-factor authentication')))])]):_c('CheckboxRadioSwitch',{attrs:{\"id\":\"two-factor-enforced\",\"checked\":_vm.enforced,\"type\":\"switch\"},on:{\"update:checked\":function($event){_vm.enforced=$event}}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('settings', 'Enforce two-factor authentication'))+\"\\n\\t\")]),_vm._v(\" \"),(_vm.enforced)?[_c('h3',[_vm._v(_vm._s(_vm.t('settings', 'Limit to groups')))]),_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('settings', 'Enforcement of two-factor authentication can be set for certain groups only.'))+\"\\n\\t\\t\"),_c('p',{staticClass:\"top-margin\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Two-factor authentication is enforced for all members of the following groups.'))+\"\\n\\t\\t\")]),_vm._v(\" \"),_c('p',[_c('Multiselect',{attrs:{\"options\":_vm.groups,\"placeholder\":_vm.t('settings', 'Enforced groups'),\"disabled\":_vm.loading,\"multiple\":true,\"searchable\":true,\"loading\":_vm.loadingGroups,\"show-no-options\":false,\"close-on-select\":false},on:{\"search-change\":_vm.searchGroup},model:{value:(_vm.enforcedGroups),callback:function ($$v) {_vm.enforcedGroups=$$v},expression:\"enforcedGroups\"}})],1),_vm._v(\" \"),_c('p',{staticClass:\"top-margin\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Two-factor authentication is not enforced for members of the following groups.'))+\"\\n\\t\\t\")]),_vm._v(\" \"),_c('p',[_c('Multiselect',{attrs:{\"options\":_vm.groups,\"placeholder\":_vm.t('settings', 'Excluded groups'),\"disabled\":_vm.loading,\"multiple\":true,\"searchable\":true,\"loading\":_vm.loadingGroups,\"show-no-options\":false,\"close-on-select\":false},on:{\"search-change\":_vm.searchGroup},model:{value:(_vm.excludedGroups),callback:function ($$v) {_vm.excludedGroups=$$v},expression:\"excludedGroups\"}})],1),_vm._v(\" \"),_c('p',{staticClass:\"top-margin\"},[_c('em',[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'When groups are selected/excluded, they use the following logic to determine if a user has 2FA enforced: If no groups are selected, 2FA is enabled for everyone except members of the excluded groups. If groups are selected, 2FA is enabled for all members of these. If a user is both in a selected and excluded group, the selected takes precedence and 2FA is enforced.'))+\"\\n\\t\\t\\t\")])])]:_vm._e(),_vm._v(\" \"),_c('p',{staticClass:\"top-margin\"},[(_vm.dirty)?_c('Button',{attrs:{\"type\":\"primary\",\"disabled\":_vm.loading},on:{\"click\":_vm.saveChanges}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Save changes'))+\"\\n\\t\\t\")]):_vm._e()],1)],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright 2019 Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\nimport Vuex, { Store } from 'vuex'\n\nVue.use(Vuex)\n\nconst state = {\n\tenforced: false,\n\tenforcedGroups: [],\n\texcludedGroups: [],\n}\n\nconst mutations = {\n\tsetEnforced(state, enabled) {\n\t\tVue.set(state, 'enforced', enabled)\n\t},\n\tsetEnforcedGroups(state, total) {\n\t\tVue.set(state, 'enforcedGroups', total)\n\t},\n\tsetExcludedGroups(state, used) {\n\t\tVue.set(state, 'excludedGroups', used)\n\t},\n}\n\nexport default new Store({\n\tstrict: process.env.NODE_ENV !== 'production',\n\tstate,\n\tmutations,\n})\n","/**\n * @copyright Copyright (c) 2016 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\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 <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { loadState } from '@nextcloud/initial-state'\nimport Vue from 'vue'\n\nimport AdminTwoFactor from './components/AdminTwoFactor.vue'\nimport store from './store/admin-security'\n\n// eslint-disable-next-line camelcase\n__webpack_nonce__ = btoa(OC.requestToken)\n\nVue.prototype.t = t\n\n// Not used here but required for legacy templates\nwindow.OC = window.OC || {}\nwindow.OC.Settings = window.OC.Settings || {}\n\nstore.replaceState(\n\tloadState('settings', 'mandatory2FAState')\n)\n\nconst View = Vue.extend(AdminTwoFactor)\nnew View({\n\tstore,\n}).$mount('#two-factor-auth-settings')\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n.two-factor-loading[data-v-63855edf] {\\n\\tdisplay: inline-block;\\n\\tvertical-align: sub;\\n\\tmargin-left: -2px;\\n\\tmargin-right: 1px;\\n}\\n.top-margin[data-v-63855edf] {\\n\\tmargin-top: 0.5rem;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AdminTwoFactor.vue\"],\"names\":[],\"mappings\":\";AAsKA;CACA,qBAAA;CACA,mBAAA;CACA,iBAAA;CACA,iBAAA;AACA;AAEA;CACA,kBAAA;AACA\",\"sourcesContent\":[\"<template>\\n\\t<SettingsSection :title=\\\"t('settings', 'Two-Factor Authentication')\\\"\\n\\t\\t:description=\\\"t('settings', 'Two-factor authentication can be enforced for all users and specific groups. If they do not have a two-factor provider configured, they will be unable to log into the system.')\\\"\\n\\t\\t:doc-url=\\\"twoFactorAdminDoc\\\">\\n\\t\\t<p v-if=\\\"loading\\\">\\n\\t\\t\\t<span class=\\\"icon-loading-small two-factor-loading\\\" />\\n\\t\\t\\t<span>{{ t('settings', 'Enforce two-factor authentication') }}</span>\\n\\t\\t</p>\\n\\t\\t<CheckboxRadioSwitch v-else\\n\\t\\t\\tid=\\\"two-factor-enforced\\\"\\n\\t\\t\\t:checked.sync=\\\"enforced\\\"\\n\\t\\t\\ttype=\\\"switch\\\">\\n\\t\\t\\t{{ t('settings', 'Enforce two-factor authentication') }}\\n\\t\\t</CheckboxRadioSwitch>\\n\\t\\t<template v-if=\\\"enforced\\\">\\n\\t\\t\\t<h3>{{ t('settings', 'Limit to groups') }}</h3>\\n\\t\\t\\t{{ t('settings', 'Enforcement of two-factor authentication can be set for certain groups only.') }}\\n\\t\\t\\t<p class=\\\"top-margin\\\">\\n\\t\\t\\t\\t{{ t('settings', 'Two-factor authentication is enforced for all members of the following groups.') }}\\n\\t\\t\\t</p>\\n\\t\\t\\t<p>\\n\\t\\t\\t\\t<Multiselect v-model=\\\"enforcedGroups\\\"\\n\\t\\t\\t\\t\\t:options=\\\"groups\\\"\\n\\t\\t\\t\\t\\t:placeholder=\\\"t('settings', 'Enforced groups')\\\"\\n\\t\\t\\t\\t\\t:disabled=\\\"loading\\\"\\n\\t\\t\\t\\t\\t:multiple=\\\"true\\\"\\n\\t\\t\\t\\t\\t:searchable=\\\"true\\\"\\n\\t\\t\\t\\t\\t:loading=\\\"loadingGroups\\\"\\n\\t\\t\\t\\t\\t:show-no-options=\\\"false\\\"\\n\\t\\t\\t\\t\\t:close-on-select=\\\"false\\\"\\n\\t\\t\\t\\t\\t@search-change=\\\"searchGroup\\\" />\\n\\t\\t\\t</p>\\n\\t\\t\\t<p class=\\\"top-margin\\\">\\n\\t\\t\\t\\t{{ t('settings', 'Two-factor authentication is not enforced for members of the following groups.') }}\\n\\t\\t\\t</p>\\n\\t\\t\\t<p>\\n\\t\\t\\t\\t<Multiselect v-model=\\\"excludedGroups\\\"\\n\\t\\t\\t\\t\\t:options=\\\"groups\\\"\\n\\t\\t\\t\\t\\t:placeholder=\\\"t('settings', 'Excluded groups')\\\"\\n\\t\\t\\t\\t\\t:disabled=\\\"loading\\\"\\n\\t\\t\\t\\t\\t:multiple=\\\"true\\\"\\n\\t\\t\\t\\t\\t:searchable=\\\"true\\\"\\n\\t\\t\\t\\t\\t:loading=\\\"loadingGroups\\\"\\n\\t\\t\\t\\t\\t:show-no-options=\\\"false\\\"\\n\\t\\t\\t\\t\\t:close-on-select=\\\"false\\\"\\n\\t\\t\\t\\t\\t@search-change=\\\"searchGroup\\\" />\\n\\t\\t\\t</p>\\n\\t\\t\\t<p class=\\\"top-margin\\\">\\n\\t\\t\\t\\t<em>\\n\\t\\t\\t\\t\\t<!-- this text is also found in the documentation. update it there as well if it ever changes -->\\n\\t\\t\\t\\t\\t{{ t('settings', 'When groups are selected/excluded, they use the following logic to determine if a user has 2FA enforced: If no groups are selected, 2FA is enabled for everyone except members of the excluded groups. If groups are selected, 2FA is enabled for all members of these. If a user is both in a selected and excluded group, the selected takes precedence and 2FA is enforced.') }}\\n\\t\\t\\t\\t</em>\\n\\t\\t\\t</p>\\n\\t\\t</template>\\n\\t\\t<p class=\\\"top-margin\\\">\\n\\t\\t\\t<Button v-if=\\\"dirty\\\"\\n\\t\\t\\t\\ttype=\\\"primary\\\"\\n\\t\\t\\t\\t:disabled=\\\"loading\\\"\\n\\t\\t\\t\\t@click=\\\"saveChanges\\\">\\n\\t\\t\\t\\t{{ t('settings', 'Save changes') }}\\n\\t\\t\\t</Button>\\n\\t\\t</p>\\n\\t</SettingsSection>\\n</template>\\n\\n<script>\\nimport axios from '@nextcloud/axios'\\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\\nimport Button from '@nextcloud/vue/dist/Components/Button'\\nimport CheckboxRadioSwitch from '@nextcloud/vue/dist/Components/CheckboxRadioSwitch'\\nimport SettingsSection from '@nextcloud/vue/dist/Components/SettingsSection'\\nimport { loadState } from '@nextcloud/initial-state'\\n\\nimport _ from 'lodash'\\nimport { generateUrl, generateOcsUrl } from '@nextcloud/router'\\n\\nexport default {\\n\\tname: 'AdminTwoFactor',\\n\\tcomponents: {\\n\\t\\tMultiselect,\\n\\t\\tButton,\\n\\t\\tCheckboxRadioSwitch,\\n\\t\\tSettingsSection,\\n\\t},\\n\\tdata() {\\n\\t\\treturn {\\n\\t\\t\\tloading: false,\\n\\t\\t\\tdirty: false,\\n\\t\\t\\tgroups: [],\\n\\t\\t\\tloadingGroups: false,\\n\\t\\t\\ttwoFactorAdminDoc: loadState('settings', 'two-factor-admin-doc'),\\n\\t\\t}\\n\\t},\\n\\tcomputed: {\\n\\t\\tenforced: {\\n\\t\\t\\tget() {\\n\\t\\t\\t\\treturn this.$store.state.enforced\\n\\t\\t\\t},\\n\\t\\t\\tset(val) {\\n\\t\\t\\t\\tthis.dirty = true\\n\\t\\t\\t\\tthis.$store.commit('setEnforced', val)\\n\\t\\t\\t},\\n\\t\\t},\\n\\t\\tenforcedGroups: {\\n\\t\\t\\tget() {\\n\\t\\t\\t\\treturn this.$store.state.enforcedGroups\\n\\t\\t\\t},\\n\\t\\t\\tset(val) {\\n\\t\\t\\t\\tthis.dirty = true\\n\\t\\t\\t\\tthis.$store.commit('setEnforcedGroups', val)\\n\\t\\t\\t},\\n\\t\\t},\\n\\t\\texcludedGroups: {\\n\\t\\t\\tget() {\\n\\t\\t\\t\\treturn this.$store.state.excludedGroups\\n\\t\\t\\t},\\n\\t\\t\\tset(val) {\\n\\t\\t\\t\\tthis.dirty = true\\n\\t\\t\\t\\tthis.$store.commit('setExcludedGroups', val)\\n\\t\\t\\t},\\n\\t\\t},\\n\\t},\\n\\tmounted() {\\n\\t\\t// Groups are loaded dynamically, but the assigned ones *should*\\n\\t\\t// be valid groups, so let's add them as initial state\\n\\t\\tthis.groups = _.sortedUniq(_.uniq(this.enforcedGroups.concat(this.excludedGroups)))\\n\\n\\t\\t// Populate the groups with a first set so the dropdown is not empty\\n\\t\\t// when opening the page the first time\\n\\t\\tthis.searchGroup('')\\n\\t},\\n\\tmethods: {\\n\\t\\tsearchGroup: _.debounce(function(query) {\\n\\t\\t\\tthis.loadingGroups = true\\n\\t\\t\\taxios.get(generateOcsUrl('cloud/groups?offset=0&search={query}&limit=20', { query }))\\n\\t\\t\\t\\t.then(res => res.data.ocs)\\n\\t\\t\\t\\t.then(ocs => ocs.data.groups)\\n\\t\\t\\t\\t.then(groups => { this.groups = _.sortedUniq(_.uniq(this.groups.concat(groups))) })\\n\\t\\t\\t\\t.catch(err => console.error('could not search groups', err))\\n\\t\\t\\t\\t.then(() => { this.loadingGroups = false })\\n\\t\\t}, 500),\\n\\n\\t\\tsaveChanges() {\\n\\t\\t\\tthis.loading = true\\n\\n\\t\\t\\tconst data = {\\n\\t\\t\\t\\tenforced: this.enforced,\\n\\t\\t\\t\\tenforcedGroups: this.enforcedGroups,\\n\\t\\t\\t\\texcludedGroups: this.excludedGroups,\\n\\t\\t\\t}\\n\\t\\t\\taxios.put(generateUrl('/settings/api/admin/twofactorauth'), data)\\n\\t\\t\\t\\t.then(resp => resp.data)\\n\\t\\t\\t\\t.then(state => {\\n\\t\\t\\t\\t\\tthis.state = state\\n\\t\\t\\t\\t\\tthis.dirty = false\\n\\t\\t\\t\\t})\\n\\t\\t\\t\\t.catch(err => {\\n\\t\\t\\t\\t\\tconsole.error('could not save changes', err)\\n\\t\\t\\t\\t})\\n\\t\\t\\t\\t.then(() => { this.loading = false })\\n\\t\\t},\\n\\t},\\n}\\n</script>\\n\\n<style scoped>\\n\\t.two-factor-loading {\\n\\t\\tdisplay: inline-block;\\n\\t\\tvertical-align: sub;\\n\\t\\tmargin-left: -2px;\\n\\t\\tmargin-right: 1px;\\n\\t}\\n\\n\\t.top-margin {\\n\\t\\tmargin-top: 0.5rem;\\n\\t}\\n</style>\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdD = function () {\n\tthrow new Error('define cannot be used indirect');\n};","__webpack_require__.amdO = {};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 788;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t788: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [7874], function() { return __webpack_require__(9310); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","_vm","this","_h","$createElement","_c","_self","attrs","t","twoFactorAdminDoc","staticClass","_v","_s","enforced","on","$event","groups","loading","loadingGroups","searchGroup","model","value","callback","$$v","enforcedGroups","expression","excludedGroups","_e","saveChanges","Vue","Vuex","mutations","setEnforced","state","enabled","setEnforcedGroups","total","setExcludedGroups","used","Store","strict","process","__webpack_nonce__","btoa","OC","requestToken","window","Settings","store","loadState","AdminTwoFactor","$mount","___CSS_LOADER_EXPORT___","push","module","id","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","loaded","__webpack_modules__","call","m","amdD","Error","amdO","O","result","chunkIds","fn","priority","notFulfilled","Infinity","i","length","fulfilled","j","Object","keys","every","key","splice","r","n","getter","__esModule","d","a","definition","o","defineProperty","enumerable","get","g","globalThis","Function","e","obj","prop","prototype","hasOwnProperty","Symbol","toStringTag","nmd","paths","children","b","document","baseURI","self","location","href","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","data","moreModules","runtime","some","chunkLoadingGlobal","forEach","bind","__webpack_exports__"],"sourceRoot":""}
|