Files
lone-services/services/user/internal/logic/response.go
T
gjs be8f89f449
CI / changes (push) Successful in 5s
CI / docker-bff (push) Failing after 7s
CI / docker-product (push) Failing after 5s
CI / docker-admin (push) Failing after 4s
CI / docker-user (push) Failing after 6s
change layout
2026-08-20 15:41:44 +08:00

115 lines
3.1 KiB
Go

package logic
import (
"context"
"lone-services/pkg/redis"
"lone-services/pkg/utils"
user "lone-services/rpc/user/pb"
"lone-services/services/user/internal/dao"
"strconv"
"time"
jsoniter "github.com/json-iterator/go"
)
func okResponse(data any) *user.Response {
buf, _ := jsoniter.Marshal(data)
return &user.Response{
Code: utils.Ok.Code,
Msg: utils.Ok.Msg,
Data: string(buf),
}
}
func failResponse(status utils.Status) *user.Response {
return &user.Response{
Code: status.Code,
Msg: status.Msg,
}
}
func outResponse(status utils.Status, msg string) *user.Response {
return &user.Response{
Code: status.Code,
Msg: msg,
}
}
func decryptMobile(mobile string) string {
if mobile == utils.StringEmpty {
return utils.StringEmpty
}
plain, err := utils.Crypto{}.AESDecryptECB(mobile)
if err != nil {
return utils.StringEmpty
}
return plain
}
func toSession(info dao.UserInfo, mobilePlain string) dao.UserLoginSession {
return dao.UserLoginSession{
Id: info.Id,
Openid: info.Openid,
Username: info.Username,
Nickname: info.Nickname,
Avatar: info.Avatar,
Mobile: mobilePlain,
Gender: info.Gender,
Birthday: info.Birthday,
Type: info.Type,
Account: info.Account,
AppId: info.AppId,
LastTime: utils.Now(),
}
}
func buildToken(session dao.UserLoginSession) dao.Token {
seed := session.Mobile + session.Openid + utils.Now().String()
token := utils.MD5Encrypt(seed)
return dao.Token{
Token: token,
Refresh: utils.MD5Encrypt(seed + token),
Info: session,
}
}
func setLogin(token, refresh string, session dao.UserLoginSession) utils.Status {
expireMin := utils.GetConfigInt("base.login_out_time")
expire := time.Duration(expireMin) * time.Minute
refreshMin := utils.GetConfigInt("base.login_refresh_out_time")
refreshExpire := time.Duration(refreshMin) * time.Minute
ctx := context.Background()
userStr, _ := jsoniter.Marshal(session)
redisKey := utils.GetLoginKey(utils.LoginTypeUser, token)
if err := redis.Client.Set(ctx, redisKey, userStr, expire).Err(); err != nil {
return utils.Fail
}
redisKeysKey := utils.GetLoginKeysKey(utils.LoginTypeUser, strconv.FormatInt(session.Id, utils.NumberTen))
var loginInfo utils.LoginRedis
if oldAuth, err := redis.Client.Get(ctx, redisKeysKey).Result(); err == nil {
_ = jsoniter.Unmarshal([]byte(oldAuth), &loginInfo)
if len(loginInfo.Token) > utils.NumberOne {
redis.Client.Del(ctx, utils.GetLoginKey(utils.LoginTypeUser, loginInfo.Token))
}
if len(loginInfo.Refresh) > utils.NumberOne {
redis.Client.Del(ctx, utils.GetLoginRefreshKey(utils.LoginTypeUser, loginInfo.Refresh))
}
}
loginInfo.Token = token
loginInfo.Refresh = refresh
loginInfo.Info = userStr
newStr, _ := jsoniter.Marshal(loginInfo)
if err := redis.Client.Set(ctx, redisKeysKey, newStr, refreshExpire).Err(); err != nil {
return utils.Fail
}
refreshKey := utils.GetLoginRefreshKey(utils.LoginTypeUser, refresh)
if err := redis.Client.Set(ctx, refreshKey, strconv.FormatInt(session.Id, utils.NumberTen), refreshExpire).Err(); err != nil {
return utils.Fail
}
return utils.Ok
}