Browse Source

:gear: Unify API routes

Ettore Di Giacinto 3 years ago
parent
commit
6ffe03c3e8
2 changed files with 43 additions and 38 deletions
  1. 30 16
      api/api.go
  2. 13 22
      api/client/client.go

+ 30 - 16
api/api.go

@@ -18,6 +18,7 @@ package api
 import (
 	"context"
 	"embed"
+	"fmt"
 	"io/fs"
 	"net"
 	"net/http"
@@ -48,6 +49,19 @@ func getFileSystem() http.FileSystem {
 	return http.FS(fsys)
 }
 
+const (
+	MachineURL    = "/api/machines"
+	UsersURL      = "/api/users"
+	ServiceURL    = "/api/services"
+	BlockchainURL = "/api/blockchain"
+	LedgerURL     = "/api/ledger"
+	SummaryURL    = "/api/summary"
+	FileURL       = "/api/files"
+	NodesURL      = "/api/nodes"
+	DNSURL        = "/api/dns"
+	PeerstoreURL  = "/api/peerstore"
+)
+
 func API(ctx context.Context, l string, defaultInterval, timeout time.Duration, e *node.Node) error {
 
 	ledger, _ := e.Ledger()
@@ -65,7 +79,7 @@ func API(ctx context.Context, l string, defaultInterval, timeout time.Duration,
 	assetHandler := http.FileServer(getFileSystem())
 
 	// Get data from ledger
-	ec.GET("/api/files", func(c echo.Context) error {
+	ec.GET(FileURL, func(c echo.Context) error {
 		list := []*types.File{}
 		for _, v := range ledger.CurrentData()[protocol.FilesLedgerKey] {
 			machine := &types.File{}
@@ -75,7 +89,7 @@ func API(ctx context.Context, l string, defaultInterval, timeout time.Duration,
 		return c.JSON(http.StatusOK, list)
 	})
 
-	ec.GET("/api/summary", func(c echo.Context) error {
+	ec.GET(SummaryURL, func(c echo.Context) error {
 		files := len(ledger.CurrentData()[protocol.FilesLedgerKey])
 		machines := len(ledger.CurrentData()[protocol.MachinesLedgerKey])
 		users := len(ledger.CurrentData()[protocol.UsersLedgerKey])
@@ -98,7 +112,7 @@ func API(ctx context.Context, l string, defaultInterval, timeout time.Duration,
 		})
 	})
 
-	ec.GET("/api/machines", func(c echo.Context) error {
+	ec.GET(MachineURL, func(c echo.Context) error {
 		list := []*apiTypes.Machine{}
 		for _, v := range ledger.CurrentData()[protocol.MachinesLedgerKey] {
 			machine := &types.Machine{}
@@ -119,7 +133,7 @@ func API(ctx context.Context, l string, defaultInterval, timeout time.Duration,
 		return c.JSON(http.StatusOK, list)
 	})
 
-	ec.GET("/api/nodes", func(c echo.Context) error {
+	ec.GET(NodesURL, func(c echo.Context) error {
 		list := []apiTypes.Peer{}
 		for _, v := range e.HubRoom.Topic.ListPeers() {
 			list = append(list, apiTypes.Peer{ID: v.String()})
@@ -128,7 +142,7 @@ func API(ctx context.Context, l string, defaultInterval, timeout time.Duration,
 		return c.JSON(http.StatusOK, list)
 	})
 
-	ec.GET("/api/peerstore", func(c echo.Context) error {
+	ec.GET(PeerstoreURL, func(c echo.Context) error {
 		list := []apiTypes.Peer{}
 		for _, v := range e.Host().Network().Peerstore().Peers() {
 			list = append(list, apiTypes.Peer{ID: v.String()})
@@ -138,7 +152,7 @@ func API(ctx context.Context, l string, defaultInterval, timeout time.Duration,
 		return c.JSON(http.StatusOK, list)
 	})
 
-	ec.GET("/api/users", func(c echo.Context) error {
+	ec.GET(UsersURL, func(c echo.Context) error {
 		user := []*types.User{}
 		for _, v := range ledger.CurrentData()[protocol.UsersLedgerKey] {
 			u := &types.User{}
@@ -148,7 +162,7 @@ func API(ctx context.Context, l string, defaultInterval, timeout time.Duration,
 		return c.JSON(http.StatusOK, user)
 	})
 
-	ec.GET("/api/services", func(c echo.Context) error {
+	ec.GET(ServiceURL, func(c echo.Context) error {
 		list := []*types.Service{}
 		for _, v := range ledger.CurrentData()[protocol.ServicesLedgerKey] {
 			srvc := &types.Service{}
@@ -160,21 +174,21 @@ func API(ctx context.Context, l string, defaultInterval, timeout time.Duration,
 
 	ec.GET("/*", echo.WrapHandler(http.StripPrefix("/", assetHandler)))
 
-	ec.GET("/api/blockchain", func(c echo.Context) error {
+	ec.GET(BlockchainURL, func(c echo.Context) error {
 		return c.JSON(http.StatusOK, ledger.LastBlock())
 	})
 
-	ec.GET("/api/ledger", func(c echo.Context) error {
+	ec.GET(LedgerURL, func(c echo.Context) error {
 		return c.JSON(http.StatusOK, ledger.CurrentData())
 	})
 
-	ec.GET("/api/ledger/:bucket/:key", func(c echo.Context) error {
+	ec.GET(fmt.Sprintf("%s/:bucket/:key", LedgerURL), func(c echo.Context) error {
 		bucket := c.Param("bucket")
 		key := c.Param("key")
 		return c.JSON(http.StatusOK, ledger.CurrentData()[bucket][key])
 	})
 
-	ec.GET("/api/ledger/:bucket", func(c echo.Context) error {
+	ec.GET(fmt.Sprintf("%s/:bucket", LedgerURL), func(c echo.Context) error {
 		bucket := c.Param("bucket")
 		return c.JSON(http.StatusOK, ledger.CurrentData()[bucket])
 	})
@@ -182,7 +196,7 @@ func API(ctx context.Context, l string, defaultInterval, timeout time.Duration,
 	announcing := struct{ State string }{"Announcing"}
 
 	// Store arbitrary data
-	ec.PUT("/api/ledger/:bucket/:key/:value", func(c echo.Context) error {
+	ec.PUT(fmt.Sprintf("%s/:bucket/:key/:value", LedgerURL), func(c echo.Context) error {
 		bucket := c.Param("bucket")
 		key := c.Param("key")
 		value := c.Param("value")
@@ -191,7 +205,7 @@ func API(ctx context.Context, l string, defaultInterval, timeout time.Duration,
 		return c.JSON(http.StatusOK, announcing)
 	})
 
-	ec.GET("/api/dns", func(c echo.Context) error {
+	ec.GET(DNSURL, func(c echo.Context) error {
 		res := []apiTypes.DNS{}
 		for r, e := range ledger.CurrentData()[protocol.DNSKey] {
 			var t types.DNS
@@ -212,7 +226,7 @@ func API(ctx context.Context, l string, defaultInterval, timeout time.Duration,
 	})
 
 	// Announce dns
-	ec.POST("/api/dns", func(c echo.Context) error {
+	ec.POST(DNSURL, func(c echo.Context) error {
 		d := new(apiTypes.DNS)
 		if err := c.Bind(d); err != nil {
 			return echo.NewHTTPError(http.StatusBadRequest, err.Error())
@@ -227,14 +241,14 @@ func API(ctx context.Context, l string, defaultInterval, timeout time.Duration,
 	})
 
 	// Delete data from ledger
-	ec.DELETE("/api/ledger/:bucket", func(c echo.Context) error {
+	ec.DELETE(fmt.Sprintf("%s/:bucket", LedgerURL), func(c echo.Context) error {
 		bucket := c.Param("bucket")
 
 		ledger.AnnounceDeleteBucket(context.Background(), defaultInterval, timeout, bucket)
 		return c.JSON(http.StatusOK, announcing)
 	})
 
-	ec.DELETE("/api/ledger/:bucket/:key", func(c echo.Context) error {
+	ec.DELETE(fmt.Sprintf("%s/:bucket/:key", LedgerURL), func(c echo.Context) error {
 		bucket := c.Param("bucket")
 		key := c.Param("key")
 

+ 13 - 22
api/client/client.go

@@ -26,6 +26,7 @@ import (
 	"strings"
 	"time"
 
+	"github.com/mudler/edgevpn/api"
 	"github.com/mudler/edgevpn/pkg/blockchain"
 	"github.com/mudler/edgevpn/pkg/types"
 )
@@ -37,16 +38,6 @@ type (
 	}
 )
 
-const (
-	machineURL    = "/api/machines"
-	usersURL      = "/api/users"
-	serviceURL    = "/api/services"
-	blockchainURL = "/api/blockchain"
-	ledgerURL     = "/api/ledger"
-	summaryURL    = "/api/summary"
-	fileURL       = "/api/files"
-)
-
 func WithHost(host string) func(c *Client) error {
 	return func(c *Client) error {
 		c.host = host
@@ -109,7 +100,7 @@ func (c *Client) do(method, endpoint string, params map[string]string) (*http.Re
 
 // Get methods (Services, Users, Files, Ledger, Blockchain, Machines)
 func (c *Client) Services() (resp []types.Service, err error) {
-	res, err := c.do(http.MethodGet, serviceURL, nil)
+	res, err := c.do(http.MethodGet, api.ServiceURL, nil)
 	if err != nil {
 		return
 	}
@@ -125,7 +116,7 @@ func (c *Client) Services() (resp []types.Service, err error) {
 }
 
 func (c *Client) Files() (data []types.File, err error) {
-	res, err := c.do(http.MethodGet, fileURL, nil)
+	res, err := c.do(http.MethodGet, api.FileURL, nil)
 	if err != nil {
 		return
 	}
@@ -141,7 +132,7 @@ func (c *Client) Files() (data []types.File, err error) {
 }
 
 func (c *Client) Users() (data []types.User, err error) {
-	res, err := c.do(http.MethodGet, usersURL, nil)
+	res, err := c.do(http.MethodGet, api.UsersURL, nil)
 	if err != nil {
 		return
 	}
@@ -157,7 +148,7 @@ func (c *Client) Users() (data []types.User, err error) {
 }
 
 func (c *Client) Ledger() (data map[string]map[string]blockchain.Data, err error) {
-	res, err := c.do(http.MethodGet, ledgerURL, nil)
+	res, err := c.do(http.MethodGet, api.LedgerURL, nil)
 	if err != nil {
 		return
 	}
@@ -173,7 +164,7 @@ func (c *Client) Ledger() (data map[string]map[string]blockchain.Data, err error
 }
 
 func (c *Client) Summary() (data types.Summary, err error) {
-	res, err := c.do(http.MethodGet, summaryURL, nil)
+	res, err := c.do(http.MethodGet, api.SummaryURL, nil)
 	if err != nil {
 		return
 	}
@@ -189,7 +180,7 @@ func (c *Client) Summary() (data types.Summary, err error) {
 }
 
 func (c *Client) Blockchain() (data blockchain.Block, err error) {
-	res, err := c.do(http.MethodGet, blockchainURL, nil)
+	res, err := c.do(http.MethodGet, api.BlockchainURL, nil)
 	if err != nil {
 		return
 	}
@@ -205,7 +196,7 @@ func (c *Client) Blockchain() (data blockchain.Block, err error) {
 }
 
 func (c *Client) Machines() (resp []types.Machine, err error) {
-	res, err := c.do(http.MethodGet, machineURL, nil)
+	res, err := c.do(http.MethodGet, api.MachineURL, nil)
 	if err != nil {
 		return
 	}
@@ -221,7 +212,7 @@ func (c *Client) Machines() (resp []types.Machine, err error) {
 }
 
 func (c *Client) GetBucket(b string) (resp map[string]blockchain.Data, err error) {
-	res, err := c.do(http.MethodGet, fmt.Sprintf("%s/%s", ledgerURL, b), nil)
+	res, err := c.do(http.MethodGet, fmt.Sprintf("%s/%s", api.LedgerURL, b), nil)
 	if err != nil {
 		return
 	}
@@ -259,7 +250,7 @@ func (c *Client) GetBuckets() (resp []string, err error) {
 }
 
 func (c *Client) GetBucketKey(b, k string) (resp blockchain.Data, err error) {
-	res, err := c.do(http.MethodGet, fmt.Sprintf("%s/%s/%s", ledgerURL, b, k), nil)
+	res, err := c.do(http.MethodGet, fmt.Sprintf("%s/%s/%s", api.LedgerURL, b, k), nil)
 	if err != nil {
 		return
 	}
@@ -296,7 +287,7 @@ func (c *Client) Put(b, k string, v interface{}) (err error) {
 
 	d := base64.URLEncoding.EncodeToString(dat)
 
-	res, err := c.do(http.MethodPut, fmt.Sprintf("%s/%s/%s/%s", ledgerURL, b, k, d), nil)
+	res, err := c.do(http.MethodPut, fmt.Sprintf("%s/%s/%s/%s", api.LedgerURL, b, k, d), nil)
 	if err != nil {
 		return
 	}
@@ -319,7 +310,7 @@ func (c *Client) Put(b, k string, v interface{}) (err error) {
 
 func (c *Client) Delete(b, k string) (err error) {
 	s := struct{ State string }{}
-	res, err := c.do(http.MethodDelete, fmt.Sprintf("%s/%s/%s", ledgerURL, b, k), nil)
+	res, err := c.do(http.MethodDelete, fmt.Sprintf("%s/%s/%s", api.LedgerURL, b, k), nil)
 	if err != nil {
 		return
 	}
@@ -340,7 +331,7 @@ func (c *Client) Delete(b, k string) (err error) {
 
 func (c *Client) DeleteBucket(b string) (err error) {
 	s := struct{ State string }{}
-	res, err := c.do(http.MethodDelete, fmt.Sprintf("%s/%s", ledgerURL, b), nil)
+	res, err := c.do(http.MethodDelete, fmt.Sprintf("%s/%s", api.LedgerURL, b), nil)
 	if err != nil {
 		return
 	}