4 changed files with 135 additions and 12 deletions
@ -1,18 +1,54 @@ |
|||||
package web |
package web |
||||
|
|
||||
import ( |
import ( |
||||
root "marmic/servicetrade-toolbox" |
"bytes" |
||||
|
"html/template" |
||||
"net/http" |
"net/http" |
||||
|
|
||||
|
root "marmic/servicetrade-toolbox" |
||||
|
"marmic/servicetrade-toolbox/internal/api" |
||||
|
"marmic/servicetrade-toolbox/internal/middleware" |
||||
|
|
||||
|
"github.com/gorilla/csrf" |
||||
) |
) |
||||
|
|
||||
func GenericHandler(w http.ResponseWriter, r *http.Request) { |
func GenericHandler(w http.ResponseWriter, r *http.Request) { |
||||
|
session, ok := r.Context().Value(middleware.SessionKey).(*api.Session) |
||||
|
if !ok { |
||||
|
http.Error(w, "Unauthorized", http.StatusUnauthorized) |
||||
|
return |
||||
|
} |
||||
|
|
||||
tmpl := root.WebTemplates |
tmpl := root.WebTemplates |
||||
|
var csrfCookie string |
||||
|
if c, err := r.Cookie("XSRF-TOKEN"); err == nil { |
||||
|
csrfCookie = c.Value |
||||
|
} else if c, err := r.Cookie("XSRF-TOKEN-VALUE"); err == nil { |
||||
|
csrfCookie = c.Value |
||||
|
} |
||||
data := map[string]interface{}{ |
data := map[string]interface{}{ |
||||
"Title": "Generic", |
"Title": "Generic", |
||||
|
"Session": session, |
||||
|
"CSRFField": csrf.TemplateField(r), |
||||
|
"CSRFToken": csrf.Token(r), |
||||
|
"CSRFCookie": csrfCookie, |
||||
|
} |
||||
|
|
||||
|
if r.Header.Get("HX-Request") == "true" { |
||||
|
if err := tmpl.ExecuteTemplate(w, "generic_content", data); err != nil { |
||||
|
http.Error(w, "Internal Server Error", http.StatusInternalServerError) |
||||
|
} |
||||
|
return |
||||
|
} |
||||
|
|
||||
|
var contentBuf bytes.Buffer |
||||
|
if err := tmpl.ExecuteTemplate(&contentBuf, "generic_content", data); err != nil { |
||||
|
http.Error(w, "Internal Server Error", http.StatusInternalServerError) |
||||
|
return |
||||
} |
} |
||||
|
data["BodyContent"] = template.HTML(contentBuf.String()) |
||||
|
|
||||
err := tmpl.Execute(w, data) |
if err := tmpl.ExecuteTemplate(w, "layout.html", data); err != nil { |
||||
if err != nil { |
|
||||
http.Error(w, "Internal Server Error", http.StatusInternalServerError) |
http.Error(w, "Internal Server Error", http.StatusInternalServerError) |
||||
} |
} |
||||
} |
} |
||||
|
|||||
Loading…
Reference in new issue