true]); Response::setContent($layout ? View::render('layout/basic', ['content' => $content] + $layoutParams) : $content); Response::setDefaultSecurityHeaders(); Response::send(); } catch (StopException $e) { } } public static function execute($uri) { switch($uri) { case '/': return ContentActions::executeHome(); case '/get': case '/windows': case '/ios': case '/android': case '/linux': case '/osx': return DownloadActions::executeGet(); case '/postcommit': return OpsActions::executePostCommit(); case '/log-upload': return OpsActions::executeLogUpload(); case '/list-subscribe': return MailActions::executeListSubscribe(); case '/press-kit.zip': return ContentActions::executePressKit(); case '/LBRY-deck.pdf': case '/deck.pdf': return static::redirect('https://www.dropbox.com/s/0xj4vgucsbi8rtv/lbry-deck.pdf?dl=1'); case '/pln.pdf': case '/plan.pdf': return static::redirect('https://www.dropbox.com/s/uevjrwnyr672clj/lbry-pln.pdf?dl=1'); case '/lbry-osx-latest.dmg': case '/lbry-linux-latest.deb': case '/dl/lbry_setup.sh': return static::redirect('/get', 301); case '/get/lbry.dmg': return static::redirect(DownloadActions::getDownloadUrl(DownloadActions::OS_OSX) ?: '/get'); case '/get/lbry.deb': return static::redirect(DownloadActions::getDownloadUrl(DownloadActions::OS_LINUX) ?: '/get'); case '/art': return static::redirect('/what', 301); case '/why': case '/feedback': return static::redirect('/learn', 301); case '/faq/when-referral-payouts': return static::redirect('/faq/referrals', 301); } $newsPattern = '#^' . ContentActions::URL_NEWS . '(/|$)#'; if (preg_match($newsPattern, $uri)) { Response::enableHttpCache(180); $slug = preg_replace($newsPattern, '', $uri); if ($slug == ContentActions::RSS_SLUG) { return ContentActions::executeRss(); } return $slug ? ContentActions::executeNewsPost($uri) : ContentActions::executeNews(); } $faqPattern = '#^' . ContentActions::URL_FAQ . '(/|$)#'; if (preg_match($faqPattern, $uri)) { Response::enableHttpCache(180); $slug = preg_replace($faqPattern, '', $uri); return $slug ? ContentActions::executeFaqPost($uri) : ContentActions::executeFaq(); } $bountyPattern = '#^' . BountyActions::URL_BOUNTY_LIST . '(/|$)#'; if (preg_match($bountyPattern, $uri)) { Response::enableHttpCache(180); $slug = preg_replace($bountyPattern, '', $uri); return $slug ? BountyActions::executeShow($uri) : BountyActions::executeList($uri); } $accessPattern = '#^/signup#'; if (preg_match($accessPattern, $uri)) { return DownloadActions::executeSignup(); } $noSlashUri = ltrim($uri, '/'); if (View::exists('page/' . $noSlashUri)) { Response::enableHttpCache(180); return ['page/' . $noSlashUri, []]; } else { Response::setStatus(404); return ['page/404', []]; } } public static function redirect($url, $statusCode = 302) { if (!$url) { throw new InvalidArgumentException('Cannot redirect to an empty URL.'); } $url = str_replace('&', '&', $url); Response::setStatus($statusCode); if ($statusCode == 201 || ($statusCode >= 300 && $statusCode < 400)) { Response::setHeader(Response::HEADER_LOCATION, $url); } return ['internal/redirect', ['url' => $url]]; } }