/** * Execute the middleware. Don't call this method directly; it is used by the `Application` internally. * * @internal * * @param ServerRequestInterface $request The request object * @param ResponseInterface $response The response object * @param callable $next The next middleware handler * * @return ResponseInterface */ public function handle(ServerRequestInterface $request, ResponseInterface $response, callable $next = null) { $attributes = $request->getAttributes(); if (!isset($attributes['command'])) { switch (strtoupper($request->getMethod())) { case 'GET': $params = new Registry($request->getQueryParams()); break; case 'POST': default: $params = new Registry($request->getAttributes()); break; } $extension = ucfirst(strtolower($params->get('option', 'Article'))); $action = ucfirst(strtolower($params->get('task', 'display'))); $entity = $params->get('entity', 'error'); $id = $params->get('id', null); $commandClass = "\\Joomla\\Extension\\{$extension}\\Command\\{$action}Command"; if (class_exists($commandClass)) { $command = new $commandClass($entity, $id, $response->getBody()); $request = $request->withAttribute('command', $command); } // @todo Emit afterRouting event } return $next($request, $response); }
/** * {@inheritdoc} */ public function getData() { $headers = []; foreach ($this->request->getHeaders() as $name => $values) { $headers[$name] = implode(', ', $values); } $data = ['SERVER' => $this->request->getServerParams(), 'QUERY' => $this->request->getQueryParams(), 'COOKIES' => $this->request->getCookieParams(), 'HEADERS' => $headers, 'ATTRIBUTES' => $this->request->getAttributes()]; return $data; }
/** * Execute the middleware. Don't call this method directly; it is used by the `Application` internally. * * @internal * * @param ServerRequestInterface $request The request object * @param ResponseInterface $response The response object * @param callable $next The next middleware handler * * @return ResponseInterface */ public function handle(ServerRequestInterface $request, ResponseInterface $response, callable $next = null) { $attributes = $request->getAttributes(); if (!isset($attributes['command'])) { try { /** @var RepositoryInterface $repository */ $repository = $this->container->get('Repository')->forEntity(Page::class); /** @var Page[] $pages */ $pages = $repository->getAll(); $router = new Router(); foreach ($pages as $page) { $router->get($this->expandUrl($page->url, $page), function () use($page) { return $page; }); } $path = preg_replace('~^/.*?index.php/?~', '', $request->getUri()->getPath()); $route = $router->parseRoute($path); $page = $route['controller'](); $vars = $route['vars']; $command = new DisplayPageCommand($page->id, $vars, $request, $response->getBody(), $this->container); $request = $request->withAttribute('command', $command); // @todo Emit afterRouting event } catch (InvalidArgumentException $e) { // Do nothing } } return $next($request, $response); }
/** * {@inheritdoc} */ public function createRequest(ServerRequestInterface $psrRequest) { $parsedBody = $psrRequest->getParsedBody(); $parsedBody = is_array($parsedBody) ? $parsedBody : array(); $request = new Request($psrRequest->getQueryParams(), $parsedBody, $psrRequest->getAttributes(), $psrRequest->getCookieParams(), $this->getFiles($psrRequest->getUploadedFiles()), $psrRequest->getServerParams(), $psrRequest->getBody()->__toString()); $request->headers->replace($psrRequest->getHeaders()); return $request; }
/** * Execute the middleware. Don't call this method directly; it is used by the `Application` internally. * * @internal * * @param ServerRequestInterface $request The request object * @param ResponseInterface $response The response object * @param callable $next The next middleware handler * * @return ResponseInterface */ public function handle(ServerRequestInterface $request, ResponseInterface $response, callable $next = null) { $attributes = $request->getAttributes(); if (!isset($attributes['command']) && $this->isLegacy()) { // @todo Emit afterRouting event } return $next($request, $response); }
/** * Converts a PSR-7 request into an OAuth2 request. * * @param ServerRequestInterface $psrRequest * @return Request */ public static function convertRequestFromPsr7(ServerRequestInterface $psrRequest) { $headers = []; foreach ($psrRequest->getHeaders() as $header => $value) { $headers[$header] = implode(';', $value); } return new Request($psrRequest->getQueryParams(), is_array($psrRequest->getParsedBody()) ? $psrRequest->getParsedBody() : [], $psrRequest->getAttributes(), $psrRequest->getCookieParams(), self::getFiles($psrRequest->getUploadedFiles()), $psrRequest->getServerParams(), $psrRequest->getBody()->__toString(), $headers); }
public static function createRequest(PsrServerRequestInterface $psrRequest) { $request = new Request(new Uri($psrRequest->getUri()), $psrRequest->getMethod(), $psrRequest->getHeaders(), $psrRequest->getBody()); $attributes = $psrRequest->getAttributes(); foreach ($attributes as $name => $value) { $request->setAttribute($name, $value); } return $request; }
/** * Flatten all input from the request. * * @param ServerRequestInterface $request * * @return array */ public function __invoke(ServerRequestInterface $request) { $attrs = $request->getAttributes(); $body = $this->body($request); $cookies = $request->getCookieParams(); $query = $request->getQueryParams(); $uploads = $request->getUploadedFiles(); // Order matters here! Important values go last! return array_replace($query, $body, $uploads, $cookies, $attrs); }
/** * Returns a map of routing parameters extracted from the request attributes (which mast have been set previously by * a router). * * @param ServerRequestInterface $request * @return array A map of name => value of all routing parameters set on the request. */ static function getRouteParameters(ServerRequestInterface $request) { return mapAndFilter($request->getAttributes(), function ($v, &$k) { if ($k && $k[0] == '@') { $k = substr($k, 1); return $v; } return null; }); }
/** * Construct action request. * * @param \Psr\Http\Message\ServerRequestInterface $request Request to wrap. */ public function __construct(\Psr\Http\Message\ServerRequestInterface $request) { parent::__construct($request->getBody()); foreach ($request->getHeaders() as $name => $value) { $this->setHeader($name, $value); } $this->protocolVersion = $request->getProtocolVersion(); $this->method = $request->getMethod(); $this->requestTarget = $request->getRequestTarget(); $this->uri = $request->getUri(); $this->attributes = $request->getAttributes(); $this->cookies = $request->getCookieParams(); $this->data = $request->getParsedBody(); $this->query = $request->getQueryParams(); $this->server = $request->getServerParams(); $this->files = $request->getUploadedFiles(); if (isset($this->server['SCRIPT_NAME'])) { $this->attributes['basePath'] = dirname($this->server['SCRIPT_NAME']); $this->attributes['scriptName'] = basename($this->server['SCRIPT_NAME']); } else { $this->attributes['basePath'] = '/'; $this->attributes['scriptName'] = 'index.php'; } if (!isset($this->attributes['path'])) { $this->attributes['path'] = self::findPath($this); } if (!isset($this->attributes['rewrite'])) { $this->attributes['rewrite'] = false; } if (!isset($this->attributes['accepts'])) { $this->attributes['accepts'] = []; if (isset($this->server['HTTP_ACCEPT'])) { $contentTypes = explode(',', $this->server['HTTP_ACCEPT']); foreach ($contentTypes as $contentType) { $contentType = explode(';', $contentType); $this->attributes['accepts'][] = trim(strtolower($contentType[0])); } } } if (!isset($this->attributes['encodings'])) { $this->attributes['encodings'] = []; if (isset($this->server['HTTP_ACCEPT_ENCODING'])) { $acceptEncodings = explode(',', $this->server['HTTP_ACCEPT_ENCODING']); foreach ($acceptEncodings as $encoding) { $this->attributes['encodings'][] = trim(strtolower($encoding)); } } } }
/** * @param Request $request * @param array $routeParams * * @return JsonResponse */ public function handle(Request $request, array $routeParams = []) { $params = ['data' => ['attributes' => $request->getAttributes()]]; $apiResponse = $this->apiClient->send(app('flarum.actor'), 'Flarum\\Api\\Actions\\Users\\CreateAction', $params); $body = $apiResponse->getBody(); $statusCode = $apiResponse->getStatusCode(); $response = new JsonResponse($body, $statusCode); if (!empty($body->data->attributes->isActivated)) { $token = $this->bus->dispatch(new GenerateAccessToken($body->data->id)); // Extend the token's expiry to 2 weeks so that we can set a // remember cookie AccessToken::where('id', $token->id)->update(['expires_at' => new DateTime('+2 weeks')]); return $this->withRememberCookie($response, $token->id); } return $response; }
public function invoke($middleware, ServerRequestInterface $request, callable $next) : ResponseInterface { if (!$this->invoker) { $this->invoker = $this->createInvoker(); } $parameters = $request->getAttributes(); $parameters['request'] = $request; $parameters['next'] = $next; $newResponse = $this->invoker->call($middleware, $parameters); if (is_string($newResponse)) { // Allow direct string response $newResponse = new HtmlResponse($newResponse); } elseif (!$newResponse instanceof ResponseInterface) { throw new \RuntimeException(sprintf('The controller did not return a response (expected %s, got %s)', ResponseInterface::class, is_object($newResponse) ? get_class($newResponse) : gettype($newResponse))); } return $newResponse; }
/** * @param Request $request * @param array $routeParams * @return JsonResponse|EmptyResponse */ public function handle(Request $request, array $routeParams = []) { $params = array_only($request->getAttributes(), ['identification', 'password']); $data = $this->apiClient->send(app('flarum.actor'), 'Flarum\\Api\\Actions\\TokenAction', $params)->getBody(); // TODO: The client needs to pass through exceptions(?) or the whole // response so we can look at the response code. For now if there isn't // any useful data we just assume it's a 401. if (isset($data->userId)) { // Extend the token's expiry to 2 weeks so that we can set a // remember cookie AccessToken::where('id', $data->token)->update(['expires_at' => new DateTime('+2 weeks')]); event(new UserLoggedIn($this->users->findOrFail($data->userId), $data->token)); return $this->withRememberCookie(new JsonResponse($data), $data->token); } else { return new EmptyResponse(401); } }
/** * {@inheritdoc} */ public function createRequest(ServerRequestInterface $psrRequest) { $server = array(); $uri = $psrRequest->getUri(); if ($uri instanceof UriInterface) { $server['SERVER_NAME'] = $uri->getHost(); $server['SERVER_PORT'] = $uri->getPort(); $server['REQUEST_URI'] = $uri->getPath(); $server['QUERY_STRING'] = $uri->getQuery(); } $server['REQUEST_METHOD'] = $psrRequest->getMethod(); $server = array_replace($server, $psrRequest->getServerParams()); $parsedBody = $psrRequest->getParsedBody(); $parsedBody = is_array($parsedBody) ? $parsedBody : array(); $request = new Request($psrRequest->getQueryParams(), $parsedBody, $psrRequest->getAttributes(), $psrRequest->getCookieParams(), $this->getFiles($psrRequest->getUploadedFiles()), $server, $psrRequest->getBody()->__toString()); $request->headers->replace($psrRequest->getHeaders()); return $request; }
/** * Flatten all input from the request * * @param ServerRequestInterface $request * * @return array */ public function __invoke(ServerRequestInterface $request) { $attrs = $request->getAttributes(); $body = $request->getParsedBody(); $cookies = $request->getCookieParams(); $query = $request->getQueryParams(); $uploads = $request->getUploadedFiles(); if (empty($body)) { $body = []; } elseif (is_object($body)) { // Because the parsed body may also be represented as an object, // additional parsing is required. This is a bit dirty but works // very well for anonymous objects. $body = json_decode(json_encode($body), true); } // Order matters here! Important values go last! return array_replace($query, $body, $uploads, $cookies, $attrs); }
public function __invoke(ServerRequestInterface $request) { $input = []; if ($params = $request->getQueryParams()) { $input = array_replace($input, $params); } if ($params = $request->getParsedBody()) { $input = array_replace($input, $params); } if ($params = $request->getUploadedFiles()) { $input = array_replace($input, $params); } if ($params = $request->getCookieParams()) { $input = array_replace($input, $params); } if ($params = $request->getAttributes()) { $input = array_replace($input, $params); } return $input; }
public function __invoke(ServerRequestInterface $request, ResponseInterface $response, callable $next = null) { $method = $request->getMethod(); $attributes = $request->getAttributes(); $params = $request->getQueryParams(); $data = $this->getRequestData($request); if ($data instanceof ApiProblem) { return $this->prepareResponse($data); } if ($method === 'GET') { $result = null; if (isset($attributes['id'])) { $result = $this->fetch($attributes['id']); } else { $result = $this->fetchAll($params); } return $this->prepareResponse($result); } elseif ($method === 'POST') { return $this->prepareResponse($this->create($data)); } elseif ($method === 'PUT') { if (isset($attributes['id'])) { return $this->prepareResponse($this->update($attributes['id'], $data)); } } elseif ($method === 'PATCH') { if (isset($attributes['id'])) { return $this->prepareResponse($this->patch($attributes['id'], $data)); } } elseif ($method === 'DELETE') { if (isset($attributes['id'])) { return $this->prepareResponse($this->delete($attributes['id'])); } } else { return $this->prepareResponse((new ApiProblem(405, 'Method not allowed!'))->toArray()); } return $this->prepareResponse((new ApiProblem(400, 'Bad Request'))->toArray()); }
/** * {@inheritDoc} */ public function getAttributes() { return $this->psrRequest->getAttributes(); }
protected function runMatches(ServerRequestInterface $request) { $attributes = $request->getAttributes(); return isset($attributes[$this->expected]); }
/** * @param ServerRequestInterface $r * @param $title */ private function logRequest($r, $title, $forceShow = false) { /** @var ServerRequestInterface $current */ $current = $this->currentRequestMutator->get(); $showAll = !$this->currentRequestMutator->get() || $forceShow; $icon = $showAll ? '' : '<sup>*</sup>'; if ($showAll || $r->getHeaders() != $current->getHeaders()) { $out['Headers' . $icon] = map($r->getHeaders(), function ($v) { return implode('<br>', $v); }); } if ($showAll || $r->getAttributes() != $current->getAttributes()) { $out['Attributes' . $icon] = $r->getAttributes(); } if ($showAll || $r->getRequestTarget() != $current->getRequestTarget()) { $out['Request target' . $icon] = $r->getRequestTarget(); } if ($showAll || $r->getBody()->getSize() != self::$currentRequestSize) { $out['Size' . $icon] = $r->getBody()->getSize(); } $this->routingLogger->write("<div class='indent'>")->simpleTable($out, $title)->write('</div>'); }
/** * @param CommandInterface|string $command * @param ServerRequestInterface $request */ protected function dispatchFromRequest($command, ServerRequestInterface $request) { return $this->dispatch($command, $request->getAttributes()); }
/** * Returns a new instance of \OAuth2\Request based on the given \Slim\Http\Request * * @param ServerRequestInterface $request The psr-7 request. * * @return OAuth2\Request */ public static final function toOAuth2(ServerRequestInterface $request) { return new OAuth2\Request((array) $request->getQueryParams(), (array) $request->getParsedBody(), $request->getAttributes(), $request->getCookieParams(), self::convertUploadedFiles($request->getUploadedFiles()), $request->getServerParams(), (string) $request->getBody(), self::cleanupHeaders($request->getHeaders())); }
private function getAttributes(ServerRequestInterface $request) { return array_values(array_filter($request->getAttributes(), function ($parameter) { return $parameter[0] !== '_'; }, ARRAY_FILTER_USE_KEY)); }
/** * * @param Route $route * @return mixed */ public function dispatch(ServerRequestInterface $request = null, ResponseInterface $response = null) { if (!isset($request->getAttributes()['route'])) { $request = $this->find($request, $response); } $route = $request->getAttribute('route'); if ($route->getStrategy() instanceof Strategies\HttpAwareStrategyInterface) { $route->getStrategy()->setRequest($request); $route->getStrategy()->setResponse($response); } return $route->callStrategy(); }
public function __invoke(Request $request) { return [array_merge((array) $request->getQueryParams(), (array) $request->getAttributes(), (array) $request->getParsedBody())]; }
public function __invoke(ServerRequestInterface $request) { return [array_merge((array) $request->getQueryParams(), (array) $request->getAttributes(), (array) $request->getParsedBody(), (array) $request->getUploadedFiles())]; }
/** * {@inheritdoc} */ public function getAttributes() { return $this->wrapped->getAttributes(); }
public function __construct(ServerRequestInterface $request) { $this->data = $request->getAttributes(); }