support proxy prefix

This commit is contained in:
sentriz
2020-01-27 17:00:23 +00:00
parent 6ad284aa3e
commit 2e85c95018
19 changed files with 401 additions and 361 deletions

View File

@@ -3,6 +3,7 @@ package ctrladmin
import (
"encoding/gob"
"fmt"
"strings"
"html/template"
"log"
"net/http"
@@ -80,6 +81,7 @@ func New(base *ctrlbase.Controller) *Controller {
Funcs(sprig.FuncMap()).
Funcs(template.FuncMap{
"humanDate": humanize.Time,
"path": base.Path,
})
tmplBase = extendFromPaths(tmplBase, prefixPartials)
tmplBase = extendFromPaths(tmplBase, prefixLayouts)
@@ -140,7 +142,11 @@ func (c *Controller) H(h adminHandler) http.Handler {
}
}
if resp.redirect != "" {
http.Redirect(w, r, resp.redirect, http.StatusSeeOther)
to := resp.redirect
if strings.HasPrefix(to, "/") {
to = c.Path(to)
}
http.Redirect(w, r, to, http.StatusSeeOther)
return
}
if resp.err != "" {

View File

@@ -36,7 +36,7 @@ func (c *Controller) ServeHome(r *http.Request) *Response {
r.URL.Scheme,
)
host := firstExisting(
"localhost:7373", // fallback
"localhost:4747", // fallback
r.Header.Get("X-Forwarded-Host"),
r.Host,
)

View File

@@ -28,12 +28,12 @@ func (c *Controller) ServeLoginDo(w http.ResponseWriter, r *http.Request) {
// session and put the row into the request context
session.Values["user"] = user.Name
sessLogSave(session, w, r)
http.Redirect(w, r, "/admin/home", http.StatusSeeOther)
http.Redirect(w, r, c.Path("/admin/home"), http.StatusSeeOther)
}
func (c *Controller) ServeLogout(w http.ResponseWriter, r *http.Request) {
session := r.Context().Value(CtxSession).(*sessions.Session)
session.Options.MaxAge = -1
sessLogSave(session, w, r)
http.Redirect(w, r, "/admin/login", http.StatusSeeOther)
http.Redirect(w, r, c.Path("/admin/login"), http.StatusSeeOther)
}

View File

@@ -25,7 +25,7 @@ func (c *Controller) WithUserSession(next http.Handler) http.Handler {
if !ok {
sessAddFlashW(session, []string{"you are not authenticated"})
sessLogSave(session, w, r)
http.Redirect(w, r, "/admin/login", http.StatusSeeOther)
http.Redirect(w, r, c.Path("/admin/login"), http.StatusSeeOther)
return
}
// take username from sesion and add the user row to the context
@@ -35,7 +35,7 @@ func (c *Controller) WithUserSession(next http.Handler) http.Handler {
// user in the database (maybe the user was deleted)
session.Options.MaxAge = -1
sessLogSave(session, w, r)
http.Redirect(w, r, "/admin/login", http.StatusSeeOther)
http.Redirect(w, r, c.Path("/admin/login"), http.StatusSeeOther)
return
}
withUser := context.WithValue(r.Context(), CtxUser, user)
@@ -51,7 +51,7 @@ func (c *Controller) WithAdminSession(next http.Handler) http.Handler {
if !user.IsAdmin {
sessAddFlashW(session, []string{"you are not an admin"})
sessLogSave(session, w, r)
http.Redirect(w, r, "/admin/login", http.StatusSeeOther)
http.Redirect(w, r, c.Path("/admin/login"), http.StatusSeeOther)
return
}
next.ServeHTTP(w, r)