i 've added Session
This commit is contained in:
parent
7a2978e0a7
commit
b7d0da09ad
|
|
@ -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'
|
||||
|
||||
|
|
@ -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'
|
||||
|
|
@ -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}`
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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>;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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: "/",
|
||||
|
|
|
|||
|
|
@ -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};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue