|
|
@ -1,4 +1,5 @@ |
|
|
|
var winston = require('winston'); |
|
|
|
var winston = require('winston'); |
|
|
|
|
|
|
|
var Busboy = require('busboy'); |
|
|
|
|
|
|
|
|
|
|
|
// For handling serving stored documents
|
|
|
|
// For handling serving stored documents
|
|
|
|
|
|
|
|
|
|
|
@ -47,15 +48,15 @@ DocumentHandler.prototype.handleRawGet = function(key, response, skipExpire) { |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
// Handle adding a new Document
|
|
|
|
// Handle adding a new Document
|
|
|
|
DocumentHandler.prototype.handlePost = function(request, response) { |
|
|
|
DocumentHandler.prototype.handlePost = function (request, response) { |
|
|
|
var _this = this; |
|
|
|
var _this = this; |
|
|
|
var buffer = ''; |
|
|
|
var buffer = ''; |
|
|
|
var cancelled = false; |
|
|
|
var cancelled = false; |
|
|
|
request.on('data', function(data) { |
|
|
|
|
|
|
|
if (!buffer) { |
|
|
|
// What to do when done
|
|
|
|
response.writeHead(200, { 'content-type': 'application/json' }); |
|
|
|
var onSuccess = function () { |
|
|
|
} |
|
|
|
// Check length
|
|
|
|
buffer += data.toString(); |
|
|
|
console.log(buffer); |
|
|
|
if (_this.maxLength && buffer.length > _this.maxLength) { |
|
|
|
if (_this.maxLength && buffer.length > _this.maxLength) { |
|
|
|
cancelled = true; |
|
|
|
cancelled = true; |
|
|
|
winston.warn('document >maxLength', { maxLength: _this.maxLength }); |
|
|
|
winston.warn('document >maxLength', { maxLength: _this.maxLength }); |
|
|
@ -63,14 +64,14 @@ DocumentHandler.prototype.handlePost = function(request, response) { |
|
|
|
response.end( |
|
|
|
response.end( |
|
|
|
JSON.stringify({ message: 'Document exceeds maximum length.' }) |
|
|
|
JSON.stringify({ message: 'Document exceeds maximum length.' }) |
|
|
|
); |
|
|
|
); |
|
|
|
|
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
}); |
|
|
|
// And then save if we should
|
|
|
|
request.on('end', function(end) { |
|
|
|
_this.chooseKey(function (key) { |
|
|
|
if (cancelled) return; |
|
|
|
_this.store.set(key, buffer, function (res) { |
|
|
|
_this.chooseKey(function(key) { |
|
|
|
|
|
|
|
_this.store.set(key, buffer, function(res) { |
|
|
|
|
|
|
|
if (res) { |
|
|
|
if (res) { |
|
|
|
winston.verbose('added document', { key: key }); |
|
|
|
winston.verbose('added document', { key: key }); |
|
|
|
|
|
|
|
response.writeHead(200, { 'content-type': 'application/json' }); |
|
|
|
response.end(JSON.stringify({ key: key })); |
|
|
|
response.end(JSON.stringify({ key: key })); |
|
|
|
} |
|
|
|
} |
|
|
|
else { |
|
|
|
else { |
|
|
@ -80,12 +81,37 @@ DocumentHandler.prototype.handlePost = function(request, response) { |
|
|
|
} |
|
|
|
} |
|
|
|
}); |
|
|
|
}); |
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// If we should, parse a form to grab the data
|
|
|
|
|
|
|
|
var ct = request.headers['content-type']; |
|
|
|
|
|
|
|
if (ct && ct.split(';')[0] === 'multipart/form-data') { |
|
|
|
|
|
|
|
var busboy = new Busboy({ headers: request.headers }); |
|
|
|
|
|
|
|
busboy.on('field', function (fieldname, val) { |
|
|
|
|
|
|
|
if (fieldname === 'data') { |
|
|
|
|
|
|
|
buffer = val; |
|
|
|
|
|
|
|
} |
|
|
|
}); |
|
|
|
}); |
|
|
|
request.on('error', function(error) { |
|
|
|
busboy.on('finish', function () { |
|
|
|
|
|
|
|
onSuccess(); |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
request.pipe(busboy); |
|
|
|
|
|
|
|
// Otherwise, use our own and just grab flat data from POST body
|
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
request.on('data', function (data) { |
|
|
|
|
|
|
|
buffer += data.toString(); |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
request.on('end', function () { |
|
|
|
|
|
|
|
if (cancelled) { return; } |
|
|
|
|
|
|
|
onSuccess(); |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
request.on('error', function (error) { |
|
|
|
winston.error('connection error: ' + error.message); |
|
|
|
winston.error('connection error: ' + error.message); |
|
|
|
response.writeHead(500, { 'content-type': 'application/json' }); |
|
|
|
response.writeHead(500, { 'content-type': 'application/json' }); |
|
|
|
response.end(JSON.stringify({ message: 'Connection error.' })); |
|
|
|
response.end(JSON.stringify({ message: 'Connection error.' })); |
|
|
|
|
|
|
|
cancelled = true; |
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
} |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
// Keep choosing keys until one isn't taken
|
|
|
|
// Keep choosing keys until one isn't taken
|
|
|
|