Obtain streaming url from Mastodon instance info

Apparently we shouldn't make assumptions about the streaming endpoint.
See: https://github.com/mastodon/mastodon/issues/23383#issuecomment-1455054265

Also related: #176
pull/178/head
Alexander Bakker 2023-03-11 12:18:00 +01:00
parent 9faaa4f0dc
commit 92af8a1078
1 changed files with 11 additions and 2 deletions

View File

@ -118,11 +118,11 @@ func (c *Client) streaming(ctx context.Context, p string, params url.Values) (ch
u.Path = path.Join(u.Path, "/api/v1/streaming", p) u.Path = path.Join(u.Path, "/api/v1/streaming", p)
u.RawQuery = params.Encode() u.RawQuery = params.Encode()
req, err := http.NewRequest(http.MethodGet, u.String(), nil) req, err := http.NewRequestWithContext(ctx, http.MethodGet, u.String(), nil)
if err != nil { if err != nil {
return nil, err return nil, err
} }
req = req.WithContext(ctx) req.URL = u
if c.Config.AccessToken != "" { if c.Config.AccessToken != "" {
req.Header.Set("Authorization", "Bearer "+c.Config.AccessToken) req.Header.Set("Authorization", "Bearer "+c.Config.AccessToken)
@ -138,6 +138,15 @@ func (c *Client) streaming(ctx context.Context, p string, params url.Values) (ch
default: default:
} }
if i, err := c.GetInstance(ctx); err == nil {
if su, ok := i.URLs["streaming_api"]; ok {
if u2, err := url.Parse(su); err == nil && u2.Host != "" {
u.Host = u2.Host
req.Host = u.Host
}
}
}
c.doStreaming(req, q) c.doStreaming(req, q)
} }
}() }()