diff --git a/src/front/Api/BaseApiService.ts b/src/front/Api/BaseApiService.ts index 330551a4..01ad7443 100644 --- a/src/front/Api/BaseApiService.ts +++ b/src/front/Api/BaseApiService.ts @@ -135,9 +135,8 @@ export default abstract class BaseApiService { private async checkJwtToken() { const accessToken = CookieService.getInstance().getCookie("leCoffreAccessToken"); - if (!accessToken) { - return; - } + if (!accessToken) return; + const userDecodedToken = jwt_decode(accessToken) as IUserJwtPayload; const customerDecodedToken = jwt_decode(accessToken) as ICustomerJwtPayload; diff --git a/src/front/Components/Layouts/Subscription/SubscriptionSuccess/index.tsx b/src/front/Components/Layouts/Subscription/SubscriptionSuccess/index.tsx index 6ec13f3f..ad4c8bd7 100644 --- a/src/front/Components/Layouts/Subscription/SubscriptionSuccess/index.tsx +++ b/src/front/Components/Layouts/Subscription/SubscriptionSuccess/index.tsx @@ -13,6 +13,7 @@ import Subscriptions from "@Front/Api/LeCoffreApi/Admin/Subscriptions/Subscripti import JwtService from "@Front/Services/JwtService/JwtService"; import { Subscription } from "le-coffre-resources/dist/Admin"; import Stripe from "@Front/Api/LeCoffreApi/Admin/Stripe/Stripe"; +import CookieService from "@Front/Services/CookieService/CookieService"; export default function SubscriptionSuccess() { const [subscription, setSubscription] = useState(null); @@ -27,6 +28,14 @@ export default function SubscriptionSuccess() { setCustomer(customer); }, []); + const refreshToken = useCallback(async () => { + CookieService.getInstance().deleteCookie("leCoffreAccessToken"); + const refreshToken = CookieService.getInstance().getCookie("leCoffreRefreshToken"); + if (!refreshToken) return; + await JwtService.getInstance().forceRefreshToken(refreshToken); + await loadSubscription(); + }, [loadSubscription]); + const getFrequency = useCallback(() => { if (!subscription) return; const start = new Date(subscription.start_date); @@ -38,8 +47,8 @@ export default function SubscriptionSuccess() { }, [subscription]); useEffect(() => { - loadSubscription(); - }, [loadSubscription]); + refreshToken(); + }, [refreshToken]); return ( diff --git a/src/front/Services/JwtService/JwtService.ts b/src/front/Services/JwtService/JwtService.ts index 38693eab..e53789ad 100644 --- a/src/front/Services/JwtService/JwtService.ts +++ b/src/front/Services/JwtService/JwtService.ts @@ -112,6 +112,54 @@ export default class JwtService { return false; } + public async forceRefreshToken(refreshToken: string): Promise { + const userToken = jwt_decode(refreshToken) as IUserJwtPayload; + const customerToken = jwt_decode(refreshToken) as ICustomerJwtPayload; + + const variables = FrontendVariables.getInstance(); + if (userToken?.userId) { + try { + const headers = new Headers(); + headers.append("Authorization", `Bearer ${refreshToken}`); + const response = await fetch( + `${ + variables.BACK_API_PROTOCOL + variables.BACK_API_HOST + variables.BACK_API_ROOT_URL + variables.BACK_API_VERSION + }/idnot/user/auth/refresh-token`, + { method: "POST", headers: headers }, + ); + const newAccessToken: { accessToken: string } = await response.json(); + if (newAccessToken) { + await UserStore.instance.connect(newAccessToken.accessToken, refreshToken); + return true; + } + } catch (err) { + console.error(err); + return false; + } + } else if (customerToken?.customerId) { + try { + const headers = new Headers(); + headers.append("Authorization", `Bearer ${refreshToken}`); + const response = await fetch( + `${ + variables.BACK_API_PROTOCOL + variables.BACK_API_HOST + variables.BACK_API_ROOT_URL + variables.BACK_API_VERSION + }/id360/customers/refresh-token`, + { method: "POST", headers: headers }, + ); + const newAccessToken: { accessToken: string } = await response.json(); + if (newAccessToken) { + await CustomerStore.instance.connect(newAccessToken.accessToken, refreshToken); + return true; + } + } catch (err) { + console.error(err); + return false; + } + } + + return false; + } + public hasRule(name: string, action: string) { const token = this.decodeJwt(); if (!token) return false;