Normalize headers values for pubsub
This commit is contained in:
parent
4b1f0b5775
commit
583765a298
@ -38,7 +38,7 @@ module.exports = function errorMiddleware (/* options */) {
|
|||||||
res.json(errorResponseBody);
|
res.json(errorResponseBody);
|
||||||
}
|
}
|
||||||
|
|
||||||
next();
|
return next();
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
const EVENT_VERSION = '1';
|
const EVENT_VERSION = '1';
|
||||||
|
const MAX_LENGTH = 100;
|
||||||
|
|
||||||
function pubSubMetrics (pubSubMetricsBackend) {
|
function pubSubMetrics (pubSubMetricsBackend) {
|
||||||
if (!pubSubMetricsBackend.isEnabled()) {
|
if (!pubSubMetricsBackend.isEnabled()) {
|
||||||
@ -19,9 +20,9 @@ function pubSubMetrics (pubSubMetricsBackend) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function getEventData (req, res) {
|
function getEventData (req, res) {
|
||||||
const event = req.get('Carto-Event');
|
const event = normalizedField(req.get('Carto-Event'));
|
||||||
const eventSource = req.get('Carto-Event-Source');
|
const eventSource = normalizedField(req.get('Carto-Event-Source'));
|
||||||
const eventGroupId = req.get('Carto-Event-Group-Id');
|
const eventGroupId = normalizedField(req.get('Carto-Event-Group-Id'));
|
||||||
|
|
||||||
if (!event || !eventSource) {
|
if (!event || !eventSource) {
|
||||||
return [undefined, undefined];
|
return [undefined, undefined];
|
||||||
@ -43,4 +44,8 @@ function getEventData (req, res) {
|
|||||||
return { event, attributes };
|
return { event, attributes };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function normalizedField (field) {
|
||||||
|
return field.toString().substr(0, MAX_LENGTH);
|
||||||
|
}
|
||||||
|
|
||||||
module.exports = pubSubMetrics;
|
module.exports = pubSubMetrics;
|
||||||
|
@ -12,6 +12,15 @@ const metricsHeaders = {
|
|||||||
'Carto-Event-Group-Id': '1'
|
'Carto-Event-Group-Id': '1'
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const tooLongField = 'If you are sending a text this long in a header you kind of deserve the worst, honestly. I mean ' +
|
||||||
|
'this is not a header, it is almost a novel, and you do not see any Novel cookie here, right?';
|
||||||
|
|
||||||
|
const badHeaders = {
|
||||||
|
'Carto-Event': tooLongField,
|
||||||
|
'Carto-Event-Source': 'test',
|
||||||
|
'Carto-Event-Group-Id': 1
|
||||||
|
};
|
||||||
|
|
||||||
const mapConfig = {
|
const mapConfig = {
|
||||||
version: '1.7.0',
|
version: '1.7.0',
|
||||||
layers: [
|
layers: [
|
||||||
@ -106,6 +115,25 @@ describe('pubsub metrics middleware', function () {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should normalized headers type and length', function (done) {
|
||||||
|
global.environment.pubSubMetrics.enabled = true;
|
||||||
|
const eventAttributes = buildEventAttributes(200);
|
||||||
|
const maxLength = 100;
|
||||||
|
const eventName = tooLongField.substr(0, maxLength);
|
||||||
|
|
||||||
|
testClient = new TestClient(mapConfig, 1234, badHeaders);
|
||||||
|
|
||||||
|
testClient.getLayergroup((err, body) => {
|
||||||
|
if (err) {
|
||||||
|
return done(err);
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.strictEqual(typeof body.metadata, 'object');
|
||||||
|
assert(fakeTopic.publish.calledOnceWith(Buffer.from(eventName), eventAttributes));
|
||||||
|
return done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
it('should send event for map requests', function (done) {
|
it('should send event for map requests', function (done) {
|
||||||
global.environment.pubSubMetrics.enabled = true;
|
global.environment.pubSubMetrics.enabled = true;
|
||||||
const eventAttributes = buildEventAttributes(200);
|
const eventAttributes = buildEventAttributes(200);
|
||||||
|
Loading…
Reference in New Issue
Block a user