Skip to content

Commit 96496d1

Browse files
committed
feat[refresh]: add funtionalty for refresh token for password
Signed-off-by: Chayan Das <[email protected]>
1 parent 8f7ec63 commit 96496d1

File tree

1 file changed

+67
-36
lines changed

1 file changed

+67
-36
lines changed

src/contexts/AuthContext.js

Lines changed: 67 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
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

67
import React, { useContext, useEffect } from 'react';
78
import axios from 'axios';
@@ -19,23 +20,33 @@ export function useAuth() {
1920

2021
export 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

Comments
 (0)