| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- package deviceprovisioning
- import (
- "io"
- "github.com/gin-gonic/gin"
- "wails-app/internal/model/common/response"
- "wails-app/internal/modules/deviceprovisioning/model/request"
- provisionService "wails-app/internal/modules/deviceprovisioning/service"
- utils "wails-app/internal/pkg"
- )
- var svc = provisionService.New()
- func requireAdmin(c *gin.Context) bool {
- if utils.GetUserAuthorityId(c) != 888 {
- response.FailWithMessage("仅管理员可以执行设备接入配置", c)
- c.Abort()
- return false
- }
- return true
- }
- // ReadManualIdentity 读取管理员输入 IP 设备的公开身份。
- func ReadManualIdentity(c *gin.Context) {
- if !requireAdmin(c) {
- return
- }
- var req request.ManualIdentityRequest
- if err := c.ShouldBindJSON(&req); err != nil {
- response.FailWithMessage(err.Error(), c)
- return
- }
- identity, err := svc.ReadIdentity(req)
- if err != nil {
- response.FailWithMessage(err.Error(), c)
- return
- }
- response.OkWithData(identity, c)
- }
- // DiscoverDevices broadcasts a bounded UDP discovery request and returns candidates.
- func DiscoverDevices(c *gin.Context) {
- if !requireAdmin(c) {
- return
- }
- var req request.DiscoverRequest
- if err := c.ShouldBindJSON(&req); err != nil {
- if err != io.EOF {
- response.FailWithMessage(err.Error(), c)
- return
- }
- }
- items, err := svc.Discover(req)
- if err != nil {
- response.FailWithMessage(err.Error(), c)
- return
- }
- response.OkWithData(items, c)
- }
- // ListDiscoveries returns unexpired UDP candidates for the discovery dialog.
- func ListDiscoveries(c *gin.Context) {
- if !requireAdmin(c) {
- return
- }
- items, err := svc.Discoveries()
- if err != nil {
- response.FailWithMessage(err.Error(), c)
- return
- }
- response.OkWithData(items, c)
- }
- // ReadDiscoveredIdentity upgrades a UDP candidate to an HTTPS identity record.
- func ReadDiscoveredIdentity(c *gin.Context) {
- if !requireAdmin(c) {
- return
- }
- identity, err := svc.ReadDiscoveredIdentity(c.Param("device_id"))
- if err != nil {
- response.FailWithMessage(err.Error(), c)
- return
- }
- response.OkWithData(identity, c)
- }
- // VerifyIdentity 确认证书指纹和设备配对码。
- func VerifyIdentity(c *gin.Context) {
- if !requireAdmin(c) {
- return
- }
- var req request.VerifyRequest
- if err := c.ShouldBindJSON(&req); err != nil {
- response.FailWithMessage(err.Error(), c)
- return
- }
- identity, err := svc.VerifyIdentity(c.Param("device_id"), req)
- if err != nil {
- response.FailWithMessage(err.Error(), c)
- return
- }
- response.OkWithData(identity, c)
- }
- // ProvisionDevice 绑定业务坐标并下发 MQTT 配置。
- func ProvisionDevice(c *gin.Context) {
- if !requireAdmin(c) {
- return
- }
- var req request.ProvisionRequest
- if err := c.ShouldBindJSON(&req); err != nil {
- response.FailWithMessage(err.Error(), c)
- return
- }
- status, err := svc.Provision(c.Param("device_id"), req)
- if err != nil {
- response.FailWithMessage(err.Error(), c)
- return
- }
- response.OkWithData(status, c)
- }
- // GetStatus 查询接入状态和 MQTT 在线状态。
- func GetStatus(c *gin.Context) {
- if !requireAdmin(c) {
- return
- }
- status, err := svc.Status(c.Param("device_id"))
- if err != nil {
- response.FailWithMessage(err.Error(), c)
- return
- }
- response.OkWithData(status, c)
- }
- // SetupRouter 注册手工 IP 接入 API。路由挂在 PrivateGroup,仍受 JWT/Casbin/操作审计保护。
- func SetupRouter(router *gin.RouterGroup) {
- group := router.Group("/device-provisioning")
- group.POST("/discover", DiscoverDevices)
- group.GET("/discoveries", ListDiscoveries)
- group.POST("/manual/identity", ReadManualIdentity)
- group.POST("/:device_id/identity", ReadDiscoveredIdentity)
- group.POST("/:device_id/verify", VerifyIdentity)
- group.POST("/:device_id/provision", ProvisionDevice)
- group.GET("/:device_id/status", GetStatus)
- }
|