server/internal/logic/public/user/queryUserInfoLogic.go

77 lines
1.9 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package user
import (
"context"
"github.com/perfect-panel/server/pkg/constant"
"github.com/perfect-panel/server/pkg/xerr"
"github.com/pkg/errors"
"github.com/perfect-panel/server/internal/model/user"
"github.com/perfect-panel/server/internal/svc"
"github.com/perfect-panel/server/internal/types"
"github.com/perfect-panel/server/pkg/logger"
"github.com/perfect-panel/server/pkg/phone"
"github.com/perfect-panel/server/pkg/tool"
)
type QueryUserInfoLogic struct {
logger.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
// Query User Info
func NewQueryUserInfoLogic(ctx context.Context, svcCtx *svc.ServiceContext) *QueryUserInfoLogic {
return &QueryUserInfoLogic{
Logger: logger.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *QueryUserInfoLogic) QueryUserInfo() (resp *types.User, err error) {
resp = &types.User{}
u, ok := l.ctx.Value(constant.CtxKeyUser).(*user.User)
if !ok {
logger.Error("current user is not found in context")
return nil, errors.Wrapf(xerr.NewErrCode(xerr.InvalidAccess), "Invalid Access")
}
tool.DeepCopy(resp, u)
var userMethods []types.UserAuthMethod
for _, method := range resp.AuthMethods {
var item types.UserAuthMethod
tool.DeepCopy(&item, method)
switch method.AuthType {
case "mobile":
item.AuthIdentifier = phone.MaskPhoneNumber(method.AuthIdentifier)
case "email":
default:
item.AuthIdentifier = maskOpenID(method.AuthIdentifier)
}
userMethods = append(userMethods, item)
}
resp.AuthMethods = userMethods
return resp, nil
}
// maskOpenID 脱敏 OpenID只保留前 3 和后 3 位
func maskOpenID(openID string) string {
length := len(openID)
if length <= 6 {
return "***" // 如果 ID 太短,直接返回 "***"
}
// 计算中间需要被替换的 `*` 数量
maskLength := length - 6
mask := make([]byte, maskLength)
for i := range mask {
mask[i] = '*'
}
// 组合脱敏后的 OpenID
return openID[:3] + string(mask) + openID[length-3:]
}