Files
hk4e/service/annie-user/controller/controller.go
2022-11-20 15:38:00 +08:00

79 lines
1.9 KiB
Go

package controller
import (
"annie-user/service"
"flswld.com/common/config"
"flswld.com/light"
waterAuth "flswld.com/water-api/auth"
"github.com/gin-gonic/gin"
"net/http"
"strconv"
"strings"
)
type Controller struct {
service *service.Service
rpcWaterAuthConsumer *light.Consumer
rpcHk4eGatewayConsumer *light.Consumer
}
func NewController(service *service.Service, rpcWaterAuthConsumer *light.Consumer, rpcHk4eGatewayConsumer *light.Consumer) (r *Controller) {
r = new(Controller)
r.service = service
r.rpcWaterAuthConsumer = rpcWaterAuthConsumer
r.rpcHk4eGatewayConsumer = rpcHk4eGatewayConsumer
go r.registerRouter()
return r
}
func (c *Controller) getAccessToken(context *gin.Context) string {
accessToken := context.GetHeader("Authorization")
divIndex := strings.Index(accessToken, " ")
if divIndex > 0 {
payload := accessToken[divIndex+1:]
return payload
} else {
return ""
}
}
// access_token鉴权
func (c *Controller) authorize() gin.HandlerFunc {
return func(context *gin.Context) {
valid, err := waterAuth.WaterVerifyAccessToken(c.rpcWaterAuthConsumer, c.getAccessToken(context))
if err == nil && valid == true {
// 验证通过
context.Next()
return
}
// 验证不通过
context.Abort()
context.JSON(http.StatusOK, gin.H{
"code": "10001",
"msg": "没有访问权限",
})
}
}
func (c *Controller) registerRouter() {
if config.CONF.Logger.Level == "DEBUG" {
gin.SetMode(gin.DebugMode)
} else {
gin.SetMode(gin.ReleaseMode)
}
engine := gin.Default()
// 未认证接口
engine.POST("/user/reg", c.userRegister)
engine.Use(c.authorize())
// 认证接口
engine.POST("/user/update/pwd", c.userUpdatePassword)
// 管理员
admin := engine.Group("/user/admin")
{
admin.GET("/query/user", c.queryUserByUsername)
}
port := strconv.FormatInt(int64(config.CONF.HttpPort), 10)
portStr := ":" + port
_ = engine.Run(portStr)
}