22// SPDX-FileCopyrightText: © 2025 Siemens AG
33// SPDX-FileContributor: Sourav Bhowmik <[email protected] > 44// SPDX-FileContributor: Dearsh Oberoi <[email protected] > 5+ // SPDX-FileContributor: 2025 Chayan Das <[email protected] > 56
67import React , { useContext , useEffect } from 'react' ;
78import axios from 'axios' ;
@@ -19,23 +20,33 @@ export function useAuth() {
1920
2021export function AuthProvider ( { children } ) {
2122 useEffect ( ( ) => {
22- if ( process . env . REACT_APP_PROVIDER === 'oidc' ) {
23- const interval = setInterval (
24- getAccessTokenFromRefreshToken ,
25- 30 * 60 * MILLISEC ,
26- ) ; // every 30 minutes
23+ const interval = setInterval (
24+ ( ) => {
25+ const refresh_token = localStorage . getItem (
26+ 'licensedb.refresh_token' ,
27+ ) ;
28+ if ( refresh_token ) {
29+ getAccessTokenFromRefreshToken ( ) ;
30+ }
31+ } ,
32+ 30 * 60 * MILLISEC ,
33+ ) ; // every 30 minutes
2734
28- return ( ) => clearInterval ( interval ) ;
29- }
35+ return ( ) => clearInterval ( interval ) ;
3036 } , [ ] ) ;
3137
3238 async function Signin ( userCredentialsPayload ) {
3339 try {
3440 const url = `${ process . env . REACT_APP_BASE_URL } /login` ;
35- const response = await axios . post ( url , userCredentialsPayload ) ;
36- localStorage . setItem ( 'licensedb.token' , response . data . token ) ;
41+ const { data } = await axios . post ( url , userCredentialsPayload ) ;
42+ const { access_token , refresh_token , expires_in } = data . data ;
3743
38- const user = await fetchUserProfile ( response . data . token ) ;
44+ localStorage . setItem ( 'licensedb.token' , access_token ) ;
45+ localStorage . setItem ( 'licensedb.refresh_token' , refresh_token ) ;
46+ let expires_at = Date . now ( ) + expires_in * MILLISEC ;
47+ localStorage . setItem ( 'licensedb.expires_at' , expires_at ) ;
48+
49+ const user = await fetchUserProfile ( access_token ) ;
3950 localStorage . setItem (
4051 'licensedb.user' ,
4152 JSON . stringify ( user . data [ 0 ] ) ,
@@ -163,32 +174,55 @@ async function getAccessTokenFromRefreshToken() {
163174 let expires_at = null ;
164175 try {
165176 const refresh_token = localStorage . getItem ( 'licensedb.refresh_token' ) ;
166-
167- const response = await axios . post (
168- process . env . REACT_APP_TOKEN_URL ,
169- {
170- grant_type : 'refresh_token' ,
171- client_id : process . env . REACT_APP_CLIENT_ID ,
172- refresh_token : refresh_token ,
173- scope : 'openid' ,
174- } ,
175- {
176- headers : {
177- 'Content-Type' : 'application/x-www-form-urlencoded' ,
177+ if ( process . env . REACT_APP_PROVIDER === 'oidc' ) {
178+ const response = await axios . post (
179+ process . env . REACT_APP_TOKEN_URL ,
180+ {
181+ grant_type : 'refresh_token' ,
182+ client_id : process . env . REACT_APP_CLIENT_ID ,
183+ refresh_token : refresh_token ,
184+ scope : 'openid' ,
178185 } ,
179- } ,
180- ) ;
186+ {
187+ headers : {
188+ 'Content-Type' : 'application/x-www-form-urlencoded' ,
189+ } ,
190+ } ,
191+ ) ;
192+
193+ token = response . data . id_token ;
194+ new_refresh_token = response . data . refresh_token ;
195+ expires_at = Date . now ( ) + response . data . expires_in * MILLISEC ;
196+
197+ const user = await fetchUserProfile ( token ) ;
181198
182- token = response . data . id_token ;
183- new_refresh_token = response . data . refresh_token ;
184- expires_at = Date . now ( ) + response . data . expires_in * MILLISEC ;
199+ localStorage . setItem ( 'licensedb.token' , token ) ;
200+ localStorage . setItem ( 'licensedb.expires_at' , expires_at ) ;
201+ localStorage . setItem ( 'licensedb.refresh_token' , new_refresh_token ) ;
202+ localStorage . setItem (
203+ 'licensedb.user' ,
204+ JSON . stringify ( user . data [ 0 ] ) ,
205+ ) ;
206+ } else {
207+ // local
208+ const url = `${ process . env . REACT_APP_BASE_URL } /refresh-token` ;
209+ const { data } = await axios . post ( url , {
210+ refresh_token : refresh_token ,
211+ } ) ;
212+ token = data . data . access_token ;
213+ new_refresh_token = data . data . refresh_token ;
214+ expires_at = Date . now ( ) + data . data . expires_in * MILLISEC ;
185215
186- const user = await fetchUserProfile ( token ) ;
216+ const user = await fetchUserProfile ( token ) ;
187217
188- localStorage . setItem ( 'licensedb.token' , token ) ;
189- localStorage . setItem ( 'licensedb.expires_at' , expires_at ) ;
190- localStorage . setItem ( 'licensedb.refresh_token' , new_refresh_token ) ;
191- localStorage . setItem ( 'licensedb.user' , JSON . stringify ( user . data [ 0 ] ) ) ;
218+ localStorage . setItem ( 'licensedb.token' , token ) ;
219+ localStorage . setItem ( 'licensedb.expires_at' , expires_at ) ;
220+ localStorage . setItem ( 'licensedb.refresh_token' , new_refresh_token ) ;
221+ localStorage . setItem (
222+ 'licensedb.user' ,
223+ JSON . stringify ( user . data [ 0 ] ) ,
224+ ) ;
225+ }
192226 } catch ( e ) {
193227 if ( e . response ?. data ?. status ) {
194228 if ( e . response . data . status !== 409 ) {
@@ -217,10 +251,7 @@ export async function GetToken() {
217251 const expires_at = localStorage . getItem ( 'licensedb.expires_at' ) ;
218252 let token = localStorage . getItem ( 'licensedb.token' ) ;
219253 const BUFFER_TIME = 60 * MILLISEC * 10 ; // 10 mins
220- if (
221- Date . now ( ) >= Number ( expires_at ) - BUFFER_TIME &&
222- process . env . REACT_APP_PROVIDER === 'oidc'
223- ) {
254+ if ( Date . now ( ) >= Number ( expires_at ) - BUFFER_TIME ) {
224255 await getAccessTokenFromRefreshToken ( ) ;
225256 token = localStorage . getItem ( 'licensedb.token' ) ;
226257 }
0 commit comments