mirror of
https://github.com/FlourishingWorld/hk4e.git
synced 2026-02-15 14:42:27 +08:00
init commit
This commit is contained in:
34
service/annie-user/controller/admin_controller.go
Normal file
34
service/annie-user/controller/admin_controller.go
Normal file
@@ -0,0 +1,34 @@
|
||||
package controller
|
||||
|
||||
import (
|
||||
apiEntity "annie-user/entity/api"
|
||||
"flswld.com/common/entity/dto"
|
||||
waterAuth "flswld.com/water-api/auth"
|
||||
"github.com/gin-gonic/gin"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
func (c *Controller) queryUserByUsername(context *gin.Context) {
|
||||
accessToken := c.getAccessToken(context)
|
||||
user, err := waterAuth.WaterQueryUserByAccessToken(c.rpcWaterAuthConsumer, accessToken)
|
||||
if err != nil {
|
||||
context.JSON(http.StatusOK, dto.NewResponseResult(1001, "服务器内部错误", nil))
|
||||
return
|
||||
}
|
||||
if !user.IsAdmin {
|
||||
context.JSON(http.StatusOK, dto.NewResponseResult(10001, "没有访问权限", nil))
|
||||
return
|
||||
}
|
||||
username := context.Query("username")
|
||||
userQuery := c.service.QueryUserByUsername(username)
|
||||
if userQuery == nil {
|
||||
context.JSON(http.StatusOK, dto.NewResponseResult(-1, "未查询到用户", nil))
|
||||
return
|
||||
}
|
||||
userRet := new(apiEntity.User)
|
||||
userRet.Uid = userQuery.Uid
|
||||
userRet.Username = userQuery.Username
|
||||
userRet.Password = userQuery.Password
|
||||
userRet.IsAdmin = userQuery.IsAdmin
|
||||
context.JSON(http.StatusOK, dto.NewResponseResult(0, "查询用户成功", userRet))
|
||||
}
|
||||
78
service/annie-user/controller/controller.go
Normal file
78
service/annie-user/controller/controller.go
Normal file
@@ -0,0 +1,78 @@
|
||||
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)
|
||||
}
|
||||
93
service/annie-user/controller/user_controller.go
Normal file
93
service/annie-user/controller/user_controller.go
Normal file
@@ -0,0 +1,93 @@
|
||||
package controller
|
||||
|
||||
import (
|
||||
apiEntity "annie-user/entity/api"
|
||||
dbEntity "annie-user/entity/db"
|
||||
"flswld.com/common/entity/dto"
|
||||
"flswld.com/common/utils/endec"
|
||||
"flswld.com/logger"
|
||||
waterAuth "flswld.com/water-api/auth"
|
||||
"github.com/gin-gonic/gin"
|
||||
"net/http"
|
||||
"regexp"
|
||||
)
|
||||
|
||||
func (c *Controller) userRegister(context *gin.Context) {
|
||||
userRegInfo := new(apiEntity.User)
|
||||
err := context.BindJSON(&userRegInfo)
|
||||
if err != nil {
|
||||
context.JSON(http.StatusOK, gin.H{
|
||||
"code": 10003,
|
||||
"msg": "参数错误",
|
||||
})
|
||||
return
|
||||
}
|
||||
username := userRegInfo.Username
|
||||
password := userRegInfo.Password
|
||||
if len(username) < 6 || len(username) > 20 {
|
||||
context.JSON(http.StatusOK, dto.NewResponseResult(-1, "用户名为6-20位字符", nil))
|
||||
return
|
||||
}
|
||||
if len(password) < 8 || len(password) > 20 {
|
||||
context.JSON(http.StatusOK, dto.NewResponseResult(-1, "密码为8-20位字符", nil))
|
||||
return
|
||||
}
|
||||
ok, err := regexp.MatchString("^[a-zA-Z0-9]{6,20}$", username)
|
||||
if err != nil || !ok {
|
||||
context.JSON(http.StatusOK, dto.NewResponseResult(-1, "用户名只能包含大小写字母和数字", nil))
|
||||
return
|
||||
}
|
||||
user := c.service.QueryUserByUsername(username)
|
||||
if user != nil {
|
||||
context.JSON(http.StatusOK, dto.NewResponseResult(-1, "用户名已注册", nil))
|
||||
return
|
||||
}
|
||||
user = new(dbEntity.User)
|
||||
user.Username = username
|
||||
user.Password = password
|
||||
ok = c.service.RegisterUser(user)
|
||||
if !ok {
|
||||
context.JSON(http.StatusOK, dto.NewResponseResult(-1, "用户注册失败", nil))
|
||||
return
|
||||
}
|
||||
logger.LOG.Info("user register success, username: %v", username)
|
||||
context.JSON(http.StatusOK, dto.NewResponseResult(0, "用户注册成功", nil))
|
||||
}
|
||||
|
||||
func (c *Controller) userUpdatePassword(context *gin.Context) {
|
||||
accessToken := c.getAccessToken(context)
|
||||
user, err := waterAuth.WaterQueryUserByAccessToken(c.rpcWaterAuthConsumer, accessToken)
|
||||
if err != nil {
|
||||
context.JSON(http.StatusOK, dto.NewResponseResult(1001, "服务器内部错误", nil))
|
||||
return
|
||||
}
|
||||
json := make(map[string]string)
|
||||
err = context.BindJSON(&json)
|
||||
if err != nil {
|
||||
context.JSON(http.StatusOK, gin.H{
|
||||
"code": 10003,
|
||||
"msg": "参数错误",
|
||||
})
|
||||
return
|
||||
}
|
||||
oldPassword := json["oldPassword"]
|
||||
newPassword := json["newPassword"]
|
||||
if len(oldPassword) < 8 || len(oldPassword) > 20 || len(newPassword) < 8 || len(newPassword) > 20 {
|
||||
context.JSON(http.StatusOK, dto.NewResponseResult(-1, "密码为8-20位字符", nil))
|
||||
return
|
||||
}
|
||||
dbUser := c.service.QueryUserByUsername(user.Username)
|
||||
if dbUser.Password != endec.Md5Str(oldPassword) {
|
||||
context.JSON(http.StatusOK, dto.NewResponseResult(-1, "旧密码错误", nil))
|
||||
return
|
||||
}
|
||||
dbUser.Password = endec.Md5Str(newPassword)
|
||||
ok := c.service.UpdateUser(dbUser)
|
||||
if !ok {
|
||||
context.JSON(http.StatusOK, dto.NewResponseResult(-1, "修改密码失败", nil))
|
||||
return
|
||||
}
|
||||
context.JSON(http.StatusOK, dto.NewResponseResult(0, "修改密码成功", nil))
|
||||
// TODO 处理各种失效
|
||||
_ = c.rpcHk4eGatewayConsumer.CallFunction("RpcManager", "UserPasswordChange", &dbUser.Uid, &ok)
|
||||
}
|
||||
Reference in New Issue
Block a user