lishwist/server/main.go

70 lines
2.1 KiB
Go

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(&api.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("GET /", routing.NotFoundJson)
r.Json.Private.Handle("GET /users", route.ExpectUser(route.UsersJson))
r.Json.Private.Handle("GET /groups", route.ExpectUser(route.GroupsJson))
r.Json.Private.Handle("POST /groups/{groupReference}", route.ExpectUser(route.GroupPost))
r.Json.Private.Handle("GET /groups/{groupReference}", route.ExpectUser(route.Group))
r.Json.Private.HandleFunc("GET /", routing.NotFoundJson)
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)
}
}