2
0
mirror of https://github.com/acepanel/panel.git synced 2026-02-03 23:27:22 +08:00

feat: remove CleanPath middleware

This commit is contained in:
2025-07-07 15:19:15 +08:00
parent 2181653ff7
commit 4985eb2e1f
3 changed files with 11 additions and 19 deletions

View File

@@ -29,8 +29,6 @@ func Entrance(t *gotext.Locale, conf *koanf.Koanf, session *sessions.Manager) fu
entrance = "/" + entrance
}
routePath := chi.RouteContext(r.Context()).RoutePath
// 情况一设置了绑定域名、IP、UA且请求不符合要求返回错误
host, _, err := net.SplitHostPort(r.Host)
if err != nil {
@@ -80,7 +78,7 @@ func Entrance(t *gotext.Locale, conf *koanf.Koanf, session *sessions.Manager) fu
}
// 情况二:请求路径与入口路径相同或者未设置访问入口,标记通过验证并重定向到登录页面
if (strings.TrimSuffix(routePath, "/") == entrance || entrance == "/") &&
if (strings.TrimSuffix(r.URL.Path, "/") == entrance || entrance == "/") &&
r.Header.Get("Authorization") == "" {
sess.Put("verify_entrance", true)
render := chix.NewRender(w, r)
@@ -90,12 +88,12 @@ func Entrance(t *gotext.Locale, conf *koanf.Koanf, session *sessions.Manager) fu
}
// 情况三通过APIKey+入口路径访问,重写请求路径并跳过验证
if strings.HasPrefix(routePath, entrance) && r.Header.Get("Authorization") != "" {
if strings.HasPrefix(r.URL.Path, entrance) && r.Header.Get("Authorization") != "" {
// 只在设置了入口路径的情况下,才进行重写
if entrance != "/" {
if rctx := chi.RouteContext(r.Context()); rctx != nil {
rctx.RoutePath = strings.TrimPrefix(routePath, entrance)
r.URL.Path = strings.TrimPrefix(routePath, entrance)
rctx.RoutePath = strings.TrimPrefix(rctx.RoutePath, entrance)
r.URL.Path = strings.TrimPrefix(r.URL.Path, entrance)
}
}
next.ServeHTTP(w, r)
@@ -105,7 +103,7 @@ func Entrance(t *gotext.Locale, conf *koanf.Koanf, session *sessions.Manager) fu
// 情况四:非调试模式且未通过验证的请求,返回错误
if !conf.Bool("app.debug") &&
sess.Missing("verify_entrance") &&
routePath != "/robots.txt" {
r.URL.Path != "/robots.txt" {
Abort(w, http.StatusTeapot, t.Get("invalid access entrance"))
return
}

View File

@@ -4,7 +4,6 @@ import (
"net/http"
"strings"
"github.com/go-chi/chi/v5"
"github.com/leonelquinteros/gotext"
"github.com/tnb-labs/panel/internal/biz"
@@ -14,15 +13,13 @@ import (
func MustInstall(t *gotext.Locale, app biz.AppRepo) func(next http.Handler) http.Handler {
return func(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
routePath := chi.RouteContext(r.Context()).RoutePath
var slugs []string
if strings.HasPrefix(routePath, "/api/website") {
if strings.HasPrefix(r.URL.Path, "/api/website") {
slugs = append(slugs, "nginx")
} else if strings.HasPrefix(routePath, "/api/container") {
} else if strings.HasPrefix(r.URL.Path, "/api/container") {
slugs = append(slugs, "podman", "docker")
} else if strings.HasPrefix(routePath, "/api/apps/") {
pathArr := strings.Split(routePath, "/")
} else if strings.HasPrefix(r.URL.Path, "/api/apps/") {
pathArr := strings.Split(r.URL.Path, "/")
if len(pathArr) < 4 {
Abort(w, http.StatusForbidden, t.Get("app not found"))
return

View File

@@ -9,7 +9,6 @@ import (
"slices"
"strings"
"github.com/go-chi/chi/v5"
"github.com/go-rat/sessions"
"github.com/leonelquinteros/gotext"
"github.com/spf13/cast"
@@ -36,10 +35,8 @@ func MustLogin(t *gotext.Locale, session *sessions.Manager, userToken biz.UserTo
return
}
routePath := chi.RouteContext(r.Context()).RoutePath
// 对白名单和非 API 请求放行
if slices.Contains(whiteList, routePath) || !strings.HasPrefix(routePath, "/api") {
if slices.Contains(whiteList, r.URL.Path) || !strings.HasPrefix(r.URL.Path, "/api") {
next.ServeHTTP(w, r)
return
}
@@ -47,7 +44,7 @@ func MustLogin(t *gotext.Locale, session *sessions.Manager, userToken biz.UserTo
userID := uint(0)
if r.Header.Get("Authorization") != "" {
// 禁止访问 ws 相关的接口
if strings.HasPrefix(routePath, "/api/ws") {
if strings.HasPrefix(r.URL.Path, "/api/ws") {
Abort(w, http.StatusForbidden, t.Get("ws not allowed"))
return
}