mirror of
https://github.com/freedombox/FreedomBox.git
synced 2026-01-28 08:03:36 +00:00
On user deletion, user's home folder is also deleted. Admins have an
option to avoid deleting user's home by inactivating the user instead.
This commit also removes user deletion buttons from the user's list
page and adds this option to the user edit page. The user's edit form
asks for a confirmation if the user deletion is requested. This change
also means that the confirmation password is now required to delete a user.
Also:
- Add a simple username validation to the privileged actions.
- Functional tests: Create a fixture to login as an admin before every test.
- Functional tests: Add a test to check that SSH passwordless login works
after user is renamed to validate correct SSH related path permissions.
- Privileged tests: Add `test_` prefix to the generated random string which
makes easier to check and cleanup created home folders.
- Minor quote fixes.
Tests performed in stable and testing containers:
- Run all the users module tests twice, no failures in tests.
- When user is the last admin, both "Active" and "Delete user"
checkboxes are disabled.
Closes #2451.
[sunil]
- Refactor the JS code:
- Ensure that DOM elements are lookup after DOM content is loaded.
- Styling changes. Reduce the number of globals, name the global names
somewhat more unique.
- Click the button instead of submitting the form to disable the button.
- Template changes:
- Add a body for the confirmation dialog to talk about disabling the user and
deleting the home directory.
- Change the label of the confirm button to make it more
explicit (recommendation from many UX guides).
- Styling.
- Functional tests:
- Fix visibility checking of an element to use the correct splinter API.
- Simplify clicking the edit user link.
- Minor update to form checkbox help text.
Signed-off-by: Veiko Aasa <veiko17@disroot.org>
Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: Sunil Mohan Adapa <sunil@medhas.org>
61 lines
2.0 KiB
JavaScript
61 lines
2.0 KiB
JavaScript
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
/**
|
|
* @licstart The following is the entire license notice for the JavaScript
|
|
* code in this page.
|
|
*
|
|
* This file is part of FreedomBox.
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU Affero General Public License as
|
|
* published by the Free Software Foundation, either version 3 of the
|
|
* License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU Affero General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Affero General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*
|
|
* @licend The above is the entire license notice for the JavaScript code
|
|
* in this page.
|
|
*/
|
|
|
|
var deleteConfirmed = false;
|
|
|
|
document.addEventListener('DOMContentLoaded', (event) => {
|
|
const form = document.querySelector('form.form-update');
|
|
form.addEventListener('submit', onUserUpdateSubmit);
|
|
|
|
const confirmDeleteButton = document.querySelector(
|
|
'#user-delete-confirm-dialog button.confirm');
|
|
confirmDeleteButton.addEventListener('click', () => {
|
|
onUserDeleteConfirmed(form);
|
|
});
|
|
});
|
|
|
|
// Show the confirmation dialog if the delete checkbox is selected
|
|
function onUserUpdateSubmit(event) {
|
|
const deleteUserCheckbox = document.getElementById('id_delete');
|
|
if (!deleteUserCheckbox.checked) {
|
|
return;
|
|
}
|
|
|
|
if (deleteConfirmed) { // Deletion is already confirmed
|
|
deleteConfirmed = false;
|
|
return;
|
|
}
|
|
|
|
event.preventDefault();
|
|
$("#user-delete-confirm-dialog").modal('show');
|
|
};
|
|
|
|
// Submit the user edit form
|
|
function onUserDeleteConfirmed(form) {
|
|
deleteConfirmed = true;
|
|
$('#user-delete-confirm-dialog').modal('hide');
|
|
// Click instead of submit to disable the submission button
|
|
form.querySelector('input[type=submit]').click();
|
|
};
|