| 12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- package svc
- import (
- "perms-system-server/internal/config"
- "perms-system-server/internal/loaders"
- "perms-system-server/internal/middleware"
- "perms-system-server/internal/model"
- "github.com/zeromicro/go-zero/core/limit"
- "github.com/zeromicro/go-zero/core/stores/redis"
- "github.com/zeromicro/go-zero/core/stores/sqlx"
- "github.com/zeromicro/go-zero/rest"
- )
- type ServiceContext struct {
- Config config.Config
- JwtAuth rest.Middleware
- LoginRateLimit rest.Middleware
- SyncRateLimit rest.Middleware
- GrpcLoginLimiter *limit.PeriodLimit
- UserDetailsLoader *loaders.UserDetailsLoader
- *model.Models
- }
- func NewServiceContext(c config.Config) *ServiceContext {
- conn := sqlx.NewMysql(c.MySQL.DataSource)
- rds := redis.MustNewRedis(c.CacheRedis.Nodes[0].RedisConf)
- models := model.NewModels(conn, c.CacheRedis.Nodes, c.CacheRedis.KeyPrefix)
- udLoader := loaders.NewUserDetailsLoader(rds, c.CacheRedis.KeyPrefix, models)
- rlMiddleware := middleware.NewRateLimitMiddleware(rds, 60, 20, c.CacheRedis.KeyPrefix+":rl:login")
- syncRlMiddleware := middleware.NewRateLimitMiddleware(rds, 60, 10, c.CacheRedis.KeyPrefix+":rl:sync")
- grpcLimiter := limit.NewPeriodLimit(60, 20, rds, c.CacheRedis.KeyPrefix+":rl:grpc:login")
- return &ServiceContext{
- Config: c,
- JwtAuth: middleware.NewJwtAuthMiddleware(c.Auth.AccessSecret, udLoader).Handle,
- LoginRateLimit: rlMiddleware.Handle,
- SyncRateLimit: syncRlMiddleware.Handle,
- GrpcLoginLimiter: grpcLimiter,
- UserDetailsLoader: udLoader,
- Models: models,
- }
- }
|