diff options
author | Bharat Mediratta <bharat@menalto.com> | 2010-08-08 15:02:24 -0700 |
---|---|---|
committer | Bharat Mediratta <bharat@menalto.com> | 2010-08-08 15:02:24 -0700 |
commit | d6f5a8a8d13892d6487f344c5e5b1f5dd48893d5 (patch) | |
tree | f407678c9a0a4a17f19f89cc96880c33718d9e50 /modules | |
parent | 9b5e058dd3a7d0d08fa0fad954a1908b9949e934 (diff) |
Add JSONP support. You must specify &output=jsonp?callback=<js_function>
Fixes ticket #1205.
Diffstat (limited to 'modules')
-rw-r--r-- | modules/rest/helpers/rest.php | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/modules/rest/helpers/rest.php b/modules/rest/helpers/rest.php index 644779da..73d09c64 100644 --- a/modules/rest/helpers/rest.php +++ b/modules/rest/helpers/rest.php @@ -24,7 +24,27 @@ class rest_Core { Session::instance()->abort_save(); header("X-Gallery-API-Version: " . rest::API_VERSION); - if (Input::instance()->get("output") == "html") { + switch (Input::instance()->get("output", "json")) { + case "json": + json::reply($data); + break; + + case "jsonp": + if (!($callback = Input::instance()->get("callback", ""))) { + throw new Rest_Exception( + "Bad Request", 400, array("errors" => array("callback" => "missing"))); + } + + if (preg_match('/^[$A-Za-z_][0-9A-Za-z_]*$/', $callback) == 1) { + header("Content-type: application/javascript"); + print "$callback(" . json_encode($data) . ")"; + } else { + throw new Rest_Exception( + "Bad Request", 400, array("errors" => array("callback" => "invalid"))); + } + break; + + case "html": header("Content-type: text/html"); if ($data) { $html = preg_replace( @@ -34,8 +54,10 @@ class rest_Core { $html = t("Empty response"); } print "<pre>$html</pre>"; - } else { - json::reply($data); + break; + + default: + throw new Rest_Exception("Bad Request", 400); } } |