126 lines
2.7 KiB
Go
126 lines
2.7 KiB
Go
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
|
|
}
|