From 27f7b59353a076120407d8873ea86f5eea7d1dcf Mon Sep 17 00:00:00 2001
From: Andrew Dolgov <noreply@fakecake.org>
Date: Mon, 30 Mar 2015 13:02:24 +0300
Subject: [PATCH] add a wrapper for standard error codes returned by backend,
 also add explanation to the error object if possible

---
 backend.php                | 15 ++++-----------
 classes/handler/public.php |  2 +-
 classes/pluginhandler.php  |  4 ++--
 errors.php                 |  4 ++++
 include/functions2.php     | 10 ++++++++++
 plugins/instances/init.php |  2 +-
 public.php                 |  3 +--
 7 files changed, 23 insertions(+), 17 deletions(-)

diff --git a/backend.php b/backend.php
index 84abc9730..150481cfe 100644
--- a/backend.php
+++ b/backend.php
@@ -63,7 +63,7 @@
 	if ($_SESSION["uid"]) {
 		if (!validate_session()) {
 			header("Content-Type: text/json");
-			print json_encode(array("error" => array("code" => 6)));
+			print error_json(6);
 			return;
 		}
 		load_user_plugins( $_SESSION["uid"]);
@@ -104,13 +104,6 @@
 		5 => __("Power User"),
 		10 => __("Administrator"));
 
-	#$error = sanity_check();
-
-	#if ($error['code'] != 0 && $op != "logout") {
-	#	print json_encode(array("error" => $error));
-	#	return;
-	#}
-
 	$op = str_replace("-", "_", $op);
 
 	$override = PluginHost::getInstance()->lookup_handler($op, $method);
@@ -137,18 +130,18 @@
 					return;
 				} else {
 					header("Content-Type: text/json");
-					print json_encode(array("error" => array("code" => 6)));
+					print error_json(6);
 					return;
 				}
 			} else {
 				header("Content-Type: text/json");
-				print json_encode(array("error" => array("code" => 6)));
+				print error_json(6);
 				return;
 			}
 		}
 	}
 
 	header("Content-Type: text/json");
-	print json_encode(array("error" => array("code" => 7)));
+	print error_json(13);
 
 ?>
diff --git a/classes/handler/public.php b/classes/handler/public.php
index e170a2631..46c74041c 100644
--- a/classes/handler/public.php
+++ b/classes/handler/public.php
@@ -706,7 +706,7 @@ class Handler_Public extends Handler {
 
 	function index() {
 		header("Content-Type: text/plain");
-		print json_encode(array("error" => array("code" => 7)));
+		print error_json(13);
 	}
 
 	function forgotpass() {
diff --git a/classes/pluginhandler.php b/classes/pluginhandler.php
index 690305165..5ca5c17d3 100644
--- a/classes/pluginhandler.php
+++ b/classes/pluginhandler.php
@@ -11,10 +11,10 @@ class PluginHandler extends Handler_Protected {
 			if (method_exists($plugin, $method)) {
 				$plugin->$method();
 			} else {
-				print json_encode(array("error" => "METHOD_NOT_FOUND"));
+				print error_json(13);
 			}
 		} else {
-			print json_encode(array("error" => "PLUGIN_NOT_FOUND"));
+			print error_json(14);
 		}
 	}
 }
diff --git a/errors.php b/errors.php
index f7333fd1a..d9185307a 100644
--- a/errors.php
+++ b/errors.php
@@ -34,6 +34,10 @@
 
 	$ERRORS[12] = __("SQL escaping test failed, check your database and PHP configuration");
 
+	$ERRORS[13] = __("Method not found");
+
+	$ERRORS[14] = __("Plugin not found");
+
 	if ($_REQUEST['mode'] == 'js') {
 		header("Content-Type: text/javascript; charset=UTF-8");
 
diff --git a/include/functions2.php b/include/functions2.php
index c0ed7a823..a73f9a7a7 100644
--- a/include/functions2.php
+++ b/include/functions2.php
@@ -2452,4 +2452,14 @@
 
 		return false;
 	}
+
+	function error_json($code) {
+		require_once "errors.php";
+
+		@$message = $ERRORS[$code];
+
+		return json_encode(array("error" =>
+			array("code" => $code, "message" => $message)));
+
+	}
 ?>
diff --git a/plugins/instances/init.php b/plugins/instances/init.php
index 2de0e5fd2..b23f45a01 100644
--- a/plugins/instances/init.php
+++ b/plugins/instances/init.php
@@ -384,7 +384,7 @@ class Instances extends Plugin implements IHandler {
 
 			print json_encode(array("feeds" => $feeds));
 		} else {
-			print json_encode(array("error" => array("code" => 6)));
+			print error_json(6);
 		}
 	}
 
diff --git a/public.php b/public.php
index 33f5af757..7aebde78f 100644
--- a/public.php
+++ b/public.php
@@ -56,6 +56,5 @@
 	}
 
 	header("Content-Type: text/plain");
-	print json_encode(array("error" => array("code" => 7)));
-
+	print error_json(13);
 ?>
-- 
GitLab