package admin import ( "context" "github.com/gogf/gf/v2/errors/gerror" "github.com/gogf/gf/v2/os/gtime" "hotgo/internal/consts" "hotgo/internal/dao" "hotgo/internal/library/contexts" "hotgo/internal/library/token" "hotgo/internal/model" "hotgo/internal/model/entity" "hotgo/internal/model/input/adminin" "hotgo/internal/service" "hotgo/utility/simple" ) type sAdminSite struct{} func NewAdminSite() *sAdminSite { return &sAdminSite{} } func init() { service.RegisterAdminSite(NewAdminSite()) } // Register 账号注册 func (s *sAdminSite) Register(ctx context.Context, in *adminin.RegisterInp) (err error) { err = gerror.New("暂未开放注册") return } // AccountLogin 账号登录 func (s *sAdminSite) AccountLogin(ctx context.Context, in *adminin.AccountLoginInp) (res *adminin.LoginModel, err error) { var mb *entity.AdminMember if err = dao.AdminMember.Ctx(ctx).Where("username", in.Username).Scan(&mb); err != nil { err = gerror.Wrap(err, consts.ErrorORM) return } if mb == nil { err = gerror.New("账号不存在") return } if mb.Salt == "" { err = gerror.New("用户信息错误") return } if err = simple.CheckPassword(in.Password, mb.Salt, mb.PasswordHash); err != nil { return } if mb.Status != consts.StatusEnabled { err = gerror.New("账号已被禁用") return } res, err = s.handleLogin(ctx, mb) return } // handleLogin . func (s *sAdminSite) handleLogin(ctx context.Context, mb *entity.AdminMember) (res *adminin.LoginModel, err error) { user := &model.Identity{ Id: mb.Id, Username: mb.Username, Nickname: mb.Nickname, Avatar: mb.Avatar, App: consts.AppAdmin, LoginAt: gtime.Now(), } tk, expires, err := token.Login(ctx, user) if err != nil { return nil, err } res = &adminin.LoginModel{ UserInfo: &adminin.LoginUserInfo{ Id: user.Id, Username: user.Username, Nickname: user.Nickname, }, Token: &adminin.LoginToken{ TokenName: "Authorization", TokenValue: tk, Expires: expires, }, } return } // BindUserContext 绑定用户上下文 func (s *sAdminSite) BindUserContext(ctx context.Context, claims *model.Identity) (err error) { var mb *entity.AdminMember if err = dao.AdminMember.Ctx(ctx).Where("id", claims.Id).Scan(&mb); err != nil { err = gerror.Wrap(err, "获取用户信息失败,请稍后重试!") return } if mb == nil { err = gerror.Wrap(err, "账号不存在或已被删除!") return } if mb.Status != consts.StatusEnabled { err = gerror.New("账号已被禁用,如有疑问请联系管理员") return } user := &model.Identity{ Id: mb.Id, Username: mb.Username, Nickname: mb.Nickname, Avatar: mb.Avatar, App: claims.App, LoginAt: claims.LoginAt, } contexts.SetUser(ctx, user) return }