From 0fcf75f4688a96629a7ae295e19e59ebbab54218 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mr=C2=B7x?= Date: Fri, 27 Aug 2021 11:39:11 +0800 Subject: [PATCH 01/15] =?UTF-8?q?=E6=94=B9=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- http-helper/Context/HttpHeaders.php | 4 ++++ http-helper/Context/HttpParams.php | 28 +++++++++++++++++++++------- http-server/Constrict/Request.php | 6 +----- 3 files changed, 26 insertions(+), 12 deletions(-) diff --git a/http-helper/Context/HttpHeaders.php b/http-helper/Context/HttpHeaders.php index 65f362c1..533802ed 100644 --- a/http-helper/Context/HttpHeaders.php +++ b/http-helper/Context/HttpHeaders.php @@ -19,6 +19,10 @@ trait HttpHeaders private array $_headers = []; + + private array $_server = []; + + /** * @param array $headers */ diff --git a/http-helper/Context/HttpParams.php b/http-helper/Context/HttpParams.php index 13ddd3e2..75e85453 100644 --- a/http-helper/Context/HttpParams.php +++ b/http-helper/Context/HttpParams.php @@ -36,6 +36,10 @@ trait HttpParams private ?array $_files = []; + /** @var string */ + private string $_body = ''; + + private mixed $_rawContent = ''; /** @@ -63,19 +67,29 @@ trait HttpParams } /** - * @param mixed|string $rawContent + * @param \Swoole\Http\Request $request */ - public function setRawContent(mixed $rawContent, string $context_type): void + public function setParseBody(\Swoole\Http\Request $request): void { - if (str_contains($context_type, 'json')) { - $this->_rawContent = json_decode($rawContent, true); - } else if (str_contains($context_type, 'xml')) { - $this->_rawContent = Xml::toArray($rawContent); + $content = $request->getContent(); + if (empty($content)) { + return; + } + $contentType = $request->header['content-type']; + if (str_contains($contentType, 'json')) { + $this->_posts = json_decode($contentType, true); + } else if (str_contains($contentType, 'xml')) { + $this->_posts = Xml::toArray($contentType); + } else if (str_contains($contentType, 'x-www-form-urlencoded')) { + $this->_posts = $request->post; + } else if (str_contains($contentType, 'serialize')) { + $this->_posts = unserialize($content); } else { - $this->_rawContent = $rawContent; + $this->_body = $content; } } + /** * @return mixed * @throws Exception diff --git a/http-server/Constrict/Request.php b/http-server/Constrict/Request.php index 1e76a609..e49ccd9a 100644 --- a/http-server/Constrict/Request.php +++ b/http-server/Constrict/Request.php @@ -57,17 +57,13 @@ class Request implements RequestInterface Context::setContext(Response::class, new Response()); $sRequest = new HttpResponse(); - - var_dump($request->getData(), $request->header); - $sRequest->setHeaders(array_merge($request->header, $request->server)); $sRequest->setUri($sRequest->getRequestUri()); $sRequest->setClientId($request->fd); - $sRequest->setRawContent($request->rawContent(), $sRequest->getContentType()); + $sRequest->setParseBody($request); $sRequest->setFiles($request->files ?? []); - $sRequest->setPosts($request->post ?? []); $sRequest->setGets($request->get ?? []); Context::setContext(HttpResponse::class, $sRequest); From 5f199ccb19b8ea3f08ca58d3e456dda7cabd76c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mr=C2=B7x?= Date: Fri, 27 Aug 2021 12:24:52 +0800 Subject: [PATCH 02/15] =?UTF-8?q?=E6=94=B9=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- http-helper/Context/HttpParams.php | 6 +++--- http-helper/Context/Request.php | 21 ++------------------- 2 files changed, 5 insertions(+), 22 deletions(-) diff --git a/http-helper/Context/HttpParams.php b/http-helper/Context/HttpParams.php index 75e85453..fc706dff 100644 --- a/http-helper/Context/HttpParams.php +++ b/http-helper/Context/HttpParams.php @@ -91,12 +91,12 @@ trait HttpParams /** - * @return mixed + * @return string * @throws Exception */ - public function getRawContent(): mixed + public function getContent(): string { - return $this->_rawContent; + return $this->_body; } diff --git a/http-helper/Context/Request.php b/http-helper/Context/Request.php index 3607f416..3f62352f 100644 --- a/http-helper/Context/Request.php +++ b/http-helper/Context/Request.php @@ -182,8 +182,9 @@ class Request extends HttpService implements RequestInterface /** * @param $value + * @return mixed */ - public function setGrantAuthorization($value) + public function setGrantAuthorization($value): mixed { return $this->_grant = $value; } @@ -231,7 +232,6 @@ class Request extends HttpService implements RequestInterface if (!empty($this->_platform)) { return $this->_platform; } - $user = $this->getAgent(); $match = preg_match('/\(.*\)?/', $user, $output); if (!$match || count($output) < 1) { @@ -346,23 +346,6 @@ class Request extends HttpService implements RequestInterface return $this->isCli === TRUE; } - - /** - * @param $name - * @param $value - * - * @throws Exception - */ - public function __set($name, $value) - { - $method = 'set' . ucfirst($name); - if (method_exists($this, $method)) { - $this->$method($value); - } else { - parent::__set($name, $value); // TODO: Change the autogenerated stub - } - } - /** * @return mixed|null */ From 98b7048db7ef298f1b5dbd7a871a0bcdfd6eb826 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mr=C2=B7x?= Date: Fri, 27 Aug 2021 16:49:17 +0800 Subject: [PATCH 03/15] =?UTF-8?q?=E6=94=B9=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- http-server/Message/Message.php | 182 ++++++++++++++++++++++ http-server/Message/Request.php | 177 +++++++++++++++++++++ http-server/Message/Response.php | 53 +++++++ http-server/Message/Stream.php | 180 +++++++++++++++++++++ http-server/Message/Uploaded.php | 103 ++++++++++++ http-server/Message/Uri.php | 260 +++++++++++++++++++++++++++++++ 6 files changed, 955 insertions(+) create mode 100644 http-server/Message/Message.php create mode 100644 http-server/Message/Request.php create mode 100644 http-server/Message/Response.php create mode 100644 http-server/Message/Stream.php create mode 100644 http-server/Message/Uploaded.php create mode 100644 http-server/Message/Uri.php diff --git a/http-server/Message/Message.php b/http-server/Message/Message.php new file mode 100644 index 00000000..30d2a3c3 --- /dev/null +++ b/http-server/Message/Message.php @@ -0,0 +1,182 @@ +version; + } + + + /** + * @param $version + * @return $this + */ + public function withProtocolVersion($version): static + { + $class = clone $this; + $class->version = $version; + return $class; + } + + /** + * @return array + */ + public function getHeaders(): array + { + return $this->headers; + } + + /** + * @param $name + * @return bool + */ + public function hasHeader($name): bool + { + return array_key_exists($name, $this->headers); + } + + + /** + * @param $name + * @return string|array|null + */ + #[Pure] public function getHeader($name): string|null|array + { + if (!$this->hasHeader($name)) { + return null; + } + return $this->headers[$name]; + } + + + /** + * @param $name + * @return string|null + */ + #[Pure] public function getHeaderLine($name): string|null + { + if ($this->hasHeader($name)) { + return implode(';', $this->headers[$name]); + } + return null; + } + + + /** + * @param $name + * @param $value + * @return static + */ + public function withHeader($name, $value): static + { + $class = clone $this; + if (!is_array($value)) { + $value = [$value]; + } + $class->headers[$name] = $value; + return $class; + } + + + /** + * @param $name + * @param $value + * @return static + * @throws + */ + public function withAddedHeader($name, $value): static + { + $class = clone $this; + if (!array_key_exists($name, $class->headers)) { + throw new \Exception('Headers `' . $name . '` not exists.'); + } + $class->headers[$name][] = $value; + return $class; + } + + + /** + * @param $name + * @return $this + */ + public function withoutHeader($name): static + { + $class = clone $this; + unset($class->headers[$name]); + return $class; + } + + + /** + * @return string + */ + public function getBody(): string + { + return $this->stream; + } + + + /** + * @param StreamInterface $body + * @return static + */ + public function withBody(StreamInterface $body): static + { + $class = clone $this; + $class->stream = $body; + return $class; + } + + + /** + * @param StreamInterface $stream + * @return mixed + */ + public function parseBody(StreamInterface $stream): mixed + { + $content = $stream->getContents(); + if (empty($content)) { + return $content; + } + $contentType = $this->getHeaderLine('content-type'); + if (str_contains($contentType, 'json')) { + return json_encode($contentType); + } + if (str_contains($contentType, 'xml')) { + return Xml::toArray($contentType); + } + if (str_contains($contentType, 'x-www-form-urlencoded')) { + parse_str($content, $array); + return $array; + } + if (str_contains($contentType, 'serialize')) { + return unserialize($content); + } + return $content; + } + +} diff --git a/http-server/Message/Request.php b/http-server/Message/Request.php new file mode 100644 index 00000000..536a9c88 --- /dev/null +++ b/http-server/Message/Request.php @@ -0,0 +1,177 @@ +serverRequest->fd; + } + + + /** + * @param \Swoole\Http\Request $request + * @return RequestInterface + */ + public static function parseRequest(\Swoole\Http\Request $request): RequestInterface + { + $message = new Request(); + $message->uri = Uri::parseUri($request); + $message->method = $request->getMethod(); + $message->requestTarget = ''; + $message->serverRequest = $request; + $message->version = $request->server['server_protocol']; + $message->stream = new Stream($request->getContent()); + $message->headers = $request->header; + return $message; + } + + + /** + * @param $name + * @param null $default + * @return mixed + */ + public function input($name, $default = null): mixed + { + if (empty($this->parseBody)) { + $this->parseBody = $this->parseBody($this->stream); + } + if (!is_array($this->parseBody)) { + return $default; + } + return $this->parseBody[$name] ?? $default; + } + + + /** + * @param $name + * @param null $default + * @return mixed + */ + public function post($name, $default = null): mixed + { + return $this->serverRequest->post[$name] ?? $default; + } + + + /** + * @param $name + * @param null $default + * @return mixed + */ + public function query($name, $default = null): mixed + { + return $this->serverRequest->get[$name] ?? $default; + } + + + /** + * @param $name + * @return Uploaded|null + */ + public function file($name): ?Uploaded + { + if (isset($this->serverRequest->files[$name])) { + return new Uploaded($this->serverRequest->files[$name]); + } + return null; + } + + + /** + * @return string + */ + public function getRequestTarget(): string + { + throw new BadMethodCallException('Not Accomplish Method.'); + } + + + /** + * @param mixed $requestTarget + * @return RequestInterface + */ + public function withRequestTarget($requestTarget): RequestInterface + { + $class = clone $this; + $class->requestTarget = $requestTarget; + return $class; + } + + + /** + * @return string + */ + public function getMethod(): string + { + return $this->method; + } + + + /** + * @param string $method + * @return RequestInterface + */ + public function withMethod($method): RequestInterface + { + $class = clone $this; + $class->method = $method; + return $class; + } + + + /** + * @return UriInterface + */ + public function getUri(): UriInterface + { + return $this->uri; + } + + + /** + * @param UriInterface $uri + * @param false $preserveHost + * @return RequestInterface + */ + public function withUri(UriInterface $uri, $preserveHost = false): RequestInterface + { + $class = clone $this; + $class->uri = $uri; + return $class; + } +} diff --git a/http-server/Message/Response.php b/http-server/Message/Response.php new file mode 100644 index 00000000..6546e59c --- /dev/null +++ b/http-server/Message/Response.php @@ -0,0 +1,53 @@ +statusCode; + } + + /** + * @param int $code + * @param string $reasonPhrase + * @return ResponseInterface + */ + public function withStatus($code, $reasonPhrase = ''): ResponseInterface + { + // TODO: Implement withStatus() method. + $class = clone $this; + $class->statusCode = $code; + $class->reasonPhrase = $reasonPhrase; + return $class; + } + + + /** + * @return string + */ + public function getReasonPhrase(): string + { + // TODO: Implement getReasonPhrase() method. + return $this->reasonPhrase; + } +} diff --git a/http-server/Message/Stream.php b/http-server/Message/Stream.php new file mode 100644 index 00000000..175a9d08 --- /dev/null +++ b/http-server/Message/Stream.php @@ -0,0 +1,180 @@ +body = $body; + } + + + /** + * @return string + */ + public function __toString(): string + { + return $this->body; + } + + + /** + * + */ + public function close(): void + { + $this->detach(); + } + + + /** + * + */ + public function detach(): void + { + $this->body = ''; + $this->size = 0; + $this->writable = false; + } + + + /** + * @return int + */ + public function getSize(): int + { + if ($this->size == 0) { + $this->size = strlen($this->body); + } + return $this->size; + } + + + /** + * @return int + */ + public function tell(): int + { + return $this->offset; + } + + + /** + * @return bool + */ + public function eof(): bool + { + return true; + } + + /** + * @return bool + */ + public function isSeekable(): bool + { + return $this->offset == 0; + } + + + /** + * @param int $offset + * @param int $whence + */ + public function seek($offset, $whence = SEEK_SET) + { + $this->offset = $offset; + } + + + /** + * + */ + public function rewind(): void + { + $this->offset = 0; + } + + /** + * @return bool + */ + public function isWritable(): bool + { + return $this->writable; + } + + + /** + * @param string $string + * @return int + */ + public function write($string): int + { + // TODO: Implement write() method. + $this->body .= $string; + $this->size = strlen($this->body); + return $this->size; + } + + + /** + * @return bool + */ + public function isReadable(): bool + { + return true; + } + + + /** + * @param int $length + * @return string + */ + public function read($length): string + { + // TODO: Implement read() method. + return substr($this->body, 0, $length); + } + + + /** + * @return string + */ + public function getContents(): string + { + return $this->body; + } + + + /** + * @param null $key + * @return mixed + */ + public function getMetadata($key = null): mixed + { + throw new \BadMethodCallException('Not Accomplish Method.'); + } +} diff --git a/http-server/Message/Uploaded.php b/http-server/Message/Uploaded.php new file mode 100644 index 00000000..7960fd5e --- /dev/null +++ b/http-server/Message/Uploaded.php @@ -0,0 +1,103 @@ + "There is no error, the file uploaded with success", + 1 => "The uploaded file exceeds the upload_max_filesize directive in php.ini", + 2 => "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form", + 3 => "The uploaded file was only partially uploaded", + 4 => "No file was uploaded", + 6 => "Missing a temporary folder" + ]; + + + /** + * @param mixed $file + */ + public function __construct(array $file) + { + $this->tmp_name = $file['tmp_name']; + $this->name = $file['name']; + $this->type = $file['type']; + $this->size = $file['size']; + $this->error = $file['error']; + } + + + /** + * @return StreamInterface + */ + public function getStream(): StreamInterface + { + return new Stream(file_get_contents($this->tmp_name)); + } + + + /** + * @param string $targetPath + */ + public function moveTo($targetPath) + { + @move_uploaded_file($this->tmp_name, $targetPath); + } + + /** + * @return int + */ + public function getSize(): int + { + return $this->size; + } + + /** + * @return string + */ + public function getError(): string + { + return Uploaded::ERROR[$this->error] ?? 'unknown error'; + } + + + /** + * @return string|null + */ + public function getClientFilename(): string|null + { + return $this->name; + } + + + /** + * @return string|null + */ + public function getClientMediaType(): string|null + { + return $this->type; + } +} diff --git a/http-server/Message/Uri.php b/http-server/Message/Uri.php new file mode 100644 index 00000000..3559622c --- /dev/null +++ b/http-server/Message/Uri.php @@ -0,0 +1,260 @@ +scheme; + } + + public function getAuthority() + { + // TODO: Implement getAuthority() method. + } + + public function getUserInfo() + { + // TODO: Implement getUserInfo() method. + } + + + /** + * @return string + */ + public function getHost(): string + { + return $this->host; + } + + + /** + * @return int + */ + public function getPort(): int + { + return $this->port; + } + + + /** + * @return string + */ + public function getPath(): string + { + return $this->path; + } + + /** + * @return string + */ + public function getQuery(): string + { + return $this->query; + } + + + /** + * @return string + */ + public function getFragment(): string + { + return $this->fragment; + } + + + /** + * @param string $scheme + * @return UriInterface + */ + public function withScheme($scheme): UriInterface + { + $class = clone $this; + $class->scheme = $scheme; + return $class; + } + + /** + * @param string $user + * @param null $password + * @return $this + */ + public function withUserInfo($user, $password = null): UriInterface + { + $class = clone $this; + $class->username = $user; + $class->password = $password; + return $class; + } + + + /** + * @param string $host + * @return UriInterface + */ + public function withHost($host): UriInterface + { + $class = clone $this; + $class->host = $host; + return $class; + } + + + /** + * @return int + */ + public function getDefaultPort(): int + { + return 80; + } + + + /** + * @param int|null $port + * @return UriInterface + */ + public function withPort($port): UriInterface + { + $class = clone $this; + $class->port = $port; + return $class; + } + + + /** + * @param string $path + * @return UriInterface + */ + public function withPath($path): UriInterface + { + $class = clone $this; + $class->path = $path; + return $class; + } + + + /** + * @param string $query + * @return UriInterface + */ + public function withQuery($query): UriInterface + { + $class = clone $this; + $class->query = $query; + return $class; + } + + + /** + * @param string $fragment + * @return UriInterface + */ + public function withFragment($fragment): UriInterface + { + $class = clone $this; + $class->fragment = $fragment; + return $class; + } + + + /** + * @return string + */ + public function __toString(): string + { + return sprintf('%s://%s:%d%s?%s#%s', $this->scheme, $this->host, $this->port, + $this->path, $this->query, $this->fragment); + } + + + /** + * @param \Swoole\Http\Request $request + * @return UriInterface + */ + #[Pure] public static function parseUri(\Swoole\Http\Request $request): UriInterface + { + $server = $request->server; + $header = $request->header; + $uri = new Uri(); + $uri = $uri->withScheme(!empty($server['https']) && $server['https'] !== 'off' ? 'https' : 'http'); + + $hasPort = false; + if (isset($server['http_host'])) { + $hostHeaderParts = explode(':', $server['http_host']); + $uri = $uri->withHost($hostHeaderParts[0]); + if (isset($hostHeaderParts[1])) { + $hasPort = true; + $uri = $uri->withPort($hostHeaderParts[1]); + } + } elseif (isset($server['server_name'])) { + $uri = $uri->withHost($server['server_name']); + } elseif (isset($server['server_addr'])) { + $uri = $uri->withHost($server['server_addr']); + } elseif (isset($header['host'])) { + $hasPort = true; + if (strpos($header['host'], ':')) { + [$host, $port] = explode(':', $header['host'], 2); + if ($port != $uri->getDefaultPort()) { + $uri = $uri->withPort($port); + } + } else { + $host = $header['host']; + } + + $uri = $uri->withHost($host); + } + + if (!$hasPort && isset($server['server_port'])) { + $uri = $uri->withPort($server['server_port']); + } + + $hasQuery = false; + if (isset($server['request_uri'])) { + $requestUriParts = explode('?', $server['request_uri']); + $uri = $uri->withPath($requestUriParts[0]); + if (isset($requestUriParts[1])) { + $hasQuery = true; + $uri = $uri->withQuery($requestUriParts[1]); + } + } + + if (!$hasQuery && isset($server['query_string'])) { + $uri = $uri->withQuery($server['query_string']); + } + + return $uri; + } +} From 0792dc8006b72087443e9cd9cad397bc91e65588 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mr=C2=B7x?= Date: Fri, 27 Aug 2021 16:51:19 +0800 Subject: [PATCH 04/15] =?UTF-8?q?=E6=94=B9=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- http-server/Constrict/Request.php | 24 +++++++----------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/http-server/Constrict/Request.php b/http-server/Constrict/Request.php index e49ccd9a..2d9397c0 100644 --- a/http-server/Constrict/Request.php +++ b/http-server/Constrict/Request.php @@ -3,7 +3,7 @@ namespace Server\Constrict; use Http\Context\Context; -use Http\Context\Request as HttpResponse; +use Server\Message\Request as Psr7Request; use Http\Context\Response; use Kiri\Kiri; use ReflectionException; @@ -11,7 +11,7 @@ use Server\RequestInterface; /** - * @mixin HttpResponse + * @mixin Psr7Request */ class Request implements RequestInterface { @@ -24,10 +24,10 @@ class Request implements RequestInterface */ public function __call($name, $args) { - if (!Context::hasContext(HttpResponse::class)) { - $request = Context::setContext(HttpResponse::class, new HttpResponse()); + if (!Context::hasContext(Psr7Request::class)) { + $request = Context::setContext(Psr7Request::class, new Psr7Request()); } else { - $request = Context::getContext(HttpResponse::class); + $request = Context::getContext(Psr7Request::class); } if (property_exists($request, $name)) { return $request->{$name}; @@ -43,7 +43,7 @@ class Request implements RequestInterface public function __get($name): mixed { // TODO: Change the autogenerated stub - return Context::getContext(HttpResponse::class)->{$name}; + return Context::getContext(Psr7Request::class)->{$name}; } @@ -56,17 +56,7 @@ class Request implements RequestInterface { Context::setContext(Response::class, new Response()); - $sRequest = new HttpResponse(); - $sRequest->setHeaders(array_merge($request->header, $request->server)); - - $sRequest->setUri($sRequest->getRequestUri()); - $sRequest->setClientId($request->fd); - - $sRequest->setParseBody($request); - $sRequest->setFiles($request->files ?? []); - $sRequest->setGets($request->get ?? []); - - Context::setContext(HttpResponse::class, $sRequest); + Context::setContext(Psr7Request::class, Psr7Request::parseRequest($request)); return Kiri::getDi()->get(Request::class); } From 2f76d860694e24dc63eaba9f520f72b62f2bdf28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mr=C2=B7x?= Date: Fri, 27 Aug 2021 16:54:29 +0800 Subject: [PATCH 05/15] =?UTF-8?q?=E6=94=B9=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- http-server/Message/Request.php | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/http-server/Message/Request.php b/http-server/Message/Request.php index 536a9c88..b442967f 100644 --- a/http-server/Message/Request.php +++ b/http-server/Message/Request.php @@ -3,6 +3,7 @@ namespace Server\Message; use BadMethodCallException; +use JetBrains\PhpStorm\Pure; use Psr\Http\Message\RequestInterface; use Psr\Http\Message\UriInterface; @@ -60,6 +61,15 @@ class Request implements RequestInterface } + /** + * @return string|array|null + */ + #[Pure] public function getStartTime(): string|array|null + { + return $this->getHeaderLine('request_time_float'); + } + + /** * @param $name * @param null $default From daef26140354fc80bdb6a66e2df5fee8aaa8c3e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mr=C2=B7x?= Date: Fri, 27 Aug 2021 17:06:17 +0800 Subject: [PATCH 06/15] =?UTF-8?q?=E6=94=B9=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/Jwt/Jwt.php | 13 ++++++++++++- function.php | 27 --------------------------- http-helper/Context/Request.php | 6 +++--- http-helper/Route/Node.php | 2 +- http-helper/Route/Router.php | 15 ++++++++++++--- http-server/Message/Request.php | 15 ++++++++++++++- http-server/Message/Uri.php | 18 ++++++++++++++++++ http-server/RequestInterface.php | 3 ++- 8 files changed, 62 insertions(+), 37 deletions(-) diff --git a/core/Jwt/Jwt.php b/core/Jwt/Jwt.php index 51fa4013..5792d617 100644 --- a/core/Jwt/Jwt.php +++ b/core/Jwt/Jwt.php @@ -3,6 +3,7 @@ declare(strict_types=1); namespace Kiri\Jwt; +use Annotation\Inject; use Exception; use Kiri\Abstracts\Component; use Kiri\Abstracts\Config; @@ -21,9 +22,19 @@ class Jwt extends Component use JwtHelper; + #[Inject(Request::class)] private Request $request; + /** + * @param Request $request + */ + public function setRequest(Request $request): void + { + $this->request = $request; + } + + /** * @throws ConfigException * @throws Exception @@ -96,7 +107,7 @@ class Jwt extends Component */ private function jwtBody($unionId): string { - $json = json_encode(['unionId' => $unionId, 'createTime' => time(), 'loginIp' => request()->getIp(), 'expire_at' => time() + $this->timeout]); + $json = json_encode(['unionId' => $unionId, 'createTime' => time(), 'expire_at' => time() + $this->timeout]); openssl_private_encrypt($json, $encode, $this->private); return base64_encode($encode); } diff --git a/function.php b/function.php index 53c2cf3d..6ddb9c94 100644 --- a/function.php +++ b/function.php @@ -710,19 +710,6 @@ if (!function_exists('request')) { } -if (!function_exists('Input')) { - - /** - * @return HttpParams - * @throws Exception - */ - function Input(): HttpParams - { - return request()->params; - } - -} - if (!function_exists('storage')) { /** @@ -771,20 +758,6 @@ if (!function_exists('event')) { } -if (!function_exists('alias')) { - - /** - * @param $class - * @param $name - */ - function alias($class, $name) - { - Kiri::setAlias($class, $name); - } - -} - - if (!function_exists('name')) { /** diff --git a/http-helper/Context/Request.php b/http-helper/Context/Request.php index 3f62352f..6610c88c 100644 --- a/http-helper/Context/Request.php +++ b/http-helper/Context/Request.php @@ -181,10 +181,10 @@ class Request extends HttpService implements RequestInterface /** - * @param $value - * @return mixed + * @param AuthIdentity $value + * @return AuthIdentity */ - public function setGrantAuthorization($value): mixed + public function setGrantAuthorization(AuthIdentity $value): AuthIdentity { return $this->_grant = $value; } diff --git a/http-helper/Route/Node.php b/http-helper/Route/Node.php index 82f2d124..48bc56d8 100644 --- a/http-helper/Route/Node.php +++ b/http-helper/Route/Node.php @@ -287,7 +287,7 @@ class Node public function checkSuffix(): bool { if ($this->enableHtmlSuffix) { - $url = request()->getUri(); + $url = request()->getUri()->getPath(); $nowLength = strlen($this->htmlSuffix); if (strpos($url, $this->htmlSuffix) !== strlen($url) - $nowLength) { return false; diff --git a/http-helper/Route/Router.php b/http-helper/Route/Router.php index 2fcc9b2d..0e641b10 100644 --- a/http-helper/Route/Router.php +++ b/http-helper/Route/Router.php @@ -3,6 +3,7 @@ declare(strict_types=1); namespace Http\Route; +use Annotation\Inject; use Closure; use Exception; use Http\Abstracts\HttpService; @@ -46,6 +47,13 @@ class Router extends HttpService implements RouterInterface public ?Response $response = null; + /** + * @var RequestInterface + */ + #[Inject(RequestInterface::class)] + public RequestInterface $request; + + /** * @param Closure $middleware */ @@ -495,7 +503,7 @@ class Router extends HttpService implements RouterInterface { $method = $request->getMethod(); - $methods = $this->nodes[$method][\request()->getUri()] ?? null; + $methods = $this->nodes[$method][\request()->getUri()->getPath()] ?? null; if (!is_null($methods)) { return $methods; } @@ -548,11 +556,12 @@ class Router extends HttpService implements RouterInterface */ public function Branch_search(RequestInterface $request): ?Node { - $node = $this->tree_search($request->getExplode(), $request->getMethod()); + $uri = $request->getUri(); + $node = $this->tree_search($uri->getExplode(), $request->getMethod()); if ($node instanceof Node) { return $node; } - if (!$request->isOption) { + if (!$request->isMethod('OPTIONS')) { return null; } $node = $this->tree_search(['*'], $request->getMethod()); diff --git a/http-server/Message/Request.php b/http-server/Message/Request.php index b442967f..65984b56 100644 --- a/http-server/Message/Request.php +++ b/http-server/Message/Request.php @@ -23,7 +23,10 @@ class Request implements RequestInterface public string $method; - public UriInterface $uri; + /** + * @var Uri + */ + private Uri $uri; private \Swoole\Http\Request $serverRequest; @@ -152,6 +155,16 @@ class Request implements RequestInterface } + /** + * @param string $method + * @return bool + */ + public function isMethod(string $method): bool + { + return $this->method === $method; + } + + /** * @param string $method * @return RequestInterface diff --git a/http-server/Message/Uri.php b/http-server/Message/Uri.php index 3559622c..fb07bcd3 100644 --- a/http-server/Message/Uri.php +++ b/http-server/Message/Uri.php @@ -33,6 +33,24 @@ class Uri implements UriInterface public string $password = ''; + private array $_explode = []; + + + /** + * @return string[] + */ + public function getExplode(): array + { + if ($this->path == '/' || $this->path == '') { + return ['']; + } + if (empty($this->_explode)) { + $this->_explode = array_filter(explode('/', $this->path)); + } + return $this->_explode; + } + + /** * @return string */ diff --git a/http-server/RequestInterface.php b/http-server/RequestInterface.php index c8536e4a..c06d465c 100644 --- a/http-server/RequestInterface.php +++ b/http-server/RequestInterface.php @@ -3,7 +3,8 @@ namespace Server; -use Http\Context\Request; + +use Server\Message\Request; /** * From 24bf2405a32eb3461a56e7f96a2f6c0a287c5171 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mr=C2=B7x?= Date: Fri, 27 Aug 2021 17:22:08 +0800 Subject: [PATCH 07/15] =?UTF-8?q?=E6=94=B9=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- http-server/Constrict/Request.php | 14 ++++++------ http-server/Message/Request.php | 38 +++++++++++++++++++++++++++++-- 2 files changed, 43 insertions(+), 9 deletions(-) diff --git a/http-server/Constrict/Request.php b/http-server/Constrict/Request.php index 2d9397c0..68b25cc2 100644 --- a/http-server/Constrict/Request.php +++ b/http-server/Constrict/Request.php @@ -3,7 +3,7 @@ namespace Server\Constrict; use Http\Context\Context; -use Server\Message\Request as Psr7Request; +use Server\Message\Request as RequestMessage; use Http\Context\Response; use Kiri\Kiri; use ReflectionException; @@ -11,7 +11,7 @@ use Server\RequestInterface; /** - * @mixin Psr7Request + * @mixin RequestMessage */ class Request implements RequestInterface { @@ -24,10 +24,10 @@ class Request implements RequestInterface */ public function __call($name, $args) { - if (!Context::hasContext(Psr7Request::class)) { - $request = Context::setContext(Psr7Request::class, new Psr7Request()); + if (!Context::hasContext(RequestMessage::class)) { + $request = Context::setContext(RequestMessage::class, new RequestMessage()); } else { - $request = Context::getContext(Psr7Request::class); + $request = Context::getContext(RequestMessage::class); } if (property_exists($request, $name)) { return $request->{$name}; @@ -43,7 +43,7 @@ class Request implements RequestInterface public function __get($name): mixed { // TODO: Change the autogenerated stub - return Context::getContext(Psr7Request::class)->{$name}; + return Context::getContext(RequestMessage::class)->{$name}; } @@ -56,7 +56,7 @@ class Request implements RequestInterface { Context::setContext(Response::class, new Response()); - Context::setContext(Psr7Request::class, Psr7Request::parseRequest($request)); + Context::setContext(RequestMessage::class, RequestMessage::parseRequest($request)); return Kiri::getDi()->get(Request::class); } diff --git a/http-server/Message/Request.php b/http-server/Message/Request.php index 65984b56..6e712132 100644 --- a/http-server/Message/Request.php +++ b/http-server/Message/Request.php @@ -59,8 +59,42 @@ class Request implements RequestInterface $message->serverRequest = $request; $message->version = $request->server['server_protocol']; $message->stream = new Stream($request->getContent()); - $message->headers = $request->header; - return $message; + return $message->parseHeaders($request); + } + + + /** + * @param \Swoole\Http\Request $request + * @return $this + */ + private function parseHeaders(\Swoole\Http\Request $request): static + { + foreach ($request->header as $key => $value) { + $this->addHeader($key, $value); + } + + $index = strpos("\r\n\r\n", $request->getData()); + $headers = explode("\r\n", substr($request->getData(), 0, $index)); + + array_shift($headers); + foreach ($headers as $header) { + [$key, $value] = explode(': ', $header); + $this->addHeader($key, $value); + } + return $this; + } + + + /** + * @param $key + * @param $value + */ + private function addHeader($key, $value) + { + $this->headers[$key] = []; + foreach (explode(';', $value) as $item) { + $this->headers[$key][] = $item; + } } From dbae08e7af1ff4e6c759f03c8ae55834222f4ad9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mr=C2=B7x?= Date: Fri, 27 Aug 2021 17:24:38 +0800 Subject: [PATCH 08/15] =?UTF-8?q?=E6=94=B9=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- http-server/Message/Request.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/http-server/Message/Request.php b/http-server/Message/Request.php index 6e712132..783f58f7 100644 --- a/http-server/Message/Request.php +++ b/http-server/Message/Request.php @@ -69,9 +69,9 @@ class Request implements RequestInterface */ private function parseHeaders(\Swoole\Http\Request $request): static { - foreach ($request->header as $key => $value) { - $this->addHeader($key, $value); - } +// foreach ($request->header as $key => $value) { +// $this->addHeader($key, $value); +// } $index = strpos("\r\n\r\n", $request->getData()); $headers = explode("\r\n", substr($request->getData(), 0, $index)); From cbf299955f56c2d589374af945e1952f005b96f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mr=C2=B7x?= Date: Fri, 27 Aug 2021 17:31:29 +0800 Subject: [PATCH 09/15] =?UTF-8?q?=E6=94=B9=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- http-server/Message/Request.php | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/http-server/Message/Request.php b/http-server/Message/Request.php index 783f58f7..fa8a100e 100644 --- a/http-server/Message/Request.php +++ b/http-server/Message/Request.php @@ -69,11 +69,7 @@ class Request implements RequestInterface */ private function parseHeaders(\Swoole\Http\Request $request): static { -// foreach ($request->header as $key => $value) { -// $this->addHeader($key, $value); -// } - - $index = strpos("\r\n\r\n", $request->getData()); + $index = strpos($request->getData(), "\r\n\r\n"); $headers = explode("\r\n", substr($request->getData(), 0, $index)); array_shift($headers); From 79c8f1f7994750dc2fbffa771b00417d49653460 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mr=C2=B7x?= Date: Fri, 27 Aug 2021 17:36:51 +0800 Subject: [PATCH 10/15] =?UTF-8?q?=E6=94=B9=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- http-server/Message/Message.php | 3 +++ http-server/Message/Request.php | 7 ++++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/http-server/Message/Message.php b/http-server/Message/Message.php index 30d2a3c3..3adb38ea 100644 --- a/http-server/Message/Message.php +++ b/http-server/Message/Message.php @@ -22,6 +22,9 @@ trait Message public array $headers = []; + public array $servers = []; + + /** * @return string */ diff --git a/http-server/Message/Request.php b/http-server/Message/Request.php index fa8a100e..74c09396 100644 --- a/http-server/Message/Request.php +++ b/http-server/Message/Request.php @@ -59,6 +59,7 @@ class Request implements RequestInterface $message->serverRequest = $request; $message->version = $request->server['server_protocol']; $message->stream = new Stream($request->getContent()); + $message->servers = $request->server; return $message->parseHeaders($request); } @@ -95,11 +96,11 @@ class Request implements RequestInterface /** - * @return string|array|null + * @return float */ - #[Pure] public function getStartTime(): string|array|null + #[Pure] public function getStartTime(): float { - return $this->getHeaderLine('request_time_float'); + return $this->servers['request_time_float']; } From 151ac4ac0ed6225c12026ef5fb6ac2a5e9718191 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mr=C2=B7x?= Date: Fri, 27 Aug 2021 17:46:40 +0800 Subject: [PATCH 11/15] =?UTF-8?q?=E6=94=B9=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- http-server/Message/Headers.php | 44 +++++++++++++++++++++++++++++++++ http-server/Message/Message.php | 36 +++++++++++++++++++++++++++ http-server/Message/Request.php | 39 ++++++----------------------- 3 files changed, 87 insertions(+), 32 deletions(-) create mode 100644 http-server/Message/Headers.php diff --git a/http-server/Message/Headers.php b/http-server/Message/Headers.php new file mode 100644 index 00000000..8ccd0a29 --- /dev/null +++ b/http-server/Message/Headers.php @@ -0,0 +1,44 @@ +headers = $headers; + return $class; + } + + + /** + * @param $name + * @param null $default + * @return string|array|float|int|null + */ + public function get($name, $default = null): string|array|float|int|null + { + return $this->headers[$name] ?? $default; + } + + + /** + * @return array + */ + public function toArray(): array + { + return $this->headers; + } + + +} diff --git a/http-server/Message/Message.php b/http-server/Message/Message.php index 3adb38ea..6c153eca 100644 --- a/http-server/Message/Message.php +++ b/http-server/Message/Message.php @@ -4,7 +4,9 @@ namespace Server\Message; use JetBrains\PhpStorm\Pure; use Kiri\Core\Xml; +use Kiri\Kiri; use Psr\Http\Message\StreamInterface; +use ReflectionException; /** @@ -76,6 +78,40 @@ trait Message } + /** + * @param \Swoole\Http\Request $request + * @return $this + * @throws ReflectionException + */ + private function parseRequestHeaders(\Swoole\Http\Request $request): static + { + $index = strpos($request->getData(), "\r\n\r\n"); + $headers = explode("\r\n", substr($request->getData(), 0, $index)); + + array_shift($headers); + foreach ($headers as $header) { + [$key, $value] = explode(': ', $header); + $this->addRequestHeader($key, $value); + } + $class = Kiri::getDi()->get(Headers::class); + $this->header = $class->withHeader($this->headers); + return $this; + } + + + /** + * @param $key + * @param $value + */ + private function addRequestHeader($key, $value) + { + $this->headers[$key] = []; + foreach (explode(';', $value) as $item) { + $this->headers[$key][] = $item; + } + } + + /** * @param $name * @return string|null diff --git a/http-server/Message/Request.php b/http-server/Message/Request.php index 74c09396..b0bfa098 100644 --- a/http-server/Message/Request.php +++ b/http-server/Message/Request.php @@ -2,10 +2,12 @@ namespace Server\Message; +use Annotation\Inject; use BadMethodCallException; use JetBrains\PhpStorm\Pure; use Psr\Http\Message\RequestInterface; use Psr\Http\Message\UriInterface; +use ReflectionException; /** @@ -23,6 +25,9 @@ class Request implements RequestInterface public string $method; + public Headers $header; + + /** * @var Uri */ @@ -49,6 +54,7 @@ class Request implements RequestInterface /** * @param \Swoole\Http\Request $request * @return RequestInterface + * @throws ReflectionException */ public static function parseRequest(\Swoole\Http\Request $request): RequestInterface { @@ -60,38 +66,7 @@ class Request implements RequestInterface $message->version = $request->server['server_protocol']; $message->stream = new Stream($request->getContent()); $message->servers = $request->server; - return $message->parseHeaders($request); - } - - - /** - * @param \Swoole\Http\Request $request - * @return $this - */ - private function parseHeaders(\Swoole\Http\Request $request): static - { - $index = strpos($request->getData(), "\r\n\r\n"); - $headers = explode("\r\n", substr($request->getData(), 0, $index)); - - array_shift($headers); - foreach ($headers as $header) { - [$key, $value] = explode(': ', $header); - $this->addHeader($key, $value); - } - return $this; - } - - - /** - * @param $key - * @param $value - */ - private function addHeader($key, $value) - { - $this->headers[$key] = []; - foreach (explode(';', $value) as $item) { - $this->headers[$key][] = $item; - } + return $message->parseRequestHeaders($request); } From 1b09df691f85af052766102647dea48ca8d233e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mr=C2=B7x?= Date: Fri, 27 Aug 2021 17:55:13 +0800 Subject: [PATCH 12/15] =?UTF-8?q?=E6=94=B9=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- http-server/Message/Message.php | 11 +++++------ http-server/Message/Request.php | 1 - 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/http-server/Message/Message.php b/http-server/Message/Message.php index 6c153eca..fd7a8ef9 100644 --- a/http-server/Message/Message.php +++ b/http-server/Message/Message.php @@ -85,12 +85,11 @@ trait Message */ private function parseRequestHeaders(\Swoole\Http\Request $request): static { - $index = strpos($request->getData(), "\r\n\r\n"); - $headers = explode("\r\n", substr($request->getData(), 0, $index)); - - array_shift($headers); - foreach ($headers as $header) { - [$key, $value] = explode(': ', $header); +// $index = strpos($request->getData(), "\r\n\r\n"); +// $headers = explode("\r\n", substr($request->getData(), 0, $index)); +// +// array_shift($headers); + foreach ($request->header as $key => $value) { $this->addRequestHeader($key, $value); } $class = Kiri::getDi()->get(Headers::class); diff --git a/http-server/Message/Request.php b/http-server/Message/Request.php index b0bfa098..54c47c3e 100644 --- a/http-server/Message/Request.php +++ b/http-server/Message/Request.php @@ -54,7 +54,6 @@ class Request implements RequestInterface /** * @param \Swoole\Http\Request $request * @return RequestInterface - * @throws ReflectionException */ public static function parseRequest(\Swoole\Http\Request $request): RequestInterface { From 4d537ad9fd564d558ebebb61606863b8e5418aa0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mr=C2=B7x?= Date: Fri, 27 Aug 2021 18:00:03 +0800 Subject: [PATCH 13/15] =?UTF-8?q?=E6=94=B9=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- http-server/Message/Message.php | 15 ++++++++------- http-server/Message/Request.php | 4 +--- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/http-server/Message/Message.php b/http-server/Message/Message.php index fd7a8ef9..3d5f4197 100644 --- a/http-server/Message/Message.php +++ b/http-server/Message/Message.php @@ -85,15 +85,16 @@ trait Message */ private function parseRequestHeaders(\Swoole\Http\Request $request): static { -// $index = strpos($request->getData(), "\r\n\r\n"); -// $headers = explode("\r\n", substr($request->getData(), 0, $index)); -// -// array_shift($headers); - foreach ($request->header as $key => $value) { + $index = strpos($request->getData(), "\r\n\r\n"); + $headers = explode("\r\n", substr($request->getData(), 0, $index)); + + array_shift($headers); + foreach ($request->header as $header) { + [$key, $value] = explode(': ', $header); $this->addRequestHeader($key, $value); } - $class = Kiri::getDi()->get(Headers::class); - $this->header = $class->withHeader($this->headers); +// $class = Kiri::getDi()->get(Headers::class); +// $this->header = $class->withHeader($this->headers); return $this; } diff --git a/http-server/Message/Request.php b/http-server/Message/Request.php index 54c47c3e..582e86c6 100644 --- a/http-server/Message/Request.php +++ b/http-server/Message/Request.php @@ -25,9 +25,6 @@ class Request implements RequestInterface public string $method; - public Headers $header; - - /** * @var Uri */ @@ -54,6 +51,7 @@ class Request implements RequestInterface /** * @param \Swoole\Http\Request $request * @return RequestInterface + * @throws ReflectionException */ public static function parseRequest(\Swoole\Http\Request $request): RequestInterface { From 55d564066e05b386a5cf89e0d784619a6f66b2eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mr=C2=B7x?= Date: Fri, 27 Aug 2021 18:09:57 +0800 Subject: [PATCH 14/15] =?UTF-8?q?=E6=94=B9=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- http-server/Message/Message.php | 3 +-- http-server/Message/Request.php | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/http-server/Message/Message.php b/http-server/Message/Message.php index 3d5f4197..22bffd75 100644 --- a/http-server/Message/Message.php +++ b/http-server/Message/Message.php @@ -81,7 +81,6 @@ trait Message /** * @param \Swoole\Http\Request $request * @return $this - * @throws ReflectionException */ private function parseRequestHeaders(\Swoole\Http\Request $request): static { @@ -89,7 +88,7 @@ trait Message $headers = explode("\r\n", substr($request->getData(), 0, $index)); array_shift($headers); - foreach ($request->header as $header) { + foreach ($headers as $header) { [$key, $value] = explode(': ', $header); $this->addRequestHeader($key, $value); } diff --git a/http-server/Message/Request.php b/http-server/Message/Request.php index 582e86c6..1cb9dba2 100644 --- a/http-server/Message/Request.php +++ b/http-server/Message/Request.php @@ -51,7 +51,6 @@ class Request implements RequestInterface /** * @param \Swoole\Http\Request $request * @return RequestInterface - * @throws ReflectionException */ public static function parseRequest(\Swoole\Http\Request $request): RequestInterface { @@ -63,7 +62,8 @@ class Request implements RequestInterface $message->version = $request->server['server_protocol']; $message->stream = new Stream($request->getContent()); $message->servers = $request->server; - return $message->parseRequestHeaders($request); + $message->parseRequestHeaders($request); + return $message; } From a29ed020539f1da7b1855de4c0765adcf40650e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mr=C2=B7x?= Date: Fri, 27 Aug 2021 18:42:43 +0800 Subject: [PATCH 15/15] =?UTF-8?q?=E6=94=B9=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- http-helper/Route/CoreMiddleware.php | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/http-helper/Route/CoreMiddleware.php b/http-helper/Route/CoreMiddleware.php index 32f158c2..e2dde311 100644 --- a/http-helper/Route/CoreMiddleware.php +++ b/http-helper/Route/CoreMiddleware.php @@ -7,12 +7,9 @@ namespace Http\Route; use Closure; use Exception; -use Http\Context\Context; use Http\Context\Request; use Http\Context\Response; -use Http\IInterface\MiddlewareInterface; use Server\RequestInterface; -use Kiri\Kiri; /** * Class CoreMiddleware @@ -26,7 +23,7 @@ class CoreMiddleware extends MiddlewareAbstracts /** - * @param Request $request + * @param RequestInterface $request * @param Closure $next * @return mixed * @throws Exception @@ -36,8 +33,8 @@ class CoreMiddleware extends MiddlewareAbstracts /** @var Response $response */ $response = \response(); $response->addHeader('Access-Control-Allow-Origin', '*'); - $response->addHeader('Access-Control-Allow-Headers', $request->header('access-control-request-headers')); - $response->addHeader('Access-Control-Request-Method', $request->header('access-control-request-method')); + $response->addHeader('Access-Control-Allow-Headers', $request->getHeaderLine('Access-Control-Request-Headers')); + $response->addHeader('Access-Control-Request-Method', $request->getHeaderLine('Access-Control-Request-Method')); return $next($request); }