cabinet/web/routes.go

64 lines
1.5 KiB
Go
Raw Normal View History

2019-10-30 15:31:07 +00:00
package web
import (
"time"
"code.chrissexton.org/cws/idea/user"
"code.chrissexton.org/cws/idea/db"
packr "github.com/gobuffalo/packr/v2"
"github.com/speps/go-hashids"
"github.com/gorilla/mux"
"github.com/rs/zerolog/log"
"github.com/stretchr/graceful"
)
type Web struct {
addr string
assetPath string
db *db.Database
salt string
h *hashids.HashID
box *packr.Box
uf *user.UserFactory
mood *mood.Mood
}
func New(addr, assetPath string, db *db.Database, salt string, h *hashids.HashID, box *packr.Box, email *email.EMailClient) *Web {
w := &Web{
addr: addr,
assetPath: assetPath,
db: db,
box: box,
uf: user.NewFactory(db, salt, h),
mood: mood.New(db),
}
if err := db.MakeDB(); err != nil {
log.Fatal().
Err(err).
Msg("could not create database")
}
if email != nil {
u, _ := w.uf.NewUser()
w.email.SendNewUserMail("chris@chrissexton.org", u, "http://happy.chrissexton.org")
}
return w
}
func (web *Web) routeSetup() *mux.Router {
r := mux.NewRouter()
api := r.PathPrefix("/v1/").Subrouter()
api.HandleFunc("/user/code", web.handlerRegisterCode).Methods("GET")
api.HandleFunc("/user/info", web.checkUser).Methods("GET")
r.PathPrefix("/").HandlerFunc(web.indexHandler("/index.html"))
return r
}
func (web *Web) Serve() {
middle := web.routeSetup()
log.Info().Str("addr", "http://"+web.addr).Msg("serving HTTP")
graceful.Run(web.addr, 10*time.Second, middle)
}