This commit is contained in:
Marcel Pociot
2020-04-29 22:05:03 +02:00
parent 6cf206e0a2
commit b515a55325
27 changed files with 215 additions and 253 deletions

View File

@@ -2,14 +2,14 @@
namespace App\Client\Http\Controllers;
use App\Http\Controllers\PostController;
use App\Http\Controllers\Controller;
use GuzzleHttp\Psr7\Response;
use Illuminate\Http\Request;
use App\Logger\RequestLogger;
use Ratchet\ConnectionInterface;
use function GuzzleHttp\Psr7\str;
class AttachDataToLogController extends PostController
class AttachDataToLogController extends Controller
{
/** @var RequestLogger */
protected $requestLogger;

View File

@@ -2,14 +2,10 @@
namespace App\Client\Http\Controllers;
use App\Client\Http\HttpClient;
use App\Http\Controllers\Controller;
use App\Http\QueryParameters;
use App\Logger\RequestLogger;
use GuzzleHttp\Psr7\Response;
use Illuminate\Http\Request;
use Ratchet\ConnectionInterface;
use function GuzzleHttp\Psr7\str;
use Psr\Http\Message\RequestInterface;
class ClearLogsController extends Controller
{
@@ -21,18 +17,10 @@ class ClearLogsController extends Controller
$this->requestLogger = $requestLogger;
}
public function onOpen(ConnectionInterface $connection, RequestInterface $request = null)
public function handle(Request $request, ConnectionInterface $httpConnection)
{
$this->requestLogger->clear();
$connection->send(
str(new Response(
200,
['Content-Type' => 'application/json'],
''
))
);
$connection->close();
$httpConnection->send(respond_json([], 200));
}
}

View File

@@ -5,24 +5,18 @@ namespace App\Client\Http\Controllers;
use App\Client\Client;
use App\Http\Controllers\Controller;
use GuzzleHttp\Psr7\Response;
use Illuminate\Http\Request;
use function GuzzleHttp\Psr7\str;
use Psr\Http\Message\RequestInterface;
use Ratchet\ConnectionInterface;
class DashboardController extends Controller
{
public function onOpen(ConnectionInterface $connection, RequestInterface $request = null)
{
$connection->send(
str(new Response(
200,
['Content-Type' => 'text/html'],
$this->getView('client.dashboard', [
'subdomains' => Client::$subdomains,
])
))
);
$connection->close();
public function handle(Request $request, ConnectionInterface $httpConnection)
{
$httpConnection->send(respond_html($this->getView('client.dashboard', [
'subdomains' => Client::$subdomains,
])));
}
}

View File

@@ -5,6 +5,7 @@ namespace App\Client\Http\Controllers;
use App\Http\Controllers\Controller;
use App\Logger\RequestLogger;
use GuzzleHttp\Psr7\Response;
use Illuminate\Http\Request;
use Ratchet\ConnectionInterface;
use function GuzzleHttp\Psr7\str;
use Psr\Http\Message\RequestInterface;
@@ -19,16 +20,8 @@ class LogController extends Controller
$this->requestLogger = $requestLogger;
}
public function onOpen(ConnectionInterface $connection, RequestInterface $request = null)
public function handle(Request $request, ConnectionInterface $httpConnection)
{
$connection->send(
str(new Response(
200,
['Content-Type' => 'application/json'],
json_encode($this->requestLogger->getData(), JSON_INVALID_UTF8_IGNORE)
))
);
$connection->close();
$httpConnection->send(respond_json($this->requestLogger->getData()));
}
}

View File

@@ -6,6 +6,7 @@ use App\Http\Controllers\Controller;
use Exception;
use App\WebSockets\Socket;
use GuzzleHttp\Psr7\Response;
use Illuminate\Http\Request;
use Illuminate\Support\Collection;
use Ratchet\ConnectionInterface;
use function GuzzleHttp\Psr7\str;
@@ -14,50 +15,20 @@ use Psr\Http\Message\RequestInterface;
class PushLogsToDashboardController extends Controller
{
public function onOpen(ConnectionInterface $connection, RequestInterface $request = null)
public function handle(Request $request, ConnectionInterface $httpConnection)
{
$connection->contentLength = $this->findContentLength($request->getHeaders());
$connection->requestBuffer = (string) $request->getBody();
$this->checkContentLength($connection);
}
public function onMessage(ConnectionInterface $from, $msg)
{
$from->requestBuffer .= $msg;
$this->checkContentLength($from);
}
protected function findContentLength(array $headers): int
{
return Collection::make($headers)->first(function ($values, $header) {
return strtolower($header) === 'content-length';
})[0] ?? 0;
}
protected function checkContentLength(ConnectionInterface $connection)
{
if (strlen($connection->requestBuffer) === $connection->contentLength) {
try {
/*
* This is the post payload from our PHPUnit tests.
* Send it to the connected connections.
*/
foreach (Socket::$connections as $webSocketConnection) {
$webSocketConnection->send($connection->requestBuffer);
}
$connection->send(str(new Response(200)));
} catch (Exception $e) {
$connection->send(str(new Response(500, [], $e->getMessage())));
try {
/*
* This is the post payload from our PHPUnit tests.
* Send it to the connected connections.
*/
foreach (Socket::$connections as $webSocketConnection) {
$webSocketConnection->send($request->getContent());
}
$connection->close();
unset($connection->requestBuffer);
unset($connection->contentLength);
$httpConnection->send(str(new Response(200)));
} catch (Exception $e) {
$httpConnection->send(str(new Response(500, [], $e->getMessage())));
}
}
}

View File

@@ -7,6 +7,7 @@ use App\Http\Controllers\Controller;
use App\Http\QueryParameters;
use App\Logger\RequestLogger;
use GuzzleHttp\Psr7\Response;
use Illuminate\Http\Request;
use Ratchet\ConnectionInterface;
use function GuzzleHttp\Psr7\str;
use Psr\Http\Message\RequestInterface;
@@ -25,35 +26,17 @@ class ReplayLogController extends Controller
$this->httpClient = $httpClient;
}
public function onOpen(ConnectionInterface $connection, RequestInterface $request = null)
public function handle(Request $request, ConnectionInterface $httpConnection)
{
$loggedRequest = $this->requestLogger->findLoggedRequest(QueryParameters::create($request)->get('log'));
$loggedRequest = $this->requestLogger->findLoggedRequest($request->get('log'));
if (is_null($loggedRequest)) {
$connection->send(
str(new Response(
404,
['Content-Type' => 'application/json'],
))
);
$connection->close();
$httpConnection->send(str(new Response(404)));
return;
}
$requestData = $loggedRequest->getRequestData();
$this->httpClient->performRequest($loggedRequest->getRequestData());
/** @var HttpClient $tunnel */
$this->httpClient->performRequest($requestData);
$connection->send(
str(new Response(
200,
['Content-Type' => 'application/json'],
''
))
);
$connection->close();
$httpConnection->send(str(new Response(200)));
}
}