Skip to content

Commit 1281596

Browse files
sarg3ntclaude
andcommitted
fix: align route params with handler expectations ({serverID} → {boxID})
API routes in main.go used {serverID} but all handlers extract chi.URLParam(r, "boxID"), causing every API endpoint to return 400 "Server ID required". Changed route definitions back to {boxID} to match the handlers. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1 parent ded4aa2 commit 1281596

1 file changed

Lines changed: 42 additions & 42 deletions

File tree

gearbox/cmd/server/main.go

Lines changed: 42 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -623,8 +623,8 @@ func main() {
623623

624624
// Page routes (non-plugin)
625625
r.Get("/os-updates", h.OSUpdatesPage)
626-
r.Get("/box/{serverID}/frontend/{name}", h.FrontendDetailPage)
627-
r.Get("/box/{serverID}/backend/{name}", h.BackendDetailPage)
626+
r.Get("/box/{boxID}/frontend/{name}", h.FrontendDetailPage)
627+
r.Get("/box/{boxID}/backend/{name}", h.BackendDetailPage)
628628

629629
// Config editor pages
630630
r.Get("/config/haproxy/{boxID}", h.HAProxyConfigPage)
@@ -646,36 +646,36 @@ func main() {
646646
r.Get("/user/permissions", h.APIGetCurrentUserPermissions)
647647
r.Get("/user/pending-count", h.APIPendingUsersCount)
648648
r.Get("/websocket/status", h.APIWebSocketStatusHandler) // WebSocket connection status
649-
r.Get("/{serverID}/stats", h.APIStatsHandler)
650-
r.Get("/{serverID}/metadata", h.APIMetadataHandler)
651-
r.Get("/{serverID}/metrics", h.APISystemMetricsHandler)
652-
r.Get("/{serverID}/logs/{logName}", h.APILogsHandler)
653-
r.Get("/{serverID}/log-sources", h.APILogSourcesHandler) // Get enabled log sources
649+
r.Get("/{boxID}/stats", h.APIStatsHandler)
650+
r.Get("/{boxID}/metadata", h.APIMetadataHandler)
651+
r.Get("/{boxID}/metrics", h.APISystemMetricsHandler)
652+
r.Get("/{boxID}/logs/{logName}", h.APILogsHandler)
653+
r.Get("/{boxID}/log-sources", h.APILogSourcesHandler) // Get enabled log sources
654654
// History API endpoints
655-
r.Get("/{serverID}/history/stats", h.APIStatsHistoryHandler)
656-
r.Get("/{serverID}/history/metrics", h.APISystemMetricsHistoryHandler)
657-
r.Get("/{serverID}/history/backend/{backendName}", h.APIBackendHistoryHandler)
658-
r.Get("/{serverID}/incidents", h.APIIncidentsHandler)
655+
r.Get("/{boxID}/history/stats", h.APIStatsHistoryHandler)
656+
r.Get("/{boxID}/history/metrics", h.APISystemMetricsHistoryHandler)
657+
r.Get("/{boxID}/history/backend/{backendName}", h.APIBackendHistoryHandler)
658+
r.Get("/{boxID}/incidents", h.APIIncidentsHandler)
659659

660660
// Disabled entities management
661-
r.Get("/{serverID}/disabled-entities", h.APIDisabledEntitiesHandler)
662-
r.Post("/{serverID}/disable-entity", h.APIDisableEntityHandler)
663-
r.Post("/{serverID}/enable-entity", h.APIEnableEntityHandler)
661+
r.Get("/{boxID}/disabled-entities", h.APIDisabledEntitiesHandler)
662+
r.Post("/{boxID}/disable-entity", h.APIDisableEntityHandler)
663+
r.Post("/{boxID}/enable-entity", h.APIEnableEntityHandler)
664664

665665
// Certificate management
666-
r.Get("/{serverID}/certificates", h.APICertificatesHandler)
667-
r.Post("/{serverID}/certificates/{domain}/refresh", h.APICertificateRefreshHandler)
668-
r.Get("/{serverID}/certificates/{domain}/download", h.APICertificateDownloadHandler)
666+
r.Get("/{boxID}/certificates", h.APICertificatesHandler)
667+
r.Post("/{boxID}/certificates/{domain}/refresh", h.APICertificateRefreshHandler)
668+
r.Get("/{boxID}/certificates/{domain}/download", h.APICertificateDownloadHandler)
669669

670670
// Services management
671-
r.Get("/{serverID}/services-config", h.APIServicesConfigHandler)
672-
r.Get("/{serverID}/services", h.APIServicesHandler)
673-
r.Post("/{serverID}/service-control", h.APIServiceControlHandler)
671+
r.Get("/{boxID}/services-config", h.APIServicesConfigHandler)
672+
r.Get("/{boxID}/services", h.APIServicesHandler)
673+
r.Post("/{boxID}/service-control", h.APIServiceControlHandler)
674674

675675
// Traffic analysis API
676-
r.Get("/{serverID}/traffic", h.APITrafficAnalysisHandler)
677-
r.Get("/{serverID}/traffic/sources", h.APITrafficSourcesHandler)
678-
r.Get("/{serverID}/traffic/network", h.APITrafficNetworkHandler)
676+
r.Get("/{boxID}/traffic", h.APITrafficAnalysisHandler)
677+
r.Get("/{boxID}/traffic/sources", h.APITrafficSourcesHandler)
678+
r.Get("/{boxID}/traffic/network", h.APITrafficNetworkHandler)
679679

680680
// Integrations API
681681
r.Get("/plugins", h.APIPluginsHandler)
@@ -689,23 +689,23 @@ func main() {
689689
r.Get("/backup/download/{path}", h.APIDownloadBackup)
690690

691691
// Metrics storage management
692-
r.Get("/{serverID}/metrics/storage-stats", h.APIMetricsStorageStatsHandler)
693-
r.Post("/{serverID}/metrics/clear", h.APIClearMetricsDataHandler)
692+
r.Get("/{boxID}/metrics/storage-stats", h.APIMetricsStorageStatsHandler)
693+
r.Post("/{boxID}/metrics/clear", h.APIClearMetricsDataHandler)
694694

695695
// HAProxy config management
696-
r.Get("/{serverID}/haproxy/config", h.APIHAProxyConfigGet)
697-
r.Post("/{serverID}/haproxy/config", h.APIHAProxyConfigSave)
698-
r.Post("/{serverID}/haproxy/config/validate", h.APIHAProxyConfigValidate)
699-
r.Get("/{serverID}/haproxy/config/backups", h.APIHAProxyConfigBackups)
700-
r.Post("/{serverID}/haproxy/config/restore", h.APIHAProxyConfigRestore)
701-
r.Get("/{serverID}/haproxy/config/history", h.APIHAProxyConfigHistory)
696+
r.Get("/{boxID}/haproxy/config", h.APIHAProxyConfigGet)
697+
r.Post("/{boxID}/haproxy/config", h.APIHAProxyConfigSave)
698+
r.Post("/{boxID}/haproxy/config/validate", h.APIHAProxyConfigValidate)
699+
r.Get("/{boxID}/haproxy/config/backups", h.APIHAProxyConfigBackups)
700+
r.Post("/{boxID}/haproxy/config/restore", h.APIHAProxyConfigRestore)
701+
r.Get("/{boxID}/haproxy/config/history", h.APIHAProxyConfigHistory)
702702

703703
// Firewall config management
704-
r.Get("/{serverID}/firewall/config", h.APIFirewallConfigGet)
705-
r.Post("/{serverID}/firewall/config", h.APIFirewallConfigSave)
706-
r.Post("/{serverID}/firewall/config/validate", h.APIFirewallConfigValidate)
707-
r.Get("/{serverID}/firewall/config/backups", h.APIFirewallConfigBackups)
708-
r.Post("/{serverID}/firewall/config/restore", h.APIFirewallConfigRestore)
704+
r.Get("/{boxID}/firewall/config", h.APIFirewallConfigGet)
705+
r.Post("/{boxID}/firewall/config", h.APIFirewallConfigSave)
706+
r.Post("/{boxID}/firewall/config/validate", h.APIFirewallConfigValidate)
707+
r.Get("/{boxID}/firewall/config/backups", h.APIFirewallConfigBackups)
708+
r.Post("/{boxID}/firewall/config/restore", h.APIFirewallConfigRestore)
709709

710710
// User permissions API
711711
r.Route("/users", func(r chi.Router) {
@@ -716,12 +716,12 @@ func main() {
716716

717717
// Alerts API
718718
r.Get("/alerts/count", h.APIGlobalAlertCountHandler) // Global active alert count
719-
r.Get("/{serverID}/alerts", h.APIAlertsHandler)
720-
r.Get("/{serverID}/alerts/summary", h.APIAlertSummaryHandler)
721-
r.Get("/{serverID}/alerts/rules", h.APIAlertRulesHandler)
722-
r.Post("/{serverID}/alerts/rules", h.APICreateAlertRuleHandler)
723-
r.Get("/{serverID}/alerts/retention", h.APIAlertRetentionConfigHandler)
724-
r.Post("/{serverID}/alerts/retention", h.APIUpdateAlertRetentionConfigHandler)
719+
r.Get("/{boxID}/alerts", h.APIAlertsHandler)
720+
r.Get("/{boxID}/alerts/summary", h.APIAlertSummaryHandler)
721+
r.Get("/{boxID}/alerts/rules", h.APIAlertRulesHandler)
722+
r.Post("/{boxID}/alerts/rules", h.APICreateAlertRuleHandler)
723+
r.Get("/{boxID}/alerts/retention", h.APIAlertRetentionConfigHandler)
724+
r.Post("/{boxID}/alerts/retention", h.APIUpdateAlertRetentionConfigHandler)
725725
r.Put("/alerts/rules/{ruleID}", h.APIUpdateAlertRuleHandler)
726726
r.Delete("/alerts/rules/{ruleID}", h.APIDeleteAlertRuleHandler)
727727
r.Post("/alerts/{alertID}/acknowledge", h.APIAcknowledgeAlertWithNoteHandler)

0 commit comments

Comments
 (0)