Skip to content

Commit

Permalink
Don't serialize if content-disposition: attachment
Browse files Browse the repository at this point in the history
  • Loading branch information
kriszyp committed May 21, 2010
1 parent b0206b6 commit b414257
Showing 1 changed file with 19 additions and 10 deletions.
29 changes: 19 additions & 10 deletions lib/jsgi/media.js
@@ -1,8 +1,8 @@
/**
* JSGI Middleware that provides media type content negotiation. It will deserialize
* request.input data into real objects, and then serialize response objects into a raw
* request.body data into real objects, and then serialize response objects into a raw
* format for the response body. This acts as "crossover" middleware, all apps below
* will see request.input and response.body in pre/deserialized form.
* will see request.body and response.body in pre/deserialized form.
*/
exports.MediaConverter = MediaConverter;
var METHOD_HAS_BODY = require("./methods").METHOD_HAS_BODY,
Expand All @@ -12,14 +12,23 @@ function MediaConverter(mediaSelector, nextApp){
return function(request){
// TODO: Do any character set conversion
if(METHOD_HAS_BODY[request.method.toLowerCase()]){
var requestMedia = mediaSelector(request.store, request.headers["content-type"]);
if(!requestMedia){
return {status: 415, headers:{}, body: ["Unsupported Media Type"]};
}
try{
request.input = requestMedia.deserialize(request.input, request);
}catch(e){
return {status: 400, headers: {}, body: [e.message]};
var contentDisposition = request["content-disposition"];
if(contentDisposition && contentDisposition.substring(0,10) == "attachment"){
contentDisposition.split(";").forEach(function(dispositionParam){
var parts = dispositionParam.split("=");
request.body[parts[0].trim()] = request.parts[1] && request.parts[1].trim().replace(/"/g,'');
});
request.body.attachment = true;
}else{
var requestMedia = mediaSelector(request.store, request.headers["content-type"]);
if(!requestMedia){
return {status: 415, headers:{}, body: ["Unsupported Media Type"]};
}
try{
request.body = requestMedia.deserialize(request.body, request);
}catch(e){
return {status: 400, headers: {}, body: [e.message]};
}
}

}
Expand Down

0 comments on commit b414257

Please sign in to comment.