|
|
|
@ -29,7 +29,6 @@ DocumentHandler.prototype.handleGet = function(key, response) { |
|
|
|
|
// Handle adding a new Document
|
|
|
|
|
DocumentHandler.prototype.handlePost = function(request, response) { |
|
|
|
|
var _this = this; |
|
|
|
|
var key = this.randomKey(); |
|
|
|
|
var buffer = ''; |
|
|
|
|
request.on('data', function(data) { |
|
|
|
|
if (!buffer) { |
|
|
|
@ -38,23 +37,25 @@ DocumentHandler.prototype.handlePost = function(request, response) { |
|
|
|
|
buffer += data.toString(); |
|
|
|
|
if (_this.maxLength && buffer.length > _this.maxLength) { |
|
|
|
|
_this.cancelled = true; |
|
|
|
|
winston.warn('attempted to upload a document >maxLength', { maxLength: _this.maxLength }); |
|
|
|
|
winston.warn('document >maxLength', { maxLength: _this.maxLength }); |
|
|
|
|
response.writeHead(400, { 'content-type': 'application/json' }); |
|
|
|
|
response.end(JSON.stringify({ message: 'document exceeds maximum length' })); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
request.on('end', function(end) { |
|
|
|
|
if (_this.cancelled) return; |
|
|
|
|
_this.store.set(key, buffer, function(res) { |
|
|
|
|
if (res) { |
|
|
|
|
winston.verbose('added document', { key: key }); |
|
|
|
|
response.end(JSON.stringify({ key: key })); |
|
|
|
|
} |
|
|
|
|
else { |
|
|
|
|
winston.verbose('error adding document'); |
|
|
|
|
response.writeHead(500, { 'content-type': 'application/json' }); |
|
|
|
|
response.end(JSON.stringify({ message: 'error adding document' })); |
|
|
|
|
} |
|
|
|
|
_this.chooseKey(function(key) { |
|
|
|
|
_this.store.set(key, buffer, function(res) { |
|
|
|
|
if (res) { |
|
|
|
|
winston.verbose('added document', { key: key }); |
|
|
|
|
response.end(JSON.stringify({ key: key })); |
|
|
|
|
} |
|
|
|
|
else { |
|
|
|
|
winston.verbose('error adding document'); |
|
|
|
|
response.writeHead(500, { 'content-type': 'application/json' }); |
|
|
|
|
response.end(JSON.stringify({ message: 'error adding document' })); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
}); |
|
|
|
|
}); |
|
|
|
|
request.on('error', function(error) { |
|
|
|
@ -64,6 +65,19 @@ DocumentHandler.prototype.handlePost = function(request, response) { |
|
|
|
|
}); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
// Get a random key that hasn't been already used
|
|
|
|
|
DocumentHandler.prototype.chooseKey = function(callback) { |
|
|
|
|
var key = this.randomKey(); |
|
|
|
|
var _this = this; |
|
|
|
|
this.store.get(key, function(ret) { |
|
|
|
|
if (ret) { |
|
|
|
|
_this.chooseKey(callback); |
|
|
|
|
} else { |
|
|
|
|
callback(key); |
|
|
|
|
} |
|
|
|
|
});
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
// Generate a random key
|
|
|
|
|
DocumentHandler.prototype.randomKey = function() { |
|
|
|
|
var text = ''; |
|
|
|
|