aboutsummaryrefslogtreecommitdiffstats
path: root/routers/web/admin
diff options
context:
space:
mode:
authorwxiaoguang <wxiaoguang@gmail.com>2024-05-10 20:07:01 +0800
committerGitHub <noreply@github.com>2024-05-10 20:07:01 +0800
commit7424f27cf30065a1308aa3ba4d75ea82c0af4af9 (patch)
tree3fd5ab5670c1e13a6c6d1e030b9ab5d75b86f9c9 /routers/web/admin
parentb9396a9b852e4fea0e2c39ef3ef2fdfbc9ea248a (diff)
downloadgitea-7424f27cf30065a1308aa3ba4d75ea82c0af4af9.tar.gz
gitea-7424f27cf30065a1308aa3ba4d75ea82c0af4af9.zip
Check if reverse proxy is correctly configured (#30890)
Follow #27011 Follow #30885 --------- Co-authored-by: silverwind <me@silverwind.io> Co-authored-by: Giteabot <teabot@gitea.io>
Diffstat (limited to 'routers/web/admin')
-rw-r--r--routers/web/admin/admin.go12
-rw-r--r--routers/web/admin/admin_test.go24
2 files changed, 36 insertions, 0 deletions
diff --git a/routers/web/admin/admin.go b/routers/web/admin/admin.go
index 3dd3c9670f..dee1650b5a 100644
--- a/routers/web/admin/admin.go
+++ b/routers/web/admin/admin.go
@@ -9,12 +9,14 @@ import (
"net/http"
"runtime"
"sort"
+ "strings"
"time"
activities_model "code.gitea.io/gitea/models/activities"
"code.gitea.io/gitea/models/db"
"code.gitea.io/gitea/modules/base"
"code.gitea.io/gitea/modules/graceful"
+ "code.gitea.io/gitea/modules/httplib"
"code.gitea.io/gitea/modules/json"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/setting"
@@ -223,6 +225,16 @@ func SelfCheck(ctx *context.Context) {
ctx.HTML(http.StatusOK, tplSelfCheck)
}
+func SelfCheckPost(ctx *context.Context) {
+ var problems []string
+ frontendAppURL := ctx.FormString("location_origin") + setting.AppSubURL + "/"
+ ctxAppURL := httplib.GuessCurrentAppURL(ctx)
+ if !strings.HasPrefix(ctxAppURL, frontendAppURL) {
+ problems = append(problems, ctx.Locale.TrString("admin.self_check.location_origin_mismatch", frontendAppURL, ctxAppURL))
+ }
+ ctx.JSON(http.StatusOK, map[string]any{"problems": problems})
+}
+
func CronTasks(ctx *context.Context) {
ctx.Data["Title"] = ctx.Tr("admin.monitor.cron")
ctx.Data["PageIsAdminMonitorCron"] = true
diff --git a/routers/web/admin/admin_test.go b/routers/web/admin/admin_test.go
index 2b65ab3ea3..782126adf5 100644
--- a/routers/web/admin/admin_test.go
+++ b/routers/web/admin/admin_test.go
@@ -4,8 +4,14 @@
package admin
import (
+ "net/http"
"testing"
+ "code.gitea.io/gitea/modules/json"
+ "code.gitea.io/gitea/modules/setting"
+ "code.gitea.io/gitea/modules/test"
+ "code.gitea.io/gitea/services/contexttest"
+
"github.com/stretchr/testify/assert"
)
@@ -66,3 +72,21 @@ func TestShadowPassword(t *testing.T) {
assert.EqualValues(t, k.Result, shadowPassword(k.Provider, k.CfgItem))
}
}
+
+func TestSelfCheckPost(t *testing.T) {
+ defer test.MockVariableValue(&setting.AppURL, "http://config/sub/")()
+ defer test.MockVariableValue(&setting.AppSubURL, "/sub")()
+
+ ctx, resp := contexttest.MockContext(t, "GET http://host/sub/admin/self_check?location_origin=http://frontend")
+ SelfCheckPost(ctx)
+ assert.EqualValues(t, http.StatusOK, resp.Code)
+
+ data := struct {
+ Problems []string `json:"problems"`
+ }{}
+ err := json.Unmarshal(resp.Body.Bytes(), &data)
+ assert.NoError(t, err)
+ assert.Equal(t, []string{
+ ctx.Locale.TrString("admin.self_check.location_origin_mismatch", "http://frontend/sub/", "http://host/sub/"),
+ }, data.Problems)
+}