UNPKG

citi-casher-session-engine

Version:

Module for multiple authentication methods for CITI Casher, deviceID and aurum

88 lines (74 loc) 3.07 kB
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;