
* 媒体库增加分类,图库多选择时优化。 * 重构 JWT token 生成,使用 `New()` 函数代替直接创建实例 * 上传组件支持查看大图 (#1982) * 将参数缓存,媒体库增加分类,图库多选择时优化。 (#1978) * 媒体库增加分类,图库多选择时优化。 *修复文件上传进度显示bug&按钮样式优化 (#1986) * fix:添加内部 iframe 展示网页,优化 permission 代码 * 俩个uuid库合并一个,更新库到当前版本。 * 优化关于我们界面 * feat: 个人中心头像调整,媒体库兼容性调整。 * feat: 自动化代码前端页面美化,多余按钮收入专家模式 * feat: 增加单独生成server功能 * feat: 限制单独生成前后端的情况下的细节配置 * feat: 修复全选失败报错的问题 --------- Co-authored-by: task <121913992@qq.com> Co-authored-by: Feng.YJ <32027253+huiyifyj@users.noreply.github.com> Co-authored-by: will0523 <dygsunshine@163.com> Co-authored-by: task <ms.yangdan@gmail.com> Co-authored-by: sslee <57312216+GIS142857@users.noreply.github.com> Co-authored-by: bypanghu <bypanghu@163.com> Co-authored-by: Azir <2075125282@qq.com> Co-authored-by: piexlMax(奇淼 <qimiaojiangjizhao@gmail.com> Co-authored-by: krank <emosick@qq.com>
149 lines
3.8 KiB
Go
149 lines
3.8 KiB
Go
package utils
|
|
|
|
import (
|
|
"net"
|
|
"time"
|
|
|
|
"github.com/flipped-aurora/gin-vue-admin/server/global"
|
|
"github.com/flipped-aurora/gin-vue-admin/server/model/system"
|
|
systemReq "github.com/flipped-aurora/gin-vue-admin/server/model/system/request"
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
func ClearToken(c *gin.Context) {
|
|
// 增加cookie x-token 向来源的web添加
|
|
host, _, err := net.SplitHostPort(c.Request.Host)
|
|
if err != nil {
|
|
host = c.Request.Host
|
|
}
|
|
|
|
if net.ParseIP(host) != nil {
|
|
c.SetCookie("x-token", "", -1, "/", "", false, false)
|
|
} else {
|
|
c.SetCookie("x-token", "", -1, "/", host, false, false)
|
|
}
|
|
}
|
|
|
|
func SetToken(c *gin.Context, token string, maxAge int) {
|
|
// 增加cookie x-token 向来源的web添加
|
|
host, _, err := net.SplitHostPort(c.Request.Host)
|
|
if err != nil {
|
|
host = c.Request.Host
|
|
}
|
|
|
|
if net.ParseIP(host) != nil {
|
|
c.SetCookie("x-token", token, maxAge, "/", "", false, false)
|
|
} else {
|
|
c.SetCookie("x-token", token, maxAge, "/", host, false, false)
|
|
}
|
|
}
|
|
|
|
func GetToken(c *gin.Context) string {
|
|
token, _ := c.Cookie("x-token")
|
|
if token == "" {
|
|
j := NewJWT()
|
|
token = c.Request.Header.Get("x-token")
|
|
claims, err := j.ParseToken(token)
|
|
if err != nil {
|
|
global.GVA_LOG.Error("重新写入cookie token失败,未能成功解析token,请检查请求头是否存在x-token且claims是否为规定结构")
|
|
return token
|
|
}
|
|
SetToken(c, token, int((claims.ExpiresAt.Unix()-time.Now().Unix())/60))
|
|
}
|
|
return token
|
|
}
|
|
|
|
func GetClaims(c *gin.Context) (*systemReq.CustomClaims, error) {
|
|
token := GetToken(c)
|
|
j := NewJWT()
|
|
claims, err := j.ParseToken(token)
|
|
if err != nil {
|
|
global.GVA_LOG.Error("从Gin的Context中获取从jwt解析信息失败, 请检查请求头是否存在x-token且claims是否为规定结构")
|
|
}
|
|
return claims, err
|
|
}
|
|
|
|
// GetUserID 从Gin的Context中获取从jwt解析出来的用户ID
|
|
func GetUserID(c *gin.Context) uint {
|
|
if claims, exists := c.Get("claims"); !exists {
|
|
if cl, err := GetClaims(c); err != nil {
|
|
return 0
|
|
} else {
|
|
return cl.BaseClaims.ID
|
|
}
|
|
} else {
|
|
waitUse := claims.(*systemReq.CustomClaims)
|
|
return waitUse.BaseClaims.ID
|
|
}
|
|
}
|
|
|
|
// GetUserUuid 从Gin的Context中获取从jwt解析出来的用户UUID
|
|
func GetUserUuid(c *gin.Context) uuid.UUID {
|
|
if claims, exists := c.Get("claims"); !exists {
|
|
if cl, err := GetClaims(c); err != nil {
|
|
return uuid.UUID{}
|
|
} else {
|
|
return cl.UUID
|
|
}
|
|
} else {
|
|
waitUse := claims.(*systemReq.CustomClaims)
|
|
return waitUse.UUID
|
|
}
|
|
}
|
|
|
|
// GetUserAuthorityId 从Gin的Context中获取从jwt解析出来的用户角色id
|
|
func GetUserAuthorityId(c *gin.Context) uint {
|
|
if claims, exists := c.Get("claims"); !exists {
|
|
if cl, err := GetClaims(c); err != nil {
|
|
return 0
|
|
} else {
|
|
return cl.AuthorityId
|
|
}
|
|
} else {
|
|
waitUse := claims.(*systemReq.CustomClaims)
|
|
return waitUse.AuthorityId
|
|
}
|
|
}
|
|
|
|
// GetUserInfo 从Gin的Context中获取从jwt解析出来的用户角色id
|
|
func GetUserInfo(c *gin.Context) *systemReq.CustomClaims {
|
|
if claims, exists := c.Get("claims"); !exists {
|
|
if cl, err := GetClaims(c); err != nil {
|
|
return nil
|
|
} else {
|
|
return cl
|
|
}
|
|
} else {
|
|
waitUse := claims.(*systemReq.CustomClaims)
|
|
return waitUse
|
|
}
|
|
}
|
|
|
|
// GetUserName 从Gin的Context中获取从jwt解析出来的用户名
|
|
func GetUserName(c *gin.Context) string {
|
|
if claims, exists := c.Get("claims"); !exists {
|
|
if cl, err := GetClaims(c); err != nil {
|
|
return ""
|
|
} else {
|
|
return cl.Username
|
|
}
|
|
} else {
|
|
waitUse := claims.(*systemReq.CustomClaims)
|
|
return waitUse.Username
|
|
}
|
|
}
|
|
|
|
func LoginToken(user system.Login) (token string, claims systemReq.CustomClaims, err error) {
|
|
j := NewJWT()
|
|
claims = j.CreateClaims(systemReq.BaseClaims{
|
|
UUID: user.GetUUID(),
|
|
ID: user.GetUserId(),
|
|
NickName: user.GetNickname(),
|
|
Username: user.GetUsername(),
|
|
AuthorityId: user.GetAuthorityId(),
|
|
})
|
|
token, err = j.CreateToken(claims)
|
|
return
|
|
}
|