internal/outpost/ak: fix ws URL on outpost restart (#21041)

This commit is contained in:
Marc 'risson' Schmitt
2026-03-20 14:11:38 +00:00
committed by GitHub
parent 676189f640
commit e3ddc0422a
2 changed files with 7 additions and 11 deletions
+3 -1
View File
@@ -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()
}
+4 -10
View File
@@ -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