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  }