2024-05-18 17:12:24 +08:00
|
|
|
|
package main
|
|
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
|
"github.com/gin-gonic/gin"
|
|
|
|
|
|
"github.com/golang-jwt/jwt"
|
2024-05-18 18:16:34 +08:00
|
|
|
|
"strings"
|
2024-05-18 17:12:24 +08:00
|
|
|
|
"videoplayer/dao"
|
|
|
|
|
|
"videoplayer/handler"
|
|
|
|
|
|
"videoplayer/worker"
|
|
|
|
|
|
)
|
|
|
|
|
|
|
2024-05-28 15:15:02 +08:00
|
|
|
|
var signingKey = []byte("aadafcvretmoi9")
|
2024-05-18 17:12:24 +08:00
|
|
|
|
|
|
|
|
|
|
func main() {
|
|
|
|
|
|
|
|
|
|
|
|
r := gin.Default()
|
2024-05-18 18:16:34 +08:00
|
|
|
|
dao.Init()
|
|
|
|
|
|
worker.InitRedis()
|
2024-05-28 15:15:02 +08:00
|
|
|
|
r.Use(handler.CrosHandler())
|
2024-05-18 17:12:24 +08:00
|
|
|
|
r.Use(JWTAuthMiddleware()) // 使用 JWT 认证中间件
|
|
|
|
|
|
handler.SetUpVideoGroup(r)
|
|
|
|
|
|
handler.SetUpUserGroup(r)
|
2024-05-20 11:16:53 +08:00
|
|
|
|
handler.SetUpDeviceGroup(r)
|
2024-05-20 17:30:39 +08:00
|
|
|
|
r.Run(":8083") // listen and serve on 0.0.0.0:8082
|
2024-05-18 18:16:34 +08:00
|
|
|
|
defer dao.Close()
|
|
|
|
|
|
defer worker.CloseRedis()
|
2024-05-18 17:12:24 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func JWTAuthMiddleware() gin.HandlerFunc {
|
|
|
|
|
|
return func(c *gin.Context) {
|
|
|
|
|
|
// 从请求头中获取 JWT 令牌
|
2024-05-28 15:15:02 +08:00
|
|
|
|
tokenString := c.Request.Header.Get("token")
|
2024-05-18 17:12:24 +08:00
|
|
|
|
|
|
|
|
|
|
//请求方式为get时,从url中获取token
|
|
|
|
|
|
if tokenString == "" {
|
|
|
|
|
|
tokenString = c.Query("token")
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//如果请求为login或register,则不需要验证token
|
2024-06-01 16:22:18 +08:00
|
|
|
|
if strings.Contains(c.Request.URL.Path, "/login") || strings.Contains(c.Request.URL.Path, "/register") || strings.Contains(c.Request.URL.Path, "/uuid") || strings.Contains(c.Request.URL.Path, "/gqr") || strings.Contains(c.Request.URL.Path, "/uuid") {
|
2024-05-18 17:12:24 +08:00
|
|
|
|
c.Next()
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
if tokenString == "" {
|
2024-05-28 15:15:02 +08:00
|
|
|
|
//c.AbortWithStatus(200)
|
|
|
|
|
|
c.JSON(200, gin.H{
|
2024-05-18 17:12:24 +08:00
|
|
|
|
"message": "Unauthorized",
|
|
|
|
|
|
"error": "token is empty",
|
|
|
|
|
|
"code": "3",
|
|
|
|
|
|
})
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
2024-05-18 18:16:34 +08:00
|
|
|
|
redisToken := worker.GetRedis(tokenString)
|
|
|
|
|
|
|
|
|
|
|
|
if redisToken == "" {
|
2024-05-28 15:15:02 +08:00
|
|
|
|
c.AbortWithStatus(200)
|
|
|
|
|
|
c.JSON(200, gin.H{
|
|
|
|
|
|
"message": "NOT_LOGIN",
|
2024-05-18 18:16:34 +08:00
|
|
|
|
"error": "server token is empty",
|
|
|
|
|
|
"code": "4",
|
|
|
|
|
|
})
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
2024-05-18 17:12:24 +08:00
|
|
|
|
|
|
|
|
|
|
// 解析 JWT 令牌
|
|
|
|
|
|
token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
|
|
|
|
|
|
return signingKey, nil
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
// 验证令牌
|
|
|
|
|
|
if err != nil || !token.Valid {
|
2024-05-28 15:15:02 +08:00
|
|
|
|
c.AbortWithStatus(200)
|
|
|
|
|
|
c.JSON(200, gin.H{
|
|
|
|
|
|
"message": "NOT_LOGIN",
|
2024-05-18 17:12:24 +08:00
|
|
|
|
"error": "Invalid token",
|
|
|
|
|
|
"code": "4",
|
|
|
|
|
|
})
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 将用户信息添加到上下文中
|
|
|
|
|
|
c.Set("id", token.Claims.(jwt.MapClaims)["id"])
|
|
|
|
|
|
c.Set("username", token.Claims.(jwt.MapClaims)["username"])
|
|
|
|
|
|
|
|
|
|
|
|
// 继续处理请求
|
|
|
|
|
|
c.Next()
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|