diff options
author | Morris Jobke <hey@morrisjobke.de> | 2016-11-18 15:42:30 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-11-18 15:42:30 +0100 |
commit | 332eaec4c01356d0b2119d4ec8fe07fa492d031b (patch) | |
tree | 3f89772129059801fd6768985aed9f7785a1791c /settings/js | |
parent | faee255ff47873ed2f8908c7d6b6e603ded11618 (diff) | |
parent | 3ffd9a755f60761d6a1f5fa3d02d07b4c2e68972 (diff) | |
download | nextcloud-server-332eaec4c01356d0b2119d4ec8fe07fa492d031b.tar.gz nextcloud-server-332eaec4c01356d0b2119d4ec8fe07fa492d031b.zip |
Merge pull request #1447 from nextcloud/password-confirmation-for-some-actions
Password confirmation for some actions
Diffstat (limited to 'settings/js')
-rw-r--r-- | settings/js/admin.js | 47 | ||||
-rw-r--r-- | settings/js/authtoken_view.js | 5 | ||||
-rw-r--r-- | settings/js/personal.js | 2 | ||||
-rw-r--r-- | settings/js/users/groups.js | 15 | ||||
-rw-r--r-- | settings/js/users/users.js | 252 |
5 files changed, 230 insertions, 91 deletions
diff --git a/settings/js/admin.js b/settings/js/admin.js index 7c2b507280f..094b12b2bab 100644 --- a/settings/js/admin.js +++ b/settings/js/admin.js @@ -172,21 +172,48 @@ $(document).ready(function(){ } }); - $('#mail_general_settings_form').change(function(){ + var changeEmailSettings = function() { + if (OC.PasswordConfirmation.requiresPasswordConfirmation()) { + OC.PasswordConfirmation.requirePasswordConfirmation(changeEmailSettings); + return; + } + OC.msg.startSaving('#mail_settings_msg'); - var post = $( "#mail_general_settings_form" ).serialize(); - $.post(OC.generateUrl('/settings/admin/mailsettings'), post, function(data){ - OC.msg.finishedSaving('#mail_settings_msg', data); + $.ajax({ + url: OC.generateUrl('/settings/admin/mailsettings'), + type: 'POST', + data: $('#mail_general_settings_form').serialize(), + success: function(data){ + OC.msg.finishedSaving('#mail_settings_msg', data); + }, + error: function(data){ + OC.msg.finishedError('#mail_settings_msg', data.responseJSON.message); + } }); - }); + }; + + var toggleEmailCredentials = function() { + if (OC.PasswordConfirmation.requiresPasswordConfirmation()) { + OC.PasswordConfirmation.requirePasswordConfirmation(toggleEmailCredentials); + return; + } - $('#mail_credentials_settings_submit').click(function(){ OC.msg.startSaving('#mail_settings_msg'); - var post = $( "#mail_credentials_settings" ).serialize(); - $.post(OC.generateUrl('/settings/admin/mailsettings/credentials'), post, function(data){ - OC.msg.finishedSaving('#mail_settings_msg', data); + $.ajax({ + url: OC.generateUrl('/settings/admin/mailsettings/credentials'), + type: 'POST', + data: $('#mail_credentials_settings').serialize(), + success: function(data){ + OC.msg.finishedSaving('#mail_settings_msg', data); + }, + error: function(data){ + OC.msg.finishedError('#mail_settings_msg', data.responseJSON.message); + } }); - }); + }; + + $('#mail_general_settings_form').change(changeEmailSettings); + $('#mail_credentials_settings_submit').click(toggleEmailCredentials); $('#sendtestemail').click(function(event){ event.preventDefault(); diff --git a/settings/js/authtoken_view.js b/settings/js/authtoken_view.js index d8537c415ce..24593a04f53 100644 --- a/settings/js/authtoken_view.js +++ b/settings/js/authtoken_view.js @@ -299,6 +299,11 @@ }, _addAppPassword: function () { + if (OC.PasswordConfirmation.requiresPasswordConfirmation()) { + OC.PasswordConfirmation.requirePasswordConfirmation(_.bind(this._addAppPassword, this)); + return; + } + var _this = this; this._toggleAddingToken(true); diff --git a/settings/js/personal.js b/settings/js/personal.js index aef67f719c0..c2cb437bd13 100644 --- a/settings/js/personal.js +++ b/settings/js/personal.js @@ -65,7 +65,7 @@ function changeEmailAddress () { // for failure the first parameter is the result object OC.msg.finishedSaving('#lostpassword .msg', result); }).fail(function(result){ - OC.msg.finishedSaving('#lostpassword .msg', result.responseJSON); + OC.msg.finishedError('#lostpassword .msg', result.responseJSON.message); }); } diff --git a/settings/js/users/groups.js b/settings/js/users/groups.js index 8f4d95432a8..cfe01c17530 100644 --- a/settings/js/users/groups.js +++ b/settings/js/users/groups.js @@ -128,6 +128,11 @@ GroupList = { }, createGroup: function (groupname) { + if (OC.PasswordConfirmation.requiresPasswordConfirmation()) { + OC.PasswordConfirmation.requirePasswordConfirmation(_.bind(this.createGroup, this, groupname)); + return; + } + $.post( OC.generateUrl('/settings/users/groups'), { @@ -278,10 +283,16 @@ GroupList = { GroupList.show); //when to mark user for delete - $userGroupList.on('click', '.delete', function () { + var deleteAction = function () { + if (OC.PasswordConfirmation.requiresPasswordConfirmation()) { + OC.PasswordConfirmation.requirePasswordConfirmation(_.bind(deleteAction, this)); + return; + } + // Call function for handling delete/undo GroupDeleteHandler.mark(GroupList.getElementGID(this)); - }); + }; + $userGroupList.on('click', '.delete', deleteAction); //delete a marked user when leaving the page $(window).on('beforeunload', function () { diff --git a/settings/js/users/users.js b/settings/js/users/users.js index 3a357c0e9c4..7e70d98f091 100644 --- a/settings/js/users/users.js +++ b/settings/js/users/users.js @@ -353,6 +353,14 @@ var UserList = { $userListBody.on('click', '.delete', function () { // Call function for handling delete/undo var uid = UserList.getUID(this); + + if (OC.PasswordConfirmation.requiresPasswordConfirmation()) { + OC.PasswordConfirmation.requirePasswordConfirmation(function() { + UserDeleteHandler.mark(uid); + }); + return; + } + UserDeleteHandler.mark(uid); }); @@ -405,6 +413,11 @@ var UserList = { }, applyGroupSelect: function (element, user, checked) { + if (OC.PasswordConfirmation.requiresPasswordConfirmation()) { + OC.PasswordConfirmation.requirePasswordConfirmation(_.bind(this.applySubadminSelect, this, element, user, checked)); + return; + } + var $element = $(element); var checkHandler = null; @@ -467,6 +480,11 @@ var UserList = { }, applySubadminSelect: function (element, user, checked) { + if (OC.PasswordConfirmation.requiresPasswordConfirmation()) { + OC.PasswordConfirmation.requirePasswordConfirmation(_.bind(this.applySubadminSelect, this, element, user, checked)); + return; + } + var $element = $(element); var checkHandler = function (group) { if (group === 'admin') { @@ -478,7 +496,10 @@ var UserList = { username: user, group: group }, - function () { + function (response) { + if (response.data.message) { + OC.Notification.show(response.data.message); + } } ); }; @@ -518,7 +539,7 @@ var UserList = { OC.Notification.showTemporary(t('core', 'Invalid quota value "{val}"', {val: quota})); return; } - UserList._updateQuota(uid, quota, function(returnedQuota){ + UserList._updateQuota(uid, quota, function(returnedQuota) { if (quota !== returnedQuota) { $select.find(':selected').text(returnedQuota); } @@ -532,12 +553,21 @@ var UserList = { * @param {Function} ready callback after save */ _updateQuota: function(uid, quota, ready) { + if (OC.PasswordConfirmation.requiresPasswordConfirmation()) { + OC.PasswordConfirmation.requirePasswordConfirmation(_.bind(this._updateQuota, this, uid, quota, ready)); + return; + } + $.post( OC.filePath('settings', 'ajax', 'setquota.php'), {username: uid, quota: quota}, function (result) { - if (ready) { - ready(result.data.quota); + if (result.status === 'error') { + OC.Notification.showTemporary(result.data.message); + } else { + if (ready) { + ready(result.data.quota); + } } } ); @@ -635,6 +665,28 @@ $(document).ready(function () { // TODO: move other init calls inside of initialize UserList.initialize($('#userlist')); + var _submitPasswordChange = function(uid, password, recoveryPasswordVal, blurFunction) { + if (OC.PasswordConfirmation.requiresPasswordConfirmation()) { + OC.PasswordConfirmation.requirePasswordConfirmation(function() { + _submitPasswordChange(uid, password, recoveryPasswordVal, blurFunction); + }); + return; + } + + $.post( + OC.generateUrl('/settings/users/changepassword'), + {username: uid, password: password, recoveryPassword: recoveryPasswordVal}, + function (result) { + blurFunction(); + if (result.status === 'success') { + OC.Notification.showTemporary(t('admin', 'Password successfully changed')); + } else { + OC.Notification.showTemporary(t('admin', result.data.message)); + } + } + ).fail(blurFunction); + }; + $userListBody.on('click', '.password', function (event) { event.stopPropagation(); @@ -643,6 +695,12 @@ $(document).ready(function () { var uid = UserList.getUID($td); var $input = $('<input type="password">'); var isRestoreDisabled = UserList.getRestoreDisabled($td) === true; + var blurFunction = function () { + $(this).replaceWith($('<span>●●●●●●●</span>')); + $td.find('img').show(); + // remove highlight class from users without recovery ability + $tr.removeClass('row-warning'); + }; if(isRestoreDisabled) { $tr.addClass('row-warning'); // add tipsy if the password change could cause data loss - no recovery enabled @@ -657,34 +715,51 @@ $(document).ready(function () { if (event.keyCode === 13) { if ($(this).val().length > 0) { var recoveryPasswordVal = $('input:password[id="recoveryPassword"]').val(); - $.post( - OC.generateUrl('/settings/users/changepassword'), - {username: uid, password: $(this).val(), recoveryPassword: recoveryPasswordVal}, - function (result) { - if (result.status === 'success') { - OC.Notification.showTemporary(t('admin', 'Password successfully changed')); - } else { - OC.Notification.showTemporary(t('admin', result.data.message)); - } - } - ); - $input.blur(); + $input.off('blur'); + _submitPasswordChange(uid, $(this).val(), recoveryPasswordVal, blurFunction); } else { $input.blur(); } } }) - .blur(function () { - $(this).replaceWith($('<span>●●●●●●●</span>')); - $td.find('img').show(); - // remove highlight class from users without recovery ability - $tr.removeClass('row-warning'); - }); + .blur(blurFunction); }); $('input:password[id="recoveryPassword"]').keyup(function() { OC.Notification.hide(); }); + var _submitDisplayNameChange = function($tr, uid, displayName, blurFunction) { + var $div = $tr.find('div.avatardiv'); + if ($div.length) { + $div.imageplaceholder(uid, displayName); + } + + if (OC.PasswordConfirmation.requiresPasswordConfirmation()) { + OC.PasswordConfirmation.requirePasswordConfirmation(function() { + _submitDisplayNameChange($tr, uid, displayName, blurFunction); + }); + return; + } + + $.ajax({ + type: 'POST', + url: OC.generateUrl('/settings/users/{id}/displayName', {id: uid}), + data: { + username: uid, + displayName: displayName + } + }).success(function (result) { + if (result && result.status==='success' && $div.length){ + $div.avatar(result.data.username, 32); + } + $tr.data('displayname', displayName); + blurFunction(); + }).fail(function (result) { + OC.Notification.showTemporary(result.responseJSON.message); + $tr.find('.displayName input').blur(blurFunction); + }); + }; + $userListBody.on('click', '.displayName', function (event) { event.stopPropagation(); var $td = $(this).closest('td'); @@ -692,6 +767,11 @@ $(document).ready(function () { var uid = UserList.getUID($td); var displayName = escapeHTML(UserList.getDisplayName($td)); var $input = $('<input type="text" value="' + displayName + '">'); + var blurFunction = function() { + var displayName = $tr.data('displayname'); + $input.replaceWith('<span>' + escapeHTML(displayName) + '</span>'); + $td.find('img').show(); + }; $td.find('img').hide(); $td.children('span').replaceWith($input); $input @@ -699,34 +779,53 @@ $(document).ready(function () { .keypress(function (event) { if (event.keyCode === 13) { if ($(this).val().length > 0) { - var $div = $tr.find('div.avatardiv'); - if ($div.length) { - $div.imageplaceholder(uid, displayName); - } - $.post( - OC.generateUrl('/settings/users/{id}/displayName', {id: uid}), - {username: uid, displayName: $(this).val()}, - function (result) { - if (result && result.status==='success' && $div.length){ - $div.avatar(result.data.username, 32); - } - } - ); - var displayName = $input.val(); - $tr.data('displayname', displayName); - $input.blur(); + $input.off('blur'); + _submitDisplayNameChange($tr, uid, $(this).val(), blurFunction); } else { $input.blur(); } } }) - .blur(function () { - var displayName = $tr.data('displayname'); - $input.replaceWith('<span>' + escapeHTML(displayName) + '</span>'); - $td.find('img').show(); - }); + .blur(blurFunction); }); + var _submitEmailChange = function($tr, $td, $input, uid, mailAddress, blurFunction) { + if (OC.PasswordConfirmation.requiresPasswordConfirmation()) { + OC.PasswordConfirmation.requirePasswordConfirmation(function() { + _submitEmailChange($tr, $td, $input, uid, mailAddress, blurFunction); + }); + return; + } + + $.ajax({ + type: 'PUT', + url: OC.generateUrl('/settings/users/{id}/mailAddress', {id: uid}), + data: { + mailAddress: mailAddress + } + }).success(function () { + // set data attribute to new value + // will in blur() be used to show the text instead of the input field + $tr.data('mailAddress', mailAddress); + $td.find('.loading-small').css('display', ''); + $input.removeAttr('disabled') + .triggerHandler('blur'); // needed instead of $input.blur() for Firefox + blurFunction(); + }).fail(function (result) { + if (!_.isUndefined(result.responseJSON.data)) { + OC.Notification.showTemporary(result.responseJSON.data.message); + } else if (!_.isUndefined(result.responseJSON.message)) { + OC.Notification.showTemporary(result.responseJSON.message); + } else { + OC.Notification.showTemporary(t('settings', 'Could not change the users email')); + } + $td.find('.loading-small').css('display', ''); + $input.removeAttr('disabled') + .css('padding-right', '6px'); + $input.blur(blurFunction); + }); + }; + $userListBody.on('click', '.mailAddress', function (event) { event.stopPropagation(); var $td = $(this).closest('td'); @@ -734,6 +833,15 @@ $(document).ready(function () { var uid = UserList.getUID($td); var mailAddress = escapeHTML(UserList.getMailAddress($td)); var $input = $('<input type="text">').val(mailAddress); + var blurFunction = function() { + if($td.find('.loading-small').css('display') === 'inline-block') { + // in Chrome the blur event is fired too early by the browser - even if the request is still running + return; + } + var $span = $('<span>').text($tr.data('mailAddress')); + $input.replaceWith($span); + $td.find('img').show(); + }; $td.children('span').replaceWith($input); $td.find('img').hide(); $input @@ -742,40 +850,14 @@ $(document).ready(function () { if (event.keyCode === 13) { // enter key - var mailAddress = $input.val(); $td.find('.loading-small').css('display', 'inline-block'); $input.css('padding-right', '26px'); $input.attr('disabled', 'disabled'); - $.ajax({ - type: 'PUT', - url: OC.generateUrl('/settings/users/{id}/mailAddress', {id: uid}), - data: { - mailAddress: $(this).val() - } - }).success(function () { - // set data attribute to new value - // will in blur() be used to show the text instead of the input field - $tr.data('mailAddress', mailAddress); - $td.find('.loading-small').css('display', ''); - $input.removeAttr('disabled') - .triggerHandler('blur'); // needed instead of $input.blur() for Firefox - }).fail(function (result) { - OC.Notification.showTemporary(result.responseJSON.data.message); - $td.find('.loading-small').css('display', ''); - $input.removeAttr('disabled') - .css('padding-right', '6px'); - }); + $input.off('blur'); + _submitEmailChange($tr, $td, $input, uid, $(this).val(), blurFunction); } }) - .blur(function () { - if($td.find('.loading-small').css('display') === 'inline-block') { - // in Chrome the blur event is fired too early by the browser - even if the request is still running - return; - } - var $span = $('<span>').text($tr.data('mailAddress')); - $input.replaceWith($span); - $td.find('img').show(); - }); + .blur(blurFunction); }); $('#newuser .groupsListContainer').on('click', function (event) { @@ -796,8 +878,15 @@ $(document).ready(function () { }); UserList._updateGroupListLabel($('#newuser .groups'), []); - $('#newuser').submit(function (event) { + var _submitNewUserForm = function (event) { event.preventDefault(); + if (OC.PasswordConfirmation.requiresPasswordConfirmation()) { + OC.PasswordConfirmation.requirePasswordConfirmation(function() { + _submitNewUserForm(event); + }); + return; + } + var username = $('#newusername').val(); var password = $('#newuserpassword').val(); var email = $('#newemail').val(); @@ -866,7 +955,8 @@ $(document).ready(function () { $('#newuser').get(0).reset(); }); }); - }); + }; + $('#newuser').submit(_submitNewUserForm); if ($('#CheckboxStorageLocation').is(':checked')) { $("#userlist .storageLocation").show(); @@ -874,11 +964,17 @@ $(document).ready(function () { // Option to display/hide the "Storage location" column $('#CheckboxStorageLocation').click(function() { if ($('#CheckboxStorageLocation').is(':checked')) { - $("#userlist .storageLocation").show(); - OCP.AppConfig.setValue('core', 'umgmt_show_storage_location', 'true'); + OCP.AppConfig.setValue('core', 'umgmt_show_storage_location', 'true', { + success: function () { + $("#userlist .storageLocation").show(); + } + }); } else { - $("#userlist .storageLocation").hide(); - OCP.AppConfig.setValue('core', 'umgmt_show_storage_location', 'false'); + OCP.AppConfig.setValue('core', 'umgmt_show_storage_location', 'false', { + success: function () { + $("#userlist .storageLocation").hide(); + } + }); } }); |