summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBharat Mediratta <bharat@menalto.com>2010-08-08 15:02:24 -0700
committerBharat Mediratta <bharat@menalto.com>2010-08-08 15:02:24 -0700
commitd6f5a8a8d13892d6487f344c5e5b1f5dd48893d5 (patch)
treef407678c9a0a4a17f19f89cc96880c33718d9e50
parent9b5e058dd3a7d0d08fa0fad954a1908b9949e934 (diff)
Add JSONP support. You must specify &output=jsonp?callback=<js_function>
Fixes ticket #1205.
-rw-r--r--modules/rest/helpers/rest.php28
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);
}
}