package biz import ( "context" "geo/internal/config" "geo/internal/data/impl" "geo/internal/data/model" "geo/tmpl/errcode" "xorm.io/builder" ) type AuthBiz struct { cfg *config.Config userImpl *impl.UserImpl tokenImpl *impl.TokenImpl } func NewAuthBiz( cfg *config.Config, tokenImpl *impl.TokenImpl, userImpl *impl.UserImpl, ) *AuthBiz { return &AuthBiz{ cfg: cfg, tokenImpl: tokenImpl, userImpl: userImpl, } } func (a *AuthBiz) ValidateAccessToken(ctx context.Context, accessToken string) (*model.Token, error) { cond := builder.NewCond(). And(builder.Eq{"access_token": accessToken}). And(builder.Eq{"status": 1}) tokenInfo := &model.Token{} err := a.tokenImpl.GetOneBySearchStruct(ctx, &cond, tokenInfo) if err != nil { return nil, errcode.Forbidden("密钥无效或已禁用") } if tokenInfo.ID == 0 { return nil, errcode.Forbidden("密钥无效或已禁用") } return tokenInfo, nil } func (a *AuthBiz) UserValid(ctx context.Context, userIndex string, tokenId int32) (*model.User, error) { cond := builder.NewCond(). And(builder.Eq{"user_index": userIndex}). And(builder.Eq{"status": 1}) if tokenId != 0 { cond.And(builder.Eq{"tokenId": tokenId}) } userInfo := &model.User{} err := a.userImpl.GetOneBySearchStruct(ctx, &cond, userInfo) if err != nil { return nil, errcode.Forbidden("未找到用户") } if userInfo.ID == 0 { return nil, errcode.Forbidden("未找到用户") } return userInfo, nil } func (a *AuthBiz) UserAndTokenValid(ctx context.Context, userIndex, accessToken string) (*model.User, *model.Token, error) { tokenInfo, err := a.ValidateAccessToken(ctx, accessToken) if err != nil { return nil, nil, err } userInfo, err := a.UserValid(ctx, userIndex, tokenInfo.ID) if err != nil { return nil, nil, err } return userInfo, tokenInfo, err }