@@ -16,6 +16,7 @@ import (
1616 "time"
1717
1818 "github.com/glimesh/broadcast-box/internal/networktest"
19+ "github.com/glimesh/broadcast-box/internal/webhook"
1920 "github.com/glimesh/broadcast-box/internal/webrtc"
2021 "github.com/joho/godotenv"
2122)
4445 }
4546)
4647
47- func getStreamKey (r * http.Request ) (string , error ) {
48+ func getStreamKey (action string , r * http.Request ) (streamKey string , err error ) {
4849 authorizationHeader := r .Header .Get ("Authorization" )
4950 if authorizationHeader == "" {
5051 return "" , errAuthorizationNotSet
@@ -55,13 +56,19 @@ func getStreamKey(r *http.Request) (string, error) {
5556 return "" , errInvalidStreamKey
5657 }
5758
58- bearerToken := strings .TrimPrefix (authorizationHeader , bearerPrefix )
59- if ! streamKeyRegex .MatchString (bearerToken ) {
60- return "" , errInvalidStreamKey
59+ streamKey = strings .TrimPrefix (authorizationHeader , bearerPrefix )
60+ if webhookUrl := os .Getenv ("WEBHOOK_URL" ); webhookUrl != "" {
61+ streamKey , err = webhook .CallWebhook (webhookUrl , action , streamKey , r )
62+ if err != nil {
63+ return "" , err
64+ }
6165 }
6266
63- return bearerToken , nil
67+ if ! streamKeyRegex .MatchString (streamKey ) {
68+ return "" , errInvalidStreamKey
69+ }
6470
71+ return streamKey , nil
6572}
6673
6774func logHTTPError (w http.ResponseWriter , err string , code int ) {
@@ -74,9 +81,10 @@ func whipHandler(res http.ResponseWriter, r *http.Request) {
7481 return
7582 }
7683
77- streamKey , err := getStreamKey (r )
84+ streamKey , err := getStreamKey ("whip-connect" , r )
7885 if err != nil {
7986 logHTTPError (res , err .Error (), http .StatusBadRequest )
87+ return
8088 }
8189
8290 offer , err := io .ReadAll (r .Body )
@@ -104,9 +112,10 @@ func whepHandler(res http.ResponseWriter, req *http.Request) {
104112 return
105113 }
106114
107- streamKey , err := getStreamKey (req )
115+ streamKey , err := getStreamKey ("whep-connect" , req )
108116 if err != nil {
109117 logHTTPError (res , err .Error (), http .StatusBadRequest )
118+ return
110119 }
111120
112121 offer , err := io .ReadAll (req .Body )
@@ -207,25 +216,25 @@ func corsHandler(next func(w http.ResponseWriter, r *http.Request)) http.Handler
207216 }
208217}
209218
210- func main () {
211- loadConfigs := func () error {
212- if os .Getenv ("APP_ENV" ) == "development" {
213- log .Println ("Loading `" + envFileDev + "`" )
214- return godotenv .Load (envFileDev )
215- } else {
216- log .Println ("Loading `" + envFileProd + "`" )
217- if err := godotenv .Load (envFileProd ); err != nil {
218- return err
219- }
220-
221- if _ , err := os .Stat ("./web/build" ); os .IsNotExist (err ) && os .Getenv ("DISABLE_FRONTEND" ) == "" {
222- return errNoBuildDirectoryErr
223- }
219+ func loadConfigs () error {
220+ if os .Getenv ("APP_ENV" ) == "development" {
221+ log .Println ("Loading `" + envFileDev + "`" )
222+ return godotenv .Load (envFileDev )
223+ } else {
224+ log .Println ("Loading `" + envFileProd + "`" )
225+ if err := godotenv .Load (envFileProd ); err != nil {
226+ return err
227+ }
224228
225- return nil
229+ if _ , err := os .Stat ("./web/build" ); os .IsNotExist (err ) && os .Getenv ("DISABLE_FRONTEND" ) == "" {
230+ return errNoBuildDirectoryErr
226231 }
232+
233+ return nil
227234 }
235+ }
228236
237+ func main () {
229238 if err := loadConfigs (); err != nil {
230239 log .Println ("Failed to find config in CWD, changing CWD to executable path" )
231240
0 commit comments