diff --git a/dbmodels/access_tokens.go b/dbmodels/access_tokens.go index 215abd5..7fa54dd 100644 --- a/dbmodels/access_tokens.go +++ b/dbmodels/access_tokens.go @@ -5,6 +5,16 @@ import ( "github.com/pocketbase/pocketbase/tools/types" ) +type FixedAccessToken struct { + Token string `json:"token"` + User string `json:"user"` + Created string `json:"created"` + Updated string `json:"updated"` + Expires types.DateTime `json:"expires"` + URL string `json:"url"` + Status string `json:"status"` +} + var _ core.RecordProxy = (*AccessToken)(nil) type AccessToken struct { @@ -68,3 +78,15 @@ func (u *AccessToken) Status() string { func (u *AccessToken) SetStatus(status string) { u.Set(ACCESS_TOKENS_STATUS_FIELD, status) } + +func (u *AccessToken) Fixed() *FixedAccessToken { + return &FixedAccessToken{ + Token: u.Token(), + User: u.User(), + Created: u.Created(), + Updated: u.Updated(), + Expires: u.Expires(), + URL: u.URL(), + Status: u.Status(), + } +} diff --git a/middleware/authenticated.go b/middleware/authenticated.go index 40453ea..e0ff997 100644 --- a/middleware/authenticated.go +++ b/middleware/authenticated.go @@ -88,10 +88,10 @@ func Authenticated(app core.App) func(*core.RequestEvent) error { } u := dbmodels.NewUser(r) - e.Set("access_token_user", u) + e.Set("access_token_user", u.Fixed()) } - e.Set("access_token", a) + e.Set("access_token", a.Fixed()) } return e.Next() diff --git a/pages/suche.go b/pages/suche.go index 3d7395a..114cce8 100644 --- a/pages/suche.go +++ b/pages/suche.go @@ -63,7 +63,7 @@ func (p *SuchePage) Setup(router *router.Router[*core.RequestEvent], app core.Ap return p.SearchBeitraegeRequest(app, engine, e, *allparas) } - data := make(map[string]interface{}) + data := make(map[string]any) data["parameters"] = allparas data["types"] = dbmodels.MUSENALM_TYPE_VALUES return engine.Response200(e, p.Template+paras.Collection+"/", data, p.Layout) @@ -77,7 +77,7 @@ func (p *SuchePage) SimpleSearchReihenRequest(app core.App, engine *templating.E } func (p *SuchePage) SearchBeitraegeRequest(app core.App, engine *templating.Engine, e *core.RequestEvent, params SearchParameters) error { - data := make(map[string]interface{}) + data := make(map[string]any) filterparams := NewBeitraegeFilterParameters(e) result, err := NewSearchBeitraege(app, params, filterparams) if err != nil { @@ -92,7 +92,7 @@ func (p *SuchePage) SearchBeitraegeRequest(app core.App, engine *templating.Engi } func (p *SuchePage) SearchBaendeRequest(app core.App, engine *templating.Engine, e *core.RequestEvent, params SearchParameters) error { - data := make(map[string]interface{}) + data := make(map[string]any) result, err := NewSearchBaende(app, params) if err != nil { diff --git a/templating/engine.go b/templating/engine.go index af40482..dac7a66 100644 --- a/templating/engine.go +++ b/templating/engine.go @@ -10,7 +10,6 @@ import ( "strings" "sync" - "github.com/Theodor-Springmann-Stiftung/musenalm/dbmodels" "github.com/Theodor-Springmann-Stiftung/musenalm/helpers/functions" "github.com/pocketbase/pocketbase/core" "golang.org/x/net/websocket" @@ -257,7 +256,8 @@ func (e *Engine) RenderToString(request *core.RequestEvent, ld map[string]any, p ld = make(map[string]any) } - ld["page"] = requestData(request) + r := NewRequest(request) + ld["request"] = r.Data() var builder strings.Builder err := e.Render(&builder, path, ld, layout...) @@ -287,7 +287,8 @@ func (e *Engine) Response404(request *core.RequestEvent, err error, data map[str data["Error"] = err.Error() } - data["page"] = requestData(request) + r := NewRequest(request) + data["request"] = r.Data() err2 := e.Render(&sb, "/errors/404/", data) if err2 != nil { @@ -308,7 +309,8 @@ func (e *Engine) Response500(request *core.RequestEvent, err error, data map[str data["Error"] = err.Error() } - data["page"] = requestData(request) + r := NewRequest(request) + data["request"] = r.Data() err2 := e.Render(&sb, "/errors/500/", data) if err != nil { @@ -323,7 +325,8 @@ func (e *Engine) Response200(request *core.RequestEvent, path string, ld map[str ld = make(map[string]any) } - ld["page"] = requestData(request) + r := NewRequest(request) + ld["request"] = r.Data() var builder strings.Builder err := e.Render(&builder, path, ld, layout...) @@ -341,36 +344,3 @@ func (e *Engine) Response200(request *core.RequestEvent, path string, ld map[str return request.HTML(http.StatusOK, tstring) } - -func requestData(request *core.RequestEvent) map[string]any { - data := make(map[string]any) - data["Path"] = request.Request.URL.Path - data["FullPath"] = GetRequestPathWithQuery(request.Request) - data["Query"] = request.Request.URL.Query() - data["Method"] = request.Request.Method - data["Host"] = request.Request.Host - - if user := request.Get("user"); user != nil { - u, ok := user.(*dbmodels.FixedUser) - if ok { - data["User"] = u - } - } - - if session := request.Get("session"); session != nil { - u, ok := session.(*dbmodels.FixedSession) - if ok { - data["Session"] = u - } - } - - return data -} - -func GetRequestPathWithQuery(r *http.Request) string { - path := r.URL.EscapedPath() - if r.URL.RawQuery != "" { - return path + "?" + r.URL.RawQuery - } - return path -} diff --git a/templating/request.go b/templating/request.go new file mode 100644 index 0000000..7a9bd14 --- /dev/null +++ b/templating/request.go @@ -0,0 +1,60 @@ +package templating + +import ( + "github.com/Theodor-Springmann-Stiftung/musenalm/dbmodels" + "github.com/pocketbase/pocketbase/core" +) + +type Request struct { + *core.RequestEvent +} + +func NewRequest(e *core.RequestEvent) *Request { + return &Request{ + RequestEvent: e, + } +} + +func (r *Request) FullURL() string { + path := r.Request.URL.EscapedPath() + if r.Request.URL.RawQuery != "" { + return path + "?" + r.Request.URL.RawQuery + } + return path +} + +func (r *Request) Data() map[string]any { + data := make(map[string]any) + data["path"] = r.Request.URL.Path + data["query"] = r.Request.URL.RawQuery + data["fullpath"] = r.FullURL() + data["method"] = r.Request.Method + data["user"] = r.User() + data["session"] = r.Session() + data["access_token"] = r.AccessToken() + return data +} + +func (r *Request) User() *dbmodels.FixedUser { + if user := r.Get("user"); user != nil { + u, _ := user.(*dbmodels.FixedUser) + return u + } + return nil +} + +func (r *Request) Session() *dbmodels.FixedSession { + if session := r.Get("session"); session != nil { + s, _ := session.(*dbmodels.FixedSession) + return s + } + return nil +} + +func (r *Request) AccessToken() *dbmodels.FixedAccessToken { + if token := r.Get("access_token"); token != nil { + t, _ := token.(*dbmodels.FixedAccessToken) + return t + } + return nil +} diff --git a/views/layouts/components/_footer.gohtml b/views/layouts/components/_footer.gohtml index 9d38545..286acb0 100644 --- a/views/layouts/components/_footer.gohtml +++ b/views/layouts/components/_footer.gohtml @@ -18,19 +18,19 @@ Code · - {{ if .page.User }} + {{ if .request.user }} - {{ if .page.User.Name }} - {{ .page.User.Name }} + {{ if .request.user.Name }} + {{ .request.user.Name }} {{ else }} - {{ .page.User.Email }} + {{ .request.user.Email }} {{ end }} | - Logout + Logout {{ else }} - Login + Login {{ end }} diff --git a/views/layouts/components/_menu.gohtml b/views/layouts/components/_menu.gohtml index bad9e73..0da8901 100644 --- a/views/layouts/components/_menu.gohtml +++ b/views/layouts/components/_menu.gohtml @@ -23,27 +23,27 @@ [&>*]:px-2 [&>*]:pt-1 [&>*]:-mb-1.5"> Reihen Personen Suche