([
["deleteUser", DeleteUser],
["discardEditorChanges", DiscardEditorChanges],
["resolve-conflict", ResolveConflict],
+ ["current-password", CurrentPassword],
]);
const modal = computed(() => {
diff --git a/frontend/src/i18n/en.json b/frontend/src/i18n/en.json
index 77d74d9f..dcbedcef 100644
--- a/frontend/src/i18n/en.json
+++ b/frontend/src/i18n/en.json
@@ -175,7 +175,9 @@
"filesInDest": "Files in destination",
"override": "Overwrite",
"skip": "Skip",
- "forbiddenError": "Forbidden Error"
+ "forbiddenError": "Forbidden Error",
+ "currentPassword": "Your password",
+ "currentPasswordMessage": "Enter your password to validate this action."
},
"search": {
"images": "Images",
diff --git a/frontend/src/views/settings/User.vue b/frontend/src/views/settings/User.vue
index 77786e2a..b726d9ef 100644
--- a/frontend/src/views/settings/User.vue
+++ b/frontend/src/views/settings/User.vue
@@ -15,19 +15,6 @@
:isDefault="false"
:isNew="isNew"
/>
-
-
-
-
-
@@ -77,7 +64,6 @@ const error = ref();
const originalUser = ref();
const user = ref();
const createUserDir = ref(false);
-const currentPassword = ref("");
const isCurrentPasswordRequired = ref(false);
const $showError = inject("$showError")!;
@@ -134,16 +120,30 @@ const fetchData = async () => {
}
};
-const deletePrompt = () =>
- layoutStore.showHover({ prompt: "deleteUser", confirm: deleteUser });
+const deletePrompt = () => {
+ if (isCurrentPasswordRequired.value) {
+ layoutStore.showHover({
+ prompt: "current-password",
+ confirm: (event: Event, currentPassword: string) => {
+ event.preventDefault();
+ layoutStore.closeHovers();
+ deleteUser(currentPassword);
+ },
+ });
+ } else {
+ layoutStore.showHover({
+ prompt: "deleteUser",
+ confirm: () => deleteUser(""),
+ });
+ }
+};
-const deleteUser = async (e: Event) => {
- e.preventDefault();
+const deleteUser = async (currentPassword: string) => {
if (!user.value) {
return false;
}
try {
- await api.remove(user.value.id, currentPassword.value);
+ await api.remove(user.value.id, currentPassword);
router.push({ path: "/settings/users" });
$showSuccess(t("settings.userDeleted"));
} catch (err) {
@@ -157,8 +157,25 @@ const deleteUser = async (e: Event) => {
return true;
};
-const save = async (event: Event) => {
+const save = (event: Event) => {
event.preventDefault();
+ if (isCurrentPasswordRequired.value) {
+ layoutStore.showHover({
+ prompt: "current-password",
+ confirm: (event: Event, currentPassword: string) => {
+ event.preventDefault();
+ layoutStore.closeHovers();
+ send(currentPassword);
+ },
+ });
+ } else {
+ send("");
+ }
+
+ return true;
+};
+
+const send = async (currentPassword: string) => {
if (!user.value) {
return false;
}
@@ -170,11 +187,11 @@ const save = async (event: Event) => {
...user.value,
};
- const loc = await api.create(newUser, currentPassword.value);
+ const loc = await api.create(newUser, currentPassword);
router.push({ path: loc || "/settings/users" });
$showSuccess(t("settings.userCreated"));
} else {
- await api.update(user.value, ["all"], currentPassword.value);
+ await api.update(user.value, ["all"], currentPassword);
if (user.value.id === authStore.user?.id) {
authStore.updateUser(user.value);
@@ -185,7 +202,5 @@ const save = async (event: Event) => {
} catch (e: any) {
$showError(e);
}
-
- return true;
};