github.com/infraboard/keyauth@v0.8.1/apps/token/impl/impl.go (about) 1 package impl 2 3 import ( 4 "context" 5 "fmt" 6 7 "github.com/infraboard/mcube/app" 8 "github.com/infraboard/mcube/cache" 9 "github.com/infraboard/mcube/logger" 10 "github.com/infraboard/mcube/logger/zap" 11 "go.mongodb.org/mongo-driver/mongo" 12 "go.mongodb.org/mongo-driver/mongo/options" 13 "go.mongodb.org/mongo-driver/x/bsonx" 14 "google.golang.org/grpc" 15 16 "github.com/infraboard/keyauth/apps/application" 17 "github.com/infraboard/keyauth/apps/domain" 18 "github.com/infraboard/keyauth/apps/endpoint" 19 "github.com/infraboard/keyauth/apps/namespace" 20 "github.com/infraboard/keyauth/apps/policy" 21 "github.com/infraboard/keyauth/apps/session" 22 "github.com/infraboard/keyauth/apps/token" 23 "github.com/infraboard/keyauth/apps/token/issuer" 24 "github.com/infraboard/keyauth/apps/token/security" 25 "github.com/infraboard/keyauth/apps/user" 26 "github.com/infraboard/keyauth/apps/verifycode" 27 "github.com/infraboard/keyauth/conf" 28 ) 29 30 var ( 31 // Service 服务实例 32 svr = &service{} 33 ) 34 35 type service struct { 36 token.UnimplementedServiceServer 37 col *mongo.Collection 38 log logger.Logger 39 enableCache bool 40 notifyCachPre string 41 42 app application.ServiceServer 43 user user.ServiceServer 44 domain domain.ServiceServer 45 policy policy.ServiceServer 46 issuer issuer.Issuer 47 endpoint endpoint.ServiceServer 48 session session.ServiceServer 49 checker security.Checker 50 code verifycode.ServiceServer 51 ns namespace.ServiceServer 52 } 53 54 func (s *service) Config() error { 55 s.app = app.GetGrpcApp(application.AppName).(application.ServiceServer) 56 s.user = app.GetGrpcApp(user.AppName).(user.ServiceServer) 57 s.domain = app.GetGrpcApp(domain.AppName).(domain.ServiceServer) 58 s.policy = app.GetGrpcApp(policy.AppName).(policy.ServiceServer) 59 s.endpoint = app.GetGrpcApp(endpoint.AppName).(endpoint.ServiceServer) 60 s.session = app.GetGrpcApp(session.AppName).(session.ServiceServer) 61 s.code = app.GetGrpcApp(verifycode.AppName).(verifycode.ServiceServer) 62 s.ns = app.GetGrpcApp(namespace.AppName).(namespace.ServiceServer) 63 64 issuer, err := issuer.NewTokenIssuer() 65 if err != nil { 66 return err 67 } 68 s.issuer = issuer 69 70 c := cache.C() 71 if c == nil { 72 return fmt.Errorf("denpence cache service is nil") 73 } 74 s.checker, err = security.NewChecker() 75 if err != nil { 76 return fmt.Errorf("new checker error, %s", err) 77 } 78 79 db := conf.C().Mongo.GetDB() 80 col := db.Collection("token") 81 82 indexs := []mongo.IndexModel{ 83 { 84 Keys: bsonx.Doc{{Key: "refresh_token", Value: bsonx.Int32(-1)}}, 85 Options: options.Index().SetUnique(true), 86 }, 87 { 88 Keys: bsonx.Doc{{Key: "create_at", Value: bsonx.Int32(-1)}}, 89 }, 90 } 91 92 _, err = col.Indexes().CreateMany(context.Background(), indexs) 93 if err != nil { 94 return err 95 } 96 97 s.col = col 98 s.log = zap.L().Named("token") 99 return nil 100 } 101 102 func (s *service) Name() string { 103 return token.AppName 104 } 105 106 func (s *service) Registry(server *grpc.Server) { 107 token.RegisterServiceServer(server, svr) 108 } 109 110 func init() { 111 app.RegistryGrpcApp(svr) 112 }