diff --git a/src/api/accounts.js b/src/api/accounts.js
index 16e3509..b028673 100644
--- a/src/api/accounts.js
+++ b/src/api/accounts.js
@@ -12,6 +12,25 @@ export async function fetchUsers(params = {}) {
}
}
+export async function resetPass(pass) {
+ const payload = { password: pass };
+ try {
+ const { data } = await axios.put(`${baseUrl}/resetpw/`, payload);
+ return data;
+ } catch (e) {
+ console.error(e);
+ }
+}
+
+export async function resetTwoFactor() {
+ try {
+ const { data } = await axios.put(`${baseUrl}/reset2fa/`);
+ return data;
+ } catch (e) {
+ console.error(e);
+ }
+}
+
// role api function
export async function fetchRoles(params = {}) {
try {
diff --git a/src/components/accounts/ResetPass.vue b/src/components/accounts/ResetPass.vue
new file mode 100644
index 0000000..810247a
--- /dev/null
+++ b/src/components/accounts/ResetPass.vue
@@ -0,0 +1,75 @@
+
+
+
+
+ New password:
+
+
+
+
+
+
+
+ Confirm password:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/layouts/MainLayout.vue b/src/layouts/MainLayout.vue
index 97a33d3..7eb4ac9 100644
--- a/src/layouts/MainLayout.vue
+++ b/src/layouts/MainLayout.vue
@@ -140,6 +140,32 @@
Preferences
+
+ Account
+
+
+
+
+
+
+
+
+ Reset Password
+
+
+
+
+ Reset 2FA
+
+
+
+
+
Logout
@@ -161,10 +187,13 @@ import { useQuasar } from "quasar";
import { useStore } from "vuex";
import axios from "axios";
import { getWSUrl } from "@/websocket/channels";
+import { resetTwoFactor } from "@/api/accounts";
+import { notifySuccess } from "@/utils/notify";
// ui imports
import AlertsIcon from "@/components/AlertsIcon.vue";
import UserPreferences from "@/components/modals/coresettings/UserPreferences.vue";
+import ResetPass from "@/components/accounts/ResetPass.vue";
export default {
name: "MainLayout",
@@ -202,6 +231,26 @@ export default {
}).onOk(() => store.dispatch("getDashInfo"));
}
+ function resetPassword() {
+ $q.dialog({
+ component: ResetPass,
+ });
+ }
+
+ function reset2FA() {
+ $q.dialog({
+ title: "Reset 2FA",
+ message: "Are you sure you would like to reset your 2FA token?",
+ cancel: true,
+ persistent: true,
+ }).onOk(async () => {
+ try {
+ const ret = await resetTwoFactor();
+ notifySuccess(ret, 3000);
+ } catch {}
+ });
+ }
+
const serverCount = ref(0);
const serverOfflineCount = ref(0);
const workstationCount = ref(0);
@@ -286,6 +335,8 @@ export default {
// methods
showUserPreferences,
+ resetPassword,
+ reset2FA,
updateAvailable,
};
},