api.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. package api
  2. import (
  3. "embed"
  4. "io/fs"
  5. "net/http"
  6. "github.com/labstack/echo/v4"
  7. "github.com/mudler/edgevpn/pkg/blockchain"
  8. "github.com/mudler/edgevpn/pkg/edgevpn"
  9. "github.com/mudler/edgevpn/pkg/edgevpn/types"
  10. )
  11. //go:embed public
  12. var embededFiles embed.FS
  13. func getFileSystem() http.FileSystem {
  14. fsys, err := fs.Sub(embededFiles, "public")
  15. if err != nil {
  16. panic(err)
  17. }
  18. return http.FS(fsys)
  19. }
  20. func API(l string, ledger *blockchain.Ledger) error {
  21. ec := echo.New()
  22. assetHandler := http.FileServer(getFileSystem())
  23. ec.GET("/api/machines", func(c echo.Context) error {
  24. list := []*types.Machine{}
  25. for _, v := range ledger.CurrentData()[edgevpn.MachinesLedgerKey] {
  26. machine := &types.Machine{}
  27. v.Unmarshal(machine)
  28. list = append(list, machine)
  29. }
  30. return c.JSON(http.StatusOK, list)
  31. })
  32. ec.GET("/api/services", func(c echo.Context) error {
  33. list := []*types.Service{}
  34. for _, v := range ledger.CurrentData()[edgevpn.ServicesLedgerKey] {
  35. srvc := &types.Service{}
  36. v.Unmarshal(srvc)
  37. list = append(list, srvc)
  38. }
  39. return c.JSON(http.StatusOK, list)
  40. })
  41. ec.GET("/*", echo.WrapHandler(http.StripPrefix("/", assetHandler)))
  42. ec.GET("/api/blockchain", func(c echo.Context) error {
  43. // c.SetHandler()
  44. return c.JSON(http.StatusOK, ledger.BlockChain())
  45. })
  46. return ec.Start(l)
  47. }