76 lines
1.8 KiB
Go
76 lines
1.8 KiB
Go
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, accessToken, userIndex 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
|
|
}
|