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,30 @@ 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
27-
28- return ( ) => clearInterval ( interval ) ;
29- }
23+ const interval = setInterval ( ( ) => {
24+ const refresh_token = localStorage . getItem ( 'licensedb.refresh_token' ) ;
25+ if ( refresh_token ) {
26+ getAccessTokenFromRefreshToken ( ) ;
27+ console . log ( 'Using refresh token:' , refresh_token ) ;
28+ }
29+ } , 30 * 60 * MILLISEC ) ; // every 30 minutes
30+
31+ return ( ) => clearInterval ( interval ) ;
3032 } , [ ] ) ;
33+
3134
3235 async function Signin ( userCredentialsPayload ) {
3336 try {
3437 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 ) ;
38+ const { data } = await axios . post ( url , userCredentialsPayload ) ;
39+ const { access_token , refresh_token , expires_in } = data . data ;
3740
38- const user = await fetchUserProfile ( response . data . token ) ;
41+ localStorage . setItem ( 'licensedb.token' , access_token ) ;
42+ localStorage . setItem ( 'licensedb.refresh_token' , refresh_token ) ;
43+ let expires_at = Date . now ( ) + expires_in * MILLISEC ;
44+ localStorage . setItem ( 'licensedb.expires_at' , expires_at ) ;
45+
46+ const user = await fetchUserProfile ( access_token ) ;
3947 localStorage . setItem (
4048 'licensedb.user' ,
4149 JSON . stringify ( user . data [ 0 ] ) ,
@@ -52,11 +60,10 @@ export function AuthProvider({ children }) {
5260 async function OidcSignin ( ) {
5361 const { code_verifier, code_challenge } = await generatePKCE ( ) ;
5462 localStorage . setItem ( 'licensedb.codeVerifier' , code_verifier ) ;
55- const auth_url = `${ process . env . REACT_APP_AUTH_URL } ?response_type=code&client_id=${
56- process . env . REACT_APP_CLIENT_ID
57- } &redirect_uri=${ encodeURIComponent (
58- process . env . REACT_APP_REDIRECT_URL ,
59- ) } &scope=openid&code_challenge=${ code_challenge } &code_challenge_method=S256&response_mode=fragment`;
63+ const auth_url = `${ process . env . REACT_APP_AUTH_URL } ?response_type=code&client_id=${ process . env . REACT_APP_CLIENT_ID
64+ } &redirect_uri=${ encodeURIComponent (
65+ process . env . REACT_APP_REDIRECT_URL ,
66+ ) } &scope=openid&code_challenge=${ code_challenge } &code_challenge_method=S256&response_mode=fragment`;
6067
6168 window . location . href = auth_url ;
6269 }
@@ -163,32 +170,47 @@ async function getAccessTokenFromRefreshToken() {
163170 let expires_at = null ;
164171 try {
165172 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' ,
173+ if ( process . env . REACT_APP_PROVIDER === 'oidc' ) {
174+ const response = await axios . post (
175+ process . env . REACT_APP_TOKEN_URL ,
176+ {
177+ grant_type : 'refresh_token' ,
178+ client_id : process . env . REACT_APP_CLIENT_ID ,
179+ refresh_token : refresh_token ,
180+ scope : 'openid' ,
178181 } ,
179- } ,
180- ) ;
182+ {
183+ headers : {
184+ 'Content-Type' : 'application/x-www-form-urlencoded' ,
185+ } ,
186+ } ,
187+ ) ;
181188
182- token = response . data . id_token ;
183- new_refresh_token = response . data . refresh_token ;
184- expires_at = Date . now ( ) + response . data . expires_in * MILLISEC ;
189+ token = response . data . id_token ;
190+ new_refresh_token = response . data . refresh_token ;
191+ expires_at = Date . now ( ) + response . data . expires_in * MILLISEC ;
185192
186- const user = await fetchUserProfile ( token ) ;
193+ const user = await fetchUserProfile ( token ) ;
187194
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 ] ) ) ;
195+ localStorage . setItem ( 'licensedb.token' , token ) ;
196+ localStorage . setItem ( 'licensedb.expires_at' , expires_at ) ;
197+ localStorage . setItem ( 'licensedb.refresh_token' , new_refresh_token ) ;
198+ localStorage . setItem ( 'licensedb.user' , JSON . stringify ( user . data [ 0 ] ) ) ;
199+ } else { // local
200+ const url = `${ process . env . REACT_APP_BASE_URL } /refresh-token` ;
201+ const { data } = await axios . post ( url , {
202+ refresh_token : refresh_token ,
203+ } ) ;
204+ token = data . data . access_token ;
205+ new_refresh_token = data . data . refresh_token ;
206+ expires_at = Date . now ( ) + data . data . expires_in * MILLISEC ;
207+
208+ const user = await fetchUserProfile ( token ) ;
209+
210+ localStorage . setItem ( 'licensedb.token' , token ) ;
211+ localStorage . setItem ( 'licensedb.expires_at' , expires_at ) ;
212+ localStorage . setItem ( 'licensedb.refresh_token' , new_refresh_token ) ;
213+ localStorage . setItem ( 'licensedb.user' , JSON . stringify ( user . data [ 0 ] ) ) ; }
192214 } catch ( e ) {
193215 if ( e . response ?. data ?. status ) {
194216 if ( e . response . data . status !== 409 ) {
@@ -218,8 +240,7 @@ export async function GetToken() {
218240 let token = localStorage . getItem ( 'licensedb.token' ) ;
219241 const BUFFER_TIME = 60 * MILLISEC * 10 ; // 10 mins
220242 if (
221- Date . now ( ) >= Number ( expires_at ) - BUFFER_TIME &&
222- process . env . REACT_APP_PROVIDER === 'oidc'
243+ Date . now ( ) >= Number ( expires_at ) - BUFFER_TIME
223244 ) {
224245 await getAccessTokenFromRefreshToken ( ) ;
225246 token = localStorage . getItem ( 'licensedb.token' ) ;
0 commit comments