I was keeping this variable to redirect to the requested URL when the user has no permission, is not logged in, and is shown the login form to redirect them back to the original URL. Since each handler removes a part of the path each time, i need to keep the original Path for that. However, i just found out that request.RequestURI already is that original URI requested by the client. No need for an extra variable.
60 lines
1.5 KiB
Go
60 lines
1.5 KiB
Go
/*
|
|
* SPDX-FileCopyrightText: 2023 jordi fita mas <jfita@peritasoft.com>
|
|
* SPDX-License-Identifier: AGPL-3.0-only
|
|
*/
|
|
|
|
package app
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"dev.tandem.ws/tandem/camper/pkg/auth"
|
|
"dev.tandem.ws/tandem/camper/pkg/campsite"
|
|
"dev.tandem.ws/tandem/camper/pkg/database"
|
|
httplib "dev.tandem.ws/tandem/camper/pkg/http"
|
|
"dev.tandem.ws/tandem/camper/pkg/template"
|
|
)
|
|
|
|
type adminHandler struct {
|
|
campsite *campsite.Handler
|
|
}
|
|
|
|
func newAdminHandler() *adminHandler {
|
|
return &adminHandler{
|
|
campsite: campsite.NewHandler(),
|
|
}
|
|
}
|
|
|
|
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 "":
|
|
switch r.Method {
|
|
case http.MethodGet:
|
|
serveDashboard(w, r, user, company)
|
|
default:
|
|
httplib.MethodNotAllowed(w, r, http.MethodGet)
|
|
}
|
|
}
|
|
})
|
|
}
|
|
|
|
func serveDashboard(w http.ResponseWriter, r *http.Request, user *auth.User, company *auth.Company) {
|
|
template.MustRenderAdmin(w, r, user, company, "dashboard.gohtml", nil)
|
|
}
|