package response import ( "fmt" "lishwist/http/templates" "log" "net/http" "github.com/Teajey/rsvp" "github.com/Teajey/sqlstore" ) type ServeMux struct { inner *rsvp.ServeMux store *sqlstore.Store } func NewServeMux(store *sqlstore.Store) *ServeMux { mux := rsvp.NewServeMux() mux.Config.HtmlTemplate = templates.Templates["login.gotmpl"] return &ServeMux{ inner: mux, store: store, } } func (m *ServeMux) ServeHTTP(w http.ResponseWriter, r *http.Request) { m.inner.ServeHTTP(w, r) } type Handler interface { ServeHTTP(*Session, http.Header, *http.Request) rsvp.Response } type HandlerFunc func(*Session, http.Header, *http.Request) rsvp.Response func (m *ServeMux) HandleFunc(pattern string, handler HandlerFunc) { m.inner.Std.HandleFunc(pattern, func(w http.ResponseWriter, r *http.Request) { session := m.GetSession(r) response := handler(session, w.Header(), r) if session.written { err := session.inner.Save(r, w) if err != nil { log.Printf("Failed to save session: %s\n", err) } } err := response.Write(w, r, m.inner.Config) if err != nil { panic(fmt.Sprintf("Failed to write rsvp.Response: %s", err)) } }) } func (m *ServeMux) Handle(pattern string, handler Handler) { m.HandleFunc(pattern, handler.ServeHTTP) }