Files

60 lines
2.1 KiB
Go

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()
}