124 lines
3.1 KiB
Go
124 lines
3.1 KiB
Go
package main
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
|
|
"github.com/go-openapi/loads"
|
|
"src.dualinventive.com/go/authentication-service/config"
|
|
"src.dualinventive.com/go/authentication-service/internal/authtokens"
|
|
"src.dualinventive.com/go/authentication-service/internal/pwreset"
|
|
"src.dualinventive.com/go/authentication-service/internal/storage/gorm"
|
|
"src.dualinventive.com/go/authentication-service/internal/storage/redis"
|
|
apiServer "src.dualinventive.com/go/authentication-service/rest/server"
|
|
"src.dualinventive.com/go/authentication-service/rest/server/operations"
|
|
diConfig "src.dualinventive.com/go/lib/config"
|
|
"src.dualinventive.com/go/lib/dilog"
|
|
)
|
|
|
|
var (
|
|
// ApplicationName is the name of the application
|
|
ApplicationName = "authentication-service-rest" //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 := diConfig.Load(confFile, &c)
|
|
if err != nil {
|
|
fmt.Println("logger initialization failed")
|
|
return
|
|
}
|
|
|
|
logger.WithFields(dilog.Fields{
|
|
"app-name": ApplicationName,
|
|
"app-version": ApplicationVersion,
|
|
}).Info("starting")
|
|
|
|
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)
|
|
|
|
emailSender := pwreset.NewEmailSender(
|
|
c.EmailConfig.Host,
|
|
c.EmailConfig.Port,
|
|
c.EmailConfig.Username,
|
|
c.EmailConfig.Password,
|
|
c.EmailConfig.SenderAddr,
|
|
)
|
|
|
|
tokenservice := authtokens.NewService(
|
|
logger,
|
|
credentialsRepo,
|
|
tokenRepo,
|
|
resetCodeRepo,
|
|
templateRepo,
|
|
emailSender,
|
|
)
|
|
|
|
server, err := initRESTAPI(
|
|
c.RestConfig.Port,
|
|
tokenservice,
|
|
)
|
|
if err != nil {
|
|
logger.Fatal(err)
|
|
}
|
|
defer server.Shutdown() //nolint:errcheck
|
|
if err := server.Serve(); err != nil {
|
|
logger.Fatal(err)
|
|
}
|
|
}
|
|
|
|
func initRESTAPI(
|
|
port int,
|
|
tokenService *authtokens.Service,
|
|
) (*apiServer.Server, error) {
|
|
swaggerSpec, err := loads.Analyzed(apiServer.SwaggerJSON, "")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
api := operations.NewAuthenticationAPI(swaggerSpec)
|
|
server := apiServer.NewServer(api)
|
|
initHandlers(api, tokenService)
|
|
server.ConfigureAPI()
|
|
|
|
server.Port = port
|
|
server.EnabledListeners = []string{"http"} // overwrite setting in swagger file
|
|
|
|
return server, nil
|
|
}
|