- 删除了AesCBCDecrypt函数,不再支持AES/CBC/PKCS7Padding解密方式- 在token.go中引入hex包用于密钥和IV的解码 - 使用hex.DecodeString对secretCfg中的Key和IV进行解码 - 添加日志记录key和iv解码失败的情况 - 加密失败时增加错误日志输出 - 保持原有加密功能不变,仅调整实现细节和依赖处理
59 lines
1.1 KiB
Go
59 lines
1.1 KiB
Go
package service
|
|
|
|
import (
|
|
"boss/internal/config"
|
|
"boss/internal/utils"
|
|
"context"
|
|
"encoding/base64"
|
|
"encoding/hex"
|
|
"encoding/json"
|
|
"github.com/beego/beego/v2/core/logs"
|
|
"sync"
|
|
"time"
|
|
)
|
|
|
|
type TokenService struct {
|
|
}
|
|
|
|
func (t *TokenService) GetToken(ctx context.Context, userId string) (token string) {
|
|
tokenStruct := struct {
|
|
CurrentTime int64 `json:"currentTime"`
|
|
UserId string `json:"userId"`
|
|
UserAuth string `json:"userAuth"`
|
|
}{
|
|
CurrentTime: time.Now().Unix(),
|
|
UserAuth: "admin",
|
|
UserId: userId,
|
|
}
|
|
tokenBytes, _ := json.Marshal(tokenStruct)
|
|
secretCfg, err := config.GetSecret()
|
|
if err != nil {
|
|
return ""
|
|
}
|
|
key, err := hex.DecodeString(secretCfg.Key)
|
|
if err != nil {
|
|
logs.Error(err)
|
|
return ""
|
|
}
|
|
iv, err := hex.DecodeString(secretCfg.IV)
|
|
if err != nil {
|
|
logs.Error(err)
|
|
return ""
|
|
}
|
|
tokenB, err := utils.AesCBCEncrypt(tokenBytes, key, iv)
|
|
if err != nil {
|
|
logs.Error(err)
|
|
return ""
|
|
}
|
|
return base64.URLEncoding.EncodeToString(tokenB)
|
|
}
|
|
|
|
var tokenService *TokenService
|
|
|
|
func NewTokenService() *TokenService {
|
|
sync.OnceFunc(func() {
|
|
tokenService = &TokenService{}
|
|
})()
|
|
return tokenService
|
|
}
|