mirror of
https://github.com/openlibrecommunity/olcrtc.git
synced 2026-05-26 07:08:11 +00:00
fix(wbstream): use server URL from token response
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user