4e2cd43a55
iotlcm-onelink-mock:OneLink 挡板服务(本地测试替身)。 - Go module 迁移至 git.5iot.com/iotlcm-public/iotlcm-onelink-mock - 修复同毫秒内多次生成卡导致 ICCID/IMSI 唯一约束冲突 - 补 Apache-2.0 LICENSE,README 重写并新增 docs/deploy.md - 移除内部部署资产(CI 触发器 / 镜像推送脚本 / 指定环境部署文档) - 测试凭据改为 demo_appid / demo_password,真实手机号与内网 IP 脱敏 - 统一 LF 行尾并加 .gitattributes
60 lines
2.1 KiB
Go
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()
|
|
}
|