2023-05-16 08:31:27 +00:00
|
|
|
const conf = require(`${process.env.dirtown}/conf.json`);
|
2023-04-13 05:46:35 +00:00
|
|
|
|
2023-05-12 05:59:32 +00:00
|
|
|
const checkHeaders = (req, res, next) => {
|
|
|
|
/**
|
|
|
|
* @apiDefine apxHeader
|
|
|
|
* @apiGroup Middleware
|
|
|
|
* @apiDescription Header is mandatory to access apxtrib see tribes/townconf.json.exposedHeaders
|
|
|
|
* A turn around can be done with a simple get params has to be sent in the get url. Usefull to send simple get without header like ?xworkon=tribeName&xlang=en... priority is given to headers
|
|
|
|
* For performance, tokens are store globaly in req.app.locals.tokens={xpaganid:xauth}
|
|
|
|
* if xlang is not in conf.languagesAvailable
|
|
|
|
*
|
|
|
|
* @apiHeader {string} xjwt Pagans unique jwt token store in local town Pagans data or "noauth"
|
|
|
|
* @apiHeader {string} xpseudo Pagans unique Pagan id in uuid format or "nouuid"
|
|
|
|
* @apiHeader {string} xlang the 2 letter langage it request the api (if not exist the 2 first letter of Accept-Language header ) if lang does not exist in the town then en is set (as it always exist in en).
|
|
|
|
* @apiHeader {string} xtribe Tribes id where pseudo want to act
|
|
|
|
* @apiHeader {string} xapp Name of www/xapp folder that host app that send the request
|
|
|
|
* /tribeid/person/xpseudo.json have accessright on this app store in /tribe/tribeid/www/xapp
|
|
|
|
*
|
|
|
|
* @apiError missingexposedHeaders it miss an exposedHeaders
|
|
|
|
*
|
|
|
|
* @apiErrorExample {json} Error-Response:
|
|
|
|
* HTTP/1/1 400 Not Found
|
|
|
|
* {
|
|
|
|
* status:400,
|
|
|
|
* ref:"headers"
|
|
|
|
* msg:"missingheaders",
|
|
|
|
* data: ["headermissing1"]
|
|
|
|
* }
|
|
|
|
*@apiErrorExample {json} Error-Response:
|
|
|
|
* HTTP/1/1 404 Not Found
|
|
|
|
* {
|
|
|
|
* status:404,
|
|
|
|
* ref:"headers"
|
|
|
|
* msg:"tribeiddoesnotexist",
|
|
|
|
* data: {xalias}
|
|
|
|
* }
|
|
|
|
*
|
|
|
|
* @apiHeaderExample {json} Header-Exemple:
|
|
|
|
* {
|
|
|
|
* xtribe:"apache",
|
|
|
|
* xalias:"toto",
|
|
|
|
* xhash:"",
|
|
|
|
* xdays:"123"
|
|
|
|
* xlang:"en",
|
|
|
|
* xapp:"popular"
|
|
|
|
* }
|
|
|
|
*/
|
|
|
|
req.session = {};
|
|
|
|
const header = {};
|
|
|
|
if (!req.header("xlang") && req.header("Content-Language"))
|
|
|
|
req.params.xlang = req.header("Content-Language");
|
|
|
|
let missingheader = [];
|
2023-06-28 13:23:17 +00:00
|
|
|
//console.log("req.headers", req.headers);
|
2023-05-12 05:59:32 +00:00
|
|
|
for (const h of conf.api.exposedHeaders) {
|
|
|
|
//console.log( h, req.header( h ) )
|
|
|
|
if (req.params[h]) {
|
|
|
|
header[h] = req.params[h];
|
|
|
|
} else if (req.header(h)) {
|
|
|
|
header[h] = req.header(h);
|
|
|
|
} else {
|
|
|
|
missingheader.push(h);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//console.log( 'header', header )
|
|
|
|
// store in session the header information
|
|
|
|
req.session.header = header;
|
|
|
|
// Each header have to be declared
|
|
|
|
if (missingheader != "") {
|
|
|
|
// bad request
|
|
|
|
return res.status(400).json({
|
|
|
|
ref: "headers",
|
|
|
|
msg: "missingheader",
|
|
|
|
data: missingheader,
|
|
|
|
});
|
|
|
|
}
|
|
|
|
//console.log( req.app.locals.tribeids )
|
|
|
|
// xtribe == "town" is used during the setup process
|
|
|
|
if (
|
|
|
|
!(
|
|
|
|
header.xtribe == "town" || req.app.locals.tribeids.includes(header.xtribe)
|
|
|
|
)
|
|
|
|
) {
|
|
|
|
return res.status(404).json({
|
|
|
|
ref: "headers",
|
|
|
|
msg: "tribeiddoesnotexist",
|
|
|
|
data: { xtribe: header.xtribe },
|
|
|
|
});
|
|
|
|
}
|
|
|
|
if (!conf.api.languages.includes(header.xlang)) {
|
|
|
|
console.log("warning language requested does not exist force to english");
|
|
|
|
header.xlang = "en";
|
|
|
|
}
|
|
|
|
next();
|
2023-04-13 05:46:35 +00:00
|
|
|
};
|
|
|
|
module.exports = checkHeaders;
|