structure appears to work
This commit is contained in:
77
main.go
77
main.go
@@ -1,22 +1,36 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"log/slog"
|
||||
"os"
|
||||
"vctp/db"
|
||||
utils "vctp/internal/utils"
|
||||
"vctp/log"
|
||||
"vctp/server"
|
||||
"vctp/server/router"
|
||||
"os"
|
||||
|
||||
"github.com/golang-migrate/migrate/v4"
|
||||
"github.com/joho/godotenv"
|
||||
)
|
||||
|
||||
var (
|
||||
bindDisableTls bool
|
||||
)
|
||||
|
||||
func main() {
|
||||
// Load data from environment file
|
||||
envFilename := utils.GetFilePath(".env")
|
||||
err := godotenv.Load(envFilename)
|
||||
if err != nil {
|
||||
panic("Error loading .env file")
|
||||
}
|
||||
|
||||
logger := log.New(
|
||||
log.GetLevel(),
|
||||
log.GetOutput(),
|
||||
)
|
||||
|
||||
// Configure database
|
||||
database, err := db.New(logger, "./db.sqlite3")
|
||||
if err != nil {
|
||||
logger.Error("Failed to create database", "error", err)
|
||||
@@ -24,21 +38,68 @@ func main() {
|
||||
}
|
||||
defer database.Close()
|
||||
|
||||
if err = db.Migrate(database); err != nil && !errors.Is(err, migrate.ErrNoChange) {
|
||||
/*
|
||||
if err = db.Migrate(database); err != nil && !errors.Is(err, migrate.ErrNoChange) {
|
||||
logger.Error("failed to migrate database", "error", err)
|
||||
return
|
||||
}
|
||||
*/
|
||||
|
||||
if err = db.Migrate(database); err != nil {
|
||||
logger.Error("failed to migrate database", "error", err)
|
||||
return
|
||||
}
|
||||
|
||||
port := os.Getenv("PORT")
|
||||
if port == "" {
|
||||
port = "8080"
|
||||
// Determine bind IP
|
||||
bindIP := os.Getenv("BIND_IP")
|
||||
if bindIP == "" {
|
||||
bindIP = utils.GetOutboundIP().String()
|
||||
}
|
||||
// Determine bind port
|
||||
bindPort := os.Getenv("BIND_PORT")
|
||||
if bindPort == "" {
|
||||
bindPort = "9443"
|
||||
}
|
||||
bindAddress := fmt.Sprint(bindIP, ":", bindPort)
|
||||
slog.Info("Will listen on address", "ip", bindIP, "port", bindPort)
|
||||
|
||||
// Determine bind disable TLS
|
||||
bindDisableTlsEnv := os.Getenv("BIND_DISABLE_TLS")
|
||||
if bindDisableTlsEnv == "true" {
|
||||
bindDisableTls = true
|
||||
}
|
||||
|
||||
// Get file names for TLS cert/key
|
||||
tlsCertFilename := os.Getenv("TLS_CERT_FILE")
|
||||
if tlsCertFilename != "" {
|
||||
tlsCertFilename = utils.GetFilePath(tlsCertFilename)
|
||||
} else {
|
||||
tlsCertFilename = "./cert.pem"
|
||||
}
|
||||
|
||||
tlsKeyFilename := os.Getenv("TLS_KEY_FILE")
|
||||
if tlsKeyFilename != "" {
|
||||
tlsKeyFilename = utils.GetFilePath(tlsKeyFilename)
|
||||
} else {
|
||||
tlsKeyFilename = "./privkey.pem"
|
||||
}
|
||||
|
||||
// Generate certificate if required
|
||||
if !(utils.FileExists(tlsCertFilename) && utils.FileExists(tlsKeyFilename)) {
|
||||
slog.Warn("Specified TLS certificate or private key do not exist", "certificate", tlsCertFilename, "tls-key", tlsKeyFilename)
|
||||
utils.GenerateCerts(tlsCertFilename, tlsKeyFilename)
|
||||
}
|
||||
|
||||
// Start server
|
||||
svr := server.New(
|
||||
logger,
|
||||
":"+port,
|
||||
bindAddress,
|
||||
server.WithRouter(router.New(logger, database)),
|
||||
)
|
||||
|
||||
svr.DisableTls(bindDisableTls)
|
||||
svr.SetCertificate(tlsCertFilename)
|
||||
svr.SetPrivateKey(tlsKeyFilename)
|
||||
|
||||
svr.StartAndWait()
|
||||
}
|
||||
|
Reference in New Issue
Block a user