From 86193f4749e7f0b05547bbc9e5483dc7d4a6dbb0 Mon Sep 17 00:00:00 2001 From: zarazaex69 Date: Fri, 15 May 2026 22:26:57 +0300 Subject: [PATCH] fix(wbstream): use server URL from token response --- internal/auth/wbstream/api.go | 14 +++++++------- internal/auth/wbstream/api_test.go | 6 +++--- internal/auth/wbstream/wbstream.go | 11 ++++++++--- 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/internal/auth/wbstream/api.go b/internal/auth/wbstream/api.go index daaed73..4fc277b 100644 --- a/internal/auth/wbstream/api.go +++ b/internal/auth/wbstream/api.go @@ -16,7 +16,7 @@ import ( "github.com/openlibrecommunity/olcrtc/internal/protect" ) -const wsURL = "wss://rtc-el-01.wb.ru" +const defaultWSURL = "wss://rtc-el-02.wb.ru" var apiBase = "https://stream.wb.ru" //nolint:gochecknoglobals // package-level state intentional @@ -157,11 +157,11 @@ func joinRoom(ctx context.Context, accessToken, roomID string) error { return nil } -func getToken(ctx context.Context, accessToken, roomID, displayName string) (string, error) { +func getToken(ctx context.Context, accessToken, roomID, displayName string) (tokenResponse, error) { u := fmt.Sprintf("%s/api-room-manager/v2/room/%s/connection-details", apiBase, roomID) req, err := http.NewRequestWithContext(ctx, http.MethodGet, u, nil) if err != nil { - return "", fmt.Errorf("create request: %w", err) + return tokenResponse{}, fmt.Errorf("create request: %w", err) } q := req.URL.Query() @@ -175,18 +175,18 @@ func getToken(ctx context.Context, accessToken, roomID, displayName string) (str client := protect.NewHTTPClient() resp, err := client.Do(req) if err != nil { - return "", fmt.Errorf("do request: %w", err) + return tokenResponse{}, fmt.Errorf("do request: %w", err) } defer func() { _ = resp.Body.Close() }() if resp.StatusCode != http.StatusOK { b, _ := io.ReadAll(resp.Body) - return "", fmt.Errorf("%w: %d %s", errGetToken, resp.StatusCode, b) + return tokenResponse{}, fmt.Errorf("%w: %d %s", errGetToken, resp.StatusCode, b) } var res tokenResponse if err := json.NewDecoder(resp.Body).Decode(&res); err != nil { - return "", fmt.Errorf("decode response: %w", err) + return tokenResponse{}, fmt.Errorf("decode response: %w", err) } - return res.RoomToken, nil + return res, nil } diff --git a/internal/auth/wbstream/api_test.go b/internal/auth/wbstream/api_test.go index b0b7c1f..2b06f88 100644 --- a/internal/auth/wbstream/api_test.go +++ b/internal/auth/wbstream/api_test.go @@ -73,12 +73,12 @@ func TestWBStreamAPIHappyPath(t *testing.T) { if err := joinRoom(context.Background(), access, room); err != nil { t.Fatalf("joinRoom() error = %v", err) } - token, err := getToken(context.Background(), access, room, testPeerName) + tok, err := getToken(context.Background(), access, room, testPeerName) if err != nil { t.Fatalf("getToken() error = %v", err) } - if token != testToken { - t.Fatalf("getToken() = %q", token) + if tok.RoomToken != testToken { + t.Fatalf("getToken() = %q", tok.RoomToken) } } diff --git a/internal/auth/wbstream/wbstream.go b/internal/auth/wbstream/wbstream.go index 5637e38..f27f89f 100644 --- a/internal/auth/wbstream/wbstream.go +++ b/internal/auth/wbstream/wbstream.go @@ -38,14 +38,19 @@ func (Provider) Issue(ctx context.Context, cfg auth.Config) (auth.Credentials, e return auth.Credentials{}, fmt.Errorf("join room: %w", err) } - token, err := getToken(ctx, accessToken, roomID, cfg.Name) + tok, err := getToken(ctx, accessToken, roomID, cfg.Name) if err != nil { return auth.Credentials{}, fmt.Errorf("get token: %w", err) } + url := tok.ServerURL + if url == "" { + url = defaultWSURL + } + return auth.Credentials{ - URL: wsURL, - Token: token, + URL: url, + Token: tok.RoomToken, Extra: map[string]string{"roomID": roomID}, }, nil }