api.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  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/summary", func(c echo.Context) error {
  33. files := len(ledger.CurrentData()[edgevpn.FilesLedgerKey])
  34. machines := len(ledger.CurrentData()[edgevpn.MachinesLedgerKey])
  35. users := len(ledger.CurrentData()[edgevpn.UsersLedgerKey])
  36. services := len(ledger.CurrentData()[edgevpn.ServicesLedgerKey])
  37. blockchain := len(ledger.BlockChain())
  38. return c.JSON(http.StatusOK, struct {
  39. Files, Machines, Users, Services, BlockChain int
  40. }{files, machines, users, services, blockchain})
  41. })
  42. ec.GET("/api/machines", func(c echo.Context) error {
  43. list := []*types.Machine{}
  44. for _, v := range ledger.CurrentData()[edgevpn.MachinesLedgerKey] {
  45. machine := &types.Machine{}
  46. v.Unmarshal(machine)
  47. list = append(list, machine)
  48. }
  49. return c.JSON(http.StatusOK, list)
  50. })
  51. ec.GET("/api/users", func(c echo.Context) error {
  52. user := []*types.User{}
  53. for _, v := range ledger.CurrentData()[edgevpn.UsersLedgerKey] {
  54. u := &types.User{}
  55. v.Unmarshal(u)
  56. user = append(user, u)
  57. }
  58. return c.JSON(http.StatusOK, user)
  59. })
  60. ec.GET("/api/services", func(c echo.Context) error {
  61. list := []*types.Service{}
  62. for _, v := range ledger.CurrentData()[edgevpn.ServicesLedgerKey] {
  63. srvc := &types.Service{}
  64. v.Unmarshal(srvc)
  65. list = append(list, srvc)
  66. }
  67. return c.JSON(http.StatusOK, list)
  68. })
  69. ec.GET("/*", echo.WrapHandler(http.StripPrefix("/", assetHandler)))
  70. ec.GET("/api/blockchain", func(c echo.Context) error {
  71. // c.SetHandler()
  72. return c.JSON(http.StatusOK, ledger.BlockChain())
  73. })
  74. return ec.Start(l)
  75. }