citi-casher-session-engine
Version:
Module for multiple authentication methods for CITI Casher, deviceID and aurum
88 lines (74 loc) • 3.07 kB
JavaScript
const { configurations_key } = require("../utils/Constants");
const { logger } = require("../utils/Logger");
const fetch = require("node-fetch");
const validateDevice = async (device) => {
// Aquí puedes añadir tu lógica de validación del token
// Por ejemplo, decodificar un JWT, buscar el token en la base de datos, etc.
//const isValid = validateToken(token); // Implementa esta función según tu lógica
const config = global[configurations_key];
const endpointValidate = config.validate.endpoint;
logger.info("endpointValidate", endpointValidate);
//INVOKE ENDPOINT VALIDATE, POST, headers: {company: config.company, provider: 'device'}
const response = await fetch(endpointValidate, {
method: "POST",
headers: {
"Content-Type": "application/json",
company: config.company,
provider: "device",
},
body: JSON.stringify({ deviceId: device }),
})
.then((res) => res.json())
.catch((error) => console.error("error", error));
console.log("response", response);
if (response.code !== 200) {
logger.error("Error on validate device", response);
return {
isValid: false,
user: null,
};
}
logger.info("user_account", response);
return {
isValid: true,
user: response.user,
};
};
const device = (server, options) => {
return {
authenticate: async (request, h) => {
try {
const { headers } = request;
const device = headers["device-id"];
console.log("device schema strategy UPDATES", device);
console.log("Get configurations for module");
//get configurations for global variable
const config = global[configurations_key];
console.log("SessionEngine configurations", config);
if (undefined === config || null === config) {
logger.error("sessionEngine configurations not found");
return h.response({ code: 500, message: "sessionEngine configurations not found" }).code(500);
}
if (!device) {
throw h.response({ code: 400, message: "header 'device-id' is required" }).code(400);
}
// Aquí puedes añadir tu lógica de validación del token
// Por ejemplo, decodificar un JWT, buscar el token en la base de datos, etc.
//const isValid = validateToken(token); // Implementa esta función según tu lógica
const valid = await validateDevice(device);
if (!valid.isValid) {
return h.response({ code: 401, message: "Invalid device" }).code(401);
}
// Si la validación es exitosa, continúa con el request
// Puedes adjuntar información al request.auth.credentials si es necesario
return h.authenticated({
credentials: valid,
});
} catch (error) {
logger.error("Error on device schema strategy", error);
throw h.response({ code: 500, message: "Internal error" }).code(500);
}
},
};
};
module.exports = device;