diff --git a/internal/handlers/handlelogin.go b/internal/handlers/handlelogin.go
deleted file mode 100644
index 0dad604..0000000
--- a/internal/handlers/handlelogin.go
+++ /dev/null
@@ -1,12 +0,0 @@
-package handlers
-
-import (
- "fmt"
- "net/http"
-)
-
-func (s *Handlers) HandleLogin() http.HandlerFunc {
- return func(w http.ResponseWriter, r *http.Request) {
- fmt.Fprintf(w, "hello login")
- }
-}
diff --git a/internal/handlers/handlehealthcheck.go b/internal/handlers/healthcheck.go
similarity index 100%
rename from internal/handlers/handlehealthcheck.go
rename to internal/handlers/healthcheck.go
diff --git a/internal/handlers/handleindex.go b/internal/handlers/index.go
similarity index 63%
rename from internal/handlers/handleindex.go
rename to internal/handlers/index.go
index e91fedc..7895d49 100644
--- a/internal/handlers/handleindex.go
+++ b/internal/handlers/index.go
@@ -1,17 +1,16 @@
package handlers
import (
- "html/template"
"net/http"
"git.eeqj.de/sneak/gohttpserver/templates"
)
func (s *Handlers) HandleIndex() http.HandlerFunc {
- indexTemplate := template.Must(template.New("index").Parse(templates.MustString("index.html")))
+ t := templates.GetParsed()
return func(w http.ResponseWriter, r *http.Request) {
- err := indexTemplate.ExecuteTemplate(w, "index", nil)
+ err := t.ExecuteTemplate(w, "index.html", nil)
if err != nil {
s.log.Error().Err(err).Msg("")
http.Error(w, http.StatusText(500), 500)
diff --git a/internal/handlers/login.go b/internal/handlers/login.go
new file mode 100644
index 0000000..f15b847
--- /dev/null
+++ b/internal/handlers/login.go
@@ -0,0 +1,19 @@
+package handlers
+
+import (
+ "net/http"
+
+ "git.eeqj.de/sneak/gohttpserver/templates"
+)
+
+func (s *Handlers) HandleLoginGET() http.HandlerFunc {
+ t := templates.GetParsed()
+
+ return func(w http.ResponseWriter, r *http.Request) {
+ err := t.ExecuteTemplate(w, "login.html", nil)
+ if err != nil {
+ s.log.Error().Err(err).Msg("")
+ http.Error(w, http.StatusText(500), 500)
+ }
+ }
+}
diff --git a/internal/handlers/handlenow.go b/internal/handlers/now.go
similarity index 100%
rename from internal/handlers/handlenow.go
rename to internal/handlers/now.go
diff --git a/internal/handlers/handlepanic.go b/internal/handlers/panic.go
similarity index 100%
rename from internal/handlers/handlepanic.go
rename to internal/handlers/panic.go
diff --git a/internal/middleware/middleware.go b/internal/middleware/middleware.go
index 2686665..a6605ed 100644
--- a/internal/middleware/middleware.go
+++ b/internal/middleware/middleware.go
@@ -69,7 +69,7 @@ func (lrw *loggingResponseWriter) WriteHeader(code int) {
// type Middleware func(http.Handler) http.Handler
// this returns a Middleware that is designed to do every request through the
// mux, note the signature:
-func (s *Middleware) LoggingMiddleware() func(http.Handler) http.Handler {
+func (s *Middleware) Logging() func(http.Handler) http.Handler {
// FIXME this should use https://github.com/google/go-cloud/blob/master/server/requestlog/requestlog.go
return func(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
@@ -97,7 +97,7 @@ func (s *Middleware) LoggingMiddleware() func(http.Handler) http.Handler {
}
}
-func (s *Middleware) CORSMiddleware() func(http.Handler) http.Handler {
+func (s *Middleware) CORS() func(http.Handler) http.Handler {
return cors.Handler(cors.Options{
// CHANGEME! these are defaults, change them to suit your needs or
// read from environment/viper.
@@ -112,7 +112,7 @@ func (s *Middleware) CORSMiddleware() func(http.Handler) http.Handler {
})
}
-func (s *Middleware) AuthMiddleware() func(http.Handler) http.Handler {
+func (s *Middleware) Auth() func(http.Handler) http.Handler {
return func(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
// CHANGEME you'll want to change this to do stuff.
@@ -122,7 +122,7 @@ func (s *Middleware) AuthMiddleware() func(http.Handler) http.Handler {
}
}
-func (s *Middleware) MetricsMiddleware() func(http.Handler) http.Handler {
+func (s *Middleware) Metrics() func(http.Handler) http.Handler {
mdlw := ghmm.New(ghmm.Config{
Recorder: metrics.NewRecorder(metrics.Config{}),
})
@@ -131,7 +131,7 @@ func (s *Middleware) MetricsMiddleware() func(http.Handler) http.Handler {
}
}
-func (s *Middleware) MetricsAuthMiddleware() func(http.Handler) http.Handler {
+func (s *Middleware) MetricsAuth() func(http.Handler) http.Handler {
return basicauth.New(
"metrics",
map[string][]string{
diff --git a/internal/server/http.go b/internal/server/http.go
index 07efa29..6c25ffc 100644
--- a/internal/server/http.go
+++ b/internal/server/http.go
@@ -7,7 +7,7 @@ import (
)
func (s *Server) serveUntilShutdown() {
- listenAddr := fmt.Sprintf(":%d", s.port)
+ listenAddr := fmt.Sprintf(":%d", s.params.Config.Port)
s.httpServer = &http.Server{
Addr: listenAddr,
ReadTimeout: 10 * time.Second,
diff --git a/internal/server/routes.go b/internal/server/routes.go
index b283a5a..bfdffed 100644
--- a/internal/server/routes.go
+++ b/internal/server/routes.go
@@ -23,16 +23,16 @@ func (s *Server) SetupRoutes() {
s.router.Use(middleware.Recoverer)
s.router.Use(middleware.RequestID)
- s.router.Use(s.mw.LoggingMiddleware())
+ s.router.Use(s.mw.Logging())
// add metrics middleware only if we can serve them behind auth
if viper.GetString("METRICS_USERNAME") != "" {
- s.router.Use(s.mw.MetricsMiddleware())
+ s.router.Use(s.mw.Metrics())
}
// set up CORS headers. you'll probably want to configure that
// in middlewares.go.
- s.router.Use(s.mw.CORSMiddleware())
+ s.router.Use(s.mw.CORS())
// CHANGEME to suit your needs, or pull from config.
// timeout for request context; your handlers must finish within
@@ -68,12 +68,21 @@ func (s *Server) SetupRoutes() {
// if you want to use a general purpose middleware (http.Handler
// wrapper) on a specific HandleFunc route, you need to take the
// .ServeHTTP of the http.Handler to get its HandleFunc, viz:
- authMiddleware := s.mw.AuthMiddleware()
+ auth := s.mw.Auth()
s.router.Get(
"/login",
- authMiddleware(s.h.HandleLogin()).ServeHTTP,
+ auth(s.h.HandleLoginGET()).ServeHTTP,
)
+ s.router.Get(
+ "/signup",
+ auth(s.h.HandleSignupGET()).ServeHTTP,
+ )
+
+ s.router.Post(
+ "/signup",
+ auth(s.h.HandleSignupPOST()).ServeHTTP,
+ )
// route that panics for testing
// CHANGEME remove this
s.router.Get(
@@ -89,7 +98,7 @@ func (s *Server) SetupRoutes() {
// set up authenticated /metrics route:
if viper.GetString("METRICS_USERNAME") != "" {
s.router.Group(func(r chi.Router) {
- r.Use(s.mw.MetricsAuthMiddleware())
+ r.Use(s.mw.MetricsAuth())
r.Get("/metrics", http.HandlerFunc(promhttp.Handler().ServeHTTP))
})
}
diff --git a/internal/server/server.go b/internal/server/server.go
index e85801b..64e0ba6 100644
--- a/internal/server/server.go
+++ b/internal/server/server.go
@@ -64,7 +64,7 @@ func New(lc fx.Lifecycle, params ServerParams) (*Server, error) {
lc.Append(fx.Hook{
OnStart: func(ctx context.Context) error {
s.startupTime = time.Now()
- s.Run() // background FIXME
+ go s.Run() // background FIXME
return nil
},
OnStop: func(ctx context.Context) error {
diff --git a/templates/htmlfooter.html b/templates/htmlfooter.html
new file mode 100644
index 0000000..2a60c59
--- /dev/null
+++ b/templates/htmlfooter.html
@@ -0,0 +1,3 @@
+
+
+
diff --git a/templates/htmlheader.html b/templates/htmlheader.html
new file mode 100644
index 0000000..2d3e82d
--- /dev/null
+++ b/templates/htmlheader.html
@@ -0,0 +1,4 @@
+
+
{{ .HTMLTitle }}
+
+
diff --git a/templates/index.html b/templates/index.html
index 426c8ac..b038f44 100644
--- a/templates/index.html
+++ b/templates/index.html
@@ -1,84 +1,29 @@
-
- Changeme: Go HTTP Server Boilerplate
-
-
+ {{ template "htmlheader.html" . }}
-
-
+ {{ template "navbar.html" .}}
Hello, world!
+
This is a boilerplate application for you to use as a base for your
own sites and services.
+
+ Find more info at https://git.eeqj.de/sneak/gohttpserver.
+
+
+ This software is provided by @sneak
+ and is released unconditionally into the public domain.
+
Learn more »
-
-
-
-
+ {{ template "pagefooter.html" . }}
+ {{ template "htmlfooter.html" . }}
diff --git a/templates/login.html b/templates/login.html
index b8e654b..1b356c4 100644
--- a/templates/login.html
+++ b/templates/login.html
@@ -1,10 +1,7 @@
-
-
Changeme: Go HTTP Server Boilerplate
-
-
+ {{ template "htmlheader.html" . }}
+
+
+
+ {{ template "navbar.html" .Navbar}}
+
+
+
+
+
+
+
+ {{ template "pagefooter.html" .PageFooter }}
+
+
diff --git a/templates/templates.go b/templates/templates.go
index 43e93ee..0184d6a 100644
--- a/templates/templates.go
+++ b/templates/templates.go
@@ -2,12 +2,21 @@ package templates
import (
"embed"
- "strings"
+ "text/template"
)
//go:embed *.html
-var Templates embed.FS
+var TemplatesRaw embed.FS
+var TemplatesParsed *template.Template
+func GetParsed() *template.Template {
+ if TemplatesParsed == nil {
+ TemplatesParsed = template.Must(template.ParseFS(TemplatesRaw, "*"))
+ }
+ return TemplatesParsed
+}
+
+/*
func MustString(filename string) string {
bytes, error := Templates.ReadFile(filename)
if error != nil {
@@ -17,3 +26,4 @@ func MustString(filename string) string {
out.Write(bytes)
return out.String()
}
+*/