Пример #1
0
 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;
 }
Пример #2
0
 /**
  * @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;
 }
Пример #3
0
 /**
  * Maps HTTP request to a Request object.
  *
  * @param Nette\Http\IRequest $httpRequest
  * @return Request|NULL
  */
 public function match(Nette\Http\IRequest $httpRequest)
 {
     $relativeUrl = trim($httpRequest->getUrl()->relativeUrl, "/");
     $path = trim($httpRequest->getUrl()->path, "/");
     if ($relativeUrl == "") {
         $target = $this->defaultRoute;
         $this->currentTarget->setCurrentTarget($this->targetDao->findTarget($target->presenter, $target->action, $target->id));
     } elseif ($relativeUrl == "sitemap.xml") {
         $target = new Target("Seo:Meta", "sitemap");
     } elseif ($relativeUrl == "robots.txt") {
         $target = new Target("Seo:Meta", "robots");
     } elseif (substr($relativeUrl, 0, 6) == "google" && $this->settingsDao->getWebmasterToolsName() == $relativeUrl) {
         $target = new Target("Seo:Meta", "googleWebmasterTools");
     } else {
         $route = $this->routeDao->findRouteBySlug($relativeUrl, TRUE);
         if (!$route) {
             $route = $this->routeDao->findRouteBySlug($path, TRUE);
             if (!$route) {
                 return NULL;
             }
         }
         $this->currentTarget->setCurrentTarget($route->getTarget());
         $target = new Target($route->target->targetPresenter, $route->target->targetAction, $route->target->targetId);
     }
     $params = array();
     $params["action"] = $target->action;
     if ($target->id) {
         $params["id"] = $target->id;
     }
     $params += $httpRequest->getQuery();
     return new Request($target->presenter, $httpRequest->getMethod(), $params, $httpRequest->getPost(), $httpRequest->getFiles(), array(Request::SECURED => $httpRequest->isSecured()));
 }
Пример #4
0
 /**
  * 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();
 }
Пример #5
0
 /**
  * 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);
 }
Пример #6
0
 /**
  * {@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;
 }
Пример #7
0
 /**
  * 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();
 }
Пример #8
0
 /**
  * @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;
 }
 /**
  * Restores request from session.
  * @param string $key
  */
 public function redirectToRequest($key)
 {
     $request = $this->requestStorage->loadRequest($key);
     if (!$request) {
         return;
     }
     $parameters = $request->getParameters();
     $parameters[Presenter::FLASH_KEY] = $this->getParameter(Presenter::FLASH_KEY);
     $parameters[RequestStorage::REQUEST_KEY] = $key;
     $request->setParameters($parameters);
     $refUrl = new Url($this->httpRequest->getUrl());
     $refUrl->setPath($this->httpRequest->getUrl()->getScriptPath());
     $url = $this->router->constructUrl($request, $refUrl);
     $this->redirectUrl($url);
 }
Пример #10
0
 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);
 }
Пример #11
0
	/**
	 * Maps HTTP request to a Request object.
	 * @return Nette\Application\Request|NULL
	 */
	public function match(Nette\Http\IRequest $httpRequest)
	{
		if ($httpRequest->getUrl()->getPathInfo() !== '') {
			return NULL;
		}
		// combine with precedence: get, (post,) defaults
		$params = $httpRequest->getQuery();
		$params += $this->defaults;

		if (!isset($params[self::PRESENTER_KEY]) || !is_string($params[self::PRESENTER_KEY])) {
			return NULL;
		}

		$presenter = $this->module . $params[self::PRESENTER_KEY];
		unset($params[self::PRESENTER_KEY]);

		return new Application\Request(
			$presenter,
			$httpRequest->getMethod(),
			$params,
			$httpRequest->getPost(),
			$httpRequest->getFiles(),
			array(Application\Request::SECURED => $httpRequest->isSecured())
		);
	}
Пример #12
0
 /**
  * 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();
 }
Пример #13
0
 private function process($url, string $directory, string $parameter, array &$dependencies = []) : string
 {
     $url = new Nette\Http\Url($url);
     $time = NULL;
     if ($url->getHost() && (!$this->request || $url->getHost() !== $this->request->getUrl()->getHost())) {
         $headers = @get_headers($url, TRUE);
         if (is_array($headers) && isset($headers['Last-Modified'])) {
             $time = (new DateTime($headers['Last-Modified']))->getTimestamp();
         }
     } elseif (is_file($filename = implode(DIRECTORY_SEPARATOR, [rtrim($directory, '\\/'), ltrim($url->getPath(), '\\/')]))) {
         $time = filemtime($filename);
         unset($dependencies[Nette\Caching\Cache::EXPIRE]);
         $dependencies[Nette\Caching\Cache::FILES] = $filename;
     }
     $url->setQueryParameter($parameter, $time ?: ($this->time ?: ($this->time = time())));
     return preg_replace($pattern = '#^(\\+|/+)#', preg_match($pattern, $url->getPath()) ? DIRECTORY_SEPARATOR : NULL, $url);
 }
Пример #14
0
 /**
  * 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;
 }
Пример #15
0
 /**
  * Get last page URL
  * @param Paginator $paginator
  * @return Link
  */
 private function getLastPageUrl(Paginator $paginator)
 {
     $url = clone $this->request->getUrl();
     parse_str($url->getQuery(), $query);
     $query['offset'] = $paginator->getLastPage() * $paginator->getItemsPerPage() - $paginator->getItemsPerPage();
     $query['limit'] = $paginator->getItemsPerPage();
     $url->appendQuery($query);
     return new Link($url, Link::LAST);
 }
Пример #16
0
 /**
  * @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;
 }
Пример #17
0
 /**
  * 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;
 }
Пример #18
0
 /**
  * @param \Nette\Application\Request $request
  * @return \Nette\Application\IResponse
  * @throws \Nette\Application\BadRequestException
  */
 public function run(Application\Request $request)
 {
     $this->request = $request;
     if ($this->httpRequest && $this->router && !$this->httpRequest->isAjax() && ($request->isMethod('get') || $request->isMethod('head'))) {
         $refUrl = clone $this->httpRequest->getUrl();
         $url = $this->router->constructUrl($request, $refUrl->setPath($refUrl->getScriptPath()));
         if ($url !== NULL && !$this->httpRequest->getUrl()->isEqual($url)) {
             return new Responses\RedirectResponse($url, Http\IResponse::S301_MOVED_PERMANENTLY);
         }
     }
     $params = $request->getParameters();
     if (!isset($params['id'])) {
         throw new Application\BadRequestException('Parameter id is missing.');
     }
     if (NULL === ($item = $this->context->getService('webloader.cache')->getItem(\Nette\Utils\Strings::webalize($params['id'])))) {
         return new Responses\TextResponse('');
     }
     return new \Lohini\WebLoader\WebLoaderResponse($item[WebLoader::CONTENT], $item[WebLoader::CONTENT_TYPE], $item[WebLoader::ETAG]);
 }
Пример #19
0
 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);
         }
     }
 }
Пример #20
0
 /**
  * @return Template
  */
 public function createTemplate(UI\Control $control)
 {
     $latte = $this->latteFactory->create();
     $template = new Template($latte);
     $presenter = $control->getPresenter(FALSE);
     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());
         Nette\Bridges\FormsLatte\FormMacros::install($latte->getCompiler());
         $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);
     }
     // 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 = rtrim($this->httpRequest->getUrl()->getBaseUrl(), '/');
     $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;
 }
Пример #21
0
 /**
  * Template factory.
  * @param  string
  * @return Application\UI\ITemplate
  */
 public function createTemplate($class = NULL, callable $latteFactory = NULL)
 {
     $latte = $latteFactory ? $latteFactory() : $this->getContext()->getByType(Nette\Bridges\ApplicationLatte\ILatteFactory::class)->create();
     $template = $class ? new $class() : new Nette\Bridges\ApplicationLatte\Template($latte);
     $template->setParameters($this->request->getParameters());
     $template->presenter = $this;
     $template->context = $this->context;
     if ($this->httpRequest) {
         $url = $this->httpRequest->getUrl();
         $template->baseUrl = rtrim($url->getBaseUrl(), '/');
         $template->basePath = rtrim($url->getBasePath(), '/');
     }
     return $template;
 }
Пример #22
0
 /**
  * Returns the Current URL, stripping it of known FB parameters that should
  * not persist.
  *
  * @internal
  * @return \Nette\Http\UrlScript The current URL
  */
 public function getCurrentUrl()
 {
     $url = clone $this->httpRequest->getUrl();
     if ($this->config->trustForwarded && isset($_SERVER['HTTP_X_FORWARDED_HOST'])) {
         $url->setHost($_SERVER['HTTP_X_FORWARDED_HOST']);
     }
     if ($this->config->trustForwarded && isset($_SERVER['HTTP_X_FORWARDED_PROTO'])) {
         $url->setScheme($_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https' ? 'https' : 'http');
     }
     parse_str($url->getQuery(), $query);
     $query = array_diff_key($query, array_flip($this->config->dropQueryParams));
     $url->setQuery($query);
     return $url;
 }
Пример #23
0
 public function match(Nette\Http\IRequest $httpRequest)
 {
     $url = $httpRequest->getUrl();
     $basePath = Strings::replace($url->getBasePath(), '/\\//', '\\/');
     $cleanPath = Strings::replace($url->getPath(), "/^{$basePath}/", '');
     $pathRegExp = '#' . preg_quote($this->prefix, '#') . '(' . implode('|', $this->availableResource) . ')/?$#';
     $matches = Strings::match($cleanPath, $pathRegExp);
     if (!$matches) {
         return NULL;
     }
     $presenter = self::path2presenter($matches[1]);
     $params = ['action' => $this->detectAction($httpRequest), 'query' => $this->readInput()];
     $request = new Request($presenter, $this->detectMethod($httpRequest), $params, $httpRequest->getPost());
     return $request;
 }
Пример #24
0
    /**
     * Maps HTTP request to a Request object.
     *
     * @param Nette\Http\IRequest $httpRequest
     * @return NULL|Request
     */
    public function match(Nette\Http\IRequest $httpRequest)
    {
        $slug = ltrim($httpRequest->getUrl()->getPath(), '/');
        $id = $this->dibi->query('
			SELECT [c.id]
			FROM [old_links] [l]

			INNER JOIN [contents] [c] ON [c.youtube_id] = [l.target]

			WHERE [mask] = %s', $slug, '
		')->fetchSingle();
        if (!$id) {
            return NULL;
        }
        return new Request('Video', $httpRequest->getMethod(), ['action' => 'default', 'videoId' => $id]);
    }
Пример #25
0
 public function match(Http\IRequest $request)
 {
     $url = $request->getUrl();
     if (Strings::contains($url->path, $this->basePath) === false) {
         return;
     }
     $imgUrl = Strings::after($url->path, $this->basePath);
     $imgUrl = Strings::after($imgUrl, '/', -1);
     $parts = Imager\Helpers::parseName($imgUrl);
     if (!isset($parts['id'])) {
         return;
     }
     $url->setQueryParameter('id', $parts['id'])->setQueryParameter('width', $parts['width'])->setQueryParameter('height', $parts['height'])->setQueryParameter('quality', $parts['quality']);
     $response = new ImageResponse($this->repository, $this->imageFactory);
     $response->send(new Http\Request($url), new Http\Response());
 }
Пример #26
0
 /**
  * Maps HTTP request to a Request object.
  * @param  Nette\Http\IRequest
  * @return Nette\Application\Request|NULL
  */
 public function match(Nette\Http\IRequest $httpRequest)
 {
     if (Strings::startsWith($httpRequest->getUrl()->getPath(), '/admin')) {
         $router = $this->adminRouter;
     } else {
         $router = $this->frontRouter;
     }
     foreach ($router as $route) {
         $appRequest = $route->match($httpRequest);
         if ($appRequest !== NULL) {
             $appRequest->setPresenterName($appRequest->getPresenterName());
             return $appRequest;
         }
     }
     return NULL;
 }
Пример #27
0
 /**
  * Sends response to output.
  * @param Nette\Http\IRequest $httpRequest
  * @param Nette\Http\IResponse $httpResponse
  * @return void
  */
 public function send(Nette\Http\IRequest $httpRequest, Nette\Http\IResponse $httpResponse)
 {
     $httpResponse->setContentType($this->contentType);
     $httpResponse->setExpiration(FALSE);
     $response = array();
     $actual_url = $httpRequest->getUrl()->getAbsoluteUrl();
     date_default_timezone_set('UTC');
     //TODO: -1min
     $date = date('YmdHi');
     $hmac = hash_hmac('sha512', $actual_url . $date, 'PRIVATE_KEY');
     //TODO: na základě public key ($api_key)
     if ($this->payload['api_hash'] !== $hmac) {
         $response['err_code'] = 10;
         $response['err_info'] = $this->errors[10];
     }
     echo Nette\Utils\Json::encode($this->payload);
 }
Пример #28
0
 /**
  * Maps HTTP request to a Request object.
  * @param \Nette\Http\IRequest $httpRequest
  * @return \Nette\Application\Request|NULL
  */
 public function match(IRequest $httpRequest)
 {
     $url = $httpRequest->getUrl();
     $basePath = Strings::replace($url->getBasePath(), '/\\//', '\\/');
     $cleanPath = Strings::replace($url->getPath(), "/^{$basePath}/");
     $path = Strings::replace($this->getPath(), '/\\//', '\\/');
     $pathRexExp = empty($path) ? "/^.+\$/" : "/^{$path}\\/.*\$/";
     if (!Strings::match($cleanPath, $pathRexExp)) {
         return NULL;
     }
     $cleanPath = Strings::replace($cleanPath, '/^' . $path . '\\//');
     $params = array();
     $path = $cleanPath;
     $params['action'] = $this->detectAction($httpRequest);
     $frags = explode('/', $path);
     // Resource ID.
     if (count($frags) % 2 === 0) {
         $params['id'] = array_pop($frags);
     } elseif ($params['action'] == 'read' && $this->useReadAllAction) {
         $params['action'] = 'readAll';
     }
     $presenterName = Strings::firstUpper(array_pop($frags));
     // Allow to use URLs like domain.tld/presenter.format.
     $formats = join('|', array_keys($this->formats));
     if (Strings::match($presenterName, "/.+\\.({$formats})\$/")) {
         list($presenterName, $format) = explode('.', $presenterName);
     }
     // Associations.
     $assoc = array();
     if (count($frags) > 0 && count($frags) % 2 === 0) {
         foreach ($frags as $k => $f) {
             if ($k % 2 !== 0) {
                 continue;
             }
             $assoc[$f] = $frags[$k + 1];
         }
     }
     $params['format'] = $this->detectFormat($httpRequest);
     $params['associations'] = $assoc;
     $params['data'] = $this->readInput();
     $params['query'] = $httpRequest->getQuery();
     $presenterName = empty($this->module) ? $presenterName : $this->module . ':' . $presenterName;
     $appRequest = new Request($presenterName, $httpRequest->getMethod(), $params);
     return $appRequest;
 }
Пример #29
0
 /**
  * Maps HTTP request to a Request object.
  *
  * @return AppRequest|NULL
  */
 public function match(HttpRequest $httpRequest)
 {
     $url = $httpRequest->getUrl();
     $slug = rtrim(substr($url->getPath(), strrpos($url->getScriptPath(), '/') + 1), '/');
     foreach ($this->tableOut as $destination2 => $slug2) {
         if ($slug === rtrim($slug2, '/')) {
             $destination = $destination2;
             break;
         }
     }
     if (!isset($destination)) {
         return NULL;
     }
     $params = $httpRequest->getQuery();
     $pos = strrpos($destination, ':');
     $presenter = substr($destination, 0, $pos);
     $params['action'] = substr($destination, $pos + 1);
     return new AppRequest($presenter, $httpRequest->getMethod(), $params, $httpRequest->getPost(), $httpRequest->getFiles(), array(AppRequest::SECURED => $httpRequest->isSecured()));
 }
Пример #30
0
    /**
     * Maps HTTP request to a Request object.
     *
     * @param Http\IRequest $httpRequest
     * @return NULL|Request
     */
    public function match(Http\IRequest $httpRequest)
    {
        $path = ltrim($httpRequest->getUrl()->getPath(), '/');
        $match = Strings::match($path, '~^([^/]+)/(?P<slug>[^/]+)/lekce~');
        if (!$match) {
            return NULL;
        }
        $id = $this->dibi->query('
			SELECT [c.id]
			FROM [old_links] [l]

			INNER JOIN [contents] [c] ON [c.youtube_id] = [l.target]

			WHERE [mask] = %s', $match['slug'], '
		')->fetchSingle();
        if (!$id) {
            return NULL;
        }
        return new Request('Video', $httpRequest->getMethod(), ['action' => 'default', 'videoId' => $id]);
    }