From b10fa6d82c27fb292d94f399b0ae0c90ce06eea0 Mon Sep 17 00:00:00 2001
From: capossele <angelocapossele@gmail.com>
Date: Fri, 17 Apr 2020 12:20:46 +0100
Subject: [PATCH] :sparkles: adds more fields to the info api

---
 plugins/drng/drng.go          |  4 +-
 plugins/webapi/info/plugin.go | 71 +++++++++++++++++++++++++++++++++--
 2 files changed, 70 insertions(+), 5 deletions(-)

diff --git a/plugins/drng/drng.go b/plugins/drng/drng.go
index 1af62582..7f44946f 100644
--- a/plugins/drng/drng.go
+++ b/plugins/drng/drng.go
@@ -1,12 +1,12 @@
 package drng
 
 import (
-	"encoding/hex"
 	"errors"
 	"fmt"
 
 	"github.com/iotaledger/goshimmer/plugins/config"
 	"github.com/iotaledger/hive.go/crypto/ed25519"
+	"github.com/mr-tron/base58/base58"
 )
 
 var (
@@ -20,7 +20,7 @@ func parseCommitteeMembers() (result []ed25519.PublicKey, err error) {
 			continue
 		}
 
-		pubKey, err := hex.DecodeString(committeeMember)
+		pubKey, err := base58.Decode(committeeMember)
 		if err != nil {
 			return nil, fmt.Errorf("%w: invalid public key: %s", ErrParsingCommitteeMember, err)
 		}
diff --git a/plugins/webapi/info/plugin.go b/plugins/webapi/info/plugin.go
index 13eaf5e1..1d8c3d04 100644
--- a/plugins/webapi/info/plugin.go
+++ b/plugins/webapi/info/plugin.go
@@ -1,13 +1,14 @@
 package info
 
 import (
-	"encoding/hex"
 	"net/http"
 
 	"github.com/iotaledger/goshimmer/plugins/autopeering/local"
+	"github.com/iotaledger/goshimmer/plugins/banner"
 	"github.com/iotaledger/goshimmer/plugins/webapi"
 	"github.com/iotaledger/hive.go/node"
 	"github.com/labstack/echo"
+	"github.com/mr-tron/base58"
 )
 
 var PLUGIN = node.NewPlugin("WebAPI info Endpoint", node.Enabled, configure)
@@ -17,11 +18,75 @@ func configure(plugin *node.Plugin) {
 }
 
 // getInfo returns the info of the node
+// e.g.,
+// {
+// 	"version":"v0.2.0",
+// 	"identity":"7BxV1v3nFHefn4J88jeZebqnJRvSHt1jC7ME6tmKLhy7",
+// 	"publickey":"CjUsn86jpFHWnSCx3NhWfU4Lk16mDdy1Hr7ERSTv3xn9",
+// 	"enabledplugins":[
+// 		"Config",
+// 		"Autopeering",
+// 		"Analysis",
+// 		"WebAPI data Endpoint",
+// 		"WebAPI dRNG Endpoint",
+// 		"MessageLayer",
+// 		"CLI",
+// 		"Database",
+// 		"DRNG",
+// 		"WebAPI autopeering Endpoint",
+// 		"Metrics",
+// 		"PortCheck",
+// 		"SPA",
+// 		"WebAPI",
+// 		"WebAPI info Endpoint",
+// 		"WebAPI message Endpoint",
+// 		"Banner",
+// 		"Gossip",
+// 		"Graceful Shutdown",
+// 		"Logger"
+// 	],
+// 	"disabledlugins":[
+// 		"Graph",
+// 		"RemoteLog",
+// 		"Spammer",
+// 		"WebAPI Auth"
+// 	]
+// }
 func getInfo(c echo.Context) error {
-	return c.JSON(http.StatusOK, Response{PublicKey: hex.EncodeToString(local.GetInstance().PublicKey().Bytes())})
+	enabledPlugins := []string{}
+	disabledPlugins := []string{}
+	for plugin, status := range node.GetPlugins() {
+		switch status {
+		case node.Disabled:
+			disabledPlugins = append(disabledPlugins, plugin)
+		case node.Enabled:
+			enabledPlugins = append(enabledPlugins, plugin)
+		default:
+			continue
+		}
+	}
+
+	return c.JSON(http.StatusOK, Response{
+		Version:         banner.AppVersion,
+		Identity:        base58.Encode(local.GetInstance().Identity.ID().Bytes()),
+		PublicKey:       base58.Encode(local.GetInstance().PublicKey().Bytes()),
+		EnabledPlugins:  enabledPlugins,
+		DisabledPlugins: disabledPlugins,
+	})
 }
 
+// Response holds the response of the GET request.
 type Response struct {
+	// version of GoShimmer
+	Version string `json:"version,omitempty"`
+	// identity of the node encoded in base58
+	Identity string `json:"identity,omitempty"`
+	// public key of the node encoded in base58
 	PublicKey string `json:"publickey,omitempty"`
-	Error     string `json:"error,omitempty"`
+	// list of enabled plugins
+	EnabledPlugins []string `json:"enabledplugins,omitempty"`
+	// list if disabled plugins
+	DisabledPlugins []string `json:"disabledlugins,omitempty"`
+	// error of the response
+	Error string `json:"error,omitempty"`
 }
-- 
GitLab