From c49475c25f3be2f1ea8e9f32674e9e9bbd2bb361 Mon Sep 17 00:00:00 2001 From: juancarmore Date: Mon, 1 Jul 2024 10:57:14 +0200 Subject: [PATCH 1/2] Disable join button during room joining in javascript and electron tutorials This improvement ensures that user cannot click the join button multiple times while joining process is in progress, causing unexpected behaviors --- application-client/openvidu-electron/src/app.js | 8 ++++++++ application-client/openvidu-electron/src/index.html | 2 +- application-client/openvidu-js/src/app.js | 8 ++++++++ application-client/openvidu-js/src/index.html | 2 +- 4 files changed, 18 insertions(+), 2 deletions(-) diff --git a/application-client/openvidu-electron/src/app.js b/application-client/openvidu-electron/src/app.js index 88d5378b..8ae5e89c 100644 --- a/application-client/openvidu-electron/src/app.js +++ b/application-client/openvidu-electron/src/app.js @@ -7,6 +7,10 @@ const LIVEKIT_URL = "ws://localhost:7880/"; var room; async function joinRoom() { + // Disable 'Join' button + document.getElementById("join-button").disabled = true; + document.getElementById("join-button").innerText = "Joining..."; + // Initialize a new Room object room = new Room(); @@ -77,6 +81,10 @@ async function leaveRoom() { // Back to 'Join room' page document.getElementById("join").hidden = false; document.getElementById("room").hidden = true; + + // Enable 'Join' button + document.getElementById("join-button").disabled = false; + document.getElementById("join-button").innerText = "Join!"; } window.onbeforeunload = () => { diff --git a/application-client/openvidu-electron/src/index.html b/application-client/openvidu-electron/src/index.html index 71b634f1..52a2e996 100644 --- a/application-client/openvidu-electron/src/index.html +++ b/application-client/openvidu-electron/src/index.html @@ -65,7 +65,7 @@ - + diff --git a/application-client/openvidu-js/src/app.js b/application-client/openvidu-js/src/app.js index 5bd75c34..36a8cff8 100644 --- a/application-client/openvidu-js/src/app.js +++ b/application-client/openvidu-js/src/app.js @@ -28,6 +28,10 @@ function configureUrls() { } async function joinRoom() { + // Disable 'Join' button + document.getElementById("join-button").disabled = true; + document.getElementById("join-button").innerText = "Joining..."; + // Initialize a new Room object room = new LivekitClient.Room(); @@ -98,6 +102,10 @@ async function leaveRoom() { // Back to 'Join room' page document.getElementById("join").hidden = false; document.getElementById("room").hidden = true; + + // Enable 'Join' button + document.getElementById("join-button").disabled = false; + document.getElementById("join-button").innerText = "Join!"; } window.onbeforeunload = () => { diff --git a/application-client/openvidu-js/src/index.html b/application-client/openvidu-js/src/index.html index 6e3fdac0..58f367bf 100644 --- a/application-client/openvidu-js/src/index.html +++ b/application-client/openvidu-js/src/index.html @@ -67,7 +67,7 @@ - + From b263c0a0b3c3e5466050b0add047bc17fa787b43 Mon Sep 17 00:00:00 2001 From: juancarmore Date: Mon, 8 Jul 2024 14:30:38 +0200 Subject: [PATCH 2/2] Update webhook endpoint in application servers --- application-server/dotnet/Program.cs | 2 +- application-server/go/main.go | 2 +- .../java/src/main/java/io/openvidu/basic/java/Controller.java | 2 +- application-server/node/index.js | 2 +- application-server/php/index.php | 2 +- application-server/python/app.py | 2 +- application-server/ruby/app.rb | 2 +- application-server/rust/src/main.rs | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/application-server/dotnet/Program.cs b/application-server/dotnet/Program.cs index 5471ca8c..8d17a424 100644 --- a/application-server/dotnet/Program.cs +++ b/application-server/dotnet/Program.cs @@ -53,7 +53,7 @@ app.MapPost("/token", async (HttpRequest request) => } }); -app.MapPost("/webhook", async (HttpRequest request) => +app.MapPost("/livekit/webhook", async (HttpRequest request) => { var body = new StreamReader(request.Body); string postData = await body.ReadToEndAsync(); diff --git a/application-server/go/main.go b/application-server/go/main.go index 1963ecdf..c7fa2af0 100644 --- a/application-server/go/main.go +++ b/application-server/go/main.go @@ -72,6 +72,6 @@ func main() { router := gin.Default() router.Use(cors.Default()) router.POST("/token", createToken) - router.POST("/webhook", receiveWebhook) + router.POST("/livekit/webhook", receiveWebhook) router.Run(":" + SERVER_PORT) } diff --git a/application-server/java/src/main/java/io/openvidu/basic/java/Controller.java b/application-server/java/src/main/java/io/openvidu/basic/java/Controller.java index 26455fe3..4fc1fbbe 100644 --- a/application-server/java/src/main/java/io/openvidu/basic/java/Controller.java +++ b/application-server/java/src/main/java/io/openvidu/basic/java/Controller.java @@ -47,7 +47,7 @@ public class Controller { return ResponseEntity.ok(Map.of("token", token.toJwt())); } - @PostMapping(value = "/webhook", consumes = "application/webhook+json") + @PostMapping(value = "/livekit/webhook", consumes = "application/webhook+json") public ResponseEntity receiveWebhook(@RequestHeader("Authorization") String authHeader, @RequestBody String body) { WebhookReceiver webhookReceiver = new WebhookReceiver(LIVEKIT_API_KEY, LIVEKIT_API_SECRET); try { diff --git a/application-server/node/index.js b/application-server/node/index.js index b99dd1e5..5be5964a 100644 --- a/application-server/node/index.js +++ b/application-server/node/index.js @@ -35,7 +35,7 @@ const webhookReceiver = new WebhookReceiver( LIVEKIT_API_SECRET ); -app.post("/webhook", async (req, res) => { +app.post("/livekit/webhook", async (req, res) => { try { const event = await webhookReceiver.receive( req.body, diff --git a/application-server/php/index.php b/application-server/php/index.php index 5d1eebfc..c5cd2397 100644 --- a/application-server/php/index.php +++ b/application-server/php/index.php @@ -44,7 +44,7 @@ if (isset($_SERVER["REQUEST_METHOD"]) && $_SERVER["REQUEST_METHOD"] === "POST" & $webhookReceiver = (new WebhookReceiver($LIVEKIT_API_KEY, $LIVEKIT_API_SECRET)); -if (isset($_SERVER["REQUEST_METHOD"]) && $_SERVER["REQUEST_METHOD"] === "POST" && $_SERVER["PATH_INFO"] === "/webhook") { +if (isset($_SERVER["REQUEST_METHOD"]) && $_SERVER["REQUEST_METHOD"] === "POST" && $_SERVER["PATH_INFO"] === "/livekit/webhook") { $headers = getallheaders(); $authHeader = $headers["Authorization"]; $body = file_get_contents("php://input"); diff --git a/application-server/python/app.py b/application-server/python/app.py index 76b7d668..35abe6e0 100644 --- a/application-server/python/app.py +++ b/application-server/python/app.py @@ -35,7 +35,7 @@ token_verifier = TokenVerifier(LIVEKIT_API_KEY, LIVEKIT_API_SECRET) webhook_receiver = WebhookReceiver(token_verifier) -@app.post("/webhook") +@app.post("/livekit/webhook") def receive_webhook(): auth_token = request.headers.get("Authorization") diff --git a/application-server/ruby/app.rb b/application-server/ruby/app.rb index 3bbfc6dd..34818389 100644 --- a/application-server/ruby/app.rb +++ b/application-server/ruby/app.rb @@ -33,7 +33,7 @@ post '/token' do return json({token: token.to_jwt}) end -post '/webhook' do +post '/livekit/webhook' do auth_header = request.env['HTTP_AUTHORIZATION'] token_verifier = LiveKit::TokenVerifier.new(api_key: LIVEKIT_API_KEY, api_secret: LIVEKIT_API_SECRET) begin diff --git a/application-server/rust/src/main.rs b/application-server/rust/src/main.rs index 8b7da175..59a5f09a 100644 --- a/application-server/rust/src/main.rs +++ b/application-server/rust/src/main.rs @@ -26,7 +26,7 @@ async fn main() { let app = Router::new() .route("/token", post(create_token)) - .route("/webhook", post(receive_webhook)) + .route("/livekit/webhook", post(receive_webhook)) .layer(cors); let listener = TcpListener::bind("0.0.0.0:".to_string() + &server_port)