diff options
Diffstat (limited to 'dist/twofactor_backupscodes-settings.js.map')
-rw-r--r-- | dist/twofactor_backupscodes-settings.js.map | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/dist/twofactor_backupscodes-settings.js.map b/dist/twofactor_backupscodes-settings.js.map index adb8e2ebc58..594ee33ccd3 100644 --- a/dist/twofactor_backupscodes-settings.js.map +++ b/dist/twofactor_backupscodes-settings.js.map @@ -1 +1 @@ -{"version":3,"file":"twofactor_backupscodes-settings.js?v=e98e41ce4998c689c2a9","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/apps/twofactor_backupcodes/src/views/PersonalSettings.vue","webpack:///nextcloud/apps/twofactor_backupcodes/src/views/PersonalSettings.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/twofactor_backupcodes/src/service/PrintService.js","webpack://nextcloud/./apps/twofactor_backupcodes/src/views/PersonalSettings.vue?4d0b","webpack://nextcloud/./apps/twofactor_backupcodes/src/views/PersonalSettings.vue?81a7","webpack:///nextcloud/apps/twofactor_backupcodes/src/views/PersonalSettings.vue?vue&type=template&id=00d0b868&scoped=true&","webpack:///nextcloud/apps/twofactor_backupcodes/src/store.js","webpack:///nextcloud/apps/twofactor_backupcodes/src/service/BackupCodesService.js","webpack:///nextcloud/apps/twofactor_backupcodes/src/settings.js","webpack:///nextcloud/apps/twofactor_backupcodes/src/views/PersonalSettings.vue?vue&type=style&index=0&id=00d0b868&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 = (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((key) => (__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};","<template>\n\t<div>\n\t\t<button v-if=\"!enabled\"\n\t\t\tid=\"generate-backup-codes\"\n\t\t\t:disabled=\"generatingCodes\"\n\t\t\t@click=\"generateBackupCodes\">\n\t\t\t{{ t('twofactor_backupcodes', 'Generate backup codes') }}\n\t\t\t<span :class=\"{'icon-loading-small': generatingCodes}\" />\n\t\t</button>\n\t\t<template v-else>\n\t\t\t<p>\n\t\t\t\t<template v-if=\"!haveCodes\">\n\t\t\t\t\t{{ t('twofactor_backupcodes', 'Backup codes have been generated. {used} of {total} codes have been used.', {used, total}) }}\n\t\t\t\t</template>\n\t\t\t\t<template v-else>\n\t\t\t\t\t{{ t('twofactor_backupcodes', 'These are your backup codes. Please save and/or print them as you will not be able to read the codes again later') }}\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li v-for=\"code in codes\" :key=\"code\" class=\"backup-code\">\n\t\t\t\t\t\t\t{{ code }}\n\t\t\t\t\t\t</li>\n\t\t\t\t\t</ul>\n\t\t\t\t\t<a :href=\"downloadUrl\"\n\t\t\t\t\t\tclass=\"button primary\"\n\t\t\t\t\t\t:download=\"downloadFilename\">{{ t('twofactor_backupcodes', 'Save backup codes') }}</a>\n\t\t\t\t\t<button class=\"button\"\n\t\t\t\t\t\t@click=\"printCodes\">\n\t\t\t\t\t\t{{ t('twofactor_backupcodes', 'Print backup codes') }}\n\t\t\t\t\t</button>\n\t\t\t\t</template>\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\t<button id=\"generate-backup-codes\"\n\t\t\t\t\t@click=\"generateBackupCodes\">\n\t\t\t\t\t{{ t('twofactor_backupcodes', 'Regenerate backup codes') }}\n\t\t\t\t</button>\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\t<em>\n\t\t\t\t\t{{ t('twofactor_backupcodes', 'If you regenerate backup codes, you automatically invalidate old codes.') }}\n\t\t\t\t</em>\n\t\t\t</p>\n\t\t</template>\n\t</div>\n</template>\n\n<script>\nimport confirmPassword from '@nextcloud/password-confirmation'\nimport { print } from '../service/PrintService'\n\nexport default {\n\tname: 'PersonalSettings',\n\tdata() {\n\t\treturn {\n\t\t\tgeneratingCodes: false,\n\t\t}\n\t},\n\tcomputed: {\n\t\tdownloadUrl() {\n\t\t\tif (!this.codes) {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\treturn 'data:text/plain,' + encodeURIComponent(this.codes.reduce((prev, code) => {\n\t\t\t\treturn prev + code + '\\r\\n'\n\t\t\t}, ''))\n\t\t},\n\t\tdownloadFilename() {\n\t\t\tconst name = OC.theme.name || 'Nextcloud'\n\t\t\treturn name + '-backup-codes.txt'\n\t\t},\n\t\tenabled() {\n\t\t\treturn this.$store.state.enabled\n\t\t},\n\t\ttotal() {\n\t\t\treturn this.$store.state.total\n\t\t},\n\t\tused() {\n\t\t\treturn this.$store.state.used\n\t\t},\n\t\tcodes() {\n\t\t\treturn this.$store.state.codes\n\t\t},\n\t\tname() {\n\t\t\treturn OC.theme.name || 'Nextcloud'\n\t\t},\n\t\thaveCodes() {\n\t\t\treturn this.codes && this.codes.length > 0\n\t\t},\n\t},\n\tmethods: {\n\t\tgenerateBackupCodes() {\n\t\t\tconfirmPassword().then(() => {\n\t\t\t\t// Hide old codes\n\t\t\t\tthis.generatingCodes = true\n\n\t\t\t\tthis.$store.dispatch('generate').then(data => {\n\t\t\t\t\tthis.generatingCodes = false\n\t\t\t\t}).catch(err => {\n\t\t\t\t\tOC.Notification.showTemporary(t('twofactor_backupcodes', 'An error occurred while generating your backup codes'))\n\t\t\t\t\tthis.generatingCodes = false\n\t\t\t\t\tthrow err\n\t\t\t\t})\n\t\t\t}).catch(console.error.bind(this))\n\t\t},\n\n\t\tgetPrintData(codes) {\n\t\t\tif (!codes) {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\treturn codes.reduce((prev, code) => {\n\t\t\t\treturn prev + code + '<br>'\n\t\t\t}, '')\n\t\t},\n\n\t\tprintCodes() {\n\t\t\tprint(this.getPrintData(this.codes))\n\t\t},\n\t},\n}\n</script>\n\n<style scoped>\n\t.backup-code {\n\t\tfont-family: monospace;\n\t\tletter-spacing: 0.02em;\n\t\tfont-size: 1.2em;\n\t}\n\t.button {\n\t\tdisplay: inline-block;\n\t}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PersonalSettings.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!./PersonalSettings.vue?vue&type=script&lang=js&\"","/**\n * @copyright Copyright (c) 2016 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\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 <http://www.gnu.org/licenses/>.\n *\n */\n\n/**\n * @param data\n */\nexport function print(data) {\n\tconst name = OC.theme.name || 'Nextcloud'\n\tconst newTab = window.open('', t('twofactor_backupcodes', '{name} backup codes', { name }))\n\tnewTab.document.write('<h1>' + t('twofactor_backupcodes', '{name} backup codes', { name }) + '</h1>')\n\tnewTab.document.write('<pre>' + data + '</pre>')\n\tnewTab.print()\n\tnewTab.close()\n}\n","import api from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content 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!./PersonalSettings.vue?vue&type=style&index=0&id=00d0b868&scoped=true&lang=css&\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import { render, staticRenderFns } from \"./PersonalSettings.vue?vue&type=template&id=00d0b868&scoped=true&\"\nimport script from \"./PersonalSettings.vue?vue&type=script&lang=js&\"\nexport * from \"./PersonalSettings.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PersonalSettings.vue?vue&type=style&index=0&id=00d0b868&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 \"00d0b868\",\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('div',[(!_vm.enabled)?_c('button',{attrs:{\"id\":\"generate-backup-codes\",\"disabled\":_vm.generatingCodes},on:{\"click\":_vm.generateBackupCodes}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('twofactor_backupcodes', 'Generate backup codes'))+\"\\n\\t\\t\"),_c('span',{class:{'icon-loading-small': _vm.generatingCodes}})]):[_c('p',[(!_vm.haveCodes)?[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('twofactor_backupcodes', 'Backup codes have been generated. {used} of {total} codes have been used.', {used: _vm.used, total: _vm.total}))+\"\\n\\t\\t\\t\")]:[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('twofactor_backupcodes', 'These are your backup codes. Please save and/or print them as you will not be able to read the codes again later'))+\"\\n\\t\\t\\t\\t\"),_c('ul',_vm._l((_vm.codes),function(code){return _c('li',{key:code,staticClass:\"backup-code\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(code)+\"\\n\\t\\t\\t\\t\\t\")])}),0),_vm._v(\" \"),_c('a',{staticClass:\"button primary\",attrs:{\"href\":_vm.downloadUrl,\"download\":_vm.downloadFilename}},[_vm._v(_vm._s(_vm.t('twofactor_backupcodes', 'Save backup codes')))]),_vm._v(\" \"),_c('button',{staticClass:\"button\",on:{\"click\":_vm.printCodes}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('twofactor_backupcodes', 'Print backup codes'))+\"\\n\\t\\t\\t\\t\")])]],2),_vm._v(\" \"),_c('p',[_c('button',{attrs:{\"id\":\"generate-backup-codes\"},on:{\"click\":_vm.generateBackupCodes}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('twofactor_backupcodes', 'Regenerate backup codes'))+\"\\n\\t\\t\\t\")])]),_vm._v(\" \"),_c('p',[_c('em',[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('twofactor_backupcodes', 'If you regenerate backup codes, you automatically invalidate old codes.'))+\"\\n\\t\\t\\t\")])])]],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 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 <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\nimport Vuex from 'vuex'\nimport { generateCodes } from './service/BackupCodesService'\n\nVue.use(Vuex)\n\nconst state = {\n\tenabled: false,\n\ttotal: 0,\n\tused: 0,\n\tcodes: [],\n}\n\nconst mutations = {\n\tsetEnabled(state, enabled) {\n\t\tVue.set(state, 'enabled', enabled)\n\t},\n\tsetTotal(state, total) {\n\t\tVue.set(state, 'total', total)\n\t},\n\tsetUsed(state, used) {\n\t\tVue.set(state, 'used', used)\n\t},\n\tsetCodes(state, codes) {\n\t\tVue.set(state, 'codes', codes)\n\t},\n}\n\nconst actions = {\n\tgenerate({ commit }) {\n\t\tcommit('setEnabled', false)\n\n\t\treturn generateCodes().then(({ codes, state }) => {\n\t\t\tcommit('setEnabled', state.enabled)\n\t\t\tcommit('setTotal', state.total)\n\t\t\tcommit('setUsed', state.used)\n\t\t\tcommit('setCodes', codes)\n\t\t\treturn true\n\t\t})\n\t},\n}\n\nexport default new Vuex.Store({\n\tstrict: process.env.NODE_ENV !== 'production',\n\tstate,\n\tmutations,\n\tactions,\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 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 <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Axios from '@nextcloud/axios'\nimport { generateUrl } from '@nextcloud/router'\n\n/**\n *\n */\nexport function generateCodes() {\n\tconst url = generateUrl('/apps/twofactor_backupcodes/settings/create')\n\n\treturn Axios.post(url, {}).then(resp => resp.data)\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 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 <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { loadState } from '@nextcloud/initial-state'\nimport Vue from 'vue'\n\nimport PersonalSettings from './views/PersonalSettings'\nimport store from './store'\n\nVue.prototype.t = t\n\nconst initialState = loadState('twofactor_backupcodes', 'state')\nstore.replaceState(initialState)\n\nconst View = Vue.extend(PersonalSettings)\nnew View({\n\tstore,\n}).$mount('#twofactor-backupcodes-settings')\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.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.backup-code[data-v-00d0b868] {\\n\\tfont-family: monospace;\\n\\tletter-spacing: 0.02em;\\n\\tfont-size: 1.2em;\\n}\\n.button[data-v-00d0b868] {\\n\\tdisplay: inline-block;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/twofactor_backupcodes/src/views/PersonalSettings.vue\"],\"names\":[],\"mappings\":\";AAyHA;CACA,sBAAA;CACA,sBAAA;CACA,gBAAA;AACA;AACA;CACA,qBAAA;AACA\",\"sourcesContent\":[\"<template>\\n\\t<div>\\n\\t\\t<button v-if=\\\"!enabled\\\"\\n\\t\\t\\tid=\\\"generate-backup-codes\\\"\\n\\t\\t\\t:disabled=\\\"generatingCodes\\\"\\n\\t\\t\\t@click=\\\"generateBackupCodes\\\">\\n\\t\\t\\t{{ t('twofactor_backupcodes', 'Generate backup codes') }}\\n\\t\\t\\t<span :class=\\\"{'icon-loading-small': generatingCodes}\\\" />\\n\\t\\t</button>\\n\\t\\t<template v-else>\\n\\t\\t\\t<p>\\n\\t\\t\\t\\t<template v-if=\\\"!haveCodes\\\">\\n\\t\\t\\t\\t\\t{{ t('twofactor_backupcodes', 'Backup codes have been generated. {used} of {total} codes have been used.', {used, total}) }}\\n\\t\\t\\t\\t</template>\\n\\t\\t\\t\\t<template v-else>\\n\\t\\t\\t\\t\\t{{ t('twofactor_backupcodes', 'These are your backup codes. Please save and/or print them as you will not be able to read the codes again later') }}\\n\\t\\t\\t\\t\\t<ul>\\n\\t\\t\\t\\t\\t\\t<li v-for=\\\"code in codes\\\" :key=\\\"code\\\" class=\\\"backup-code\\\">\\n\\t\\t\\t\\t\\t\\t\\t{{ code }}\\n\\t\\t\\t\\t\\t\\t</li>\\n\\t\\t\\t\\t\\t</ul>\\n\\t\\t\\t\\t\\t<a :href=\\\"downloadUrl\\\"\\n\\t\\t\\t\\t\\t\\tclass=\\\"button primary\\\"\\n\\t\\t\\t\\t\\t\\t:download=\\\"downloadFilename\\\">{{ t('twofactor_backupcodes', 'Save backup codes') }}</a>\\n\\t\\t\\t\\t\\t<button class=\\\"button\\\"\\n\\t\\t\\t\\t\\t\\t@click=\\\"printCodes\\\">\\n\\t\\t\\t\\t\\t\\t{{ t('twofactor_backupcodes', 'Print backup codes') }}\\n\\t\\t\\t\\t\\t</button>\\n\\t\\t\\t\\t</template>\\n\\t\\t\\t</p>\\n\\t\\t\\t<p>\\n\\t\\t\\t\\t<button id=\\\"generate-backup-codes\\\"\\n\\t\\t\\t\\t\\t@click=\\\"generateBackupCodes\\\">\\n\\t\\t\\t\\t\\t{{ t('twofactor_backupcodes', 'Regenerate backup codes') }}\\n\\t\\t\\t\\t</button>\\n\\t\\t\\t</p>\\n\\t\\t\\t<p>\\n\\t\\t\\t\\t<em>\\n\\t\\t\\t\\t\\t{{ t('twofactor_backupcodes', 'If you regenerate backup codes, you automatically invalidate old codes.') }}\\n\\t\\t\\t\\t</em>\\n\\t\\t\\t</p>\\n\\t\\t</template>\\n\\t</div>\\n</template>\\n\\n<script>\\nimport confirmPassword from '@nextcloud/password-confirmation'\\nimport { print } from '../service/PrintService'\\n\\nexport default {\\n\\tname: 'PersonalSettings',\\n\\tdata() {\\n\\t\\treturn {\\n\\t\\t\\tgeneratingCodes: false,\\n\\t\\t}\\n\\t},\\n\\tcomputed: {\\n\\t\\tdownloadUrl() {\\n\\t\\t\\tif (!this.codes) {\\n\\t\\t\\t\\treturn ''\\n\\t\\t\\t}\\n\\t\\t\\treturn 'data:text/plain,' + encodeURIComponent(this.codes.reduce((prev, code) => {\\n\\t\\t\\t\\treturn prev + code + '\\\\r\\\\n'\\n\\t\\t\\t}, ''))\\n\\t\\t},\\n\\t\\tdownloadFilename() {\\n\\t\\t\\tconst name = OC.theme.name || 'Nextcloud'\\n\\t\\t\\treturn name + '-backup-codes.txt'\\n\\t\\t},\\n\\t\\tenabled() {\\n\\t\\t\\treturn this.$store.state.enabled\\n\\t\\t},\\n\\t\\ttotal() {\\n\\t\\t\\treturn this.$store.state.total\\n\\t\\t},\\n\\t\\tused() {\\n\\t\\t\\treturn this.$store.state.used\\n\\t\\t},\\n\\t\\tcodes() {\\n\\t\\t\\treturn this.$store.state.codes\\n\\t\\t},\\n\\t\\tname() {\\n\\t\\t\\treturn OC.theme.name || 'Nextcloud'\\n\\t\\t},\\n\\t\\thaveCodes() {\\n\\t\\t\\treturn this.codes && this.codes.length > 0\\n\\t\\t},\\n\\t},\\n\\tmethods: {\\n\\t\\tgenerateBackupCodes() {\\n\\t\\t\\tconfirmPassword().then(() => {\\n\\t\\t\\t\\t// Hide old codes\\n\\t\\t\\t\\tthis.generatingCodes = true\\n\\n\\t\\t\\t\\tthis.$store.dispatch('generate').then(data => {\\n\\t\\t\\t\\t\\tthis.generatingCodes = false\\n\\t\\t\\t\\t}).catch(err => {\\n\\t\\t\\t\\t\\tOC.Notification.showTemporary(t('twofactor_backupcodes', 'An error occurred while generating your backup codes'))\\n\\t\\t\\t\\t\\tthis.generatingCodes = false\\n\\t\\t\\t\\t\\tthrow err\\n\\t\\t\\t\\t})\\n\\t\\t\\t}).catch(console.error.bind(this))\\n\\t\\t},\\n\\n\\t\\tgetPrintData(codes) {\\n\\t\\t\\tif (!codes) {\\n\\t\\t\\t\\treturn ''\\n\\t\\t\\t}\\n\\t\\t\\treturn codes.reduce((prev, code) => {\\n\\t\\t\\t\\treturn prev + code + '<br>'\\n\\t\\t\\t}, '')\\n\\t\\t},\\n\\n\\t\\tprintCodes() {\\n\\t\\t\\tprint(this.getPrintData(this.codes))\\n\\t\\t},\\n\\t},\\n}\\n</script>\\n\\n<style scoped>\\n\\t.backup-code {\\n\\t\\tfont-family: monospace;\\n\\t\\tletter-spacing: 0.02em;\\n\\t\\tfont-size: 1.2em;\\n\\t}\\n\\t.button {\\n\\t\\tdisplay: inline-block;\\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 = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (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 = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (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 = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 123;","// no baseURI\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\t123: 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 = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (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((id) => (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[chunkIds[i]] = 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, [874], () => (__webpack_require__(13895)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","data","name","OC","theme","newTab","window","open","t","document","write","print","close","options","_vm","this","_h","$createElement","_c","_self","enabled","haveCodes","_v","_s","_l","code","key","staticClass","attrs","downloadUrl","downloadFilename","on","printCodes","used","total","generateBackupCodes","generatingCodes","class","Vue","Vuex","mutations","setEnabled","state","setTotal","setUsed","setCodes","codes","actions","generate","commit","url","generateUrl","Axios","then","resp","generateCodes","strict","process","initialState","loadState","store","replaceState","PersonalSettings","$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","splice","r","n","getter","__esModule","d","a","definition","o","defineProperty","enumerable","get","g","globalThis","Function","e","obj","prop","prototype","hasOwnProperty","Symbol","toStringTag","value","nmd","paths","children","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","self","forEach","bind","__webpack_exports__"],"sourceRoot":""}
\ No newline at end of file +{"version":3,"file":"twofactor_backupscodes-settings.js?v=55c1b6535ccc3c6d8ed4","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/apps/twofactor_backupcodes/src/views/PersonalSettings.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/twofactor_backupcodes/src/views/PersonalSettings.vue","webpack:///nextcloud/apps/twofactor_backupcodes/src/service/PrintService.js","webpack://nextcloud/./apps/twofactor_backupcodes/src/views/PersonalSettings.vue?81a7","webpack://nextcloud/./apps/twofactor_backupcodes/src/views/PersonalSettings.vue?4d0b","webpack:///nextcloud/apps/twofactor_backupcodes/src/views/PersonalSettings.vue?vue&type=template&id=00d0b868&scoped=true&","webpack:///nextcloud/apps/twofactor_backupcodes/src/store.js","webpack:///nextcloud/apps/twofactor_backupcodes/src/service/BackupCodesService.js","webpack:///nextcloud/apps/twofactor_backupcodes/src/settings.js","webpack:///nextcloud/apps/twofactor_backupcodes/src/views/PersonalSettings.vue?vue&type=style&index=0&id=00d0b868&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!./PersonalSettings.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!./PersonalSettings.vue?vue&type=script&lang=js&\"","<template>\n\t<div>\n\t\t<button v-if=\"!enabled\"\n\t\t\tid=\"generate-backup-codes\"\n\t\t\t:disabled=\"generatingCodes\"\n\t\t\t@click=\"generateBackupCodes\">\n\t\t\t{{ t('twofactor_backupcodes', 'Generate backup codes') }}\n\t\t\t<span :class=\"{'icon-loading-small': generatingCodes}\" />\n\t\t</button>\n\t\t<template v-else>\n\t\t\t<p>\n\t\t\t\t<template v-if=\"!haveCodes\">\n\t\t\t\t\t{{ t('twofactor_backupcodes', 'Backup codes have been generated. {used} of {total} codes have been used.', {used, total}) }}\n\t\t\t\t</template>\n\t\t\t\t<template v-else>\n\t\t\t\t\t{{ t('twofactor_backupcodes', 'These are your backup codes. Please save and/or print them as you will not be able to read the codes again later') }}\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li v-for=\"code in codes\" :key=\"code\" class=\"backup-code\">\n\t\t\t\t\t\t\t{{ code }}\n\t\t\t\t\t\t</li>\n\t\t\t\t\t</ul>\n\t\t\t\t\t<a :href=\"downloadUrl\"\n\t\t\t\t\t\tclass=\"button primary\"\n\t\t\t\t\t\t:download=\"downloadFilename\">{{ t('twofactor_backupcodes', 'Save backup codes') }}</a>\n\t\t\t\t\t<button class=\"button\"\n\t\t\t\t\t\t@click=\"printCodes\">\n\t\t\t\t\t\t{{ t('twofactor_backupcodes', 'Print backup codes') }}\n\t\t\t\t\t</button>\n\t\t\t\t</template>\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\t<button id=\"generate-backup-codes\"\n\t\t\t\t\t@click=\"generateBackupCodes\">\n\t\t\t\t\t{{ t('twofactor_backupcodes', 'Regenerate backup codes') }}\n\t\t\t\t</button>\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\t<em>\n\t\t\t\t\t{{ t('twofactor_backupcodes', 'If you regenerate backup codes, you automatically invalidate old codes.') }}\n\t\t\t\t</em>\n\t\t\t</p>\n\t\t</template>\n\t</div>\n</template>\n\n<script>\nimport confirmPassword from '@nextcloud/password-confirmation'\nimport { print } from '../service/PrintService'\n\nexport default {\n\tname: 'PersonalSettings',\n\tdata() {\n\t\treturn {\n\t\t\tgeneratingCodes: false,\n\t\t}\n\t},\n\tcomputed: {\n\t\tdownloadUrl() {\n\t\t\tif (!this.codes) {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\treturn 'data:text/plain,' + encodeURIComponent(this.codes.reduce((prev, code) => {\n\t\t\t\treturn prev + code + '\\r\\n'\n\t\t\t}, ''))\n\t\t},\n\t\tdownloadFilename() {\n\t\t\tconst name = OC.theme.name || 'Nextcloud'\n\t\t\treturn name + '-backup-codes.txt'\n\t\t},\n\t\tenabled() {\n\t\t\treturn this.$store.state.enabled\n\t\t},\n\t\ttotal() {\n\t\t\treturn this.$store.state.total\n\t\t},\n\t\tused() {\n\t\t\treturn this.$store.state.used\n\t\t},\n\t\tcodes() {\n\t\t\treturn this.$store.state.codes\n\t\t},\n\t\tname() {\n\t\t\treturn OC.theme.name || 'Nextcloud'\n\t\t},\n\t\thaveCodes() {\n\t\t\treturn this.codes && this.codes.length > 0\n\t\t},\n\t},\n\tmethods: {\n\t\tgenerateBackupCodes() {\n\t\t\tconfirmPassword().then(() => {\n\t\t\t\t// Hide old codes\n\t\t\t\tthis.generatingCodes = true\n\n\t\t\t\tthis.$store.dispatch('generate').then(data => {\n\t\t\t\t\tthis.generatingCodes = false\n\t\t\t\t}).catch(err => {\n\t\t\t\t\tOC.Notification.showTemporary(t('twofactor_backupcodes', 'An error occurred while generating your backup codes'))\n\t\t\t\t\tthis.generatingCodes = false\n\t\t\t\t\tthrow err\n\t\t\t\t})\n\t\t\t}).catch(console.error.bind(this))\n\t\t},\n\n\t\tgetPrintData(codes) {\n\t\t\tif (!codes) {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\treturn codes.reduce((prev, code) => {\n\t\t\t\treturn prev + code + '<br>'\n\t\t\t}, '')\n\t\t},\n\n\t\tprintCodes() {\n\t\t\tprint(this.getPrintData(this.codes))\n\t\t},\n\t},\n}\n</script>\n\n<style scoped>\n\t.backup-code {\n\t\tfont-family: monospace;\n\t\tletter-spacing: 0.02em;\n\t\tfont-size: 1.2em;\n\t}\n\t.button {\n\t\tdisplay: inline-block;\n\t}\n</style>\n","/**\n * @copyright Copyright (c) 2016 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\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 <http://www.gnu.org/licenses/>.\n *\n */\n\n/**\n * @param data\n */\nexport function print(data) {\n\tconst name = OC.theme.name || 'Nextcloud'\n\tconst newTab = window.open('', t('twofactor_backupcodes', '{name} backup codes', { name }))\n\tnewTab.document.write('<h1>' + t('twofactor_backupcodes', '{name} backup codes', { name }) + '</h1>')\n\tnewTab.document.write('<pre>' + data + '</pre>')\n\tnewTab.print()\n\tnewTab.close()\n}\n","import { render, staticRenderFns } from \"./PersonalSettings.vue?vue&type=template&id=00d0b868&scoped=true&\"\nimport script from \"./PersonalSettings.vue?vue&type=script&lang=js&\"\nexport * from \"./PersonalSettings.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PersonalSettings.vue?vue&type=style&index=0&id=00d0b868&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 \"00d0b868\",\n null\n \n)\n\nexport default component.exports","import api from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content 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!./PersonalSettings.vue?vue&type=style&index=0&id=00d0b868&scoped=true&lang=css&\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[(!_vm.enabled)?_c('button',{attrs:{\"id\":\"generate-backup-codes\",\"disabled\":_vm.generatingCodes},on:{\"click\":_vm.generateBackupCodes}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('twofactor_backupcodes', 'Generate backup codes'))+\"\\n\\t\\t\"),_c('span',{class:{'icon-loading-small': _vm.generatingCodes}})]):[_c('p',[(!_vm.haveCodes)?[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('twofactor_backupcodes', 'Backup codes have been generated. {used} of {total} codes have been used.', {used: _vm.used, total: _vm.total}))+\"\\n\\t\\t\\t\")]:[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('twofactor_backupcodes', 'These are your backup codes. Please save and/or print them as you will not be able to read the codes again later'))+\"\\n\\t\\t\\t\\t\"),_c('ul',_vm._l((_vm.codes),function(code){return _c('li',{key:code,staticClass:\"backup-code\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(code)+\"\\n\\t\\t\\t\\t\\t\")])}),0),_vm._v(\" \"),_c('a',{staticClass:\"button primary\",attrs:{\"href\":_vm.downloadUrl,\"download\":_vm.downloadFilename}},[_vm._v(_vm._s(_vm.t('twofactor_backupcodes', 'Save backup codes')))]),_vm._v(\" \"),_c('button',{staticClass:\"button\",on:{\"click\":_vm.printCodes}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('twofactor_backupcodes', 'Print backup codes'))+\"\\n\\t\\t\\t\\t\")])]],2),_vm._v(\" \"),_c('p',[_c('button',{attrs:{\"id\":\"generate-backup-codes\"},on:{\"click\":_vm.generateBackupCodes}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('twofactor_backupcodes', 'Regenerate backup codes'))+\"\\n\\t\\t\\t\")])]),_vm._v(\" \"),_c('p',[_c('em',[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('twofactor_backupcodes', 'If you regenerate backup codes, you automatically invalidate old codes.'))+\"\\n\\t\\t\\t\")])])]],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 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 <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\nimport Vuex from 'vuex'\nimport { generateCodes } from './service/BackupCodesService'\n\nVue.use(Vuex)\n\nconst state = {\n\tenabled: false,\n\ttotal: 0,\n\tused: 0,\n\tcodes: [],\n}\n\nconst mutations = {\n\tsetEnabled(state, enabled) {\n\t\tVue.set(state, 'enabled', enabled)\n\t},\n\tsetTotal(state, total) {\n\t\tVue.set(state, 'total', total)\n\t},\n\tsetUsed(state, used) {\n\t\tVue.set(state, 'used', used)\n\t},\n\tsetCodes(state, codes) {\n\t\tVue.set(state, 'codes', codes)\n\t},\n}\n\nconst actions = {\n\tgenerate({ commit }) {\n\t\tcommit('setEnabled', false)\n\n\t\treturn generateCodes().then(({ codes, state }) => {\n\t\t\tcommit('setEnabled', state.enabled)\n\t\t\tcommit('setTotal', state.total)\n\t\t\tcommit('setUsed', state.used)\n\t\t\tcommit('setCodes', codes)\n\t\t\treturn true\n\t\t})\n\t},\n}\n\nexport default new Vuex.Store({\n\tstrict: process.env.NODE_ENV !== 'production',\n\tstate,\n\tmutations,\n\tactions,\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 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 <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Axios from '@nextcloud/axios'\nimport { generateUrl } from '@nextcloud/router'\n\n/**\n *\n */\nexport function generateCodes() {\n\tconst url = generateUrl('/apps/twofactor_backupcodes/settings/create')\n\n\treturn Axios.post(url, {}).then(resp => resp.data)\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 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 <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { loadState } from '@nextcloud/initial-state'\nimport Vue from 'vue'\n\nimport PersonalSettings from './views/PersonalSettings'\nimport store from './store'\n\nVue.prototype.t = t\n\nconst initialState = loadState('twofactor_backupcodes', 'state')\nstore.replaceState(initialState)\n\nconst View = Vue.extend(PersonalSettings)\nnew View({\n\tstore,\n}).$mount('#twofactor-backupcodes-settings')\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.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.backup-code[data-v-00d0b868] {\\n\\tfont-family: monospace;\\n\\tletter-spacing: 0.02em;\\n\\tfont-size: 1.2em;\\n}\\n.button[data-v-00d0b868] {\\n\\tdisplay: inline-block;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/twofactor_backupcodes/src/views/PersonalSettings.vue\"],\"names\":[],\"mappings\":\";AAyHA;CACA,sBAAA;CACA,sBAAA;CACA,gBAAA;AACA;AACA;CACA,qBAAA;AACA\",\"sourcesContent\":[\"<template>\\n\\t<div>\\n\\t\\t<button v-if=\\\"!enabled\\\"\\n\\t\\t\\tid=\\\"generate-backup-codes\\\"\\n\\t\\t\\t:disabled=\\\"generatingCodes\\\"\\n\\t\\t\\t@click=\\\"generateBackupCodes\\\">\\n\\t\\t\\t{{ t('twofactor_backupcodes', 'Generate backup codes') }}\\n\\t\\t\\t<span :class=\\\"{'icon-loading-small': generatingCodes}\\\" />\\n\\t\\t</button>\\n\\t\\t<template v-else>\\n\\t\\t\\t<p>\\n\\t\\t\\t\\t<template v-if=\\\"!haveCodes\\\">\\n\\t\\t\\t\\t\\t{{ t('twofactor_backupcodes', 'Backup codes have been generated. {used} of {total} codes have been used.', {used, total}) }}\\n\\t\\t\\t\\t</template>\\n\\t\\t\\t\\t<template v-else>\\n\\t\\t\\t\\t\\t{{ t('twofactor_backupcodes', 'These are your backup codes. Please save and/or print them as you will not be able to read the codes again later') }}\\n\\t\\t\\t\\t\\t<ul>\\n\\t\\t\\t\\t\\t\\t<li v-for=\\\"code in codes\\\" :key=\\\"code\\\" class=\\\"backup-code\\\">\\n\\t\\t\\t\\t\\t\\t\\t{{ code }}\\n\\t\\t\\t\\t\\t\\t</li>\\n\\t\\t\\t\\t\\t</ul>\\n\\t\\t\\t\\t\\t<a :href=\\\"downloadUrl\\\"\\n\\t\\t\\t\\t\\t\\tclass=\\\"button primary\\\"\\n\\t\\t\\t\\t\\t\\t:download=\\\"downloadFilename\\\">{{ t('twofactor_backupcodes', 'Save backup codes') }}</a>\\n\\t\\t\\t\\t\\t<button class=\\\"button\\\"\\n\\t\\t\\t\\t\\t\\t@click=\\\"printCodes\\\">\\n\\t\\t\\t\\t\\t\\t{{ t('twofactor_backupcodes', 'Print backup codes') }}\\n\\t\\t\\t\\t\\t</button>\\n\\t\\t\\t\\t</template>\\n\\t\\t\\t</p>\\n\\t\\t\\t<p>\\n\\t\\t\\t\\t<button id=\\\"generate-backup-codes\\\"\\n\\t\\t\\t\\t\\t@click=\\\"generateBackupCodes\\\">\\n\\t\\t\\t\\t\\t{{ t('twofactor_backupcodes', 'Regenerate backup codes') }}\\n\\t\\t\\t\\t</button>\\n\\t\\t\\t</p>\\n\\t\\t\\t<p>\\n\\t\\t\\t\\t<em>\\n\\t\\t\\t\\t\\t{{ t('twofactor_backupcodes', 'If you regenerate backup codes, you automatically invalidate old codes.') }}\\n\\t\\t\\t\\t</em>\\n\\t\\t\\t</p>\\n\\t\\t</template>\\n\\t</div>\\n</template>\\n\\n<script>\\nimport confirmPassword from '@nextcloud/password-confirmation'\\nimport { print } from '../service/PrintService'\\n\\nexport default {\\n\\tname: 'PersonalSettings',\\n\\tdata() {\\n\\t\\treturn {\\n\\t\\t\\tgeneratingCodes: false,\\n\\t\\t}\\n\\t},\\n\\tcomputed: {\\n\\t\\tdownloadUrl() {\\n\\t\\t\\tif (!this.codes) {\\n\\t\\t\\t\\treturn ''\\n\\t\\t\\t}\\n\\t\\t\\treturn 'data:text/plain,' + encodeURIComponent(this.codes.reduce((prev, code) => {\\n\\t\\t\\t\\treturn prev + code + '\\\\r\\\\n'\\n\\t\\t\\t}, ''))\\n\\t\\t},\\n\\t\\tdownloadFilename() {\\n\\t\\t\\tconst name = OC.theme.name || 'Nextcloud'\\n\\t\\t\\treturn name + '-backup-codes.txt'\\n\\t\\t},\\n\\t\\tenabled() {\\n\\t\\t\\treturn this.$store.state.enabled\\n\\t\\t},\\n\\t\\ttotal() {\\n\\t\\t\\treturn this.$store.state.total\\n\\t\\t},\\n\\t\\tused() {\\n\\t\\t\\treturn this.$store.state.used\\n\\t\\t},\\n\\t\\tcodes() {\\n\\t\\t\\treturn this.$store.state.codes\\n\\t\\t},\\n\\t\\tname() {\\n\\t\\t\\treturn OC.theme.name || 'Nextcloud'\\n\\t\\t},\\n\\t\\thaveCodes() {\\n\\t\\t\\treturn this.codes && this.codes.length > 0\\n\\t\\t},\\n\\t},\\n\\tmethods: {\\n\\t\\tgenerateBackupCodes() {\\n\\t\\t\\tconfirmPassword().then(() => {\\n\\t\\t\\t\\t// Hide old codes\\n\\t\\t\\t\\tthis.generatingCodes = true\\n\\n\\t\\t\\t\\tthis.$store.dispatch('generate').then(data => {\\n\\t\\t\\t\\t\\tthis.generatingCodes = false\\n\\t\\t\\t\\t}).catch(err => {\\n\\t\\t\\t\\t\\tOC.Notification.showTemporary(t('twofactor_backupcodes', 'An error occurred while generating your backup codes'))\\n\\t\\t\\t\\t\\tthis.generatingCodes = false\\n\\t\\t\\t\\t\\tthrow err\\n\\t\\t\\t\\t})\\n\\t\\t\\t}).catch(console.error.bind(this))\\n\\t\\t},\\n\\n\\t\\tgetPrintData(codes) {\\n\\t\\t\\tif (!codes) {\\n\\t\\t\\t\\treturn ''\\n\\t\\t\\t}\\n\\t\\t\\treturn codes.reduce((prev, code) => {\\n\\t\\t\\t\\treturn prev + code + '<br>'\\n\\t\\t\\t}, '')\\n\\t\\t},\\n\\n\\t\\tprintCodes() {\\n\\t\\t\\tprint(this.getPrintData(this.codes))\\n\\t\\t},\\n\\t},\\n}\\n</script>\\n\\n<style scoped>\\n\\t.backup-code {\\n\\t\\tfont-family: monospace;\\n\\t\\tletter-spacing: 0.02em;\\n\\t\\tfont-size: 1.2em;\\n\\t}\\n\\t.button {\\n\\t\\tdisplay: inline-block;\\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 = 123;","// no baseURI\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\t123: 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[chunkIds[i]] = 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, [874], function() { return __webpack_require__(13895); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","data","name","newTab","OC","theme","window","open","t","document","write","print","close","options","_vm","this","_h","$createElement","_c","_self","enabled","haveCodes","_v","_s","_l","code","key","staticClass","attrs","downloadUrl","downloadFilename","on","printCodes","used","total","generateBackupCodes","generatingCodes","class","Vue","Vuex","mutations","setEnabled","state","setTotal","setUsed","setCodes","codes","actions","generate","url","commit","generateUrl","Axios","then","resp","strict","process","initialState","loadState","store","replaceState","PersonalSettings","$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","splice","r","n","getter","__esModule","d","a","definition","o","defineProperty","enumerable","get","g","globalThis","Function","e","obj","prop","prototype","hasOwnProperty","Symbol","toStringTag","value","nmd","paths","children","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","self","forEach","bind","__webpack_exports__"],"sourceRoot":""}
\ No newline at end of file |