diff --git a/src/Http/Middleware/ApiHandler.php b/src/Http/Middleware/ApiHandler.php index 5cf56a4..08a124d 100644 --- a/src/Http/Middleware/ApiHandler.php +++ b/src/Http/Middleware/ApiHandler.php @@ -32,37 +32,8 @@ class ApiHandler return new Promise( function (callable $resolve, callable $reject) use ($next, $request) { - if (!$this->config->get('server.enable_api', true)) { - $resolve($next($request)); - return; - } - $path = $request->getUri()->getPath(); - // FIXME remove this when done debugging - if ($path === "/index.html") { - $resolve(Response::html( - << - - - - -
- - - ENDHTML - )); - } - switch (true) { case preg_match('<^/.well-known/mercure/subscriptions(/.+?){0,1}$>', $path, $m): $query = explode("/", trim($m[1]??null, "/")); diff --git a/src/Http/Server.php b/src/Http/Server.php index 177db9d..6869dfa 100644 --- a/src/Http/Server.php +++ b/src/Http/Server.php @@ -29,7 +29,7 @@ class Server private LoopInterface $loop; - private HttpServer $server; + private ?HttpServer $server = null; private SplObjectStorage $webSocketClients; @@ -37,14 +37,6 @@ class Server private Logger $logger; - private ResponseMiddleware $responseMiddleware; - private SecurityMiddleware $securityMiddleware; - private WebSocketHandler $webSocketHandler; - private MercureHandler $mercureHandler; - private ApiHandler $apiRequestHandler; - private NotFoundHandler $notFoundHandler; - - /** * * @@ -68,8 +60,6 @@ class Server }); $this->webSocketClients = new SplObjectStorage(); - - $this->server = $this->createHttpServer(); } /** @@ -79,6 +69,10 @@ class Server */ public function listen(ServerInterface $socket): void { + if (!$this->server) { + $this->server = $this->createHttpServer(); + } + $this->server->listen($socket); $this->logger->info(sprintf( "Listening on %s", @@ -100,38 +94,37 @@ class Server $stack[] = new LimitConcurrentRequestsMiddleware($maxConcurrent); $stack[] = new RequestBodyBufferMiddleware($maxRequestBody); - $stack = [ ...$stack, - $this->responseMiddleware = new ResponseMiddleware( - config: $this->config, - logger: $this->logger->withName("http"), - ), - $this->securityMiddleware = new SecurityMiddleware( - config: $this->config - ), - ]; + $stack[] = new ResponseMiddleware( + config: $this->config, + logger: $this->logger->withName("http"), + ); + $stack[] = new SecurityMiddleware( + config: $this->config + ); if ($this->config->getEnableWebSockets()) { - $stack = [ ...$stack, - $this->webSocketHandler = new WebSocketHandler( - config: $this->config, - webSocketClients: $this->webSocketClients, - topicManager: $this->topicManager - ), - ]; + $stack[] = $webSocketHandler = new WebSocketHandler( + config: $this->config, + webSocketClients: $this->webSocketClients, + topicManager: $this->topicManager + ); $this->logger->warning("The WebSocket support is incomplete and insecure, but enabling it as requested."); } - $stack = [ ...$stack, - $this->mercureHandler = new MercureHandler( + $stack[] = new MercureHandler( + config: $this->config, + topicManager: $this->topicManager + ); + + if ($this->config->get('server.enable_api', true)) { + $stack[] = new ApiHandler( config: $this->config, topicManager: $this->topicManager - ), - $this->apiRequestHandler = new ApiHandler( - config: $this->config, - topicManager: $this->topicManager - ), - $this->notFoundHandler = new NotFoundHandler() - ]; + ); + $this->logger->info("Enabling the API middleware"); + } + + $stack[] = new NotFoundHandler(); return new HttpServer(...$stack); }