57 lines
2.5 KiB
Go
57 lines
2.5 KiB
Go
package svc
|
|
|
|
import (
|
|
"github.com/ArtisanCloud/PowerWeChat/v3/src/officialAccount"
|
|
"github.com/casbin/casbin/v2"
|
|
"github.com/lionsoul2014/ip2region/binding/golang/xdb"
|
|
"github.com/redis/go-redis/v9"
|
|
"github.com/wenlng/go-captcha/v2/rotate"
|
|
"github.com/wenlng/go-captcha/v2/slide"
|
|
"github.com/zeromicro/go-zero/rest"
|
|
"schisandra-album-cloud-microservices/app/auth/api/internal/config"
|
|
"schisandra-album-cloud-microservices/app/auth/api/internal/middleware"
|
|
"schisandra-album-cloud-microservices/app/auth/api/model/mysql"
|
|
"schisandra-album-cloud-microservices/app/auth/api/model/mysql/query"
|
|
"schisandra-album-cloud-microservices/common/captcha/initialize"
|
|
"schisandra-album-cloud-microservices/common/casbinx"
|
|
"schisandra-album-cloud-microservices/common/ip2region"
|
|
"schisandra-album-cloud-microservices/common/redisx"
|
|
"schisandra-album-cloud-microservices/common/wechat_official"
|
|
)
|
|
|
|
type ServiceContext struct {
|
|
Config config.Config
|
|
SecurityHeadersMiddleware rest.Middleware
|
|
CasbinVerifyMiddleware rest.Middleware
|
|
AuthorizationMiddleware rest.Middleware
|
|
NonceMiddleware rest.Middleware
|
|
DB *query.Query
|
|
RedisClient *redis.Client
|
|
Ip2Region *xdb.Searcher
|
|
CasbinEnforcer *casbin.SyncedCachedEnforcer
|
|
WechatOfficial *officialAccount.OfficialAccount
|
|
|
|
RotateCaptcha rotate.Captcha
|
|
SlideCaptcha slide.Captcha
|
|
}
|
|
|
|
func NewServiceContext(c config.Config) *ServiceContext {
|
|
redisClient := redisx.NewRedis(c.Redis.Host, c.Redis.Pass, c.Redis.DB)
|
|
db, queryDB := mysql.NewMySQL(c.Mysql.DataSource, c.Mysql.MaxOpenConn, c.Mysql.MaxIdleConn, redisClient)
|
|
casbinEnforcer := casbinx.NewCasbin(db)
|
|
return &ServiceContext{
|
|
Config: c,
|
|
SecurityHeadersMiddleware: middleware.NewSecurityHeadersMiddleware().Handle,
|
|
CasbinVerifyMiddleware: middleware.NewCasbinVerifyMiddleware(casbinEnforcer).Handle,
|
|
AuthorizationMiddleware: middleware.NewAuthorizationMiddleware().Handle,
|
|
NonceMiddleware: middleware.NewNonceMiddleware(redisClient).Handle,
|
|
DB: queryDB,
|
|
RedisClient: redisClient,
|
|
Ip2Region: ip2region.NewIP2Region(),
|
|
CasbinEnforcer: casbinEnforcer,
|
|
WechatOfficial: wechat_official.NewWechatPublic(c.Wechat.AppID, c.Wechat.AppSecret, c.Wechat.Token, c.Wechat.AESKey, c.Redis.Host, c.Redis.Pass, c.Redis.DB),
|
|
RotateCaptcha: initialize.NewRotateCaptcha(),
|
|
SlideCaptcha: initialize.NewSlideCaptcha(),
|
|
}
|
|
}
|