2024-05-18 17:12:24 +08:00
|
|
|
package handler
|
|
|
|
|
|
|
|
|
|
import (
|
2024-05-21 14:57:45 +08:00
|
|
|
"crypto/md5"
|
|
|
|
|
"encoding/hex"
|
2024-05-18 17:12:24 +08:00
|
|
|
"fmt"
|
|
|
|
|
"github.com/gin-gonic/gin"
|
|
|
|
|
"github.com/golang-jwt/jwt"
|
|
|
|
|
"time"
|
|
|
|
|
"videoplayer/service"
|
|
|
|
|
"videoplayer/worker"
|
|
|
|
|
)
|
|
|
|
|
|
2024-05-28 15:15:02 +08:00
|
|
|
var signingKey = []byte("aadafcvretmoi9")
|
2024-05-18 17:12:24 +08:00
|
|
|
|
|
|
|
|
func SetUpUserGroup(router *gin.Engine) {
|
|
|
|
|
userGroup := router.Group("/user")
|
|
|
|
|
userGroup.POST("/register", registerHandler)
|
|
|
|
|
userGroup.POST("/login", loginHandler)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type RLReq struct {
|
2024-05-28 15:15:02 +08:00
|
|
|
User string `json:"username" form:"username"`
|
|
|
|
|
Email string `json:"email" form:"email"`
|
|
|
|
|
Password string `json:"password" form:"password"`
|
2024-05-18 17:12:24 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func loginHandler(c *gin.Context) {
|
|
|
|
|
var req_data RLReq
|
|
|
|
|
tokenString := ""
|
2024-05-28 15:15:02 +08:00
|
|
|
if err := c.ShouldBind(&req_data); err == nil {
|
2024-05-21 14:57:45 +08:00
|
|
|
if len(req_data.Password) < 32 {
|
|
|
|
|
hasher := md5.New()
|
|
|
|
|
hasher.Write([]byte(req_data.Password)) // 生成密码的 MD5 散列值
|
|
|
|
|
req_data.Password = hex.EncodeToString(hasher.Sum(nil)) // 生成密码的 MD5 散列值
|
|
|
|
|
}
|
2024-05-18 17:12:24 +08:00
|
|
|
user := service.GetUser(req_data.User, req_data.Password)
|
|
|
|
|
if user.ID != 0 {
|
|
|
|
|
// 生成 JWT 令牌
|
|
|
|
|
token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
|
|
|
|
|
"username": user.Name,
|
|
|
|
|
"id": user.ID,
|
2024-05-20 16:01:04 +08:00
|
|
|
"exp": time.Now().Add(time.Hour * 10).Unix(), // 令牌过期时间, 1分钟后过期
|
2024-05-18 17:12:24 +08:00
|
|
|
})
|
|
|
|
|
tokenString, err = token.SignedString(signingKey)
|
|
|
|
|
if err != nil {
|
2024-05-28 15:15:02 +08:00
|
|
|
c.JSON(200, gin.H{"error": err.Error(), "code": 1, "message": "error"})
|
2024-05-18 17:12:24 +08:00
|
|
|
return
|
|
|
|
|
}
|
2024-05-20 16:01:04 +08:00
|
|
|
worker.SetRedisWithExpire(tokenString, tokenString, time.Hour*10) // 设置过期时间为10分钟
|
2024-05-18 17:12:24 +08:00
|
|
|
// 返回令牌
|
2024-05-28 15:15:02 +08:00
|
|
|
data := make(map[string]interface{})
|
|
|
|
|
data["id"]= user.ID
|
|
|
|
|
data["username"]=user.Name
|
|
|
|
|
data["email"]=user.Email
|
|
|
|
|
data["token"] =tokenString
|
|
|
|
|
c.JSON(200, gin.H{"code": 0, "message": "success", "data":data})
|
2024-05-18 17:12:24 +08:00
|
|
|
} else {
|
2024-05-28 15:15:02 +08:00
|
|
|
c.JSON(200, gin.H{"error": "user not found", "code": 1, "message": "error"})
|
2024-05-18 17:12:24 +08:00
|
|
|
}
|
|
|
|
|
} else {
|
2024-05-28 15:15:02 +08:00
|
|
|
c.JSON(200, gin.H{"error": err.Error(), "code": 1, "message": "error"})
|
2024-05-18 17:12:24 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func registerHandler(c *gin.Context) {
|
|
|
|
|
var req_data RLReq
|
|
|
|
|
tokenString := ""
|
|
|
|
|
if err := c.ShouldBindJSON(&req_data); err == nil {
|
2024-05-21 14:57:45 +08:00
|
|
|
if len(req_data.Password) < 32 {
|
|
|
|
|
hasher := md5.New()
|
|
|
|
|
hasher.Write([]byte(req_data.Password)) // 生成密码的 MD5 散列值
|
|
|
|
|
req_data.Password = hex.EncodeToString(hasher.Sum(nil)) // 生成密码的 MD5 散列值
|
|
|
|
|
}
|
2024-05-21 15:13:01 +08:00
|
|
|
if service.ContainsUser(req_data.User, req_data.Email) == true {
|
2024-05-28 15:15:02 +08:00
|
|
|
c.JSON(200, gin.H{"error": "user already exists", "code": 1, "message": "error"})
|
2024-05-21 15:13:01 +08:00
|
|
|
return
|
|
|
|
|
}
|
2024-05-18 17:12:24 +08:00
|
|
|
id := service.CreateUser(req_data.User, req_data.Password, req_data.Email)
|
|
|
|
|
// 生成 JWT 令牌
|
|
|
|
|
token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
|
|
|
|
|
"username": req_data.User,
|
|
|
|
|
"id": id,
|
2024-05-21 11:10:21 +08:00
|
|
|
"exp": time.Now().Add(time.Hour * 10).Unix(), // 令牌过期时间, 1分钟后过期
|
2024-05-18 17:12:24 +08:00
|
|
|
})
|
|
|
|
|
tokenString, err = token.SignedString(signingKey)
|
|
|
|
|
if err != nil {
|
2024-05-28 15:15:02 +08:00
|
|
|
c.JSON(200, gin.H{"error": err.Error()})
|
2024-05-18 17:12:24 +08:00
|
|
|
}
|
|
|
|
|
} else {
|
2024-05-28 15:15:02 +08:00
|
|
|
c.JSON(200, gin.H{"error": err.Error()})
|
2024-05-18 17:12:24 +08:00
|
|
|
}
|
|
|
|
|
fmt.Println(req_data)
|
2024-05-21 11:10:21 +08:00
|
|
|
worker.SetRedisWithExpire(tokenString, tokenString, time.Hour*10) // 设置过期时间为10分钟
|
2024-05-18 17:12:24 +08:00
|
|
|
// 返回令牌
|
|
|
|
|
c.JSON(200, gin.H{"token": tokenString, "username": req_data.User})
|
|
|
|
|
}
|