From d40f3ee45a76c59533468b8313a9fc07adabc73a Mon Sep 17 00:00:00 2001 From: Patrick Fic Date: Thu, 5 Sep 2024 11:52:06 -0700 Subject: [PATCH] Add in IP tracking for SingleDeviceOnly checks. --- client/src/redux/user/user.sagas.js | 47 +++++++++++++++++++---------- 1 file changed, 31 insertions(+), 16 deletions(-) diff --git a/client/src/redux/user/user.sagas.js b/client/src/redux/user/user.sagas.js index 99ba30225..52aaff580 100644 --- a/client/src/redux/user/user.sagas.js +++ b/client/src/redux/user/user.sagas.js @@ -10,7 +10,7 @@ import { signInWithEmailAndPassword, signOut } from "firebase/auth"; -import { doc, getDoc, setDoc } from "firebase/firestore"; +import { arrayUnion, doc, getDoc, setDoc, updateDoc } from "firebase/firestore"; import { getToken } from "firebase/messaging"; import i18next from "i18next"; import LogRocket from "logrocket"; @@ -48,6 +48,7 @@ import { validatePasswordResetSuccess } from "./user.actions"; import UserActionTypes from "./user.types"; +import cleanAxios from "../../utils/CleanAxios"; const fpPromise = FingerprintJS.load(); @@ -177,10 +178,24 @@ export function* setInstanceIdSaga({ payload: uid }) { // Get the visitor identifier when you need it. const fp = yield fpPromise; const result = yield fp.get(); - yield setDoc(userInstanceRef, { - timestamp: new Date(), - fingerprint: result.visitorId - }); + const res = yield cleanAxios.get("https://api.ipify.org/?format=json"); + const udoc = yield getDoc(userInstanceRef); + + if (!udoc.data()) { + yield setDoc(userInstanceRef, { + timestamp: new Date(), + fingerprint: result.visitorId, + //totalFingerprint: result, + ip: [res.data.ip] + }); + } else { + yield updateDoc(userInstanceRef, { + timestamp: new Date(), + fingerprint: result.visitorId, + //totalFingerprint: result, + ip: arrayUnion(res.data.ip) + }); + } yield put(setLocalFingerprint(result.visitorId)); yield delay(5 * 60 * 1000); @@ -311,17 +326,17 @@ export function* SetAuthLevelFromShopDetails({ payload }) { ); const user = yield select((state) => state.user.currentUser); - if (payload.features.singleDeviceOnly) { - if ( - !( - user.email.includes("@imex.") || - user.email.includes("@rome.") || - user.email.includes("@rometech.") || - user.email.includes("@promanager.") - ) - ) - yield put(setInstanceId(user.uid)); - } + // if (payload.features.singleDeviceOnly) { + // if ( + // !( + // user.email.includes("@imex.") || + // user.email.includes("@rome.") || + // user.email.includes("@rometech.") || + // user.email.includes("@promanager.") + // ) + // ) + yield put(setInstanceId(user.uid)); + //} //For Rome, check to make sure it's not a PM shop. try {