From e3ddc0422ab7dc36fa625862982ed52c2d6f3844 Mon Sep 17 00:00:00 2001 From: Marc 'risson' Schmitt Date: Fri, 20 Mar 2026 14:11:38 +0000 Subject: [PATCH] internal/outpost/ak: fix ws URL on outpost restart (#21041) --- internal/outpost/ak/api.go | 4 +++- internal/outpost/ak/api_event.go | 14 ++++---------- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/internal/outpost/ak/api.go b/internal/outpost/ak/api.go index 5af60bc437..1448e10e1d 100644 --- a/internal/outpost/ak/api.go +++ b/internal/outpost/ak/api.go @@ -31,6 +31,7 @@ const ConfigLogLevel = "log_level" // APIController main controller which connects to the authentik api via http and ws type APIController struct { + akURL url.URL Client *api.APIClient Outpost api.Outpost GlobalConfig *api.Config @@ -134,6 +135,7 @@ func NewAPIController(akURL url.URL, token string) *APIController { // doGlobalSetup(outpost, akConfig) ac := &APIController{ + akURL: originalAkURL, Client: apiClient, GlobalConfig: akConfig, @@ -148,7 +150,7 @@ func NewAPIController(akURL url.URL, token string) *APIController { } ac.logger.WithField("embedded", ac.IsEmbedded()).Info("Outpost mode") ac.logger.WithField("offset", ac.reloadOffset.String()).Debug("HA Reload offset") - err = ac.initEvent(originalAkURL, outpost.Pk) + err = ac.initEvent(outpost.Pk, 0) if err != nil { go ac.recentEvents() } diff --git a/internal/outpost/ak/api_event.go b/internal/outpost/ak/api_event.go index 291fefde0a..3bc64664f3 100644 --- a/internal/outpost/ak/api_event.go +++ b/internal/outpost/ak/api_event.go @@ -32,9 +32,11 @@ func (ac *APIController) getWebsocketURL(akURL url.URL, outpostUUID string, quer return wsUrl } -func (ac *APIController) initEvent(akURL url.URL, outpostUUID string) error { +func (ac *APIController) initEvent(outpostUUID string, attempt int) error { + akURL := ac.akURL query := akURL.Query() query.Set("instance_uuid", ac.instanceUUID.String()) + query.Set("attempt", strconv.Itoa(attempt)) authHeader := fmt.Sprintf("Bearer %s", ac.token) @@ -106,18 +108,10 @@ func (ac *APIController) recentEvents() { return } ac.wsIsReconnecting = true - u := url.URL{ - Host: ac.Client.GetConfig().Host, - Scheme: ac.Client.GetConfig().Scheme, - Path: strings.ReplaceAll(ac.Client.GetConfig().Servers[0].URL, "api/v3", ""), - } attempt := 1 _ = retry.Do( func() error { - q := u.Query() - q.Set("attempt", strconv.Itoa(attempt)) - u.RawQuery = q.Encode() - err := ac.initEvent(u, ac.Outpost.Pk) + err := ac.initEvent(ac.Outpost.Pk, attempt) attempt += 1 if err != nil { return err