package main import ( "flag" "net" "src.dualinventive.com/go/authentication-service/internal/authtokens" "src.dualinventive.com/go/authentication-service/internal/pwreset" "google.golang.org/grpc" "google.golang.org/grpc/reflection" "src.dualinventive.com/go/authentication-service/config" grpcService "src.dualinventive.com/go/authentication-service/grpc" "src.dualinventive.com/go/authentication-service/internal/storage/gorm" "src.dualinventive.com/go/authentication-service/internal/storage/redis" cfg "src.dualinventive.com/go/lib/config" "src.dualinventive.com/go/lib/dilog" ) var ( // ApplicationName is the name of the application ApplicationName = "authentication-service-grpc" //nolint: gochecknoglobals // ApplicationVersion is the version of the application ApplicationVersion = "0.0.0-dev" //nolint: gochecknoglobals c = config.New() //nolint: gochecknoglobals ) func main() { var confFile string flag.StringVar(&confFile, "config", ApplicationName, "Configuration-file name") flag.Parse() logger, err := cfg.Load(confFile, &c) if err != nil { panic(err) } logger.WithFields(dilog.Fields{ "app-name": ApplicationName, "app-version": ApplicationVersion, }).Info("starting") lis, err := net.Listen("tcp", ":"+c.GrpcConfig.Port) //nolint:gosec if err != nil { logger.WithError(err).Fatal("error listening on port " + c.GrpcConfig.Port) } logger.WithField("grpc-port", c.GrpcConfig.Port).Info("Serving auth at tcp") credentialsRepo, err := gorm.NewDatabaseCredentialsRepository( c.DatabaseConfig.Host, c.DatabaseConfig.Port, c.DatabaseConfig.Name, c.DatabaseConfig.User, c.DatabaseConfig.Password, ) if err != nil { logger.WithError(err).Fatal("error creating CredentialsRepository") } tokenRepo, err := redis.NewTokenRepository( c.RedisConfig.Host, c.RedisConfig.Port, c.JWTConfig.PrivateKey, c.JWTConfig.PublicKey, logger, ) if err != nil { logger.WithError(err).Fatal("error creating TokenRepository") } resetCodeRepo, err := redis.NewResetCodeRepository( c.RedisConfig.Host, c.RedisConfig.Port, ) if err != nil { logger.WithError(err).Fatal("error creating ResetCodeRepository") } templateRepo := pwreset.NewFSTemplateRepository(c.TemplateConfig.TemplateFilePath) if err != nil { logger.WithError(err).Fatal("error creating TemplateRepository") } emailSender := pwreset.NewEmailSender( c.EmailConfig.Host, c.EmailConfig.Port, c.EmailConfig.Username, c.EmailConfig.Password, c.EmailConfig.SenderAddr, ) if err != nil { logger.WithError(err).Fatal("error creating EmailSender") } grpcServer := grpc.NewServer() tokenservice := authtokens.NewService( logger, credentialsRepo, tokenRepo, resetCodeRepo, templateRepo, emailSender, ) server, err := grpcService.NewServer(tokenservice) if err != nil { logger.WithError(err).Fatal("error creating the server") } grpcService.RegisterAuthenticationServiceServer(grpcServer, server) // Register reflection service on gRPC server. reflection.Register(grpcServer) if err := grpcServer.Serve(lis); err != nil { logger.WithError(err).Fatal("error starting grpc server") } }