package main import ( "encoding/gob" "log" "net/http" "lishwist/api" "lishwist/db" "lishwist/env" "lishwist/router" "lishwist/routing" ) func main() { gob.Register(&api.RegisterProps{}) gob.Register(&routing.LoginProps{}) err := db.Open() if err != nil { log.Fatalf("Failed to open DB: %s\n", err) } err = db.Init() if err != nil { log.Fatalf("Failed to init DB: %s\n", err) } store, err := db.NewSessionStore() if err != nil { log.Fatalf("Failed to initialize session store: %s\n", err) } store.Options.MaxAge = 86_400 store.Options.Secure = !env.InDev store.Options.HttpOnly = true r := router.New(store) route := routing.NewContext(store) r.Html.Public.HandleFunc("GET /register", route.Register) r.Html.Public.HandleFunc("POST /register", route.RegisterPost) r.Html.Public.HandleFunc("GET /", route.Login) r.Html.Public.HandleFunc("POST /", route.LoginPost) r.Html.Public.HandleFunc("GET /list/{userReference}", route.PublicWishlist) r.Html.Public.HandleFunc("GET /group/{groupReference}", route.PublicGroupPage) r.Html.Private.Handle("GET /{$}", route.ExpectUser(route.Home)) r.Html.Private.Handle("POST /{$}", route.ExpectUser(route.HomePost)) r.Html.Private.Handle("GET /list/{userReference}", route.ExpectUser(route.ForeignWishlist)) r.Html.Private.Handle("POST /list/{userReference}", route.ExpectUser(route.ForeignWishlistPost)) r.Html.Private.Handle("GET /group/{groupReference}", route.ExpectUser(route.GroupPage)) r.Html.Private.HandleFunc("POST /logout", route.LogoutPost) r.Json.Public.HandleFunc("POST /register", route.RegisterPostJson) r.Json.Public.HandleFunc("GET /", routing.NotFoundJson) r.Json.Private.Handle("GET /users", route.ExpectUser(route.UsersJson)) http.Handle("/", r) log.Printf("Running at http://127.0.0.1:%s\n", env.ServePort) err = http.ListenAndServe(":"+env.ServePort, nil) if err != nil { log.Fatalln("Failed to listen and server:", err) } }