package main import ( "log" "net/http" "os" "whitelistmanager/internal/invite" "whitelistmanager/internal/minecraft" "whitelistmanager/internal/store" "whitelistmanager/internal/transport" "github.com/alexedwards/flow" "github.com/joho/godotenv" ) func main() { if _, err := os.Stat(".env"); err == nil { err := godotenv.Load() if err != nil { log.Fatal("Error loading .env file") } } mux := flow.New() db, err := store.Open() if err != nil { panic(err) } defer db.Close() im := invite.NewManager(db) mc := minecraft.NewCom() handlers := transport.New(db, im, mc) // Auth endpoints mux.Group(func(mux *flow.Mux) { mux.HandleFunc("/api/v1/auth/redirect", handlers.AuthRedirect) mux.HandleFunc("/api/v1/auth/callback", handlers.AuthCallback) }) // API endpoints mux.Group(func(mux *flow.Mux) { mux.Use(handlers.Cors) mux.HandleFunc("/api/v1/invite/:id", handlers.GetInvite, "GET") mux.Use(handlers.SessionAuth) mux.HandleFunc("/api/v1/me", handlers.CurrentUser, "GET") mux.HandleFunc("/api/v1/invites", handlers.CreateInvite, "POST") mux.HandleFunc("/api/v1/invite/:id/accept", handlers.AcceptInvite, "POST") mux.HandleFunc("/api/v1/invite/:id/log", handlers.InviteLog, "GET") mux.HandleFunc("/api/v1/invite/:id", handlers.DeleteInvite, "DELETE") mux.HandleFunc("/api/v1/servers", handlers.Servers, "GET", "POST") mux.HandleFunc("/api/v1/server/:id", handlers.Server, "GET", "DELETE") mux.HandleFunc("/api/v1/server/:id/invites", handlers.ServerInvites, "GET") }) mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { r.Header.Set("Content-Type", "application/json") _, err = w.Write([]byte(`{"duck": "quacks"}`)) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } }) log.Println("Http listening on 0.0.0.0:8080") log.Fatal(http.ListenAndServe("0.0.0.0:8080", mux)) }