aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlexander Kavon <hawk@alexkavon.com>2023-12-01 00:45:31 -0500
committerAlexander Kavon <hawk@alexkavon.com>2023-12-01 00:45:31 -0500
commitbc47e526e962c1c5bce850de312c6e5fbaf16458 (patch)
treec3a832edf869e75e3fd87494939a34a846778431 /src
parent17af6e1a5017285b680a7d0a1dace1e1a1612ab9 (diff)
settled on map[string]interface{} for passing data to view, automatically append session struct, fixed nil session checks, updated templates to use map variable names
Diffstat (limited to 'src')
-rw-r--r--src/server/ui.go19
-rw-r--r--src/user/routes.go14
2 files changed, 20 insertions, 13 deletions
diff --git a/src/server/ui.go b/src/server/ui.go
index 7d59168..baea769 100644
--- a/src/server/ui.go
+++ b/src/server/ui.go
@@ -8,6 +8,7 @@ import (
"strings"
"gitlab.com/alexkavon/newsstand/src/conf"
+ "gitlab.com/alexkavon/newsstand/src/sessions"
)
type Ui struct {
@@ -47,7 +48,7 @@ func (ui *Ui) CompilePages(uipath string) {
}
}
-func (ui *Ui) Render(w http.ResponseWriter, pageName string, data interface{}) {
+func (ui *Ui) Render(w http.ResponseWriter, r *http.Request, pageName string, data map[string]any) {
templateName := "base"
// if the pageName has more than 1 `/` then it specifies the name of a template to target
slashCount := strings.Count(pageName, "/")
@@ -55,14 +56,20 @@ func (ui *Ui) Render(w http.ResponseWriter, pageName string, data interface{}) {
splitName := strings.Split(pageName, "/")
templateName = splitName[0]
}
-
- ui.RenderTemplate(w, pageName, templateName, data)
+ ui.RenderTemplate(w, r, pageName, templateName, data)
}
-func (ui *Ui) RenderTemplate(w http.ResponseWriter, pageName, templateName string, data interface{}) {
+func (ui *Ui) RenderTemplate(w http.ResponseWriter, r *http.Request, pageName, templateName string, data map[string]any) {
+ d := map[string]any{}
+ for k, v := range data {
+ d[k] = v
+ }
+ if session := r.Context().Value(sessions.SessionCtxKey("session")); session != nil {
+ d["session"] = session.(*sessions.Session)
+ }
p := ui.pages[pageName]
- err := p.ExecuteTemplate(w, templateName, data)
+ err := p.ExecuteTemplate(w, templateName, d)
if err != nil {
- log.Fatal(err)
+ log.Println(err)
}
}
diff --git a/src/user/routes.go b/src/user/routes.go
index 3bcab06..d8c8d43 100644
--- a/src/user/routes.go
+++ b/src/user/routes.go
@@ -56,7 +56,7 @@ var Routes = server.Routes{
func Create(s *server.Server) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
- s.Ui.Render(w, "user/create", nil)
+ s.Ui.Render(w, r, "user/create", nil)
}
}
@@ -98,7 +98,7 @@ func Store(s *server.Server) http.HandlerFunc {
func LoginForm(s *server.Server) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
- s.Ui.Render(w, "user/login", nil)
+ s.Ui.Render(w, r, "user/login", nil)
}
}
@@ -113,16 +113,16 @@ func Login(s *server.Server) http.HandlerFunc {
func Logout(s *server.Server) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
- session := r.Context().Value("session").(*sessions.Session)
- session.Destroy(w)
+ if session := r.Context().Value(sessions.SessionCtxKey("session")); session != nil {
+ session.(*sessions.Session).Destroy(w)
+ }
http.Redirect(w, r, "/u/auth", http.StatusSeeOther)
}
}
func Show(s *server.Server) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
- session := r.Context().Value(sessions.SessionCtxKey("session")).(*sessions.Session)
- username := session.Get("username").(string)
- s.Ui.Render(w, "user/me", &struct{ Message, Username string }{"Congrats on getting this far!", username})
+ pageData := map[string]any{"message": "Congrats on getting this far!"}
+ s.Ui.Render(w, r, "user/me", pageData)
}
}