改造成api
This commit is contained in:
@@ -5,6 +5,7 @@ import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"log"
|
||||
"net"
|
||||
"net/http"
|
||||
"strings"
|
||||
@@ -13,9 +14,9 @@ import (
|
||||
"management/internal/erpserver/model/system"
|
||||
"management/internal/erpserver/model/system/request"
|
||||
v1 "management/internal/erpserver/service/v1"
|
||||
"management/internal/pkg/config"
|
||||
"management/internal/pkg/crypto"
|
||||
"management/internal/pkg/know"
|
||||
"management/internal/pkg/session"
|
||||
"management/internal/pkg/token"
|
||||
|
||||
"github.com/drhin/logger"
|
||||
"github.com/google/uuid"
|
||||
@@ -70,9 +71,10 @@ type LoginEnvironment struct {
|
||||
|
||||
// Auth 安全管理器
|
||||
type Auth struct {
|
||||
conf *config.Config
|
||||
log *logger.Logger
|
||||
redis *redis.Client
|
||||
sm session.Manager
|
||||
token token.Maker
|
||||
|
||||
userService v1.UserService
|
||||
roleService v1.RoleService
|
||||
@@ -81,24 +83,32 @@ type Auth struct {
|
||||
|
||||
// NewAuth 创建安全管理器
|
||||
func NewAuth(
|
||||
conf *config.Config,
|
||||
log *logger.Logger,
|
||||
redis *redis.Client,
|
||||
sm session.Manager,
|
||||
token token.Maker,
|
||||
userService v1.UserService,
|
||||
roleService v1.RoleService,
|
||||
loginLogService v1.LoginLogService,
|
||||
) *Auth {
|
||||
return &Auth{
|
||||
conf: conf,
|
||||
log: log,
|
||||
redis: redis,
|
||||
sm: sm,
|
||||
token: token,
|
||||
userService: userService,
|
||||
roleService: roleService,
|
||||
loginLogService: loginLogService,
|
||||
}
|
||||
}
|
||||
|
||||
func (a *Auth) Authenticate(ctx context.Context, req request.Login) (*RiskCheckResult, error) {
|
||||
type AuthenticateResponse struct {
|
||||
AccessToken string `json:"access_token"`
|
||||
AccessTokenExpiresAt time.Time `json:"access_token_expires_at"`
|
||||
Risk *RiskCheckResult `json:"risk"`
|
||||
}
|
||||
|
||||
func (a *Auth) Authenticate(ctx context.Context, req request.Login) (*AuthenticateResponse, error) {
|
||||
l := system.NewLoginLog(req.Email, req.Os, req.Ip, req.Browser, req.Url, req.Referrer)
|
||||
|
||||
locked, duration, err := a.isAccountLocked(ctx, req.Email)
|
||||
@@ -146,13 +156,17 @@ func (a *Auth) Authenticate(ctx context.Context, req request.Login) (*RiskCheckR
|
||||
}
|
||||
}
|
||||
|
||||
// 设置会话Cookie
|
||||
au := system.NewAuthorizeUser(user, req.Os, req.Ip, req.Browser)
|
||||
if err := a.sm.PutUser(ctx, know.StoreName, au); err != nil {
|
||||
// 生成token
|
||||
accessToken, payload, err := a.token.CreateToken(user.Uuid, user.Username, a.conf.JWT.ExpiresTime, token.TypeAccessToken)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return risk, nil
|
||||
return &AuthenticateResponse{
|
||||
AccessToken: accessToken,
|
||||
AccessTokenExpiresAt: payload.ExpiredAt,
|
||||
Risk: risk,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (a *Auth) validateUser(ctx context.Context, email, password string) (*system.User, error) {
|
||||
@@ -469,6 +483,7 @@ func (a *Auth) recordLoginLog(ctx context.Context, log *system.LoginLog) error {
|
||||
func (a *Auth) getHistoricalLoginEnvironments(ctx context.Context, email string) ([]LoginEnvironment, error) {
|
||||
rows, err := a.loginLogService.HistoricalLogin(ctx, email, time.Now().Add(-RiskCheckWindow))
|
||||
if err != nil {
|
||||
log.Println("获取历史登录环境失败111111:", err)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
|
||||
@@ -13,6 +13,7 @@ import (
|
||||
"management/internal/pkg/session"
|
||||
|
||||
"github.com/drhin/logger"
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
type Service struct {
|
||||
@@ -50,11 +51,12 @@ type ConfigService interface {
|
||||
}
|
||||
|
||||
type UserService interface {
|
||||
Create(ctx context.Context, req *form.User) error
|
||||
Update(ctx context.Context, req *form.User) error
|
||||
Create(ctx context.Context, req *request.CreateAndUpdateUser) error
|
||||
Update(ctx context.Context, req *request.CreateAndUpdateUser) error
|
||||
All(ctx context.Context) ([]*system.User, error)
|
||||
List(ctx context.Context, q dto.SearchDto) ([]*system.User, int64, error)
|
||||
List(ctx context.Context, q request.ListUser) ([]*system.User, int64, error)
|
||||
Get(ctx context.Context, id int32) (*system.User, error)
|
||||
GetByUuid(ctx context.Context, uuid uuid.UUID) (*system.User, error)
|
||||
GetByEmail(ctx context.Context, email string) (*system.User, error)
|
||||
|
||||
XmSelect(ctx context.Context) ([]*view.XmSelect, error)
|
||||
|
||||
@@ -6,9 +6,9 @@ import (
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"management/internal/erpserver/model/dto"
|
||||
"management/internal/erpserver/model/form"
|
||||
"management/internal/erpserver/model/system"
|
||||
"management/internal/erpserver/model/system/request"
|
||||
"management/internal/erpserver/model/view"
|
||||
"management/internal/erpserver/service/v1"
|
||||
"management/internal/pkg/crypto"
|
||||
@@ -44,7 +44,7 @@ func NewUserService(
|
||||
}
|
||||
}
|
||||
|
||||
func (s *userService) Create(ctx context.Context, req *form.User) error {
|
||||
func (s *userService) Create(ctx context.Context, req *request.CreateAndUpdateUser) error {
|
||||
salt, err := rand.String(10)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -85,7 +85,7 @@ func (s *userService) Create(ctx context.Context, req *form.User) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *userService) Update(ctx context.Context, req *form.User) error {
|
||||
func (s *userService) Update(ctx context.Context, req *request.CreateAndUpdateUser) error {
|
||||
user, err := s.repo.Get(ctx, *req.ID)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -113,7 +113,7 @@ func (s *userService) All(ctx context.Context) ([]*system.User, error) {
|
||||
return s.repo.All(ctx)
|
||||
}
|
||||
|
||||
func (s *userService) List(ctx context.Context, q dto.SearchDto) ([]*system.User, int64, error) {
|
||||
func (s *userService) List(ctx context.Context, q request.ListUser) ([]*system.User, int64, error) {
|
||||
count, err := s.repo.Count(ctx, q)
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
@@ -136,6 +136,10 @@ func (s *userService) Get(ctx context.Context, id int32) (*system.User, error) {
|
||||
return s.repo.Get(ctx, id)
|
||||
}
|
||||
|
||||
func (s *userService) GetByUuid(ctx context.Context, uuid uuid.UUID) (*system.User, error) {
|
||||
return s.repo.GetByUuid(ctx, uuid)
|
||||
}
|
||||
|
||||
func (s *userService) GetByEmail(ctx context.Context, email string) (*system.User, error) {
|
||||
return s.repo.GetByEmail(ctx, email)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user