mirror of
https://github.com/hrfee/jfa-go.git
synced 2026-03-18 21:50:33 +01:00
router: fix /accounts collision again, gracefully fail for others
all routes are registered on the root of the host, and the "reverse proxy subfolder". When using Reverse proxy subfolder "/accounts", and the default URL Path for the Admin page of "/" (a.k.a. ""), a route collision occurs that for some reason wasn't dealt with before. This is avoided by checking before registering the second route, and a panic recovery handler has been added telling the user off for using bad subpaths if any others occur.
This commit is contained in:
@@ -212,6 +212,7 @@ const (
|
|||||||
FailedInitProxy = "Failed to initialize proxy @ \"%s\": %v\nStartup will pause for a bit to grab your attention."
|
FailedInitProxy = "Failed to initialize proxy @ \"%s\": %v\nStartup will pause for a bit to grab your attention."
|
||||||
NoURLSuffix = `Warning: Given "jfa_url"/"External jfa-go URL" value does not include "url_base" value!`
|
NoURLSuffix = `Warning: Given "jfa_url"/"External jfa-go URL" value does not include "url_base" value!`
|
||||||
BadURLBase = `Warning: Given reverse proxy subfolder "%s" may conflict with the applications subpaths.`
|
BadURLBase = `Warning: Given reverse proxy subfolder "%s" may conflict with the applications subpaths.`
|
||||||
|
RouteCollision = `Route Collision! Given reverse proxy subfolder "%s" or "URL Paths" settings likely conflict with the applications subpaths. Culprit: %v`
|
||||||
NoExternalHost = `No "External jfa-go URL" provided, set one in Settings > General.`
|
NoExternalHost = `No "External jfa-go URL" provided, set one in Settings > General.`
|
||||||
LoginWontSave = ` Your login won't save until you do.`
|
LoginWontSave = ` Your login won't save until you do.`
|
||||||
SubpathBlockMessage = `URLs: Root subfolder = "%s", Admin = "%s", My Account = "%s", Invite forms = "%s"`
|
SubpathBlockMessage = `URLs: Root subfolder = "%s", Admin = "%s", My Account = "%s", Invite forms = "%s"`
|
||||||
|
|||||||
12
router.go
12
router.go
@@ -114,6 +114,13 @@ func (app *appContext) loadRoutes(router *gin.Engine) {
|
|||||||
|
|
||||||
userPageEnabled := app.config.Section("user_page").Key("enabled").MustBool(true) && app.config.Section("ui").Key("jellyfin_login").MustBool(true)
|
userPageEnabled := app.config.Section("user_page").Key("enabled").MustBool(true) && app.config.Section("ui").Key("jellyfin_login").MustBool(true)
|
||||||
|
|
||||||
|
// Route collision may occur when reverse proxy subfolder is the same as a pseudo-path (e.g. /accounts, /activity...). For non-obvious ones, recover from the panic.
|
||||||
|
defer func() {
|
||||||
|
if r := recover(); r != nil {
|
||||||
|
app.err.Fatalf(lm.RouteCollision, PAGES.Base, r)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
for _, p := range routePrefixes {
|
for _, p := range routePrefixes {
|
||||||
router.GET(p+"/lang/:page", app.GetLanguages)
|
router.GET(p+"/lang/:page", app.GetLanguages)
|
||||||
router.Use(serveTaggedStatic(p+"/", app.webFS))
|
router.Use(serveTaggedStatic(p+"/", app.webFS))
|
||||||
@@ -126,7 +133,10 @@ func (app *appContext) loadRoutes(router *gin.Engine) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
router.GET(p+PAGES.Admin+"/accounts", app.AdminPage)
|
// Handle the obvious collision of /accounts
|
||||||
|
if p != "" || PAGES.Admin != "" {
|
||||||
|
router.GET(p+PAGES.Admin+"/accounts", app.AdminPage)
|
||||||
|
}
|
||||||
router.GET(p+PAGES.Admin+"/settings", app.AdminPage)
|
router.GET(p+PAGES.Admin+"/settings", app.AdminPage)
|
||||||
router.GET(p+PAGES.Admin+"/activity", app.AdminPage)
|
router.GET(p+PAGES.Admin+"/activity", app.AdminPage)
|
||||||
router.GET(p+PAGES.Admin+"/accounts/user/:userID", app.AdminPage)
|
router.GET(p+PAGES.Admin+"/accounts/user/:userID", app.AdminPage)
|
||||||
|
|||||||
Reference in New Issue
Block a user