base_ui/stores/authStore.ts

547 lines
16 KiB
TypeScript
Raw Normal View History

2025-02-01 09:34:55 +00:00
import apis from "~/apis/authApi";
import { defineStore } from "pinia";
import { useCommonStore } from "./commonStore";
import type { User } from "~/types/commonTypes";
import { useStorage } from "@vueuse/core";
import { clearStorage } from "@/manuals/localStorage";
export const useAuthStore = defineStore("authStore", {
// persist: true,
persist: {
storage: piniaPluginPersistedstate.localStorage(),
pick: [
"mobile",
"fullName",
"isResetPassword",
"errors",
"user",
"isAuthenticated",
"isRealUser",
"authHttpService",
],
},
state: () => ({
mobile: null as string | null,
fullName: undefined as object | undefined,
isResetPassword: false as boolean,
errors: null as null | object,
user: {} as User,
isAuthenticated: false as boolean,
isRealUser: useStorage("user_stt", "user").value
? true
: (false as boolean),
// authHttpService: undefined as object | undefined,
}),
getters: {
currentUser(state) {
if ("user_id" in state.user) {
return state.user;
} else {
const defaultUserValue: User = {
user_id: 0,
user_level: 0,
token: "",
expire: 0,
type: 0,
refresh_token: "",
refresh_expire: 0,
user_data: {
first_name: "",
last_name: "",
avatar: "",
username: "",
},
};
const user = useStorage("user", defaultUserValue).value;
if (user) {
state.user = user;
return user;
}
return {};
}
},
isRealUserGetter(state) {
return state.isRealUser;
},
isGuest(state) {
return !state.isRealUser;
},
async isAuthenticatedGetter(state) {
let isAuthenticated = useStorage("id_token", "GuestAccess").value;
// updating value sample
// isAuthenticated.value = null
return isAuthenticated.length ? true : false;
},
getResetPasswordState(state) {
return state.isResetPassword;
},
getFullName(state) {
return state.fullName;
},
getMobile(state) {
return state.mobile;
},
},
actions: {
SET_USER_PHONE_NUMBER(mobile: string) {
this.mobile = mobile;
},
SET_USER_FULL_NAME(fullName: object) {
this.fullName = fullName;
// this.fullName.name = fullName?.first_name ?? undefined;
},
SET_IS_RESET_PASSWORD(isResetPassword = true) {
this.isResetPassword = isResetPassword;
},
setError(error = null) {
this.errors = error;
},
setUser(response) {
const myStore = useCommonStore();
this.isAuthenticated = true;
this.isRealUser = true;
this.user = response;
this.errors = {};
let id_token = useStorage("id_token", "");
id_token.value = this.user.token;
let user = useStorage("user", {});
user.value = this.user;
let user_stt = useStorage("user_stt", "");
user_stt.value = "user";
let USER_TYPE = useStorage("USER_TYPE", {});
USER_TYPE.value = this.user.type;
myStore.tokenIsValid = true;
},
setGuest(user: User) {
const myStore = useCommonStore();
this.isAuthenticated = true;
this.isRealUser = false;
this.user = user;
this.errors = {};
let id_token = useStorage("id_token", "");
id_token.value = "GuestAccess";
let userStr = useStorage("user", {});
userStr.value = this.user;
let user_stt = useStorage("user_stt", "");
user_stt.value = "c";
let USER_TYPE = useStorage("USER_TYPE", "-1");
USER_TYPE.value = "-1";
myStore.tokenIsValid = true;
},
logout() {
clearStorage();
const htmlElm = document.querySelector("html");
if (htmlElm) htmlElm.style.removeProperty("filter");
},
async getCaptcha() {
try {
const { $api } = useNuxtApp();
const response = await $api(apis.captcha, {
baseURL: import.meta.env.VITE_AUTH_BASE_URL,
method: "GET",
});
return response;
} catch (error) {
return error;
}
// const authHttpService = new HttpService(import.meta.env.VITE_AUTH_BASE_URL);
// return new Promise((resolve, reject) => {
// authHttpService
// .getRequest(apis.captcha)
// .then((response) => {
// resolve(response);
// })
// .catch((error) => {
// this.errors = error?.response?.data.message;
// reject(error?.response?.data);
// });
// });
},
async phoneLogin(credentials) {
try {
const { $api } = useNuxtApp();
const response = await $api(apis.phoneLogin, {
baseURL: import.meta.env.VITE_AUTH_BASE_URL,
method: "POST",
body: credentials,
});
this.setUser(response?.data);
return response;
} catch (error) {
this.errors = error?.response?.data.message;
return error;
}
// const authHttpService = new HttpService(import.meta.env.VITE_AUTH_BASE_URL);
// return new Promise((resolve, reject) => {
// authHttpService
// .postRequest(apis.phoneLogin, credentials)
// .then((response) => {
// resolve(response);
// })
// .catch((error) => {
// this.errors = error?.response?.data.message;
// reject(error?.response?.data);
// });
// });
},
async getActivationCode(credentials) {
try {
const { $api } = useNuxtApp();
const response = await $api(apis.activationCode, {
baseURL: import.meta.env.VITE_AUTH_BASE_URL,
method: "POST",
body: credentials,
});
this.setUser(response);
return response;
} catch (error) {
this.errors = error?.response?.data.message;
return error;
}
// const authHttpService = new HttpService(import.meta.env.VITE_AUTH_BASE_URL);
// return new Promise((resolve, reject) => {
// authHttpService
// .postRequest(apis.activationCode, credentials)
// .then((response) => {
// this.setUser(response.data);
// resolve(response);
// })
// .catch((error) => {
// this.errors = error?.response?.data.message;
// reject(error?.response?.data);
// });
// });
},
async loginWithGoogle(credentials) {
try {
const { $api } = useNuxtApp();
const response = await $api(apis.loginGoogle, {
baseURL: import.meta.env.VITE_AUTH_BASE_URL,
method: "POST",
body: credentials,
});
this.setUser(response?.data);
return response;
} catch (error) {
this.errors = error?.response?.data.message;
return error;
}
// const authHttpService = new HttpService(import.meta.env.VITE_AUTH_BASE_URL);
// return new Promise((resolve, reject) => {
// authHttpService
// .postRequest(apis.loginGoogle, credentials)
// .then((response) => {
// this.setUser(response.data);
// resolve(response);
// })
// .catch((error) => {
// this.errors = error?.response?.data.message;
// reject(error?.response?.data);
// });
// });
},
async login(credentials) {
try {
const { $api } = useNuxtApp();
const response = await $api(apis.login, {
baseURL: import.meta.env.VITE_AUTH_BASE_URL,
method: "POST",
body: credentials,
});
this.setUser(response.data);
return response;
} catch (error) {
this.errors = error?.response?.data.message;
return error;
}
// const authHttpService = new HttpService(import.meta.env.VITE_AUTH_BASE_URL);
// return new Promise((resolve, reject) => {
// authHttpService
// .postRequest(apis.login, credentials)
// .then((response) => {
// this.setUser(response.data);
// resolve(response);
// })
// .catch((error) => {
// this.errors = error?.response?.data.message;
// reject(error?.response?.data);
// });
// });
},
// called from the router.js
async loginAsGuest2() {
try {
const { $api } = useNuxtApp();
const response = await $api(apis.validateUser, {
baseURL: import.meta.env.VITE_AUTH_BASE_URL,
headers: {
"Content-Type": "application/x-www-form-urlencoded",
Authorization: "GuestAccess",
},
});
this.setUser(response?.data);
return response;
} catch (error) {
this.errors = error?.response?.data.message;
return error;
}
// return new Promise((resolve, reject) => {
// const httpService = new HttpService(import.meta.env.VITE_AUTH_BASE_URL);
// httpService
// .getRequest(apis.validateUser, {
// headers: {
// "Content-Type": "application/x-www-form-urlencoded",
// Authorization: "GuestAccess",
// },
// })
// .then((response) => {
// // let res = data.data;
// // res.data.user_data =res.data;
// this.setUser(response.data);
// resolve(response);
// })
// .catch((error) => {
// this.errors = error?.response?.data.message;
// reject(error?.response?.data);
// });
// });
},
// called from the auth mixin.
async loginAsGuest() {
try {
const { $api } = useNuxtApp();
const response = await $api(apis.validateUser, {
baseURL: import.meta.env.VITE_AUTH_BASE_URL,
headers: {
"Content-Type": "application/x-www-form-urlencoded",
Authorization: "GuestAccess",
},
});
this.setUser(response?.data);
return response;
} catch (error) {
this.errors = error?.response?.data.message;
return error;
}
// const authHttpService = new HttpService(import.meta.env.VITE_AUTH_BASE_URL);
// return new Promise((resolve, reject) => {
// authHttpService
// .getRequest(apis.validateUser, {
// headers: {
// "Content-Type": "application/x-www-form-urlencoded",
// Authorization: "GuestAccess",
// },
// })
// .then((response) => {
// // let res = data.data;
// // res.data.user_data =res.data;
// this.setUser(response.data);
// resolve(response);
// })
// .catch((error) => {
// this.errors = error?.response?.data.message;
// reject(error?.response?.data);
// });
// });
},
async forget(credentials) {
try {
const { $api } = useNuxtApp();
const response = await $api(apis.forget, {
baseURL: import.meta.env.VITE_AUTH_BASE_URL,
method: "POST",
body: credentials,
});
this.setUser(response?.data);
return response;
} catch (error) {
this.errors = error?.response?.data.message;
return error;
}
// const authHttpService = new HttpService(import.meta.env.VITE_AUTH_BASE_URL);
// return new Promise((resolve, reject) => {
// authHttpService
// .postRequest(apis.forget, credentials)
// .then((response) => {
// this.setUser(response.data);
// resolve(response);
// })
// .catch((error) => {
// this.errors = error?.response?.data.message;
// reject(error?.response?.data);
// });
// });
},
async resetPassword(credentials) {
try {
const { $api } = useNuxtApp();
const response = await $api(apis.resetPassword, {
baseURL: import.meta.env.VITE_AUTH_BASE_URL,
method: "POST",
body: credentials,
});
this.setUser(response?.data);
return response;
} catch (error) {
this.errors = error?.response?.data.message;
return error;
}
// const authHttpService = new HttpService(import.meta.env.VITE_AUTH_BASE_URL);
// return new Promise((resolve, reject) => {
// authHttpService
// .postRequest(apis.resetPassword, credentials)
// .then((response) => {
// this.setUser(response.data);
// resolve(response);
// })
// .catch((error) => {
// this.errors = error?.response?.data.message;
// reject(error?.response?.data);
// });
// });
},
async register(credentials) {
try {
const { $api } = useNuxtApp();
const response = await $api(apis.register, {
baseURL: import.meta.env.VITE_AUTH_BASE_URL,
method: "POST",
body: credentials,
});
this.setUser(response?.data);
return response;
} catch (error) {
this.errors = error?.response?.data.message;
return error;
}
// const authHttpService = new HttpService(import.meta.env.VITE_AUTH_BASE_URL);
// return new Promise((resolve, reject) => {
// authHttpService
// .postRequest(apis.register, credentials)
// .then((response) => {
// this.setUser(response.data);
// resolve(response);
// })
// .catch((error) => {
// this.errors = error?.response?.data.message;
// reject(error?.response?.data);
// });
// });
},
// verifyRealUser() {
// const authHttpService = new HttpService(
// import.meta.env.VITE_AUTH_BASE_URL
// );
// if (getUserStt() != "user") return false;
// if (getToken()) {
// authHttpService.updateHeaders();
// return true;
// }
// return false;
// },
// verifyAuth() {
// const authHttpService = new HttpService(
// import.meta.env.VITE_AUTH_BASE_URL
// );
// if (getToken()) {
// authHttpService.updateHeaders();
// return true;
// } else {
// logout();
// this.setGuest({
// id: 3,
// first_name: "کاربر",
// last_name: "مهمان",
// email: "",
// username: "Guest",
// user_id: 3,
// user_data: {
// first_name: "کاربر",
// last_name: "مهمان",
// username: "Guest",
// },
// });
// authHttpService.updateHeaders();
// return true;
// // logout();
// // return false;
// }
// },
async updatePassword(credentials) {
try {
const { $api } = useNuxtApp();
const response = await $api(apis.changePassword, {
baseURL: import.meta.env.VITE_AUTH_BASE_URL,
method: "POST",
body: credentials,
});
this.setUser(response?.data);
return response;
} catch (error) {
this.errors = error?.response?.data.message;
return error;
}
// const authHttpService = new HttpService(import.meta.env.VITE_AUTH_BASE_URL);
// return new Promise((resolve, reject) => {
// authHttpService
// .postRequest(apis.changePassword, credentials)
// .then((response) => {
// this.setUser(response.data);
// resolve(response);
// })
// .catch((error) => {
// this.errors = error?.response?.data.message;
// reject(error?.response?.data);
// });
// });
},
},
});