[icinga-checkins] icinga.org: icinga2/fix/api-sync-repl-11684: API: Fix that / v1 returns html if json is requested

git at icinga.org git at icinga.org
Wed Jun 15 17:50:20 CEST 2016


Module: icinga2
Branch: fix/api-sync-repl-11684
Commit: 2b474823f8a2697d474e6e84f61e23cd70c17007
URL:    https://git.icinga.org/?p=icinga2.git;a=commit;h=2b474823f8a2697d474e6e84f61e23cd70c17007

Author: Michael Friedrich <michael.friedrich at netways.de>
Date:   Wed May 11 10:28:44 2016 +0200

API: Fix that /v1 returns html if json is requested

fixes #10570

---

 lib/remote/infohandler.cpp |   62 +++++++++++++++++++++++++++++---------------
 1 file changed, 41 insertions(+), 21 deletions(-)

diff --git a/lib/remote/infohandler.cpp b/lib/remote/infohandler.cpp
index 058ca51..04c0c90 100644
--- a/lib/remote/infohandler.cpp
+++ b/lib/remote/infohandler.cpp
@@ -42,43 +42,63 @@ bool InfoHandler::HandleRequest(const ApiUser::Ptr& user, HttpRequest& request,
 		return false;
 
 	response.SetStatus(200, "OK");
-	response.AddHeader("Content-Type", "text/html");
-
-	String body = "<html><head><title>Icinga 2</title></head><h1>Hello from Icinga 2!</h1>";
-	body += "<p>You are authenticated as <b>" + user->GetName() + "</b>. ";
-
-	bool has_permissions = false;
-	String perm_info;
 
+	std::vector<String> permInfo;
 	Array::Ptr permissions = user->GetPermissions();
+
 	if (permissions) {
 		ObjectLock olock(permissions);
 		BOOST_FOREACH(const Value& permission, permissions) {
-			has_permissions = true;
-
 			String name;
-			bool has_filter = false;
+			bool hasFilter = false;
 			if (permission.IsObjectType<Dictionary>()) {
 				Dictionary::Ptr dpermission = permission;
 				name = dpermission->Get("permission");
-				has_filter = dpermission->Contains("filter");
+				hasFilter = dpermission->Contains("filter");
 			} else
 				name = permission;
 
-			perm_info += "<li>" + name;
-			if (has_filter)
-				perm_info += " (filtered)";
-			perm_info += "</li>";
+			if (hasFilter)
+				name += " (filtered)";
+
+			permInfo.push_back(name);
 		}
 	}
 
-	if (has_permissions)
-		body += "Your user has the following permissions:</p> <ul>" + perm_info + "</ul>";
-	else
-		body += "Your user does not have any permissions.</p>";
+	if (request.Headers->Get("accept") == "application/json") {
+		Dictionary::Ptr result1 = new Dictionary();
+
+		result1->Set("user", user->GetName());
+		result1->Set("permissions", Array::FromVector(permInfo));
+		result1->Set("info", "More information about API requests is available in the documentation at http://docs.icinga.org/icinga2/latest.");
+
+		Array::Ptr results = new Array();
+		results->Add(result1);
 
-	body += "<p>More information about API requests is available in the <a href=\"http://docs.icinga.org/icinga2/latest\" target=\"_blank\">documentation</a>.</p></html>";
-	response.WriteBody(body.CStr(), body.GetLength());
+		Dictionary::Ptr result = new Dictionary();
+		result->Set("results", results);
+
+		HttpUtility::SendJsonBody(response, result);
+	} else {
+		response.AddHeader("Content-Type", "text/html");
+
+		String body = "<html><head><title>Icinga 2</title></head><h1>Hello from Icinga 2!</h1>";
+		body += "<p>You are authenticated as <b>" + user->GetName() + "</b>. ";
+
+		if (!permInfo.empty()) {
+			body += "Your user has the following permissions:</p> <ul>";
+
+			BOOST_FOREACH(const String& perm, permInfo) {
+				body += "<li>" + perm + "</li>";
+			}
+
+			body += "</ul>";
+		} else
+			body += "Your user does not have any permissions.</p>";
+
+		body += "<p>More information about API requests is available in the <a href=\"http://docs.icinga.org/icinga2/latest\" target=\"_blank\">documentation</a>.</p></html>";
+		response.WriteBody(body.CStr(), body.GetLength());
+	}
 
 	return true;
 }



More information about the icinga-checkins mailing list