mirror of https://github.com/adamdruppe/arsd.git
issue #271 - clean up the handling of other content types and let the application handle it instead of throwing a pointless exception
This commit is contained in:
parent
b82a85493c
commit
0b65fca651
44
cgi.d
44
cgi.d
|
@ -333,7 +333,7 @@ void main() {
|
||||||
|
|
||||||
Copyright:
|
Copyright:
|
||||||
|
|
||||||
cgi.d copyright 2008-2020, Adam D. Ruppe. Provided under the Boost Software License.
|
cgi.d copyright 2008-2021, Adam D. Ruppe. Provided under the Boost Software License.
|
||||||
|
|
||||||
Yes, this file is old, and yes, it is still actively maintained and used.
|
Yes, this file is old, and yes, it is still actively maintained and used.
|
||||||
+/
|
+/
|
||||||
|
@ -848,7 +848,7 @@ class Cgi {
|
||||||
this.requestUri = requestUri;
|
this.requestUri = requestUri;
|
||||||
this.pathInfo = pathInfo;
|
this.pathInfo = pathInfo;
|
||||||
this.queryString = queryString;
|
this.queryString = queryString;
|
||||||
this.postJson = null;
|
this.postBody = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private {
|
private {
|
||||||
|
@ -1070,7 +1070,7 @@ class Cgi {
|
||||||
filesArray = assumeUnique(pps._files);
|
filesArray = assumeUnique(pps._files);
|
||||||
files = keepLastOf(filesArray);
|
files = keepLastOf(filesArray);
|
||||||
post = keepLastOf(postArray);
|
post = keepLastOf(postArray);
|
||||||
this.postJson = pps.postJson;
|
this.postBody = pps.postBody;
|
||||||
cleanUpPostDataState();
|
cleanUpPostDataState();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1115,7 +1115,7 @@ class Cgi {
|
||||||
string boundary;
|
string boundary;
|
||||||
string localBoundary; // the ones used at the end or something lol
|
string localBoundary; // the ones used at the end or something lol
|
||||||
bool isMultipart;
|
bool isMultipart;
|
||||||
bool isJson;
|
bool needsSavedBody;
|
||||||
|
|
||||||
ulong expectedLength;
|
ulong expectedLength;
|
||||||
ulong contentConsumed;
|
ulong contentConsumed;
|
||||||
|
@ -1127,7 +1127,7 @@ class Cgi {
|
||||||
string[] thisOnesHeaders;
|
string[] thisOnesHeaders;
|
||||||
immutable(ubyte)[] thisOnesData;
|
immutable(ubyte)[] thisOnesData;
|
||||||
|
|
||||||
string postJson;
|
string postBody;
|
||||||
|
|
||||||
UploadedFile piece;
|
UploadedFile piece;
|
||||||
bool isFile = false;
|
bool isFile = false;
|
||||||
|
@ -1236,23 +1236,22 @@ class Cgi {
|
||||||
// but it seems to me that this only happens when it is urlencoded.
|
// but it seems to me that this only happens when it is urlencoded.
|
||||||
if(pps.contentType == "application/x-www-form-urlencoded" || pps.contentType == "") {
|
if(pps.contentType == "application/x-www-form-urlencoded" || pps.contentType == "") {
|
||||||
pps.isMultipart = false;
|
pps.isMultipart = false;
|
||||||
|
pps.needsSavedBody = false;
|
||||||
} else if(pps.contentType == "multipart/form-data") {
|
} else if(pps.contentType == "multipart/form-data") {
|
||||||
pps.isMultipart = true;
|
pps.isMultipart = true;
|
||||||
enforce(pps.boundary.length, "no boundary");
|
enforce(pps.boundary.length, "no boundary");
|
||||||
} else if(pps.contentType == "text/plain") {
|
} else if(pps.contentType == "text/xml") { // FIXME: could this be special and load the post params
|
||||||
|
// save the body so the application can handle it
|
||||||
pps.isMultipart = false;
|
pps.isMultipart = false;
|
||||||
pps.isJson = true; // FIXME: hack, it isn't actually this
|
pps.needsSavedBody = true;
|
||||||
} else if(pps.contentType == "text/xml") { // FIXME: what if we used this as a fallback?
|
} else if(pps.contentType == "application/json") { // FIXME: this could prolly try to load post params too
|
||||||
|
// save the body so the application can handle it
|
||||||
|
pps.needsSavedBody = true;
|
||||||
pps.isMultipart = false;
|
pps.isMultipart = false;
|
||||||
pps.isJson = true; // FIXME: hack, it isn't actually this
|
|
||||||
} else if(pps.contentType == "application/json") {
|
|
||||||
pps.isJson = true;
|
|
||||||
pps.isMultipart = false;
|
|
||||||
//} else if(pps.contentType == "application/json") {
|
|
||||||
//pps.isJson = true;
|
|
||||||
} else {
|
} else {
|
||||||
// FIXME: should set a http error code too
|
// the rest is 100% handled by the application. just save the body and send it to them
|
||||||
throw new Exception("unknown request content type: " ~ pps.contentType);
|
pps.needsSavedBody = true;
|
||||||
|
pps.isMultipart = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1577,8 +1576,8 @@ class Cgi {
|
||||||
|
|
||||||
// simple handling, but it works... until someone bombs us with gigabytes of crap at least...
|
// simple handling, but it works... until someone bombs us with gigabytes of crap at least...
|
||||||
if(pps.buffer.length == pps.expectedLength) {
|
if(pps.buffer.length == pps.expectedLength) {
|
||||||
if(pps.isJson)
|
if(pps.needsSavedBody)
|
||||||
pps.postJson = cast(string) pps.buffer;
|
pps.postBody = cast(string) pps.buffer;
|
||||||
else
|
else
|
||||||
pps._post = decodeVariables(cast(string) pps.buffer, "&", &allPostNamesInOrder, &allPostValuesInOrder);
|
pps._post = decodeVariables(cast(string) pps.buffer, "&", &allPostNamesInOrder, &allPostValuesInOrder);
|
||||||
version(preserveData)
|
version(preserveData)
|
||||||
|
@ -1889,7 +1888,7 @@ class Cgi {
|
||||||
filesArray = assumeUnique(pps._files);
|
filesArray = assumeUnique(pps._files);
|
||||||
files = keepLastOf(filesArray);
|
files = keepLastOf(filesArray);
|
||||||
post = keepLastOf(postArray);
|
post = keepLastOf(postArray);
|
||||||
postJson = pps.postJson;
|
postBody = pps.postBody;
|
||||||
cleanUpPostDataState();
|
cleanUpPostDataState();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2460,7 +2459,8 @@ class Cgi {
|
||||||
version(preserveData) // note: this can eat lots of memory; don't use unless you're sure you need it.
|
version(preserveData) // note: this can eat lots of memory; don't use unless you're sure you need it.
|
||||||
immutable(ubyte)[] originalPostData;
|
immutable(ubyte)[] originalPostData;
|
||||||
|
|
||||||
public immutable string postJson;
|
public immutable string postBody;
|
||||||
|
alias postJson = postBody; // old name
|
||||||
|
|
||||||
/* Internal state flags */
|
/* Internal state flags */
|
||||||
private bool outputtedResponseData;
|
private bool outputtedResponseData;
|
||||||
|
@ -10148,11 +10148,11 @@ bool apiDispatcher()(Cgi cgi) {
|
||||||
}
|
}
|
||||||
+/
|
+/
|
||||||
/*
|
/*
|
||||||
Copyright: Adam D. Ruppe, 2008 - 2020
|
Copyright: Adam D. Ruppe, 2008 - 2021
|
||||||
License: [http://www.boost.org/LICENSE_1_0.txt|Boost License 1.0].
|
License: [http://www.boost.org/LICENSE_1_0.txt|Boost License 1.0].
|
||||||
Authors: Adam D. Ruppe
|
Authors: Adam D. Ruppe
|
||||||
|
|
||||||
Copyright Adam D. Ruppe 2008 - 2020.
|
Copyright Adam D. Ruppe 2008 - 2021.
|
||||||
Distributed under the Boost Software License, Version 1.0.
|
Distributed under the Boost Software License, Version 1.0.
|
||||||
(See accompanying file LICENSE_1_0.txt or copy at
|
(See accompanying file LICENSE_1_0.txt or copy at
|
||||||
http://www.boost.org/LICENSE_1_0.txt)
|
http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
Loading…
Reference in New Issue