90 lines
2.7 KiB
JavaScript
90 lines
2.7 KiB
JavaScript
|
import moment from 'moment';
|
||
|
import fetch from 'node-fetch';
|
||
|
|
||
|
const _accessTokenEndpoint =
|
||
|
'https://idm.staging.floriday.io/oauth2/ausmw6b47z1BnlHkw0h7/v1/token';
|
||
|
|
||
|
async function getClientToken(models) {
|
||
|
const clientConfigData = await models.clientConfig.findAll();
|
||
|
|
||
|
const now = moment().format('YYYY-MM-DD HH:mm:ss');
|
||
|
const tokenExpirationDate = clientConfigData[0].tokenExpiration;
|
||
|
|
||
|
if (
|
||
|
clientConfigData[0].tokenExpiration == null ||
|
||
|
moment(now).isAfter(tokenExpirationDate)
|
||
|
) {
|
||
|
let clientId = clientConfigData[0].clientId;
|
||
|
let clientSecret = clientConfigData[0].clientSecret;
|
||
|
|
||
|
const tokenRequest = await fetch(_accessTokenEndpoint, {
|
||
|
method: 'POST',
|
||
|
headers: {
|
||
|
'Content-Type': 'application/x-www-form-urlencoded',
|
||
|
},
|
||
|
body: `grant_type=client_credentials&client_id=${clientId}&client_secret=${clientSecret}&scope=role:app catalog:read supply:read organization:read network:read`,
|
||
|
});
|
||
|
|
||
|
const tokenResponse = await tokenRequest.json();
|
||
|
|
||
|
if (tokenRequest.status === 200) {
|
||
|
console.log('Token request successful');
|
||
|
} else {
|
||
|
throw new Error(
|
||
|
`Token request failed with status ${tokenRequest.status}`
|
||
|
);
|
||
|
}
|
||
|
|
||
|
const accessToken = tokenResponse.access_token;
|
||
|
let now = moment().format('YYYY-MM-DD HH:mm:ss');
|
||
|
|
||
|
let tokenExpirationDate = moment(now)
|
||
|
.add(tokenResponse.expires_in, 's')
|
||
|
.format('YYYY-MM-DD HH:mm:ss');
|
||
|
|
||
|
updateClientConfig(
|
||
|
models,
|
||
|
clientId,
|
||
|
clientSecret,
|
||
|
accessToken,
|
||
|
tokenExpirationDate
|
||
|
);
|
||
|
|
||
|
return [accessToken, tokenExpirationDate];
|
||
|
} else {
|
||
|
console.log('Using the current token...');
|
||
|
return [clientConfigData[0].currentToken, tokenExpirationDate];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
async function updateClientConfig(
|
||
|
models,
|
||
|
clientId,
|
||
|
clientSecret,
|
||
|
accessToken,
|
||
|
tokenExpirationDate
|
||
|
) {
|
||
|
try {
|
||
|
console.log('Updating the client config with the new token...');
|
||
|
await models.clientConfig.update(
|
||
|
{
|
||
|
clientId: clientId,
|
||
|
clientSecret: clientSecret,
|
||
|
currentToken: accessToken,
|
||
|
tokenExpiration: tokenExpirationDate,
|
||
|
},
|
||
|
{
|
||
|
where: {
|
||
|
id: 1,
|
||
|
},
|
||
|
}
|
||
|
);
|
||
|
console.log('Client config updated, new Token set');
|
||
|
console.log('New token expiration date: ', tokenExpirationDate);
|
||
|
} catch (error) {
|
||
|
console.log('There was a error while updating the client config');
|
||
|
console.log(error);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
export { getClientToken };
|