Initial commit
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
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}`))
|
||||
}
|
||||
Reference in New Issue
Block a user