users: make remove 2fa separate dialog
This commit is contained in:
@@ -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;
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user