Skip to content

Commit bd92dfb

Browse files
committed
feat[refresh]: add funtionalty for refresh token for password
1 parent 8f7ec63 commit bd92dfb

File tree

1 file changed

+61
-40
lines changed

1 file changed

+61
-40
lines changed

src/contexts/AuthContext.js

Lines changed: 61 additions & 40 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,30 @@ 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
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

Comments
 (0)