package main import ( "fmt" "log" "net/http" "os" "strconv" "farga/app" "farga/db" "farga/lib" "farga/ssh" "github.com/joho/godotenv" ) func loadEnv() { err := godotenv.Load() if err != nil { log.Println("\x1b[33mNo .env file found, using system env\x1b[0m") // orange then reset } if os.Getenv("DOMAIN") == "" || os.Getenv("PORT") == "" || os.Getenv("CSRF_KEY") == "" || os.Getenv("SQLITE_PATH") == "" { log.Fatal("You're missing one (or more) required env vars: 'SQLITE_PATH, DOMAIN, PORT, CSRF_KEY'.") } PORT, err := strconv.ParseUint(os.Getenv("PORT"), 10, 64) if PORT <= 0 || err != nil { log.Fatal("Invalid PORT env var.") } lib.SetEnvVars(os.Getenv("DOMAIN"), uint(PORT), os.Getenv("DOMAIN"), os.Getenv("CSRF_KEY")) } func main() { loadEnv() db, err := db.New() if err != nil { panic(err) } go db.CleanupTicker() app := app.New(db) if lib.PORT == 0 || lib.DOMAIN == "" { // uint = 0 I'll interpret as invalid log.Fatal("Missing PORT or DOMAIN .env values. Make sure to set them properly.") } go ssh.ServeSSH(db, lib.SSHPort) fmt.Printf("Serving website on http://%s:%v\n", lib.DOMAIN, lib.PORT) err = http.ListenAndServe(fmt.Sprintf(":%v", lib.PORT), app.Handler) if err != nil { panic(err) } }