servicecontext.go 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. package svc
  2. import (
  3. "perms-system-server/internal/config"
  4. "perms-system-server/internal/loaders"
  5. "perms-system-server/internal/middleware"
  6. "perms-system-server/internal/model"
  7. "github.com/zeromicro/go-zero/core/limit"
  8. "github.com/zeromicro/go-zero/core/stores/redis"
  9. "github.com/zeromicro/go-zero/core/stores/sqlx"
  10. "github.com/zeromicro/go-zero/rest"
  11. )
  12. type ServiceContext struct {
  13. Config config.Config
  14. JwtAuth rest.Middleware
  15. ProductLoginRateLimit rest.Middleware
  16. AdminLoginRateLimit rest.Middleware
  17. SyncRateLimit rest.Middleware
  18. GrpcLoginLimiter *limit.PeriodLimit
  19. UsernameLoginLimit *limit.PeriodLimit
  20. UserDetailsLoader *loaders.UserDetailsLoader
  21. *model.Models
  22. }
  23. func NewServiceContext(c config.Config) *ServiceContext {
  24. conn := sqlx.NewMysql(c.MySQL.DataSource)
  25. rds := redis.MustNewRedis(c.CacheRedis.Nodes[0].RedisConf)
  26. models := model.NewModels(conn, c.CacheRedis.Nodes, c.CacheRedis.KeyPrefix)
  27. udLoader := loaders.NewUserDetailsLoader(rds, c.CacheRedis.KeyPrefix, models)
  28. productLoginRL := middleware.NewRateLimitMiddleware(rds, 60, 30, c.CacheRedis.KeyPrefix+":rl:login:product", c.BehindProxy)
  29. adminLoginRL := middleware.NewRateLimitMiddleware(rds, 60, 20, c.CacheRedis.KeyPrefix+":rl:login:admin", c.BehindProxy)
  30. syncRlMiddleware := middleware.NewRateLimitMiddleware(rds, 60, 10, c.CacheRedis.KeyPrefix+":rl:sync", c.BehindProxy)
  31. grpcLimiter := limit.NewPeriodLimit(60, 20, rds, c.CacheRedis.KeyPrefix+":rl:grpc:login")
  32. usernameLimiter := limit.NewPeriodLimit(300, 10, rds, c.CacheRedis.KeyPrefix+":rl:user")
  33. return &ServiceContext{
  34. Config: c,
  35. JwtAuth: middleware.NewJwtAuthMiddleware(c.Auth.AccessSecret, udLoader).Handle,
  36. ProductLoginRateLimit: productLoginRL.Handle,
  37. AdminLoginRateLimit: adminLoginRL.Handle,
  38. SyncRateLimit: syncRlMiddleware.Handle,
  39. GrpcLoginLimiter: grpcLimiter,
  40. UsernameLoginLimit: usernameLimiter,
  41. UserDetailsLoader: udLoader,
  42. Models: models,
  43. }
  44. }