Skip to content

Commit

Permalink
Merge pull request #4027 from ckan/4022-jsonp-content-type
Browse files Browse the repository at this point in the history
[#4022] use javascript content-type for jsonp responses
  • Loading branch information
smotornyuk committed Feb 26, 2018
2 parents a53b7f3 + 1c64d3c commit 832e013
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 0 deletions.
2 changes: 2 additions & 0 deletions ckan/controllers/api.py
Expand Up @@ -38,6 +38,7 @@
'text': 'text/plain;charset=utf-8',
'html': 'text/html;charset=utf-8',
'json': 'application/json;charset=utf-8',
'javascript': 'application/javascript;charset=utf-8',
}


Expand Down Expand Up @@ -99,6 +100,7 @@ def _finish(self, status_int, response_data=None,
# escape callback to remove '<', '&', '>' chars
callback = cgi.escape(request.params['callback'])
response_msg = self._wrap_jsonp(callback, response_msg)
response.headers['Content-Type'] = CONTENT_TYPES['javascript']
return response_msg

def _finish_ok(self, response_data=None,
Expand Down
13 changes: 13 additions & 0 deletions ckan/tests/controllers/test_api.py
Expand Up @@ -278,6 +278,19 @@ def test_jsonp_works_on_get_requests(self):
eq_(sorted(res_dict['result']),
sorted([dataset1['name'], dataset2['name']]))

def test_jsonp_returns_javascript_content_type(self):
url = url_for(
controller='api',
action='action',
logic_function='status_show',
ver='/3')
app = self._get_test_app()
res = app.get(
url=url,
params={'callback': 'my_callback'},
)
assert_in('application/javascript', res.headers.get('Content-Type'))

def test_jsonp_does_not_work_on_post_requests(self):

dataset1 = factories.Dataset()
Expand Down
2 changes: 2 additions & 0 deletions ckan/views/api.py
Expand Up @@ -23,6 +23,7 @@
u'text': u'text/plain;charset=utf-8',
u'html': u'text/html;charset=utf-8',
u'json': u'application/json;charset=utf-8',
u'javascript': u'application/javascript;charset=utf-8',
}

API_REST_DEFAULT_VERSION = 1
Expand Down Expand Up @@ -69,6 +70,7 @@ def _finish(status_int, response_data=None,
# escape callback to remove '<', '&', '>' chars
callback = cgi.escape(request.args[u'callback'])
response_msg = _wrap_jsonp(callback, response_msg)
headers[u'Content-Type'] = CONTENT_TYPES[u'javascript']
return make_response((response_msg, status_int, headers))


Expand Down

0 comments on commit 832e013

Please sign in to comment.