package main import ( "encoding/gob" "log" "net/http" lishwist "lishwist/core" "lishwist/core/session" "lishwist/http/api" "lishwist/http/env" "lishwist/http/router" "lishwist/http/routing" ) func main() { gob.Register(&api.RegisterProps{}) gob.Register(&api.LoginProps{}) err := lishwist.Init(env.DatabaseFile) if err != nil { log.Fatalf("Failed to init Lishwist: %s\n", err) } store, err := session.NewStore([]byte(env.SessionSecret)) 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) r.Public.HandleFunc("GET /", routing.Login) r.Public.HandleFunc("GET /groups/{groupReference}", routing.PublicGroup) r.Public.HandleFunc("GET /lists/{userReference}", routing.PublicWishlist) r.Public.HandleFunc("GET /register", routing.Register) r.Public.HandleFunc("POST /", routing.LoginPost) r.Public.HandleFunc("POST /register", routing.RegisterPost) r.Private.HandleFunc("GET /", routing.NotFound) r.Private.HandleFunc("GET /groups", routing.ExpectAppSession(routing.Groups)) r.Private.HandleFunc("GET /groups/{groupReference}", routing.ExpectAppSession(routing.Group)) r.Private.HandleFunc("GET /lists/{userReference}", routing.ExpectAppSession(routing.ForeignWishlist)) r.Private.HandleFunc("GET /users", routing.ExpectAppSession(routing.Users)) r.Private.HandleFunc("GET /users/{userReference}", routing.ExpectAppSession(routing.User)) r.Private.HandleFunc("GET /{$}", routing.ExpectAppSession(routing.Home)) r.Private.HandleFunc("POST /groups/{groupReference}", routing.ExpectAppSession(routing.GroupPost)) r.Private.HandleFunc("POST /list/{userReference}", routing.ExpectAppSession(routing.ForeignWishlistPost)) r.Private.HandleFunc("POST /logout", routing.LogoutPost) r.Private.HandleFunc("POST /users/{userReference}", routing.ExpectAppSession(routing.UserPost)) r.Private.HandleFunc("POST /{$}", routing.ExpectAppSession(routing.HomePost)) // Deprecated r.Private.HandleFunc("GET /group/{groupReference}", routing.ExpectAppSession(routing.Group)) r.Private.HandleFunc("GET /list/{userReference}", routing.ExpectAppSession(routing.ForeignWishlist)) r.Public.HandleFunc("GET /group/{groupReference}", routing.PublicGroup) r.Public.HandleFunc("GET /list/{userReference}", routing.PublicWishlist) 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) } }