package main import ( "database/sql" "flag" "log" "net" "net/http" "strconv" "github.com/gorilla/schema" "gosten/model" "gosten/templ" "github.com/go-chi/chi/v5" "github.com/go-chi/chi/v5/middleware" ) // flags var ( port uint64 host string ) func init() { flag.StringVar(&host, "h", "localhost", "address to listen on") flag.Uint64Var(&port, "p", 8080, "port to listen on") } var Q *model.Queries var s *schema.Decoder func main() { flag.Parse() db, err := sql.Open(driverName, "test.sqlite") if err != nil { log.Fatal(err) } Q = model.New(db) s = schema.NewDecoder() r := chi.NewRouter() // A good base middleware stack r.Use(middleware.RequestID) r.Use(middleware.RealIP) r.Use(middleware.CleanPath) r.Use(middleware.Logger) r.Use(middleware.Recoverer) r.Get("/", func(w http.ResponseWriter, _ *http.Request) { templ.Lookup("index").Execute(w, nil) }) r.Route("/login", func(r chi.Router) { type User struct { Name string `form:"options=required"` Password string `form:"type=password;options=required"` } r.Get("/", func(w http.ResponseWriter, _ *http.Request) { templ.Lookup("login").Execute(w, User{}) }) r.Post("/", func(w http.ResponseWriter, r *http.Request) { u := User{} r.ParseForm() s.Decode(&u, r.PostForm) templ.Lookup("login2").Execute(w, u) }) }) address := net.JoinHostPort(host, strconv.FormatUint(port, 10)) log.Fatal(http.ListenAndServe(address, r)) }