Browse Source

pluginhost: add helper methods to get private/public pluginmethod endpoint URLs

Andrew Dolgov 1 year ago
parent
commit
10c63ed582
2 changed files with 31 additions and 2 deletions
  1. 30 0
      classes/pluginhost.php
  2. 1 2
      plugins/af_proxy_http/init.php

+ 30 - 0
classes/pluginhost.php

@@ -491,4 +491,34 @@ class PluginHost {
 	function get_owner_uid() {
 		return $this->owner_uid;
 	}
+
+	// handled by classes/pluginhandler.php, requires valid session
+	function get_method_url($sender, $method, $params)  {
+		return get_self_url_prefix() . "/backend.php?" .
+			http_build_query(
+				array_merge(
+					[
+						"op" => "pluginhandler",
+						"plugin" => strtolower(get_class($sender)),
+						"pmethod" => $method
+					],
+					$params));
+	}
+
+	// WARNING: endpoint in public.php, exposed to unauthenticated users
+	function get_public_method_url($sender, $method, $params)  {
+		if ($sender->is_public_method($method)) {
+			return get_self_url_prefix() . "/public.php?" .
+				http_build_query(
+					array_merge(
+						[
+							"op" => "pluginhandler",
+							"plugin" => strtolower(get_class($sender)),
+							"pmethod" => $method
+						],
+						$params));
+		} else {
+			user_error("get_public_method_url: requested method '$method' of '" . get_class($sender) . "' is private.");
+		}
+	}
 }

+ 1 - 2
plugins/af_proxy_http/init.php

@@ -141,8 +141,7 @@ class Af_Proxy_Http extends Plugin {
 						}
 					}
 
-					return get_self_url_prefix() . "/public.php?op=pluginhandler&plugin=af_proxy_http&pmethod=imgproxy&url=" .
-						urlencode($url);
+					return $this->host->get_public_method_url($this, "imgproxy", ["url" => $url]);
 				}
 			}
 		}