From fad43ecb4e499eb88ae4f34cf3ba2a7cd2d8f90f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabio=20Jos=C3=A9?= Date: Tue, 6 Aug 2019 11:18:45 -0300 Subject: [PATCH] New: check() decorator, parsersByEncoding to work with datacontentencoding MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fabio José --- lib/bindings/http/receiver_binary.js | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/lib/bindings/http/receiver_binary.js b/lib/bindings/http/receiver_binary.js index cb8f2b6..4d12e2b 100644 --- a/lib/bindings/http/receiver_binary.js +++ b/lib/bindings/http/receiver_binary.js @@ -23,15 +23,16 @@ function validateArgs(payload, attributes) { } function BinaryHTTPReceiver( - parserByType, + parsersByEncoding, setterByHeader, allowedContentTypes, requiredHeaders, Spec, specversion, - extensionsPrefix) { + extensionsPrefix, + checkDecorator) { - this.parserByType = parserByType; + this.parsersByEncoding = parsersByEncoding; this.setterByHeader = setterByHeader; this.allowedContentTypes = allowedContentTypes; this.requiredHeaders = requiredHeaders; @@ -39,12 +40,17 @@ function BinaryHTTPReceiver( this.spec = new Spec(); this.specversion = specversion; this.extensionsPrefix = extensionsPrefix; + this.checkDecorator = checkDecorator; } BinaryHTTPReceiver.prototype.check = function(payload, headers) { // Validation Level 0 validateArgs(payload, headers); + if(this.checkDecorator) { + this.checkDecorator(payload, headers); + } + // Clone and low case all headers names var sanityHeaders = Commons.sanityAndClone(headers); @@ -73,6 +79,11 @@ BinaryHTTPReceiver.prototype.check = function(payload, headers) { // No erros! Its contains the minimum required attributes }; +function parserFor(parsersByEncoding, cloudevent, headers){ + let encoding = cloudevent.spec.payload["datacontentencoding"]; + return parsersByEncoding[encoding][headers[Constants.HEADER_CONTENT_TYPE]]; +} + BinaryHTTPReceiver.prototype.parse = function(payload, headers) { this.check(payload, headers); @@ -97,9 +108,9 @@ BinaryHTTPReceiver.prototype.parse = function(payload, headers) { }); // Parses the payload - var parsedPayload = - this.parserByType[sanityHeaders[Constants.HEADER_CONTENT_TYPE]] - .parse(payload); + let parsedPayload = + parserFor(this.parsersByEncoding, cloudevent, sanityHeaders) + .parse(payload); // Every unprocessed header can be an extension Array.from(Object.keys(sanityHeaders))