simplified NewServer()
This commit is contained in:
+40
-65
@@ -27,18 +27,6 @@ import (
|
||||
etsy_webhooks "ruben/inventory2/internal/server/webhooks/etsy"
|
||||
)
|
||||
|
||||
type Server struct {
|
||||
log *slog.Logger
|
||||
*router.Mux
|
||||
contentDir string
|
||||
templater *templater.Templater
|
||||
rawEvents *raw_events.Store
|
||||
accts *accounts.Store
|
||||
etsy *etsy_platform.Platform
|
||||
auth *authentication.Authenticator
|
||||
authMiddleware *middleware.Auth
|
||||
}
|
||||
|
||||
func NewServer(
|
||||
ctx context.Context,
|
||||
logger *slog.Logger,
|
||||
@@ -47,13 +35,43 @@ func NewServer(
|
||||
accts *accounts.Store,
|
||||
etsy *etsy_platform.Platform,
|
||||
auth *authentication.Authenticator,
|
||||
) *Server {
|
||||
) http.Handler {
|
||||
mux := router.NewMux(
|
||||
logger,
|
||||
middleware.LogRequests(ctx, logger.WithGroup("request")),
|
||||
)
|
||||
|
||||
tmpl := templater.NewTemplater(
|
||||
// TODO: shouldn't this ACTUALLY be a middleware?
|
||||
// - only try to make this an actual middleware AFTER all the routers are broken out, so that way how the middleware is supposed to work can be known
|
||||
authMiddleware := middleware.NewAuth(
|
||||
logger.WithGroup("auth-middleware"),
|
||||
auth,
|
||||
auth_api.NewLoginURL,
|
||||
accts,
|
||||
)
|
||||
|
||||
// webpage content
|
||||
|
||||
// non-html content: scripts, styles, images, etc
|
||||
|
||||
scfs := http.FileServer(http.Dir(contentDir + "/scripts"))
|
||||
mux.Mux.Handle("GET /scripts/", http.StripPrefix("/scripts", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
w.Header().Set("Content-Type", "text/javascript")
|
||||
if path.Ext(r.URL.Path) == ".gz" {
|
||||
w.Header().Set("Content-Encoding", "gzip")
|
||||
}
|
||||
scfs.ServeHTTP(w, r)
|
||||
})))
|
||||
mux.Mux.Handle("GET /styles/", http.StripPrefix("/styles", http.FileServer(http.Dir(contentDir+"/styles"))))
|
||||
mux.Mux.Handle("GET /favicon/", http.StripPrefix("/favicon", http.FileServer(http.Dir(contentDir+"/favicon"))))
|
||||
|
||||
// html (must be before the api endpoints, because the webpage middleware has to be installed beforehand
|
||||
|
||||
// kind of a dumb way to capture routes for webpages
|
||||
wpr := templates_api.NewWebpageRouter(
|
||||
logger.WithGroup("templates"),
|
||||
contentDir,
|
||||
templater.NewTemplater(
|
||||
contentDir+"/templates",
|
||||
func() template.FuncMap {
|
||||
return template.FuncMap{
|
||||
@@ -101,37 +119,11 @@ func NewServer(
|
||||
},
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
s := &Server{
|
||||
// TODO: eliminate fields that aren't needed anymore
|
||||
log: logger,
|
||||
Mux: mux,
|
||||
contentDir: contentDir,
|
||||
templater: tmpl,
|
||||
rawEvents: rawEvents,
|
||||
accts: accts,
|
||||
etsy: etsy,
|
||||
auth: auth,
|
||||
// TODO: shouldn't this ACTUALLY be a middleware?
|
||||
// - only try to make this an actual middleware AFTER all the routers are broken out, so that way how the middleware is supposed to work can be known
|
||||
authMiddleware: middleware.NewAuth(
|
||||
logger.WithGroup("auth-middleware"),
|
||||
auth,
|
||||
auth_api.NewLoginURL,
|
||||
accts,
|
||||
),
|
||||
}
|
||||
|
||||
// kind of a dumb way to capture routes for webpages
|
||||
wpr := templates_api.NewWebpageRouter(
|
||||
s.log.WithGroup("templates"),
|
||||
contentDir,
|
||||
tmpl,
|
||||
rawEvents,
|
||||
accts,
|
||||
etsy,
|
||||
s.authMiddleware,
|
||||
authMiddleware,
|
||||
)
|
||||
mux.AddMiddleware(
|
||||
func(fn response.HandlerFunc) response.HandlerFunc {
|
||||
@@ -155,13 +147,15 @@ func NewServer(
|
||||
},
|
||||
)
|
||||
|
||||
mux.Route("/", wpr)
|
||||
|
||||
// api endpoints
|
||||
|
||||
mux.Route("/auth", auth_api.NewLoginSubrouter(s.log.WithGroup("/auth"), auth))
|
||||
mux.Route("/auth", auth_api.NewLoginSubrouter(logger.WithGroup("/auth"), auth))
|
||||
mux.Route("/accounts", accounts_api.NewAccountSubrouter(
|
||||
s.log.WithGroup("/accounts"),
|
||||
s.accts,
|
||||
s.authMiddleware,
|
||||
logger.WithGroup("/accounts"),
|
||||
accts,
|
||||
authMiddleware,
|
||||
))
|
||||
|
||||
// api webhooks (TODO: make a router for these)
|
||||
@@ -180,24 +174,5 @@ func NewServer(
|
||||
mux.Mux.Handle("POST /webhooks/", webhookHandler)
|
||||
mux.Mux.Handle("PUT /webhooks/", webhookHandler)
|
||||
|
||||
// webpage content
|
||||
|
||||
// non-html content: scripts, styles, images, etc
|
||||
|
||||
scfs := http.FileServer(http.Dir(contentDir + "/scripts"))
|
||||
mux.Mux.Handle("GET /scripts/", http.StripPrefix("/scripts", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
w.Header().Set("Content-Type", "text/javascript")
|
||||
if path.Ext(r.URL.Path) == ".gz" {
|
||||
w.Header().Set("Content-Encoding", "gzip")
|
||||
}
|
||||
scfs.ServeHTTP(w, r)
|
||||
})))
|
||||
mux.Mux.Handle("GET /styles/", http.StripPrefix("/styles", http.FileServer(http.Dir(contentDir+"/styles"))))
|
||||
mux.Mux.Handle("GET /favicon/", http.StripPrefix("/favicon", http.FileServer(http.Dir(contentDir+"/favicon"))))
|
||||
|
||||
// html
|
||||
|
||||
mux.Route("/", wpr)
|
||||
|
||||
return s
|
||||
return mux
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user