From 61b7af3a835270b77d1e4d17b7e45261486bed44 Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Tue, 4 Oct 2016 17:41:37 +0100 Subject: Fix where to find uploaded content type --- icespider/core/ihttpRequest.cpp | 2 +- icespider/core/ihttpRequest.h | 1 + icespider/fcgi/cgiRequestBase.cpp | 6 ++++++ icespider/fcgi/cgiRequestBase.h | 1 + icespider/unittests/testApp.cpp | 10 ++++++++-- 5 files changed, 17 insertions(+), 3 deletions(-) diff --git a/icespider/core/ihttpRequest.cpp b/icespider/core/ihttpRequest.cpp index ea2c0bd..bd4d790 100644 --- a/icespider/core/ihttpRequest.cpp +++ b/icespider/core/ihttpRequest.cpp @@ -21,7 +21,7 @@ namespace IceSpider { { try { return Slicer::StreamDeserializerFactory::createNew( - getHeaderParam("Content-Type") / []() -> std::string { + getEnv("CONTENT_TYPE") / []() -> std::string { throw Http400_BadRequest(); }, getInputStream()); } diff --git a/icespider/core/ihttpRequest.h b/icespider/core/ihttpRequest.h index 6537ebf..38598e8 100644 --- a/icespider/core/ihttpRequest.h +++ b/icespider/core/ihttpRequest.h @@ -28,6 +28,7 @@ namespace IceSpider { const std::string & getURLParam(unsigned int) const; virtual OptionalString getQueryStringParam(const std::string &) const = 0; virtual OptionalString getHeaderParam(const std::string &) const = 0; + virtual OptionalString getEnv(const std::string &) const = 0; virtual Slicer::DeserializerPtr getDeserializer() const; virtual ContentTypeSerializer getSerializer(const IRouteHandler *) const; virtual std::istream & getInputStream() const = 0; diff --git a/icespider/fcgi/cgiRequestBase.cpp b/icespider/fcgi/cgiRequestBase.cpp index 0b63997..c36e11c 100644 --- a/icespider/fcgi/cgiRequestBase.cpp +++ b/icespider/fcgi/cgiRequestBase.cpp @@ -93,6 +93,12 @@ namespace IceSpider { return optionalLookup(key, qsmap); } + OptionalString + CgiRequestBase::getEnv(const std::string & key) const + { + return optionalLookup(key, envmap); + } + OptionalString CgiRequestBase::getHeaderParam(const std::string & key) const { diff --git a/icespider/fcgi/cgiRequestBase.h b/icespider/fcgi/cgiRequestBase.h index cc67407..97d956a 100644 --- a/icespider/fcgi/cgiRequestBase.h +++ b/icespider/fcgi/cgiRequestBase.h @@ -25,6 +25,7 @@ namespace IceSpider { HttpMethod getRequestMethod() const override; OptionalString getQueryStringParam(const std::string & key) const override; OptionalString getHeaderParam(const std::string & key) const override; + OptionalString getEnv(const std::string & key) const override; private: static OptionalString optionalLookup(const std::string & key, const VarMap &); diff --git a/icespider/unittests/testApp.cpp b/icespider/unittests/testApp.cpp index df2f7ff..fc7d66a 100644 --- a/icespider/unittests/testApp.cpp +++ b/icespider/unittests/testApp.cpp @@ -53,6 +53,11 @@ class TestRequest : public IHttpRequest { return method; } + IceUtil::Optional getEnv(const std::string & key) const override + { + return env.find(key) == env.end() ? IceUtil::Optional() : env.find(key)->second; + } + IceUtil::Optional getQueryStringParam(const std::string & key) const override { return qs.find(key) == qs.end() ? IceUtil::Optional() : qs.find(key)->second; @@ -78,6 +83,7 @@ class TestRequest : public IHttpRequest { UrlVars url; MapVars qs; MapVars hdr; + MapVars env; mutable std::stringstream input; mutable std::stringstream output; @@ -284,7 +290,7 @@ BOOST_AUTO_TEST_CASE( testCallDeleteSomeValue ) BOOST_AUTO_TEST_CASE( testCallPost1234 ) { TestRequest requestUpdateItem(this, HttpMethod::POST, "/1234"); - requestUpdateItem.hdr["Content-Type"] = "application/json"; + requestUpdateItem.env["CONTENT_TYPE"] = "application/json"; requestUpdateItem.input << "{\"value\": \"some value\"}"; process(&requestUpdateItem); auto h = parseHeaders(requestUpdateItem.output); @@ -307,7 +313,7 @@ BOOST_AUTO_TEST_CASE( testCallPost1234NoContentType ) BOOST_AUTO_TEST_CASE( testCallPost1234UnsupportedMediaType ) { TestRequest requestUpdateItem(this, HttpMethod::POST, "/1234"); - requestUpdateItem.hdr["Content-Type"] = "application/notathing"; + requestUpdateItem.env["CONTENT_TYPE"] = "application/notathing"; requestUpdateItem.input << "value=\"some value\""; process(&requestUpdateItem); auto h = parseHeaders(requestUpdateItem.output); -- cgit v1.2.3