Skip to content

Commit bd81ef7

Browse files
committed
Send whep-connect events via WebHook
Was lost during refactor
1 parent 7293095 commit bd81ef7

2 files changed

Lines changed: 75 additions & 0 deletions

File tree

internal/server/handlers/whep.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,12 @@ import (
66
"log"
77
"mime"
88
"net/http"
9+
"os"
910
"strings"
1011

12+
"github.com/glimesh/broadcast-box/internal/environment"
1113
"github.com/glimesh/broadcast-box/internal/server/helpers"
14+
"github.com/glimesh/broadcast-box/internal/server/webhook"
1215
"github.com/glimesh/broadcast-box/internal/webrtc"
1316
"github.com/glimesh/broadcast-box/internal/webrtc/utils"
1417
)
@@ -56,6 +59,14 @@ func WhepHandler(responseWriter http.ResponseWriter, request *http.Request) {
5659
return
5760
}
5861

62+
if webhookUrl := os.Getenv(environment.WEBHOOK_URL); webhookUrl != "" {
63+
token, err = webhook.CallWebhook(webhookUrl, webhook.WhepConnect, token, request)
64+
if err != nil {
65+
responseWriter.WriteHeader(http.StatusUnauthorized)
66+
return
67+
}
68+
}
69+
5970
whipAnswer, sessionId, err := webrtc.WHEP(string(offer), token)
6071
if err != nil {
6172
log.Println("API.WHEP: Setup Error", err.Error())
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package handlers
2+
3+
import (
4+
"encoding/json"
5+
"net/http"
6+
"net/http/httptest"
7+
"strings"
8+
"testing"
9+
10+
"github.com/glimesh/broadcast-box/internal/environment"
11+
)
12+
13+
type whepWebhookPayload struct {
14+
Action string `json:"action"`
15+
BearerToken string `json:"bearerToken"`
16+
QueryParams map[string]string `json:"queryParams"`
17+
}
18+
19+
func TestWhepHandlerCallsWebhook(t *testing.T) {
20+
payloads := make(chan whepWebhookPayload, 1)
21+
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
22+
defer r.Body.Close()
23+
24+
var payload whepWebhookPayload
25+
if err := json.NewDecoder(r.Body).Decode(&payload); err != nil {
26+
t.Fatalf("failed to decode webhook payload: %v", err)
27+
}
28+
29+
payloads <- payload
30+
w.WriteHeader(http.StatusUnauthorized)
31+
}))
32+
defer server.Close()
33+
34+
t.Setenv(environment.WEBHOOK_URL, server.URL)
35+
36+
req := httptest.NewRequest(http.MethodPost, "/api/whep?viewer=1", strings.NewReader("v=0"))
37+
req.Header.Set("Authorization", "Bearer test_stream_key")
38+
req.Header.Set("User-Agent", "whep-handler-test")
39+
req.RemoteAddr = "203.0.113.10:1234"
40+
41+
resp := httptest.NewRecorder()
42+
WhepHandler(resp, req)
43+
44+
if resp.Code != http.StatusUnauthorized {
45+
t.Fatalf("expected status %d, got %d", http.StatusUnauthorized, resp.Code)
46+
}
47+
48+
select {
49+
case payload := <-payloads:
50+
if payload.Action != "whep-connect" {
51+
t.Fatalf("expected action %q, got %q", "whep-connect", payload.Action)
52+
}
53+
54+
if payload.BearerToken != "test_stream_key" {
55+
t.Fatalf("expected bearer token %q, got %q", "test_stream_key", payload.BearerToken)
56+
}
57+
58+
if payload.QueryParams["viewer"] != "1" {
59+
t.Fatalf("expected query param %q, got %q", "1", payload.QueryParams["viewer"])
60+
}
61+
default:
62+
t.Fatal("expected webhook to be called")
63+
}
64+
}

0 commit comments

Comments
 (0)