diff --git a/core/js/js.js b/core/js/js.js index 026cc6bb0d..361d2ab9b7 100644 --- a/core/js/js.js +++ b/core/js/js.js @@ -1751,7 +1751,7 @@ OC.PasswordConfirmation = { /** * @param {function} callback */ - requirePasswordConfirmation: function(callback, options) { + requirePasswordConfirmation: function(callback, options, rejectCallback) { options = typeof options !== 'undefined' ? options : {}; var defaults = { title: t('core','Authentication required'), @@ -1775,6 +1775,10 @@ OC.PasswordConfirmation = { function (result, password) { if (result && password !== '') { self._confirmPassword(password, config); + } else { + if (rejectCallback && typeof rejectCallback === 'function') { + rejectCallback() + } } }, true, diff --git a/settings/package.json b/settings/package.json index 932c26819f..53692fcdc7 100644 --- a/settings/package.json +++ b/settings/package.json @@ -14,6 +14,7 @@ "@babel/polyfill": "^7.0.0", "lodash": "^4.17.11", "nextcloud-axios": "^0.1.2", + "nextcloud-password-confirmation": "^0.3.1", "nextcloud-vue": "^0.3.1", "v-tooltip": "^2.0.0-rc.33", "vue": "^2.5.17", diff --git a/settings/src/store/api.js b/settings/src/store/api.js index 5bab785d94..185e80253a 100644 --- a/settings/src/store/api.js +++ b/settings/src/store/api.js @@ -1,4 +1,4 @@ -/* +/** * @copyright Copyright (c) 2018 John Molakvoæ * * @author John Molakvoæ @@ -21,6 +21,7 @@ */ import axios from 'nextcloud-axios' +import confirmPassword from 'nextcloud-password-confirmation' const sanitize = function(url) { return url.replace(/\/$/, ''); // Remove last url slash @@ -60,35 +61,7 @@ export default { * @returns {Promise} */ requireAdmin() { - return new Promise(function(resolve, reject) { - // TODO: migrate the OC.dialog to Vue and avoid this mess - // wait for password confirmation - let passwordTimeout; - let waitForpassword = function() { - if (OC.PasswordConfirmation.requiresPasswordConfirmation()) { - passwordTimeout = setTimeout(waitForpassword, 500); - return; - } - clearTimeout(passwordTimeout); - clearTimeout(promiseTimeout); - resolve(); - }; - - // automatically reject after 5s if not resolved - let promiseTimeout = setTimeout(() => { - clearTimeout(passwordTimeout); - // close dialog - if (document.getElementsByClassName('oc-dialog-close').length>0) { - document.getElementsByClassName('oc-dialog-close')[0].click(); - } - OC.Notification.showTemporary(t('settings', 'You did not enter the password in time')); - reject('Password request cancelled'); - }, 7000); - - // request password - OC.PasswordConfirmation.requirePasswordConfirmation(); - waitForpassword(); - }); + return confirmPassword(); }, get(url) { return axios.get(sanitize(url));