From d6f5a8a8d13892d6487f344c5e5b1f5dd48893d5 Mon Sep 17 00:00:00 2001 From: Bharat Mediratta Date: Sun, 8 Aug 2010 15:02:24 -0700 Subject: Add JSONP support. You must specify &output=jsonp?callback= Fixes ticket #1205. --- modules/rest/helpers/rest.php | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) (limited to 'modules/rest/helpers') 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 "
$html
"; - } else { - json::reply($data); + break; + + default: + throw new Rest_Exception("Bad Request", 400); } } -- cgit v1.2.3