/** * CLI commands run from app/console.php * * Maps HTTP request to a Request object. * @return Nette\Application\Request|NULL */ public function match(Nette\Http\IRequest $httpRequest) { $this->loadLocales(); $urlPath = new Services\UrlPath($httpRequest); $urlPath->setPredefinedLocales($this->locales); /** @var Url $urlEntity */ $urlEntity = $this->loadUrlEntity($urlPath->getPath(true)); if ($urlEntity === null) { // no route found $this->onUrlNotFound($urlPath); return null; } if ($urlEntity->getActualUrlToRedirect() === null) { $presenter = $urlEntity->getPresenter(); $internal_id = $urlEntity->getInternalId(); $action = $urlEntity->getAction(); } else { $presenter = $urlEntity->getActualUrlToRedirect()->getPresenter(); $internal_id = $urlEntity->getActualUrlToRedirect()->getInternalId(); $action = $urlEntity->getActualUrlToRedirect()->getAction(); } $params = $httpRequest->getQuery(); $params['action'] = $action; $params['locale'] = $urlPath->getLocale(); $this->urlParametersConverter->in($urlEntity, $params); // todo if ($internal_id !== null) { $params['internal_id'] = $internal_id; } return new Nette\Application\Request($presenter, $httpRequest->getMethod(), $params, $httpRequest->getPost(), $httpRequest->getFiles()); }
/** * Sends chunked response to output. * * @param \MouseOver\Storage\IStorageFile $storageFile Storage file * @param \Nette\Http\IRequest $httpRequest HTTP request * @param \Nette\Http\IResponse $httpResponse HTTP response * * @return void */ protected function sendStorageFile($storageFile, Nette\Http\IRequest $httpRequest, Nette\Http\IResponse $httpResponse) { $httpResponse->setHeader('Accept-Ranges', 'bytes'); $reader = $storageFile->getReader(); if (preg_match('#^bytes=(\\d*)-(\\d*)\\z#', $httpRequest->getHeader('Range'), $matches)) { list(, $start, $end) = $matches; if ($start === '') { $start = null; } if ($end === '') { $end = null; } try { $reader->setRange($start, $end); } catch (\InvalidArgumentException $invalidArgumentException) { $httpResponse->setCode(416); // requested range not satisfiable return; } $httpResponse->setCode(206); $httpResponse->setHeader('Content-Range', 'bytes ' . $reader->getRangeStart() . '-' . $reader->getRangeEnd() . '/' . $reader->getFileSize()); $reader->setRange($start, $end); $httpResponse->setHeader('Content-Length', $reader->getLength()); } else { $httpResponse->setHeader('Content-Range', 'bytes 0-' . ($reader->getFileSize() - 1) . '/' . $reader->getFileSize()); $httpResponse->setHeader('Content-Length', $reader->getLength()); } while ($reader->hasContent()) { echo $reader->read(); } }
/** * @return Template */ public function createTemplate(UI\Control $control = NULL) { $latte = $this->latteFactory->create(); $template = new Template($latte); $presenter = $control ? $control->getPresenter(FALSE) : NULL; if ($control instanceof UI\Presenter) { $latte->setLoader(new Loader($control)); } if ($latte->onCompile instanceof \Traversable) { $latte->onCompile = iterator_to_array($latte->onCompile); } array_unshift($latte->onCompile, function ($latte) use($control, $template) { $latte->getCompiler()->addMacro('cache', new Nette\Bridges\CacheLatte\CacheMacro($latte->getCompiler())); UIMacros::install($latte->getCompiler()); if (class_exists(Nette\Bridges\FormsLatte\FormMacros::class)) { Nette\Bridges\FormsLatte\FormMacros::install($latte->getCompiler()); } if ($control) { $control->templatePrepareFilters($template); } }); $latte->addFilter('url', 'rawurlencode'); // back compatiblity foreach (['normalize', 'toAscii', 'webalize', 'padLeft', 'padRight', 'reverse'] as $name) { $latte->addFilter($name, 'Nette\\Utils\\Strings::' . $name); } $latte->addFilter('null', function () { }); $latte->addFilter('modifyDate', function ($time, $delta, $unit = NULL) { return $time == NULL ? NULL : Nette\Utils\DateTime::from($time)->modify($delta . $unit); // intentionally == }); if (!isset($latte->getFilters()['translate'])) { $latte->addFilter('translate', function (Latte\Runtime\FilterInfo $fi) { throw new Nette\InvalidStateException('Translator has not been set. Set translator using $template->setTranslator().'); }); } // default parameters $template->user = $this->user; $template->baseUri = $template->baseUrl = $this->httpRequest ? rtrim($this->httpRequest->getUrl()->getBaseUrl(), '/') : NULL; $template->basePath = preg_replace('#https?://[^/]+#A', '', $template->baseUrl); $template->flashes = []; if ($control) { $template->control = $control; $template->presenter = $presenter; $latte->addProvider('uiControl', $control); $latte->addProvider('uiPresenter', $presenter); $latte->addProvider('snippetBridge', new Nette\Bridges\ApplicationLatte\SnippetBridge($control)); } $latte->addProvider('cacheStorage', $this->cacheStorage); // back compatibility $template->_control = $control; $template->_presenter = $presenter; $template->netteCacheStorage = $this->cacheStorage; if ($presenter instanceof UI\Presenter && $presenter->hasFlashSession()) { $id = $control->getParameterId('flash'); $template->flashes = (array) $presenter->getFlashSession()->{$id}; } return $template; }
/** * @param \Ark8\Security\Authorizators\Request $request * @return array * @throws \Nette\InvalidStateException */ private function getSignal(Request $request) { $params = $request->getParameters(); if ($this->httpRequest->isAjax()) { $params += $request->getPost(); } elseif (($tmp = $request->getPost(Presenter::SIGNAL_KEY)) !== NULL) { $params[self::SIGNAL_KEY] = $tmp; } $signal = NULL; $signalReceiver = ''; if (isset($params[Presenter::SIGNAL_KEY])) { $param = $params[Presenter::SIGNAL_KEY]; $pos = strrpos($param, '-'); if ($pos) { $signalReceiver = substr($param, 0, $pos); $signal = substr($param, $pos + 1); } else { $signalReceiver = $this->getUniqueId(); $signal = $param; } if ($signal == NULL) { // intentionally == $signal = NULL; } } return [$signal, explode('-', $signalReceiver)]; }
/** * Maps HTTP request to a Request object. * @return Nette\Application\Request|NULL */ public function match(Nette\Http\IRequest $httpRequest) { // combine with precedence: mask (params in URL-path), fixity, query, (post,) defaults // 1) URL MASK $url = $httpRequest->getUrl(); $re = $this->re; if ($this->type === self::HOST) { $path = '//' . $url->getHost() . $url->getPath(); $host = array_reverse(explode('.', $url->getHost())); $re = strtr($re, array('/%basePath%/' => preg_quote($url->getBasePath(), '#'), '%tld%' => $host[0], '%domain%' => isset($host[1]) ? "{$host['1']}\\.{$host['0']}" : $host[0])); } elseif ($this->type === self::RELATIVE) { $basePath = $url->getBasePath(); if (strncmp($url->getPath(), $basePath, strlen($basePath)) !== 0) { return NULL; } $path = (string) substr($url->getPath(), strlen($basePath)); } else { $path = $url->getPath(); } if ($path !== '') { $path = rtrim($path, '/') . '/'; } if (!($matches = Strings::match($path, $re))) { // stop, not matched return NULL; } if (!$this->manager->isAMFRequest()) { return null; } return $this->manager->createApplicationRequest(); }
public function generateImage(ImageRequest $request) { $width = $request->getWidth(); $height = $request->getHeight(); $format = $request->getFormat(); if (!$this->validator->validate($width, $height)) { throw new Application\BadRequestException(); } $image = NULL; foreach ($this->providers as $provider) { $image = $provider->getImage($request); if ($image) { break; } } if (!$image) { $this->httpResponse->setHeader('Content-Type', 'image/jpeg'); $this->httpResponse->setCode(Http\IResponse::S404_NOT_FOUND); exit; } $destination = $this->wwwDir . '/' . $this->httpRequest->getUrl()->getRelativeUrl(); $dirname = dirname($destination); if (!is_dir($dirname)) { $success = @mkdir($dirname, 0777, TRUE); if (!$success) { throw new Application\BadRequestException(); } } $success = $image->save($destination, 90, $format); if (!$success) { throw new Application\BadRequestException(); } $image->send(); exit; }
public function send(HttpRequest $request, HttpResponse $response) { $width = null; $height = null; $quality = null; try { $url = $request->getUrl(); $name = Strings::after($url->getPath(), '/', -1); try { // only for case, when all images expected response from application and not from existing images $thumb = $this->repository->fetchThumbnail($name); } catch (\Imager\NotExistsException $e) { // thumbnail must be generate, because not exists $id = $url->getQueryParameter('id'); $width = $url->getQueryParameter('width'); $height = $url->getQueryParameter('height'); $quality = $url->getQueryParameter('quality'); $source = $this->repository->fetch($id); $thumb = $this->factory->create($source)->resize($width, $height, $quality); $thumb = $this->repository->save($thumb); } $response->setContentType($thumb->getMime()); $response->setHeader('Content-Length', $thumb->getSize()); echo $thumb->getContent(); } catch (\Exception $e) { $width = $width ?: 200; $height = $height ?: 200; $this->sendError($response, $e, $width, $height); } exit(0); }
/** * @param \DK\Translator\Loaders\Loader|string $pathOrLoader * @param \Nette\Http\IRequest $httpRequest */ public function __construct($pathOrLoader, IRequest $httpRequest = null) { parent::__construct($pathOrLoader); if ($httpRequest !== null) { $this->debugMode = (bool) $httpRequest->getCookie(Panel::COOKIE_DEBUG_KEY); } }
/** * Detects mobile browser * * @author http://detectmobilebrowsers.com * @param IRequest $httpRequest * @return bool */ public function isMobile(IRequest $httpRequest) { $useragent = $httpRequest->getHeader("user-agent"); if (preg_match('/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i', $useragent) || preg_match('/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i', substr($useragent, 0, 4))) { return TRUE; } return FALSE; }
/** * Get request method flag * @param Http\IRequest $httpRequest * @return string|null */ public function getMethod(Http\IRequest $httpRequest) { $method = $httpRequest->getMethod(); if (!isset($this->methodDictionary[$method])) { return NULL; } return $this->methodDictionary[$method]; }
protected function getRequestData() { $request_data = (array) $this->request->getPost(self::PARAMETER); $request_data += ['action' => null, 'key' => null, 'language' => null, 'texts' => []]; if ($request_data['key'] && empty($request_data['id'])) { $request_data['id'] = $this->createHash($request_data['key']); } return $request_data; }
/** * @param Http\IRequest $httpRequest * @return string */ private function detectHttpMethod(Http\IRequest $httpRequest) { $method = $httpRequest->getMethod(); if ($this->headerOverride && $method === Http\IRequest::POST) { $overriden = $httpRequest->getHeader($this->headerOverride); $method = $overriden ? strtoupper($overriden) : $method; } return $method; }
/** * @return Input */ public function createInput() { $parser = null; $type = strtok($this->request->getHeader('Content-Type'), ';'); if ($type && isset($this->parsers[$type])) { $parser = $this->parsers[$type]; } return new Input($this->request, $parser); }
/** * Maps HTTP request to a Request object. * * @param Nette\Http\IRequest $httpRequest * @return NULL|Request */ public function match(Nette\Http\IRequest $httpRequest) { $path = ltrim($httpRequest->getUrl()->getPath(), '/'); if (Nette\Utils\Strings::match($path, '~^' . preg_quote($this->mask, '~') . '/*($|\\?)~')) { header("Location: {$this->target}", TRUE, 301); die; } return NULL; }
/** * @param Http\Request $request * @return array */ private function parse(Http\IRequest $request) { $params = array_merge($request->getPost(), $request->getQuery()); if ($this->parser !== null) { $parsed = $this->parser->parse($request->getRawBody()); $params = array_merge($params, $parsed); } return $params; }
/** * @param IRequest $httpRequest * @return string */ private function prepareUrlPath(IRequest $httpRequest) { $url = $httpRequest->getUrl(); $basePath = $url->getPath(); $path = mb_substr($basePath, \mb_strlen($url->getBasePath())); if ($path !== '') { $path = rtrim(rawurldecode($path), '/'); } return $path; }
/** * @param Nette\Http\IRequest $httpRequest * @param Nette\Http\IResponse $httpResponse * @throws \Nette\Application\BadRequestException */ public function send(Nette\Http\IRequest $httpRequest, Nette\Http\IResponse $httpResponse) { $httpResponse->setContentType($this->contentType); $httpResponse->setExpiration(FALSE); $callback = $httpRequest->getQuery(self::$callbackName); if (is_null($callback)) { throw new \Nette\Application\BadRequestException("Invalid JSONP request."); } echo $callback . "(" . Nette\Utils\Json::encode($this->payload) . ")"; }
public function handleUpload() { $file = $this->httpRequest->getFile('Filedata'); if ($file->isOk()) { $this->onUpload($file, $this->httpRequest->getPost()); } else { $this->onError($file->getError()); } $this->presenter->terminate(); }
/** * Send JSONP response to output * @param IRequest $httpRequest * @param IResponse $httpResponse * @throws \Drahak\Restful\InvalidArgumentException */ public function send(IRequest $httpRequest, IResponse $httpResponse) { $httpResponse->setContentType($this->contentType ? $this->contentType : 'application/javascript', 'UTF-8'); $data = array(); $data['response'] = $this->data; $data['status'] = $httpResponse->getCode(); $data['headers'] = $httpResponse->getHeaders(); $callback = $httpRequest->getQuery('jsonp') ? Strings::webalize($httpRequest->getQuery('jsonp'), NULL, FALSE) : ''; echo $callback . '(' . $this->mapper->stringify($data, $this->isPrettyPrint()) . ');'; }
/** * Maps HTTP request to a Request object. * @return array|NULL */ public function match(Nette\Http\IRequest $request) { if ($request->getUrl()->getPathInfo() !== '') { return NULL; } // combine with precedence: get, (post,) defaults $params = $request->getQuery(); $params += $this->defaults; return $params; }
/** * Tries to match request * * @param \Nette\Http\IRequest $httpRequest * * @return \Nette\Application\Request|NULL */ public function match(\Nette\Http\IRequest $httpRequest) { foreach ($this->methods as $method) { // method is not matched, return null if ($httpRequest->isMethod($method)) { return parent::match($httpRequest); } } return null; }
/** * Logs with an arbitrary level. * * @param mixed $level * @param string $message * @param array $context * * @return null */ public function log($level, $message, array $context = []) { $logDateTime = new \DateTime(); $userId = $this->getAndRemoveContextValue($context, "UzivatelID", $this->user->id); $presenter = $this->getAndRemoveContextValue($context, "presenter"); $function = $this->getAndRemoveContextValue($context, "function"); $ip = $this->httpRequest->getRemoteAddress(); $message = $this->interpolate($message, $context); $this->database->table("syslog")->insert(["userId" => $userId, "ip" => $ip, "presenter" => $presenter, "function" => $function, "level" => $level, "logDateTime" => $logDateTime, "message" => $message]); }
/** * Renders panel. * @return string */ public function getPanel() { ob_start(); $request = $this->request; $routers = $this->routers; $source = $this->source; $url = $this->httpRequest->getUrl(); require __DIR__ . '/templates/RoutingPanel.panel.phtml'; return ob_get_clean(); }
/** * Check allowed methods * * @throws BadRequestException If method is not supported but another one can be used */ protected function checkAllowedMethods() { $availableMethods = $this->methods->getOptions($this->request->getUrl()); if (!$availableMethods || in_array($this->request->method, $availableMethods)) { return; } $allow = implode(', ', $availableMethods); $this->response->setHeader('Allow', $allow); throw BadRequestException::methodNotSupported('Method not supported. Available methods: ' . $allow); }
public function match(Http\IRequest $httpRequest) { $path = $httpRequest->getUrl()->getPath(); foreach ($this->assetManager->getNames() as $name) { $asset = $this->assetManager->get($name); if ('/' . $asset->getTargetPath() === $path) { $this->dumpAsset($asset); } } }
public function render() { if ($this->httpRequest->isAjax()) { if (!isset($this->myPresenter->payload->snippets)) { $this->myPresenter->payload->snippets = []; } $this->myPresenter->payload->snippets[$this->getSnippetId('state')] = $this->getStateElement()->render(); } else { echo Html::el('span', ['id' => $this->getSnippetId('state')])->add($this->getStateElement()); } }
/** * {@inheritdoc} */ public function getResourceId() { $refUrl = $this->httpRequest->getUrl(); $url = $this->router->constructUrl($this->request, $refUrl); if ($url === NULL) { throw new \Nette\Application\UI\InvalidLinkException(); } $hostUrl = $refUrl->getHostUrl() . '/'; if (strncmp($url, $hostUrl, strlen($hostUrl)) === 0) { $url = substr($url, strlen($hostUrl) - 1); } return $url; }
/** * Renders panel. * @return string */ public function getPanel() { ob_start(); $request = $this->request; $routers = $this->routers; $source = $this->source; $hasModule = (bool) array_filter($routers, function ($rq) { return $rq['module']; }); $url = $this->httpRequest->getUrl(); require __DIR__ . '/templates/RoutingPanel.panel.phtml'; return ob_get_clean(); }
/** * Sends response to output. * * @param \Nette\Http\IRequest $httpRequest * @param \Nette\Http\IResponse $httpResponse */ public function send(\Nette\Http\IRequest $httpRequest, \Nette\Http\IResponse $httpResponse) { if (strlen($this->etag)) { $httpResponse->setHeader('Etag', $this->etag); } $httpResponse->setExpiration(\Nette\Http\IResponse::PERMANENT); if (($inm = $httpRequest->getHeader('if-none-match')) && $inm == $this->etag) { $httpResponse->setCode(\Nette\Http\IResponse::S304_NOT_MODIFIED); return; } $httpResponse->setContentType($this->contentType); echo $this->content; }
/** * @return Template */ public function createTemplate(UI\Control $control = NULL) { $latte = $this->latteFactory->create(); $template = new Template($latte); $presenter = $control ? $control->getPresenter(FALSE) : NULL; if ($control instanceof UI\Presenter) { $latte->setLoader(new Loader($control)); } if ($latte->onCompile instanceof \Traversable) { $latte->onCompile = iterator_to_array($latte->onCompile); } array_unshift($latte->onCompile, function ($latte) use($control, $template) { $latte->getParser()->shortNoEscape = TRUE; $latte->getCompiler()->addMacro('cache', new Nette\Bridges\CacheLatte\CacheMacro($latte->getCompiler())); UIMacros::install($latte->getCompiler()); if (class_exists('Nette\\Bridges\\FormsLatte\\FormMacros')) { Nette\Bridges\FormsLatte\FormMacros::install($latte->getCompiler()); } if ($control) { $control->templatePrepareFilters($template); } }); $latte->addFilter('url', 'rawurlencode'); // back compatiblity foreach (array('normalize', 'toAscii', 'webalize', 'padLeft', 'padRight', 'reverse') as $name) { $latte->addFilter($name, 'Nette\\Utils\\Strings::' . $name); } $latte->addFilter('null', function () { }); $latte->addFilter('length', function ($var) { return is_string($var) ? Nette\Utils\Strings::length($var) : count($var); }); $latte->addFilter('modifyDate', function ($time, $delta, $unit = NULL) { return $time == NULL ? NULL : Nette\Utils\DateTime::from($time)->modify($delta . $unit); // intentionally == }); // default parameters $template->control = $template->_control = $control; $template->presenter = $template->_presenter = $presenter; $template->user = $this->user; $template->netteHttpResponse = $this->httpResponse; $template->netteCacheStorage = $this->cacheStorage; $template->baseUri = $template->baseUrl = $this->httpRequest ? rtrim($this->httpRequest->getUrl()->getBaseUrl(), '/') : NULL; $template->basePath = preg_replace('#https?://[^/]+#A', '', $template->baseUrl); $template->flashes = array(); if ($presenter instanceof UI\Presenter && $presenter->hasFlashSession()) { $id = $control->getParameterId('flash'); $template->flashes = (array) $presenter->getFlashSession()->{$id}; } return $template; }