Files
open-save-cloud-server/main.go
Aurélie Delhaie c06843cd28 Start refactoring
2023-05-29 17:44:50 +02:00

83 lines
2.1 KiB
Go

//go:build !windows
package main
import (
"crypto/rsa"
"flag"
"fmt"
"log"
"opensavecloudserver/config"
"opensavecloudserver/config/security"
"opensavecloudserver/constant"
"opensavecloudserver/data/datasource/pgsql"
"opensavecloudserver/data/datasource/pgsql/models/game"
"opensavecloudserver/data/datasource/pgsql/models/user"
"opensavecloudserver/server"
"opensavecloudserver/server/authentication/impl"
"os"
"runtime"
)
func main() {
fmt.Printf("Open Save Cloud (Server) v%s %s/%s\n", constant.Version, runtime.GOOS, runtime.GOARCH)
defer func() {
if err := recover(); err != nil {
_, err := fmt.Fprintln(os.Stderr, "the server has encountered an error and must stop: ", err)
if err != nil {
return
}
os.Exit(1)
}
}()
if err := initLogger(); err != nil {
panic(err)
}
path := flag.String("config", "./config.yml", "Set the configuration file path")
generateRSAKey := flag.Bool("new-rsa-key", false, "Generate a new RSA key. This key will be written to the rsa_key path set in the configuration file")
flag.Parse()
appConfiguration, err := config.Load(*path)
if err != nil {
log.Fatal(err)
}
var pk *rsa.PrivateKey
if *generateRSAKey {
pk, err = security.GenerateNewRSAKey(appConfiguration.Path.RSAKey, 2048)
if err != nil {
panic(err)
}
} else {
pk, err = security.LoadPrivateKey(appConfiguration.Path.RSAKey)
if err != nil {
panic(err)
}
}
dao := pgsql.NewDatabaseDatasource()
err = dao.Connect(appConfiguration.Database.URL)
if err != nil {
log.Fatal("failed to connect to the datasource: ", err)
}
userRepo := user.NewUserDatasource(dao)
jwtAuthenticator, err := impl.NewJWTAuthenticator(pk, userRepo)
if err != nil {
log.Fatal(err)
}
deps := server.DatasourceDependencies{
UserRepository: userRepo,
GameRepository: game.NewGameDatasource(dao),
Authenticator: jwtAuthenticator,
}
appServer := server.NewServer(appConfiguration, deps)
log.Println("the server is up and ready to listen on", appServer.Server.Addr)
err = appServer.Server.ListenAndServe()
if err != nil {
log.Fatal(err)
}
}