/* * SPDX-FileCopyrightText: 2023 jordi fita mas * SPDX-License-Identifier: AGPL-3.0-only */ package app import ( "dev.tandem.ws/tandem/camper/pkg/media" "net/http" "dev.tandem.ws/tandem/camper/pkg/auth" "dev.tandem.ws/tandem/camper/pkg/campsite" "dev.tandem.ws/tandem/camper/pkg/company" "dev.tandem.ws/tandem/camper/pkg/database" "dev.tandem.ws/tandem/camper/pkg/home" httplib "dev.tandem.ws/tandem/camper/pkg/http" "dev.tandem.ws/tandem/camper/pkg/locale" "dev.tandem.ws/tandem/camper/pkg/season" "dev.tandem.ws/tandem/camper/pkg/services" "dev.tandem.ws/tandem/camper/pkg/template" ) type adminHandler struct { campsite *campsite.AdminHandler company *company.AdminHandler home *home.AdminHandler media *media.AdminHandler season *season.AdminHandler services *services.AdminHandler } func newAdminHandler(locales locale.Locales, mediaDir string) *adminHandler { return &adminHandler{ campsite: campsite.NewAdminHandler(locales), company: company.NewAdminHandler(), home: home.NewAdminHandler(locales), media: media.NewAdminHandler(mediaDir), season: season.NewAdminHandler(locales), services: services.NewAdminHandler(locales), } } func (h *adminHandler) Handle(user *auth.User, company *auth.Company, conn *database.Conn) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { if !user.LoggedIn { w.WriteHeader(http.StatusUnauthorized) serveLoginForm(w, r, user, company, r.RequestURI) return } if !user.IsEmployee() { http.Error(w, user.Locale.Gettext("Access forbidden"), http.StatusForbidden) return } var head string head, r.URL.Path = httplib.ShiftPath(r.URL.Path) switch head { case "campsites": h.campsite.Handler(user, company, conn).ServeHTTP(w, r) case "company": h.company.Handler(user, company, conn).ServeHTTP(w, r) case "home": h.home.Handler(user, company, conn).ServeHTTP(w, r) case "media": h.media.Handler(user, company, conn).ServeHTTP(w, r) case "seasons": h.season.Handler(user, company, conn).ServeHTTP(w, r) case "services": h.services.Handler(user, company, conn).ServeHTTP(w, r) case "": switch r.Method { case http.MethodGet: serveDashboard(w, r, user, company) default: httplib.MethodNotAllowed(w, r, http.MethodGet) } default: http.NotFound(w, r) } }) } func serveDashboard(w http.ResponseWriter, r *http.Request, user *auth.User, company *auth.Company) { template.MustRenderAdmin(w, r, user, company, "dashboard.gohtml", nil) }