allow user plugins to expose public methods out in a limited fashion
This commit is contained in:
parent
fafd32e2dc
commit
4daaf23491
3 changed files with 43 additions and 5 deletions
|
@ -1086,5 +1086,37 @@ class Handler_Public extends Handler {
|
|||
|
||||
return "tag:" . parse_url(get_self_url_prefix(), PHP_URL_HOST) . ",$timestamp:/$id";
|
||||
}
|
||||
|
||||
// this should be used very carefully because this endpoint is exposed to unauthenticated users
|
||||
// plugin data is not loaded because there's no user context and owner_uid/session may or may not be available
|
||||
// in general, don't do anything user-related in here and do not modify $_SESSION
|
||||
public function pluginhandler() {
|
||||
$host = new PluginHost();
|
||||
|
||||
$plugin = basename($_REQUEST["plugin"]);
|
||||
$method = $_REQUEST["pmethod"];
|
||||
|
||||
$host->load($plugin, PluginHost::KIND_USER, 0);
|
||||
$host->load_data();
|
||||
|
||||
$pclass = $host->get_plugin($plugin);
|
||||
|
||||
if ($pclass) {
|
||||
if (method_exists($pclass, $method)) {
|
||||
if ($pclass->is_public_method($method)) {
|
||||
$pclass->$method();
|
||||
} else {
|
||||
header("Content-Type: text/json");
|
||||
print error_json(6);
|
||||
}
|
||||
} else {
|
||||
header("Content-Type: text/json");
|
||||
print error_json(13);
|
||||
}
|
||||
} else {
|
||||
header("Content-Type: text/json");
|
||||
print error_json(14);
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
|
@ -22,6 +22,10 @@ class Plugin {
|
|||
return array();
|
||||
}
|
||||
|
||||
function is_public_method($method) {
|
||||
return false;
|
||||
}
|
||||
|
||||
function get_js() {
|
||||
return "";
|
||||
}
|
||||
|
|
|
@ -8,6 +8,10 @@ class Af_Zz_ImgProxy extends Plugin {
|
|||
"fox");
|
||||
}
|
||||
|
||||
function is_public_method($method) {
|
||||
return $method === "imgproxy";
|
||||
}
|
||||
|
||||
function init($host) {
|
||||
$this->host = $host;
|
||||
|
||||
|
@ -27,6 +31,7 @@ class Af_Zz_ImgProxy extends Plugin {
|
|||
}
|
||||
|
||||
public function imgproxy() {
|
||||
|
||||
$url = rewrite_relative_url(SELF_URL_PATH, $_REQUEST["url"]);
|
||||
$kind = (int) $_REQUEST["kind"]; // 1 = video
|
||||
|
||||
|
@ -48,9 +53,6 @@ class Af_Zz_ImgProxy extends Plugin {
|
|||
} else {
|
||||
$data = fetch_file_contents(array("url" => $url));
|
||||
|
||||
global $fetch_last_error;
|
||||
print $fetch_last_error;
|
||||
|
||||
if ($data) {
|
||||
if (file_put_contents($local_filename, $data)) {
|
||||
$mimetype = mime_content_type($local_filename);
|
||||
|
@ -76,7 +78,7 @@ class Af_Zz_ImgProxy extends Plugin {
|
|||
|
||||
if (($scheme != 'https' && $scheme != "") || $is_remote) {
|
||||
if (strpos($url, "data:") !== 0) {
|
||||
$url = "backend.php?op=pluginhandler&plugin=af_zz_imgproxy&method=imgproxy&kind=$kind&url=" .
|
||||
$url = "public.php?op=pluginhandler&plugin=af_zz_imgproxy&pmethod=imgproxy&kind=$kind&url=" .
|
||||
urlencode($url);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue