diff --git a/app/Server/Http/Controllers/ControlMessageController.php b/app/Server/Http/Controllers/ControlMessageController.php index e3becba..488ce8c 100644 --- a/app/Server/Http/Controllers/ControlMessageController.php +++ b/app/Server/Http/Controllers/ControlMessageController.php @@ -12,6 +12,7 @@ use App\Server\Exceptions\NoFreePortAvailable; use Illuminate\Support\Arr; use Ratchet\ConnectionInterface; use Ratchet\WebSocket\MessageComponentInterface; +use React\EventLoop\LoopInterface; use React\Promise\Deferred; use React\Promise\PromiseInterface; use function React\Promise\reject; @@ -150,6 +151,24 @@ class ControlMessageController implements MessageComponentInterface }); } + protected function resolveConnectionMessage($connectionInfo, $user) { + $deferred = new Deferred(); + + $connectionMessageResolver = config('expose.admin.messages.resolve_connection_message')($connectionInfo, $user); + + if ($connectionMessageResolver instanceof PromiseInterface) { + $connectionMessageResolver->then(function ($connectionMessage) use ($connectionInfo, $deferred) { + $connectionInfo->message = $connectionMessage; + $deferred->resolve($connectionInfo); + }); + } else { + $connectionInfo->message = $connectionMessageResolver; + return \React\Promise\resolve($connectionInfo); + } + + return $deferred->promise(); + } + protected function handleHttpConnection(ConnectionInterface $connection, $data, $user = null) { $this->hasValidDomain($connection, $data->server_host, $user) @@ -167,10 +186,13 @@ class ControlMessageController implements MessageComponentInterface $this->connectionManager->limitConnectionLength($connectionInfo, config('expose.admin.maximum_connection_length')); + return $this->resolveConnectionMessage($connectionInfo, $user); + }) + ->then(function ($connectionInfo) use ($data, $connection, $user) { $connection->send(json_encode([ 'event' => 'authenticated', 'data' => [ - 'message' => config('expose.admin.messages.resolve_connection_message')($connectionInfo, $user), + 'message' => $connectionInfo->message, 'subdomain' => $connectionInfo->subdomain, 'server_host' => $connectionInfo->serverHost, 'user' => $user, diff --git a/app/Server/Support/RetrieveWelcomeMessageFromApi.php b/app/Server/Support/RetrieveWelcomeMessageFromApi.php new file mode 100644 index 0000000..dc8f6fe --- /dev/null +++ b/app/Server/Support/RetrieveWelcomeMessageFromApi.php @@ -0,0 +1,38 @@ +browser = $browser; + + $this->url = config('expose.admin.welcome_message_api_url'); + } + + public function forUser($user) + { + return $this->browser + ->get($this->url . '?' . http_build_query($user), [ + 'Accept' => 'application/json', + ]) + ->then(function (ResponseInterface $response) { + $result = json_decode($response->getBody()); + + return $result->message ?? ''; + }, function (Exception $e) { + return ''; + }); + } +}