Kouhei Sutou
null+****@clear*****
Sun Mar 2 16:30:41 JST 2014
Kouhei Sutou 2014-03-02 16:30:41 +0900 (Sun, 02 Mar 2014) New Revision: ea2c1f3ac82128a775eef9cc61aa9223beb9a8d3 https://github.com/groonga/gcs/commit/ea2c1f3ac82128a775eef9cc61aa9223beb9a8d3 Message: Support parameters passed by body GitHub: fix #141 Reported by zjx20. Thanks!!! Modified files: lib/api/2011-02-01/configuration.js Modified: lib/api/2011-02-01/configuration.js (+32 -25) =================================================================== --- lib/api/2011-02-01/configuration.js 2014-03-02 15:51:25 +0900 (cc9df52) +++ lib/api/2011-02-01/configuration.js 2014-03-02 16:30:41 +0900 (0d670dc) @@ -11,6 +11,13 @@ var uuid = require('node-uuid'); exports.version = path.basename(__dirname); +function parameterNames(request) { + var params = request.params || {}; + var body = request.body || {}; + var query = request.query || {}; + return Object.keys(params).concat(Object.keys(body), Object.keys(query)); +} + function handleDomanValidationError(process, variables) { try { return process(); @@ -140,7 +147,7 @@ function createDomainStatus(options) { handlers.CreateDomain = function(context, request, response, config) { var domain = handleDomanValidationError(function() { - return new Domain({ name: request.query.DomainName || '', + return new Domain({ name: request.param('DomainName') || '', context: context }).validate(); }); domain.saveSync(); @@ -154,7 +161,7 @@ handlers.CreateDomain = function(context, request, response, config) { handlers.DeleteDomain = function(context, request, response, config) { var domain = handleDomanValidationError(function() { - return new Domain({ name: request.query.DomainName || '', + return new Domain({ name: request.param('DomainName') || '', context: context }).validate(); }); var result; @@ -205,7 +212,7 @@ function endpointBaseForRequest(request) { } handlers.DescribeDomains = function(context, request, response, config) { - var keys = Object.keys(request.query).filter(function(key) { + var keys = parameterNames(request).filter(function(key) { var match = key.match(/^DomainNames\.member\.([^\.]+)$/); if (!match) return false; var index = parseInt(match[1]); @@ -216,7 +223,7 @@ handlers.DescribeDomains = function(context, request, response, config) { return true; }); var domainNames = keys.sort().map(function(key) { - return request.query[key]; + return request.param(key); }); var domains = domainNames.length ? domainNames.map(function(name) { @@ -318,7 +325,7 @@ function createIndexFieldStatus(options) { handlers.DefineIndexField = function(context, request, response, config) { var validationErrors = []; - var domainName = request.query.DomainName || ''; + var domainName = request.param('DomainName') || ''; var domain; try { handleDomanValidationError(function() { @@ -341,8 +348,8 @@ handlers.DefineIndexField = function(context, request, response, config) { throw new errors.ResourceNotFoundError('Domain not found: ' + domainName); } - var fieldName = request.query['IndexField.IndexFieldName'] || ''; - var fieldType = request.query['IndexField.IndexFieldType'] || ''; + var fieldName = request.param('IndexField.IndexFieldName') || ''; + var fieldType = request.param('IndexField.IndexFieldType') || ''; var field; try { handleIndexFieldValidationError(function() { @@ -360,13 +367,13 @@ handlers.DefineIndexField = function(context, request, response, config) { assertNoOtherError(); - var textOptions = Object.keys(request.query).filter(function(name) { + var textOptions = parameterNames(request).filter(function(name) { return name.indexOf('IndexField.TextOptions.') == 0; }); - var literalOptions = Object.keys(request.query).filter(function(name) { + var literalOptions = parameterNames(request).filter(function(name) { return name.indexOf('IndexField.LiteralOptions.') == 0; }); - var uintOptions = Object.keys(request.query).filter(function(name) { + var uintOptions = parameterNames(request).filter(function(name) { return name.indexOf('IndexField.UIntOptions.') == 0; }); @@ -382,7 +389,7 @@ handlers.DefineIndexField = function(context, request, response, config) { uintOptions; var optionValues = {}; optionNames.forEach(function(name) { - optionValues[name.replace(/^IndexField\.[^\.]+\./, '')] = request.query[name]; + optionValues[name.replace(/^IndexField\.[^\.]+\./, '')] = request.param(name); }); field.clearAllOptions(); @@ -400,7 +407,7 @@ handlers.DefineIndexField = function(context, request, response, config) { handlers.DeleteIndexField = function(context, request, response, config) { var validationErrors = []; - var domainName = request.query.DomainName || ''; + var domainName = request.param('DomainName') || ''; var domain; try { handleDomanValidationError(function() { @@ -423,7 +430,7 @@ handlers.DeleteIndexField = function(context, request, response, config) { throw new errors.ResourceNotFoundError('Domain not found: ' + domainName); } - var fieldName = request.query['IndexFieldName'] || ''; + var fieldName = request.param('IndexFieldName') || ''; var field; try { handleIndexFieldValidationError(function() { @@ -469,11 +476,11 @@ function createIndexFields(fields) { handlers.DescribeIndexFields = function(context, request, response, config) { var domain = handleDomanValidationError(function() { - return new Domain({ name: request.query.DomainName, + return new Domain({ name: request.param('DomainName'), context: context }).validate(); }); - var keys = Object.keys(request.query).filter(function(key) { + var keys = parameterNames(request).filter(function(key) { var match = key.match(/^FieldNames\.member\.([^\.]+)$/); if (!match) return false; var index = parseInt(match[1]); @@ -485,7 +492,7 @@ handlers.DescribeIndexFields = function(context, request, response, config) { }); var appeared = {}; var fieldNames = keys.map(function(key) { - return request.query[key]; + return request.param(key); }).filter(function(name) { if (name in appeared) return false; appeared[name] = true; @@ -525,7 +532,7 @@ function createFieldNames(domain) { } handlers.IndexDocuments = function(context, request, response, config) { - var domain = new Domain({ name: request.query.DomainName, + var domain = new Domain({ name: request.param('DomainName'), context: context }); domain.reindexSync(); var result = createFieldNames(domain); @@ -551,9 +558,9 @@ function createSynonymOptionsStatus(options) { } handlers.UpdateSynonymOptions = function(context, request, response, config) { - var domain = new Domain({ name: request.query.DomainName, + var domain = new Domain({ name: request.param('DomainName'), context: context }); - var synonymOptionsJson = request.query.Synonyms; + var synonymOptionsJson = request.param('Synonyms'); var synonymOptions = JSON.parse(synonymOptionsJson); domain.updateSynonymsSync(synonymOptions.synonyms); @@ -567,7 +574,7 @@ handlers.UpdateSynonymOptions = function(context, request, response, config) { }; handlers.DescribeSynonymOptions = function(context, request, response, config) { - var domain = new Domain({ name: request.query.DomainName, + var domain = new Domain({ name: request.param('DomainName'), context: context }); var result = createSynonymOptionsStatus({ domain: domain, @@ -593,9 +600,9 @@ function createDefaultSearchFieldStatus(options) { } handlers.UpdateDefaultSearchField = function(context, request, response, config) { - var domain = new Domain({ name: request.query.DomainName, + var domain = new Domain({ name: request.param('DomainName'), context: context }); - var fieldName = request.query.DefaultSearchField; + var fieldName = request.param('DefaultSearchField'); domain.defaultSearchField = fieldName; var result = createDefaultSearchFieldStatus({ @@ -608,7 +615,7 @@ handlers.UpdateDefaultSearchField = function(context, request, response, config) }; handlers.DescribeDefaultSearchField = function(context, request, response, config) { - var domain = new Domain({ name: request.query.DomainName, + var domain = new Domain({ name: request.param('DomainName'), context: context }); var field = domain.defaultSearchField; var result = createDefaultSearchFieldStatus({ @@ -655,7 +662,7 @@ exports.createHandler = function(context, config) { // GCS specific behaviour: fallback to other handlers for the endpoint // if no action is given. - var action = request.query.Action || ''; + var action = request.param('Action'); if (!action) return next(); @@ -663,7 +670,7 @@ exports.createHandler = function(context, config) { // but actual implementation of ACS accepts configuration requests // without Version specification. // See http://docs.amazonwebservices.com/cloudsearch/latest/developerguide/ConfigAPI.html - var version = request.query.Version; + var version = request.param('Version'); if (version && version != exports.version) { message = 'A bad or out-of-range value "' + version + '" was supplied ' + 'for the "Version" input parameter.'; -------------- next part -------------- HTML����������������������������...Download