Graceful handling when API inputs malformed or missing

This commit is contained in:
Tom Christie 2017-03-09 13:40:25 +00:00
parent 97e14d03f7
commit 057175ffbd

View File

@ -40,28 +40,44 @@ $('form.api-interaction').submit(function(event) {
for (var [paramKey, paramValue] of formData.entries()) { for (var [paramKey, paramValue] of formData.entries()) {
var elem = form.find("[name=" + paramKey + "]") var elem = form.find("[name=" + paramKey + "]")
var dataType = elem.data('type') || 'string' var dataType = elem.data('type') || 'string'
var dataLocation = elem.data('location')
if (dataType === 'integer' && paramValue) { if (dataType === 'integer' && paramValue) {
paramValue = parseInt(paramValue) let value = parseInt(paramValue)
if (!isNaN(value)) {
params[paramKey] = value
}
} else if (dataType === 'number' && paramValue) { } else if (dataType === 'number' && paramValue) {
paramValue = parseFloat(paramValue) let value = parseFloat(paramValue)
if (!isNaN(value)) {
params[paramKey] = value
}
} else if (dataType === 'boolean' && paramValue) { } else if (dataType === 'boolean' && paramValue) {
paramValue = { let value = {
'true': true, 'true': true,
'false': false 'false': false
}[paramValue.toLowerCase()] }[paramValue.toLowerCase()]
if (value !== undefined) {
params[paramKey]
}
} else if (dataType === 'array' && paramValue) { } else if (dataType === 'array' && paramValue) {
paramValue = JSON.parse(paramValue) try {
params[paramKey] = JSON.parse(paramValue)
} catch (err) {
// Ignore malformed JSON
} }
} else if (dataType === 'object' && paramValue) {
if (dataLocation === 'query' && !paramValue) { try {
continue params[paramKey] = JSON.parse(paramValue)
} catch (err) {
// Ignore malformed JSON
} }
} else if (dataType === 'string' && paramValue) {
params[paramKey] = paramValue params[paramKey] = paramValue
} }
}
form.find(":checkbox").each(function( index ) { form.find(":checkbox").each(function( index ) {
// Handle unselected checkboxes
var name = $(this).attr("name"); var name = $(this).attr("name");
if (!params.hasOwnProperty(name)) { if (!params.hasOwnProperty(name)) {
params[name] = false params[name] = false