package main import ( "log" "net/http" "wyo.town/netzah/models" "wyo.town/netzah/handlers" "wyo.town/netzah/session" "wyo.town/netzah/middleware" "github.com/gorilla/mux" "gorm.io/driver/postgres" "gorm.io/gorm" ) func init() { dsn := "host=localhost user=_postgresql password=postGRES dbname=netzah port=5432 sslmode=disable TimeZone=US/Mountain client_encoding=UTF8" db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{}) if err != nil { panic("failed to connect database") } db.AutoMigrate(&models.Blog{}) } func main() { session.Init() mux := mux.NewRouter() mux.Use(session.Manager.LoadAndSave) mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusOK) _, _ = w.Write([]byte("Hello, World!")) }) mux.HandleFunc("/blogs", handlers.CreateBlog).Methods(http.MethodGet) mux.HandleFunc("/blogs", handlers.StoreBlog).Methods(http.MethodPost) mux.HandleFunc("/blogs/{id}", handlers.GetBlog).Methods(http.MethodGet) mux.HandleFunc("GET /posts/{slug}", func(w http.ResponseWriter, r *http.Request) { slug := r.PathValue("slug") fmt.Fprintf(w, "Post: %s", slug) }) mux.HandleFunc("/login", handlers.LoginGET) mux.HandleFunc("/login/submit", handlers.LoginPOST) // Logout (POST is recommended; allow GET only if you must) mux.HandleFunc("/logout", handlers.LogoutPOST) // mux.HandleFunc("/blogs/{id}", handlers.UpdateBlog).Methods(http.MethodPut) // mux.HandleFunc("/blogs/{id}", handlers.DeleteBlog).Methods(http.MethodDelete) // Example protected route (SCS must already be on the chain) mux.Handle("/whoami", middleware.RequireAuth(http.HandlerFunc(handlers.Dashboard))) log.Println("Starting server on :8090") srv := &http.Server{ Addr: ":8090", Handler: mux, } log.Fatal(srv.ListenAndServe()) }