diff options
author | Brad Bishop <bradleyb@fuzziesquirrel.com> | 2016-03-29 10:54:54 -0400 |
---|---|---|
committer | Brad Bishop <bradleyb@fuzziesquirrel.com> | 2016-03-29 11:31:32 -0400 |
commit | 80fe37a3d752eec100642ede8a8ca3b48a2e9ec6 (patch) | |
tree | daeaa08cfebd18ae3386e0bd2850eafdec8341a2 | |
parent | 3bba28c9c39da163e4fb3c256a5c94cc6027d043 (diff) | |
download | phosphor-rest-server-80fe37a3d752eec100642ede8a8ca3b48a2e9ec6.tar.gz phosphor-rest-server-80fe37a3d752eec100642ede8a8ca3b48a2e9ec6.zip |
Add support for serving jsonp
Jsonp adds a javascript wrapper to json responses. It allows client
applications to work around cross domain restrictions imposed by some
browsers. For more information on jsonp:
https://en.wikipedia.org/wiki/JSONP
To get a jsonp response, an application adds a callback url parameter
with the desired name of the wrapper:
https://192.168.252.1/list?callback=my_callback
-rw-r--r-- | obmc-rest | 30 |
1 files changed, 28 insertions, 2 deletions
@@ -751,6 +751,32 @@ class JsonApiErrorsPlugin(object): return json_response +class JsonpPlugin(JsonApiErrorsPlugin): + ''' Json javascript wrapper. ''' + name = 'jsonp' + api = 2 + + def __init__(self, **kw): + super(JsonpPlugin, self).__init__(**kw) + + @staticmethod + def to_jsonp(json): + jwrapper = request.query.callback or None + if(jwrapper): + response.set_header('Content-Type', 'application/javascript') + json = jwrapper + '(' + json + ');' + return json + + def apply(self, callback, route): + def wrap(*a, **kw): + return self.to_jsonp(callback(*a, **kw)) + return wrap + + def json_errors(self, res, error): + json = super(JsonpPlugin, self).json_errors(res, error) + return self.to_jsonp(json) + + class RestApp(Bottle): def __init__(self, bus): super(RestApp, self).__init__(autojson=False) @@ -765,9 +791,9 @@ class RestApp(Bottle): def install_plugins(self): # install json api plugins json_kw = {'indent': 2, 'sort_keys': True} - self.install(JSONPlugin(**json_kw)) - self.install(JsonApiErrorsPlugin(**json_kw)) self.install(AuthorizationPlugin()) + self.install(JsonpPlugin(**json_kw)) + self.install(JSONPlugin(**json_kw)) self.install(JsonApiResponsePlugin()) self.install(JsonApiRequestPlugin()) self.install(JsonApiRequestTypePlugin()) |