Skip to content

Commit 0d2d00d

Browse files
author
Dan Hudlow
committed
Return 400 Bad Request for parsing failures
1 parent 2a3d7e0 commit 0d2d00d

File tree

3 files changed

+31
-23
lines changed

3 files changed

+31
-23
lines changed

frameworks/php-vanilla/index.php

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,19 @@
33
$parameters = new stdClass();;
44

55
foreach ($_GET as $param => $value) {
6-
if ($param === 'cast_to_boolean') {
7-
$value = boolval($value);
8-
} else if ($param === 'cast_to_integer') {
9-
$value = intval($value);
10-
} else if ($param === 'cast_to_float') {
11-
$value = floatval($value);
12-
} else if ($param === 'cast_to_date_time') {
13-
try {
6+
try {
7+
if ($param === 'cast_to_boolean') {
8+
$value = boolval($value);
9+
} else if ($param === 'cast_to_integer') {
10+
$value = intval($value);
11+
} else if ($param === 'cast_to_float') {
12+
$value = floatval($value);
13+
} else if ($param === 'cast_to_date_time') {
1414
$value = date_create($value)->format('Y-m-d\TH:i:s.v\Z');
15-
} catch (Error $error) {
16-
$value = null;
1715
}
16+
} catch (Error $error) {
17+
$value = null;
18+
http_response_code(400);
1819
}
1920

2021
$parameters->$param = $value;

frameworks/python-django/query_parser/views.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,25 +7,30 @@ def index(request):
77
parameters = {}
88
for param in request.GET:
99
parameters[param] = request.GET.get(param)
10+
status = 200
1011

1112
if (param == 'cast_to_integer'):
1213
try:
1314
parameters[param] = int(parameters[param])
1415
except:
1516
parameters[param] = None
17+
status = 400
1618
if (param == 'cast_to_float'):
1719
try:
1820
parameters[param] = float(parameters[param])
1921
except:
2022
parameters[param] = None
23+
status = 400
2124
if (param == 'cast_to_boolean'):
2225
try:
2326
parameters[param] = bool(parameters[param])
2427
except:
2528
parameters[param] = None
29+
status = 400
2630
if (param == 'cast_to_date_time'):
2731
try:
2832
parameters[param] = datetime.fromisoformat(parameters[param]).astimezone(timezone.utc).strftime("%Y-%m-%dT%H:%M:%S.%f")[:-3]+'Z'
2933
except:
3034
parameters[param] = None
31-
return JsonResponse(parameters)
35+
status = 400
36+
return JsonResponse(parameters, status=status)

frameworks/ruby-on-rails/app/controllers/query_controller.rb

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,24 @@ def parse
33
parameters = {}
44
request.query_parameters.each do |param, value|
55
parameters[param] = value
6+
status = :ok
67

7-
if param === 'cast_to_integer'
8-
parameters[param] = value.to_i
9-
elsif param === 'cast_to_float'
10-
parameters[param] = value.to_f
11-
elsif param === 'cast_to_boolean'
12-
parameters[param] = ActiveModel::Type::Boolean.new.cast(value)
13-
elsif param === 'cast_to_date_time'
14-
begin
8+
begin
9+
if param === 'cast_to_integer'
10+
parameters[param] = value.to_i
11+
elsif param === 'cast_to_float'
12+
parameters[param] = value.to_f
13+
elsif param === 'cast_to_boolean'
14+
parameters[param] = ActiveModel::Type::Boolean.new.cast(value)
15+
elsif param === 'cast_to_date_time'
1516
parameters[param] = DateTime.parse(value).new_offset(0).rfc3339(3).sub(/\+00\:00/, 'Z')
16-
rescue Exception
17-
parameters[param] = nil
1817
end
18+
rescue Exception
19+
parameters[param] = nil
20+
status = :bad_request
1921
end
20-
end
2122

22-
render :json => parameters
23+
render :json => parameters, :status => status
24+
end
2325
end
2426
end

0 commit comments

Comments
 (0)