Files
2026-05-12 15:40:22 -06:00

69 lines
1.8 KiB
Go

package main
import (
"context"
"log"
"net/http"
"os"
"logjensticks/internal/auth"
"logjensticks/internal/db"
)
func main() {
mongoURI := os.Getenv("MONGO_URI")
if mongoURI == "" {
mongoURI = "mongodb://localhost:27017/logjensticks"
}
// In production set COOKIE_SECURE=true (requires HTTPS).
// Defaults to false for local dev over HTTP.
secureCookie := os.Getenv("COOKIE_SECURE") == "true"
ctx := context.Background()
dbClient, err := db.Connect(ctx, mongoURI)
if err != nil {
log.Fatalf("db: failed to connect: %v", err)
}
defer dbClient.Disconnect(ctx)
if err := dbClient.EnsureIndexes(ctx); err != nil {
log.Fatalf("db: failed to create indexes: %v", err)
}
seedUsername := os.Getenv("SEED_USERNAME")
seedPassword := os.Getenv("SEED_PASSWORD")
if seedUsername == "" {
seedUsername = "broker"
log.Println("WARNING: SEED_USERNAME not set, using dev default 'broker'")
}
if seedPassword == "" {
seedPassword = "changeme"
log.Println("WARNING: SEED_PASSWORD not set, using dev default 'changeme'")
}
if err := dbClient.SeedBroker(ctx, seedUsername, seedPassword); err != nil {
log.Fatalf("db: seed failed: %v", err)
}
protected := auth.Middleware(dbClient)
mux := http.NewServeMux()
mux.HandleFunc("/health", handleHealth)
mux.HandleFunc("/login", handleLogin(dbClient, secureCookie))
mux.HandleFunc("/logout", handleLogout(dbClient, secureCookie))
mux.Handle("/me", protected(http.HandlerFunc(handleMe)))
addr := ":8080"
log.Printf("server starting on %s", addr)
if err := http.ListenAndServe(addr, mux); err != nil {
log.Fatalf("server error: %v", err)
}
}
func handleHealth(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusOK)
w.Write([]byte(`{"success":true}`))
}