users: make remove 2fa separate dialog

This commit is contained in:
Girish Ramakrishnan
2025-12-01 18:29:04 +01:00
parent 31fb22a7c3
commit 6432851a78
3 changed files with 39 additions and 22 deletions
+32 -1
View File
@@ -15,10 +15,12 @@ import PasswordResetDialog from '../components/PasswordResetDialog.vue';
import UsersModel from '../models/UsersModel.js';
import GroupsModel from '../models/GroupsModel.js';
import ProfileModel from '../models/ProfileModel.js';
import DashboardModel from '../models/DashboardModel.js';
const usersModel = UsersModel.create();
const groupsModel = GroupsModel.create();
const profileModel = ProfileModel.create();
const dashboardModel = DashboardModel.create();
const usersColumns = {
role: {
@@ -52,6 +54,12 @@ function onUserActionMenu(user, event) {
visible: !user.inviteAccepted && !isMe(user) && !user.source,
disabled: !canEdit(user),
action: onInvitation.bind(null, user),
}, {
icon: 'fa-solid fa-qrcode',
label: t('users.passwordResetDialog.reset2FAAction'),
visible: user.twoFactorAuthenticationEnabled && !(user.source && external2FA),
disabled: !canEdit(user),
action: on2FAReset.bind(null, user),
}, {
icon: 'fa-solid fa-key',
label: t('users.users.resetPasswordTooltip'),
@@ -75,6 +83,7 @@ function onUserActionMenu(user, event) {
actionMenuElement.value.open(event, event.currentTarget);
}
const external2FA = ref(false);
const profile = ref({});
const busy = ref(true);
const filterOptions = ref([
@@ -167,6 +176,24 @@ function onPasswordReset(user) {
passwordResetDialog.value.open(user);
}
async function on2FAReset(user) {
const yes = await inputDialog.value.confirm({
title: t('users.2FAResetDialog.title'),
message: t('users.2FAResetDialog.description', { username: (user.username || user.email) }),
confirmStyle: 'danger',
confirmLabel: t('main.action.reset'),
rejectLabel: t('main.dialog.cancel'),
rejectStyle: 'secondary'
});
if (!yes) return;
const [error] = await usersModel.disableTwoFactorAuthentication(user.id);
if (error) return console.error(error);
user.twoFactorAuthenticationEnabled = false;
}
function onEditOrAddUser(user = null) {
if (user || features.value.userMaxCount > users.value.length) userDialog.value.open(user);
else subscriptionRequiredDialog.value.open();
@@ -196,7 +223,7 @@ async function onRemoveUser(user) {
}
onMounted(async () => {
const [error, result] = await profileModel.get();
let [error, result] = await profileModel.get();
if (error) return console.error(error);
profile.value = result;
@@ -213,6 +240,10 @@ onMounted(async () => {
{ id: 'owner', name: t('users.role.owner'), disabled: !profile.value.isAtLeastOwner }
];
[error, result] = await dashboardModel.config();
if (error) return console.error(error);
external2FA.value = result.external2FA;
busy.value = false;
});