src.dualinventive.com/go/authentication-service/cmd/authentication-service-grpc/main.go

119 lines
3.1 KiB
Go

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")
}
}