package gateway import ( "net/http" "git.5iot.com/iotlcm-public/iotlcm-onelink-mock/internal/service" "github.com/gogf/gf/v2/net/ghttp" ) type Controller struct { service *service.Service } func New(mockService *service.Service) *Controller { return &Controller{service: mockService} } func (c *Controller) Register(server *ghttp.Server) { server.Group("/", func(group *ghttp.RouterGroup) { group.Middleware(c.cors) group.ALL("/healthz", c.forward(c.service.Health, false)) group.ALL("/api/state", c.forward(c.service.AdminState, true)) group.ALL("/api/appids", c.forward(c.service.AdminAppIDs, true)) group.ALL("/api/cards", c.forward(c.service.AdminCards, true)) group.ALL("/api/card-groups", c.forward(c.service.AdminCardGroups, true)) group.ALL("/api/cards/export", c.forward(c.service.AdminCardsExport, true)) group.ALL("/api/settings", c.forward(c.service.AdminSettings, true)) group.ALL("/api/orders", c.forward(c.service.AdminOrders, true)) group.ALL("/api/operation-logs", c.forward(c.service.AdminOperationLogs, false)) group.ALL("/api/runtime-logs", c.forward(c.service.AdminRuntimeLogs, false)) group.ALL("/api/sync", c.forward(c.service.AdminSync, true)) group.ALL("/api/generate", c.forward(c.service.AdminGenerate, true)) group.ALL("/v5/*endpoint", c.forward(c.service.OneLink, true)) group.ALL("/ec/*endpoint", c.forward(c.service.OneLink, true)) group.ALL("/sim/*endpoint", c.forward(c.service.Chan, true)) }) } func (c *Controller) forward(handler http.HandlerFunc, operationLogging bool) ghttp.HandlerFunc { var next http.Handler = handler if operationLogging { next = c.service.WithOperationLogging(next) } return func(r *ghttp.Request) { next.ServeHTTP(r.Response.Writer, r.Request) } } func (c *Controller) cors(r *ghttp.Request) { r.Response.Header().Set("Access-Control-Allow-Origin", "*") r.Response.Header().Set("Access-Control-Allow-Headers", "Content-Type, Authorization") r.Response.Header().Set("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS") if r.Method == http.MethodOptions { r.Response.WriteStatus(http.StatusNoContent) r.ExitAll() return } r.Middleware.Next() }