api.go 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package cmd
  2. import (
  3. "net/http"
  4. "github.com/labstack/echo/v4"
  5. "github.com/mudler/edgevpn/pkg/blockchain"
  6. "github.com/mudler/edgevpn/pkg/edgevpn"
  7. "github.com/urfave/cli"
  8. "go.uber.org/zap"
  9. )
  10. func API(l *zap.Logger) cli.Command {
  11. return cli.Command{
  12. Name: "api",
  13. Description: "api starts an http server to display network informations",
  14. Flags: append(CommonFlags,
  15. &cli.StringFlag{
  16. Name: "listen",
  17. Value: ":8080",
  18. },
  19. ),
  20. Action: func(c *cli.Context) error {
  21. e := edgevpn.New(cliToOpts(l, c)...)
  22. mw, err := e.MessageWriter()
  23. if err != nil {
  24. return err
  25. }
  26. ledger := blockchain.New(mw, 1000)
  27. // Join the node to the network, using our ledger
  28. if err := e.Join(ledger); err != nil {
  29. return err
  30. }
  31. ec := echo.New()
  32. ec.GET("/api/data", func(c echo.Context) error {
  33. return c.JSON(http.StatusOK, ledger.CurrentData())
  34. })
  35. ec.GET("/api/blockchain", func(c echo.Context) error {
  36. return c.JSON(http.StatusOK, ledger.BlockChain())
  37. })
  38. return ec.Start(c.String("listen"))
  39. },
  40. }
  41. }