Add telemetry support from via Judd
This commit is contained in:
parent
536eeedff5
commit
227002a9ef
19 changed files with 4110 additions and 4 deletions
10
judd/middleware/copy-request-stream.js
Normal file
10
judd/middleware/copy-request-stream.js
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
const stream = require('node:stream');
|
||||
|
||||
function copyRequestStreamMiddleware(request, response, next) {
|
||||
request.copy = stream.Readable.from(request.rawBody);
|
||||
request.copy.headers = request.headers;
|
||||
|
||||
next();
|
||||
}
|
||||
|
||||
module.exports = copyRequestStreamMiddleware;
|
||||
10
judd/middleware/raw-body.js
Normal file
10
judd/middleware/raw-body.js
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
const express = require('express');
|
||||
|
||||
const rawBodyMiddleware = express.raw({
|
||||
type: '*/*',
|
||||
verify(request, response, buffer, encoding) {
|
||||
request.rawBody = buffer;
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = rawBodyMiddleware;
|
||||
14
judd/middleware/title-code.js
Normal file
14
judd/middleware/title-code.js
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
const titles = require('../titles');
|
||||
|
||||
function titleCodeMiddleware(request, response, next) {
|
||||
request.titleCode = 'wup-agmj';
|
||||
|
||||
if (!titles[request.titleCode]) {
|
||||
console.error(`Titles Available: ${Object.keys(titles)}`);
|
||||
return next(`No valid title config set for title code ${request.titleCode}`);
|
||||
}
|
||||
|
||||
next();
|
||||
}
|
||||
|
||||
module.exports = titleCodeMiddleware;
|
||||
14
judd/middleware/validate-boss-digest.js
Normal file
14
judd/middleware/validate-boss-digest.js
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
const crypto = require('crypto');
|
||||
|
||||
function validateBOSSDigestMiddleware(request, response, next) {
|
||||
const calculatedHash = crypto.createHash('sha1').update(request.rawBody).digest('hex');
|
||||
const expectedHash = request.headers['x-boss-digest'];
|
||||
|
||||
if (calculatedHash !== expectedHash) {
|
||||
return next('Provided BOSS digest does not match the calculated hash');
|
||||
}
|
||||
|
||||
next();
|
||||
}
|
||||
|
||||
module.exports = validateBOSSDigestMiddleware;
|
||||
41
judd/middleware/validate-multipart.js
Normal file
41
judd/middleware/validate-multipart.js
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
const titles = require('../titles');
|
||||
|
||||
function validateMultipartMiddleware(request, response, next) {
|
||||
const title = titles[request.titleCode];
|
||||
|
||||
if (!title || !title.multipart_validator) {
|
||||
return next();
|
||||
}
|
||||
|
||||
const multipartValidator = title.multipart_validator;
|
||||
const validationSchema = title.validation_schema;
|
||||
|
||||
multipartValidator(request.copy, response, error => {
|
||||
if (error) {
|
||||
return next(error);
|
||||
}
|
||||
|
||||
const resultData = {
|
||||
...request.copy.body,
|
||||
};
|
||||
|
||||
if (Array.isArray(request.copy.files)) {
|
||||
for (const file of request.copy.files) {
|
||||
resultData[file.fieldname] = file.buffer;
|
||||
}
|
||||
}
|
||||
|
||||
const validationResult = validationSchema.validate(resultData);
|
||||
|
||||
if (validationResult.error) {
|
||||
console.error('[Validation Error]', validationResult.error.details);
|
||||
return next(validationResult.error);
|
||||
}
|
||||
|
||||
request.resultData = validationResult.value;
|
||||
|
||||
next();
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = validateMultipartMiddleware;
|
||||
Loading…
Reference in a new issue