fix(wbstream): use server URL from token response

This commit is contained in:
zarazaex69
2026-05-15 22:26:57 +03:00
parent 6536249f72
commit 86193f4749
3 changed files with 18 additions and 13 deletions

View File

@@ -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
}

View File

@@ -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)
}
}

View File

@@ -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
}