Added the ability to retrieve welcome messags from APIs

This commit is contained in:
Marcel Pociot
2022-03-04 14:06:13 +01:00
parent 7fadb687cc
commit 4e2eda036a
2 changed files with 61 additions and 1 deletions

View File

@@ -12,6 +12,7 @@ use App\Server\Exceptions\NoFreePortAvailable;
use Illuminate\Support\Arr; use Illuminate\Support\Arr;
use Ratchet\ConnectionInterface; use Ratchet\ConnectionInterface;
use Ratchet\WebSocket\MessageComponentInterface; use Ratchet\WebSocket\MessageComponentInterface;
use React\EventLoop\LoopInterface;
use React\Promise\Deferred; use React\Promise\Deferred;
use React\Promise\PromiseInterface; use React\Promise\PromiseInterface;
use function React\Promise\reject; 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) protected function handleHttpConnection(ConnectionInterface $connection, $data, $user = null)
{ {
$this->hasValidDomain($connection, $data->server_host, $user) $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')); $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([ $connection->send(json_encode([
'event' => 'authenticated', 'event' => 'authenticated',
'data' => [ 'data' => [
'message' => config('expose.admin.messages.resolve_connection_message')($connectionInfo, $user), 'message' => $connectionInfo->message,
'subdomain' => $connectionInfo->subdomain, 'subdomain' => $connectionInfo->subdomain,
'server_host' => $connectionInfo->serverHost, 'server_host' => $connectionInfo->serverHost,
'user' => $user, 'user' => $user,

View File

@@ -0,0 +1,38 @@
<?php
namespace App\Server\Support;
use Exception;
use Psr\Http\Message\ResponseInterface;
use Clue\React\Buzz\Browser;
class RetrieveWelcomeMessageFromApi
{
/** @var Browser */
protected $browser;
/** @var string */
protected $url;
public function __construct(Browser $browser)
{
$this->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 '';
});
}
}