fix: bridge panel admin authorization

This commit is contained in:
kory
2026-10-02 13:36:25 +08:00
parent 556870b594
commit 9fbb2bd80a
3 changed files with 12 additions and 8 deletions
+1 -1
View File
@@ -332,7 +332,7 @@ func (s *Server) clusterDeviceNames() []string {
} }
func (s *Server) Panel(password string) http.Handler { func (s *Server) Panel(password string) http.Handler {
p := panelweb.New(password, s) p := panelweb.New(password, s.AdminToken, s)
go p.Cleanup() go p.Cleanup()
return p.Handler() return p.Handler()
} }
+6 -2
View File
@@ -25,13 +25,14 @@ type Runner interface {
type Panel struct { type Panel struct {
Password string Password string
AdminToken string
Runner Runner Runner Runner
mu sync.RWMutex mu sync.RWMutex
sessions map[string]time.Time sessions map[string]time.Time
} }
func New(password string, runner Runner) *Panel { func New(password, adminToken string, runner Runner) *Panel {
return &Panel{Password: password, Runner: runner, sessions: make(map[string]time.Time)} return &Panel{Password: password, AdminToken: adminToken, Runner: runner, sessions: make(map[string]time.Time)}
} }
func (p *Panel) Handler() http.Handler { func (p *Panel) Handler() http.Handler {
@@ -110,6 +111,9 @@ func (p *Panel) securitySettings(w http.ResponseWriter, r *http.Request) {
http.Error(w, "security API unavailable", 501) http.Error(w, "security API unavailable", 501)
} }
func (p *Panel) updateSecuritySettings(w http.ResponseWriter, r *http.Request) { func (p *Panel) updateSecuritySettings(w http.ResponseWriter, r *http.Request) {
if p.AdminToken != "" {
r.Header.Set("X-Admin-Token", p.AdminToken)
}
if v, ok := p.Runner.(securityPanelRunner); ok { if v, ok := p.Runner.(securityPanelRunner); ok {
v.UpdateSecuritySettingsJSON(w, r) v.UpdateSecuritySettingsJSON(w, r)
return return
+1 -1
View File
@@ -16,7 +16,7 @@ func (testRunner) RotateAPIKey(w http.ResponseWriter, r *http.Request) {}
func (testRunner) DeleteDevice(w http.ResponseWriter, r *http.Request) {} func (testRunner) DeleteDevice(w http.ResponseWriter, r *http.Request) {}
func TestStaticCSSContentType(t *testing.T) { func TestStaticCSSContentType(t *testing.T) {
p := New("test-password", testRunner{}) p := New("test-password", "admin", testRunner{})
req := httptest.NewRequest("GET", "/static/app.css", nil) req := httptest.NewRequest("GET", "/static/app.css", nil)
rec := httptest.NewRecorder() rec := httptest.NewRecorder()