| Current Path : /var/www/fidelitychain/www/library/ |
| Current File : //var/www/fidelitychain/www/library/checkAuth.js |
const jwt = require('jsonwebtoken');
const axios = require('axios');
const jwkToPem = require('jwk-to-pem');
// curl -X POST -H "Content-Type: application/json" -H "Authorization: Bearer eyJ4NXQiOiJZVEE1WmpZNVl6aGxPVFpoWVRRNU9EazJOell5WmpObFpEa3lZbUV5WmpJM05ESmtPRGsxWkRnd09XUmpPVFl6T0dSall6Z3pNek5rTUdNNU1USXlNZyIsImtpZCI6IllUQTVaalk1WXpobE9UWmhZVFE1T0RrMk56WXlaak5sWkRreVltRXlaakkzTkRKa09EazFaRGd3T1dSak9UWXpPR1JqWXpnek16TmtNR001TVRJeU1nX1JTMjU2IiwiYWxnIjoiUlMyNTYifQ.eyJzdWIiOiJhZG1pbiIsImF1dCI6IkFQUExJQ0FUSU9OIiwiYXVkIjpbIjNrdWRTMWRVVkg1QjY1VGhScGtyOXpmUUxla2EiLCJodHRwczpcL1wvd3d3LmZ0Y29vcC5pdFwvSW5Db29wZXJhemlvbmVTZXJ2aWNlcyJdLCJuYmYiOjE2ODk2OTI4NDgsImF6cCI6IjNrdWRTMWRVVkg1QjY1VGhScGtyOXpmUUxla2EiLCJpc3MiOiJodHRwczpcL1wvYXV0aC50ZXN0LmluY29vcGVyYXppb25lLml0Ojk0NDNcL29hdXRoMlwvdG9rZW4iLCJleHAiOjE2ODk2OTY0NDgsImlhdCI6MTY4OTY5Mjg0OCwianRpIjoiOTkzNTY2MWMtOGY0ZS00M2YxLTgxZjUtYmRjNjQ3MTFmOWY3In0.bYVJ9dvQL63Z1E14im79P9M1LhZ7lPdBd7DTbN3XDy9r7NLlHeUtZdKTN7_eL2eGscflfYHFvA4ZPapaVYSM2dgdZpzD8S4AbGuDmRbAzAx81fesCBz7o9ovnSxS_nZPFn0PcBBdB8GMUF21fM4LfKkXxySpBqDxTVAlYil0wHlZ_ObMVwhcxJ6irSNtT8XdyGKFuREMEMWgoXGQ-ZC-5e_vCd112JRDdVeFMoIOa8A1YnvB5aPRdV44c1DjRkzPAAU8kl1saXvKv9C_avh1hc49mpoezsE50vPmo4XiPHcfiKarXn1qi1Yiu9FiRuBaTBIFDE4sLltXb6zovTda8w" -d '{"walletAddresses":["0xC3675843A73F7A850382e14F2528D1654368C6b6","0x99846f5FF165D66cC2BDEc067F989A3422365895"]}' http://127.0.0.1:6033/api/address2account
async function checkAuth(req, res, next) {
const token = req.headers.authorization;
if (!token) {
return res.status(401).json({ message: 'Missing authorization token' });
}
const bearerToken = token.replace("Bearer ", "");
const jwkUrl = 'https://auth.test.incooperazione.it:9443/oauth2/jwks';
try {
const response = await axios.get(jwkUrl);
const jwk = response.data.keys[0];
// console.log('JWK received:', jwk);
const isValidToken = await validateToken(bearerToken, jwk);
if (isValidToken) {
next();
} else {
return res.status(401).json({ message: 'Invalid token [1001]' });
}
} catch (error) {
// console.error('Error getting the JWK:', error);
return res.status(401).json({ message: 'Invalid token [1002]' });
}
}
async function validateToken(bearerToken, jwk) {
return new Promise((resolve, reject) => {
const pemPublicKey = jwkToPem(jwk);
jwt.verify(bearerToken, pemPublicKey, (err, decoded) => {
if (err) {
// console.error('Error verifying token:', err);
resolve(false); // Risolvi la promessa con false in caso di errore
} else {
// console.log('Decoded token:', decoded);
resolve(true); // Risolvi la promessa con true se la verifica va a buon fine
}
});
});
}
module.exports = {
checkAuth
};