i 've added Session

This commit is contained in:
Tamilselvan 2025-12-11 01:45:23 -08:00
parent 7a2978e0a7
commit b7d0da09ad
8 changed files with 162 additions and 46 deletions

View File

@ -0,0 +1,30 @@
ENV_BASE_URL='/'
ENV_COMMON_BASE_URL='http://192.168.1.16:3000/'
# ENV_API_URL='http://192.168.1.25:8001'
# ENV_API_URL='http://api.pozo.co.in/Retailapi_UnderTest'
# ENV_API_URL_COMMON='http://api.pozo.co.in/Pozocommonapi_UnderTest'
# ENV_API_URL='http://192.168.1.37:8010'
# ENV_API_URL_COMMON='http://192.168.1.37'
ENV_API_URL='http://192.168.1.37:8012'
ENV_API_URL_COMMON='http://192.168.1.37:8013'
ENV_API_URL_TOKEN='http://192.168.1.37:8001'
# ENV_API_URL='https://api.pozo.app/pozo-retail-api'
# ENV_API_URL_COMMON='https://api.pozo.app/pozo-common-api'
# ENV_API_URL_TOKEN='https://api.pozo.app/JwtToken'
# ENV_API_URL='https://www.pozo.dev/pozo-retail-api'
# ENV_API_URL_COMMON='https://www.pozo.dev/pozo-common-api'
# ENV_API_URL_TOKEN='https://www.pozo.dev/JwtToken'
ENV_IMAGE_UPLOAD_API_URL="https://api.pozo.app/pozo-common-image-api/"
ENV_SECRET_KEY="3a939a2eed2cca4b64cd47f51b23b135b2b9b765273f695d47682ea803c8429d"
ENV_URL_SECRET_KEY="f2ef79b8b2d4fc1cc569726a5a753552257b4ff2872d6a71cf3119bce3f07c1b"
ENV_MAIN_BASE_URL='http://192.168.1.22:3015/'
ENV_SIGNALR_SERVER_URL='https://www.pozo.dev/'
ENV_IFSC_API_URL = "https://ifsc.razorpay.com"
ENV_PAYMENT_DEVICE_URL='https://pozo.dev/PaymentDevice/PaymentDevice/api/upload-transaction'
ENV_PAYMENT_STATUS_GET_URL='https://pozo.dev/PaymentDevice/PaymentDevice/api/get-transaction-status'
ENV_ANDROID_PRINTER= 'https://pozo.app/downloads/resources/POZO%20Printer.apk'
ENV_ANDROID_KIOSK= 'https://pozo.app/downloads/resources/POZO%20KIOSK.apk'
ENV_ANDROID_HANDHELD= 'https://pozo.dev/downloads/resources/Handheld.apk'
ENV_ANDROID_BILLING= 'https://pozo.dev/downloads/resources/PozoBillingApp.apk'
ENV_EMAIL_API='http://192.168.1.37:8014'

View File

@ -0,0 +1,22 @@
ENV_BASE_URL='/apps/retail/'
ENV_COMMON_BASE_URL='https://pozo.dev'
ENV_API_URL='https://www.pozo.dev/pozo-retail-api'
ENV_API_URL_COMMON='https://www.pozo.dev/pozo-common-api'
ENV_API_URL_TOKEN='https://www.pozo.dev/JwtToken'
ENV_IMAGE_UPLOAD_API_URL="https://www.pozo.dev/pozo-common-image-api"
ENV_SECRET_KEY="3a939a2eed2cca4b64cd47f51b23b135b2b9b765273f695d47682ea803c8429d"
ENV_URL_SECRET_KEY="f2ef79b8b2d4fc1cc569726a5a753552257b4ff2872d6a71cf3119bce3f07c1b"
ENV_MAIN_BASE_URL='https://pozo.dev/apps/retail/'
ENV_SIGNALR_SERVER_URL='https://www.pozo.dev/'
ENV_CUSTOM_PAYMENT_URL='https://pozo.app/CustomPaymentGateway/CustomPaymentGateway'
ENV_IFSC_API_URL = "https://ifsc.razorpay.com"
ENV_PAYMENT_DEVICE_URL='https://pozo.dev/PaymentDevice/PaymentDevice/api/upload-transaction'
ENV_PAYMENT_STATUS_GET_URL='https://pozo.dev/PaymentDevice/PaymentDevice/api/get-transaction-status'
# ENV_PAYMENT_DEVICE_URL='https://www.plutuscloudserviceuat.in:8201/API/CloudBasedIntegration/V1/UploadBilledTransaction'
# ENV_PAYMENT_STATUS_GET_URL='https://www.plutuscloudserviceuat.in:8201/API/CloudBasedIntegration/V1/GetCloudBasedTxnStatus'
ENV_ANDROID_PRINTER= 'https://pozo.dev/downloads/resources/POZO%20Printer.apk'
ENV_ANDROID_KIOSK= 'https://pozo.dev/downloads/resources/POZO%20KIOSK.apk'
ENV_ANDROID_HANDHELD= 'https://pozo.dev/downloads/resources/Handheld.apk'
ENV_ANDROID_BILLING= 'https://pozo.dev/downloads/resources/PozoApp.apk'
ENV_EMAIL_API='https://www.pozo.dev/pozo-sms-email-template-api'

View File

@ -1,5 +1,5 @@
import { createAsyncThunk } from '@reduxjs/toolkit';
import { axiosInstance } from '../../utils/axiosInstances';
import { axiosCommonInstance, axiosInstance } from '../../utils/axiosInstances';
export const getUserData = createAsyncThunk('userSlice/getEmpAccess', async (data) => {
const { UserId } = data;
@ -8,10 +8,10 @@ export const getUserData = createAsyncThunk('userSlice/getEmpAccess', async (dat
}
});
export const getSessionData = createAsyncThunk(
'userSlice/getSessionData',
export const getSessionDataFromCommon = createAsyncThunk(
'userSlice/getSessionDataFromCommon',
async (postData) => {
return await axiosCommonInstanceData.get(
return await axiosCommonInstance.get(
`/URLshortener?referenceNo=${postData}`
);
}

View File

@ -2,6 +2,11 @@
import { Routes, Route } from "react-router-dom";
import { RouteDefinitions } from "./RouteDefinitions";
import { useDispatch } from "react-redux";
import { getSessionDataFromCommon } from "../redux/thunks/userThunk";
import { decryptToObject } from "../utils/others";
import { sessionStore } from "../utils/sessionUtils";
import { useEffect } from "react";
const generateRoutes = (routes) =>
routes.map(({ path, element, children, index }, routeIndex) => (
@ -11,6 +16,40 @@ const generateRoutes = (routes) =>
));
export default function AppRoutes() {
const dispatch = useDispatch()
useEffect(() => {
const init = async () => {
try {
const qrResponse = await dispatch(
getSessionDataFromCommon("sRhok0")
).unwrap();
if (qrResponse?.data?.statusCode == 1) {
const urldata = decryptToObject(qrResponse.data.data?.[0]?.OldUrl);
console.log("Decrypted URL Data:", urldata);
sessionStore("AppId", urldata?.AppId);
sessionStore("CompId", urldata?.CompId);
sessionStore("UserId", urldata?.UserId);
sessionStore("UserType", urldata?.UserType);
sessionStore("MobileNo", urldata?.MobileNo);
sessionStore("SessionId", urldata?.SessionId);
if (urldata?.BranchId) sessionStore("BranchId", urldata?.BranchId);
sessionStorage.setItem("auth", urldata?.auth);
}
}
catch (err) {
}
};
init();
}, []);
const routes = generateRoutes(RouteDefinitions);
return <Routes>{routes}</Routes>;
}

View File

@ -11,28 +11,10 @@ import Transactions from "../pages/Transactions/Transactions.jsx";
import Cashbook from "../pages/Cashbook/Cashbook.jsx";
import Expenses from "../pages/Expenses/Expenses.jsx";
import ProtectedRoute from "./ProtectedRoute.jsx";
import { decryptToObject } from "../utils/others.js";
const user = { name: "Ram", avatar: "R" };
const isAuthenticated = true;
const qrResponse = await dispatch(
PublicQrCodeget(sessionDataCommon)
).unwrap();
const urldata = decryptToObject(qrResponse.data.data?.[0]?.OldUrl);
console.log("Decrypted URL Data:", qrResponse, urldata);
sessionStore("AppId", urldata?.AppId);
sessionStore("CompId", urldata?.CompId);
sessionStore("UserId", urldata?.UserId);
sessionStore("UserType", urldata?.UserType);
sessionStore("MobileNo", urldata?.MobileNo);
sessionStore("SessionId", urldata?.SessionId);
sessionStorage.setItem("auth", urldata?.auth);
if (urldata.BranchId) sessionStore("BranchId", urldata.BranchId);
window.history.replaceState(null, "", window.location.pathname);
window.location.replace(window.location.pathname);
export const RouteDefinitions = [
{
path: "/",

View File

@ -1,11 +1,16 @@
import axios from 'axios'
import { getAuthTokens } from './others.js'
import { getSessionData } from './sessionUtils.js'
import { getSession } from './sessionUtils.js'
const API_URL = import.meta.env.ENV_API_URL
const axiosInstance = axios.create({ baseURL: API_URL })
const apiUrl = import.meta.env.ENV_API_URL;
const apiCommonUrl = import.meta.env.ENV_API_URL_COMMON;
const subDirectory = import.meta.env.ENV_COMMON_BASE_URL;
const EmailApiUrl = import.meta.env.ENV_EMAIL_API;
const axiosInstance = axios.create({ baseURL: apiUrl })
const axiosCommonInstance = axios.create({
baseURL: apiCommonUrl,
});
const addAuthHeader = async (config) => {
try {
const tokens = getAuthTokens();
@ -18,14 +23,14 @@ const addAuthHeader = async (config) => {
console.warn('No access token available.')
}
const mobileNo = await getSessionData('MobileNo');
const userId = await getSessionData('UserId');
const mobileNo = await getSession('MobileNo');
const userId = await getSession('UserId');
if (mobileNo && userId) {
config.headers['MobileNo'] = decryptedUser.MobileNo
} else {
console.warn('MobileNo not found in decrypted data.')
config.headers['MobileNo'] = '9000000001'
config.headers['MobileNo'] = '1000000001'
}
} catch (error) {
@ -36,13 +41,13 @@ const addAuthHeader = async (config) => {
}
axiosInstance.interceptors.request.use(addAuthHeader, (error) => Promise.reject(error))
axiosCommonInstance.interceptors.request.use(addAuthHeader, (error) => {console.error('Error in request interceptor:', error);return Promise.reject(error)});
const responseErrorHandler = async (error, axiosInstance) => {
if (error.response && error.response.status === 401) {
console.warn('Your session has expired. or Unauthorized')
try {
const userId = getSessionData('UserId');
const userId = getSession('UserId');
if (userId) {
error.config.headers['Authorization'] = `Bearer ${newAccessToken}`
return axiosInstance.request(error.config)
@ -63,4 +68,13 @@ axiosInstance.interceptors.response.use(
)
export { axiosInstance };
export { axiosInstance ,axiosCommonInstance};

View File

@ -1,4 +1,6 @@
import CryptoJS from 'crypto-js'
const SECRET_KEY = import.meta.env.ENV_SECRET_KEY;
const URL_SECRET_KEY = import.meta.env.ENV_URL_SECRET_KEY;
export function encryptData(data, ENCRYPTION_KEY) {
try {
@ -9,16 +11,21 @@ export function encryptData(data, ENCRYPTION_KEY) {
return null
}
}
export const decryptToObject=(encryptedUrlSafeStr) =>{
export const decryptToObject=(encryptedUrlSafeStr) =>{
try {
if (!encryptedUrlSafeStr) return null;
// Restore base64 format
let base64 = encryptedUrlSafeStr
.replace(/-/g, "+")
.replace(/_/g, "/");
// Add missing padding
while (base64.length % 4 !== 0) {
base64 += "=";
}
const bytes = CryptoJS.AES.decrypt(base64, SECRET_KEY);
const decrypted = bytes.toString(CryptoJS.enc.Utf8);
return JSON.parse(decrypted);

View File

@ -1,4 +1,5 @@
import { decryptData, encryptData } from './others'
import CryptoJS from 'crypto-js';
const SECRET_KEY = import.meta.env.ENV_SECRET_KEY
@ -11,19 +12,40 @@ export const setSessionData = (key, value) => {
}
}
export const getSessionData = (key) => {
const data = sessionStorage.getItem(key)
if (data) {
try {
const decrypted = decryptData(data, SECRET_KEY)
return decrypted
} catch (err) {
console.error(`Error decrypting session data for key "${key}":`, err)
}
}
return null
}
// export const getSessionData = (key) => {
// const data = sessionStorage.getItem(key)
// if (data) {
// try {
// const decrypted = decryptData(data, SECRET_KEY)
// return decrypted
// } catch (err) {
// console.error(`Error decrypting session data for key "${key}":`, err)
// }
// }
// return null
// }
export const getSession = (key) => {
const val = sessionStorage.getItem(key);
if (val) {
const decrypted = CryptoJS.AES.decrypt(val, SECRET_KEY).toString(
CryptoJS.enc.Utf8
);
if (decrypted) {
return JSON.parse(decrypted);
}
}
};
export const sessionStore = (key, value) => {
const encryptedValue = CryptoJS.AES.encrypt(
JSON.stringify(value),
SECRET_KEY
).toString();
if (encryptedValue) sessionStorage.setItem(key, encryptedValue);
};
export const clearSessionData = (key) => {
sessionStorage.removeItem(key)
}