From 264e2e4e6fe48c03b9d3b329d834ddb578c1deac Mon Sep 17 00:00:00 2001 From: pabloFuente Date: Thu, 16 May 2024 18:30:22 +0200 Subject: [PATCH] PHP: webhook receiver --- application-server/php/composer.json | 6 +++--- application-server/php/composer.lock | 32 ++++++++++++++-------------- application-server/php/index.php | 25 +++++++++++++++++++--- 3 files changed, 41 insertions(+), 22 deletions(-) diff --git a/application-server/php/composer.json b/application-server/php/composer.json index 261c4a30..f2f21f76 100644 --- a/application-server/php/composer.json +++ b/application-server/php/composer.json @@ -3,8 +3,8 @@ "description": "Basic server application built for PHP", "type": "project", "require": { - "vlucas/phpdotenv": "^5.6", - "agence104/livekit-server-sdk": "^1.2" + "vlucas/phpdotenv": "5.6.0", + "agence104/livekit-server-sdk": "1.2.3" }, "authors": [ { @@ -17,6 +17,6 @@ } }, "scripts": { - "start": "php -S localhost:6080" + "start": "php -S 0.0.0.0:6080" } } diff --git a/application-server/php/composer.lock b/application-server/php/composer.lock index 44783935..aaf8d654 100644 --- a/application-server/php/composer.lock +++ b/application-server/php/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "6e73a888ba4267c04997551edd60c885", + "content-hash": "6e44cb3fdf0c966fd5e708c217221e07", "packages": [ { "name": "agence104/livekit-server-sdk", @@ -758,20 +758,20 @@ }, { "name": "psr/http-factory", - "version": "1.0.2", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/php-fig/http-factory.git", - "reference": "e616d01114759c4c489f93b099585439f795fe35" + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-factory/zipball/e616d01114759c4c489f93b099585439f795fe35", - "reference": "e616d01114759c4c489f93b099585439f795fe35", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", "shasum": "" }, "require": { - "php": ">=7.0.0", + "php": ">=7.1", "psr/http-message": "^1.0 || ^2.0" }, "type": "library", @@ -795,7 +795,7 @@ "homepage": "https://www.php-fig.org/" } ], - "description": "Common interfaces for PSR-7 HTTP message factories", + "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", "keywords": [ "factory", "http", @@ -807,9 +807,9 @@ "response" ], "support": { - "source": "https://github.com/php-fig/http-factory/tree/1.0.2" + "source": "https://github.com/php-fig/http-factory" }, - "time": "2023-04-10T20:10:41+00:00" + "time": "2024-04-15T12:06:14+00:00" }, { "name": "psr/http-message", @@ -966,16 +966,16 @@ }, { "name": "symfony/deprecation-contracts", - "version": "v3.4.0", + "version": "v3.5.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf" + "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/7c3aff79d10325257a001fcf92d991f24fc967cf", - "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", + "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", "shasum": "" }, "require": { @@ -984,7 +984,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.4-dev" + "dev-main": "3.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -1013,7 +1013,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.4.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.0" }, "funding": [ { @@ -1029,7 +1029,7 @@ "type": "tidelift" } ], - "time": "2023-05-23T14:45:45+00:00" + "time": "2024-04-18T09:32:20+00:00" }, { "name": "symfony/polyfill-ctype", diff --git a/application-server/php/index.php b/application-server/php/index.php index f7b08b3e..8c807ced 100644 --- a/application-server/php/index.php +++ b/application-server/php/index.php @@ -4,20 +4,20 @@ require __DIR__ . "/vendor/autoload.php"; use Agence104\LiveKit\AccessToken; use Agence104\LiveKit\AccessTokenOptions; use Agence104\LiveKit\VideoGrant; +use Agence104\LiveKit\WebhookReceiver; use Dotenv\Dotenv; Dotenv::createImmutable(__DIR__)->safeLoad(); header("Access-Control-Allow-Origin: *"); header("Content-Type: application/json; charset=UTF-8"); -header("Access-Control-Allow-Methods: OPTIONS,GET,POST,PUT,DELETE"); -header("Access-Control-Max-Age: 3600"); +header("Access-Control-Allow-Methods: OPTIONS,POST"); header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With"); $LIVEKIT_API_KEY = $_ENV["LIVEKIT_API_KEY"] ?? "devkey"; $LIVEKIT_API_SECRET = $_ENV["LIVEKIT_API_SECRET"] ?? "secret"; -if ($_SERVER["REQUEST_METHOD"] === "POST" && $_SERVER["PATH_INFO"] === "/token") { +if (isset($_SERVER['REQUEST_METHOD']) && $_SERVER["REQUEST_METHOD"] === "POST" && $_SERVER["PATH_INFO"] === "/token") { $data = json_decode(file_get_contents("php://input"), true); $roomName = $data["roomName"] ?? null; @@ -43,5 +43,24 @@ if ($_SERVER["REQUEST_METHOD"] === "POST" && $_SERVER["PATH_INFO"] === "/token") exit(); } +$webhookReceiver = (new WebhookReceiver($LIVEKIT_API_KEY, $LIVEKIT_API_SECRET)); + +if (isset($_SERVER['REQUEST_METHOD']) && $_SERVER["REQUEST_METHOD"] === "POST" && $_SERVER["PATH_INFO"] === "/webhook") { + $headers = getallheaders(); + $authHeader = $headers['Authorization']; + $body = file_get_contents("php://input"); + try { + $event = $webhookReceiver->receive($body, $authHeader); + error_log('LiveKit Webhook:'); + error_log(print_r($event->getEvent(), true)); + exit(); + } catch (Exception $e) { + http_response_code(401); + echo "Error validating webhook event"; + echo json_encode($e->getMessage()); + exit(); + } +} + echo json_encode("Unsupported endpoint or method"); exit();