api.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  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/files", func(c echo.Context) error {
  24. list := []*types.File{}
  25. for _, v := range ledger.CurrentData()[edgevpn.FilesLedgerKey] {
  26. machine := &types.File{}
  27. v.Unmarshal(machine)
  28. list = append(list, machine)
  29. }
  30. return c.JSON(http.StatusOK, list)
  31. })
  32. ec.GET("/api/machines", func(c echo.Context) error {
  33. list := []*types.Machine{}
  34. for _, v := range ledger.CurrentData()[edgevpn.MachinesLedgerKey] {
  35. machine := &types.Machine{}
  36. v.Unmarshal(machine)
  37. list = append(list, machine)
  38. }
  39. return c.JSON(http.StatusOK, list)
  40. })
  41. ec.GET("/api/users", func(c echo.Context) error {
  42. user := []*types.User{}
  43. for _, v := range ledger.CurrentData()[edgevpn.UsersLedgerKey] {
  44. u := &types.User{}
  45. v.Unmarshal(u)
  46. user = append(user, u)
  47. }
  48. return c.JSON(http.StatusOK, user)
  49. })
  50. ec.GET("/api/services", func(c echo.Context) error {
  51. list := []*types.Service{}
  52. for _, v := range ledger.CurrentData()[edgevpn.ServicesLedgerKey] {
  53. srvc := &types.Service{}
  54. v.Unmarshal(srvc)
  55. list = append(list, srvc)
  56. }
  57. return c.JSON(http.StatusOK, list)
  58. })
  59. ec.GET("/*", echo.WrapHandler(http.StripPrefix("/", assetHandler)))
  60. ec.GET("/api/blockchain", func(c echo.Context) error {
  61. // c.SetHandler()
  62. return c.JSON(http.StatusOK, ledger.BlockChain())
  63. })
  64. return ec.Start(l)
  65. }