X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=index.php;h=b53b16fefb383400f90eb1b99374b24c907daf68;hb=a69cfe0dd23fbd2e25c07ec92717998585a9560d;hp=ae74bc7efe2476745ebb30e7a4254ff86b7968d0;hpb=cf92b4dd1521241eefc58eaf6dcd202cd83969d8;p=github%2Fshaarli%2FShaarli.git diff --git a/index.php b/index.php index ae74bc7e..b53b16fe 100644 --- a/index.php +++ b/index.php @@ -61,28 +61,31 @@ require_once 'application/FileUtils.php'; require_once 'application/TimeZone.php'; require_once 'application/Utils.php'; -use \Shaarli\ApplicationUtils; -use Shaarli\Bookmark\BookmarkServiceInterface; -use \Shaarli\Bookmark\Exception\BookmarkNotFoundException; +use Shaarli\ApplicationUtils; use Shaarli\Bookmark\Bookmark; -use Shaarli\Bookmark\BookmarkFilter; use Shaarli\Bookmark\BookmarkFileService; -use \Shaarli\Config\ConfigManager; -use \Shaarli\Feed\CachedPage; -use \Shaarli\Feed\FeedBuilder; +use Shaarli\Bookmark\BookmarkFilter; +use Shaarli\Bookmark\BookmarkServiceInterface; +use Shaarli\Bookmark\Exception\BookmarkNotFoundException; +use Shaarli\Config\ConfigManager; +use Shaarli\Container\ContainerBuilder; +use Shaarli\Feed\CachedPage; +use Shaarli\Feed\FeedBuilder; +use Shaarli\Formatter\BookmarkMarkdownFormatter; use Shaarli\Formatter\FormatterFactory; -use \Shaarli\History; -use \Shaarli\Languages; -use \Shaarli\Netscape\NetscapeBookmarkUtils; -use \Shaarli\Plugin\PluginManager; -use \Shaarli\Render\PageBuilder; -use \Shaarli\Render\ThemeUtils; -use \Shaarli\Router; -use \Shaarli\Security\LoginManager; -use \Shaarli\Security\SessionManager; -use \Shaarli\Thumbnailer; -use \Shaarli\Updater\Updater; -use \Shaarli\Updater\UpdaterUtils; +use Shaarli\History; +use Shaarli\Languages; +use Shaarli\Netscape\NetscapeBookmarkUtils; +use Shaarli\Plugin\PluginManager; +use Shaarli\Render\PageBuilder; +use Shaarli\Render\ThemeUtils; +use Shaarli\Router; +use Shaarli\Security\LoginManager; +use Shaarli\Security\SessionManager; +use Shaarli\Thumbnailer; +use Shaarli\Updater\Updater; +use Shaarli\Updater\UpdaterUtils; +use Slim\App; // Ensure the PHP version is supported try { @@ -242,12 +245,14 @@ if (isset($_POST['login'])) { } // Send cookie with the new expiration date to the browser + session_destroy(); session_set_cookie_params($expirationTime, $cookiedir, $_SERVER['SERVER_NAME']); + session_start(); session_regenerate_id(true); // Optional redirect after login: if (isset($_GET['post'])) { - $uri = '?post='. urlencode($_GET['post']); + $uri = './?post='. urlencode($_GET['post']); foreach (array('description', 'source', 'title', 'tags') as $param) { if (!empty($_GET[$param])) { $uri .= '&'.$param.'='.urlencode($_GET[$param]); @@ -258,22 +263,22 @@ if (isset($_POST['login'])) { } if (isset($_GET['edit_link'])) { - header('Location: ?edit_link='. escape($_GET['edit_link'])); + header('Location: ./?edit_link='. escape($_GET['edit_link'])); exit; } if (isset($_POST['returnurl'])) { // Prevent loops over login screen. - if (strpos($_POST['returnurl'], 'do=login') === false) { + if (strpos($_POST['returnurl'], '/login') === false) { header('Location: '. generateLocation($_POST['returnurl'], $_SERVER['HTTP_HOST'])); exit; } } - header('Location: ?'); + header('Location: ./?'); exit; } else { $loginManager->handleFailedLogin($_SERVER); - $redir = '&username='. urlencode($_POST['login']); + $redir = '?username='. urlencode($_POST['login']); if (isset($_GET['post'])) { $redir .= '&post=' . urlencode($_GET['post']); foreach (array('description', 'source', 'title', 'tags') as $param) { @@ -283,7 +288,7 @@ if (isset($_POST['login'])) { } } // Redirect to login screen. - echo ''; + echo ''; exit; } } @@ -351,7 +356,7 @@ function showDailyRSS($bookmarkService, $conf, $loginManager) echo 'en-en'; echo ''. $pageaddr .''. PHP_EOL; - $factory = new FormatterFactory($conf); + $factory = new FormatterFactory($conf, $loginManager->isLoggedIn()); $formatter = $factory->getFormatter(); $formatter->addContextData('index_url', index_url($_SERVER)); // For each day. @@ -441,7 +446,7 @@ function showDaily($pageBuilder, $bookmarkService, $conf, $pluginManager, $login $linksToDisplay = []; } - $factory = new FormatterFactory($conf); + $factory = new FormatterFactory($conf, $loginManager->isLoggedIn()); $formatter = $factory->getFormatter(); // We pre-format some fields for proper output. foreach ($linksToDisplay as $key => $bookmark) { @@ -591,19 +596,7 @@ function renderPage($conf, $pluginManager, $bookmarkService, $history, $sessionM // -------- Display login form. if ($targetPage == Router::$PAGE_LOGIN) { - if ($conf->get('security.open_shaarli')) { - header('Location: ?'); - exit; - } // No need to login for open Shaarli - if (isset($_GET['username'])) { - $PAGE->assign('username', escape($_GET['username'])); - } - $PAGE->assign('returnurl', (isset($_SERVER['HTTP_REFERER']) ? escape($_SERVER['HTTP_REFERER']):'')); - // add default state of the 'remember me' checkbox - $PAGE->assign('remember_user_default', $conf->get('privacy.remember_user_default')); - $PAGE->assign('user_can_login', $loginManager->canLogin($_SERVER)); - $PAGE->assign('pagetitle', t('Login') .' - '. $conf->get('general.title', 'Shaarli')); - $PAGE->renderPage('loginform'); + header('Location: ./login'); exit; } // -------- User wants to logout. @@ -630,8 +623,8 @@ function renderPage($conf, $pluginManager, $bookmarkService, $history, $sessionM // Get only bookmarks which have a thumbnail. // Note: we do not retrieve thumbnails here, the request is too heavy. - $factory = new FormatterFactory($conf); - $formatter = $factory->getFormatter(); + $factory = new FormatterFactory($conf, $loginManager->isLoggedIn()); + $formatter = $factory->getFormatter(); foreach ($links as $key => $link) { if ($link->getThumbnail() !== false) { $linksToDisplay[] = $formatter->format($link); @@ -666,6 +659,7 @@ function renderPage($conf, $pluginManager, $bookmarkService, $history, $sessionM alphabetical_sort($tags, false, true); + $logMaxCount = $maxcount > 1 ? log($maxcount, 30) : 1; $tagList = array(); foreach ($tags as $key => $value) { if (in_array($key, $filteringTags)) { @@ -673,8 +667,8 @@ function renderPage($conf, $pluginManager, $bookmarkService, $history, $sessionM } // Tag font size scaling: // default 15 and 30 logarithm bases affect scaling, - // 22 and 6 are arbitrary font sizes for max and min sizes. - $size = log($value, 15) / log($maxcount, 30) * 2.2 + 0.8; + // 2.2 and 0.8 are arbitrary font sizes in em. + $size = log($value, 15) / $logMaxCount * 2.2 + 0.8; $tagList[$key] = array( 'count' => $value, 'size' => number_format($size, 2, '.', ''), @@ -753,11 +747,11 @@ function renderPage($conf, $pluginManager, $bookmarkService, $history, $sessionM exit; } - $factory = new FormatterFactory($conf); + $factory = new FormatterFactory($conf, $loginManager->isLoggedIn()); // Generate data. $feedGenerator = new FeedBuilder( $bookmarkService, - $factory->getFormatter('raw'), + $factory->getFormatter(), $feedType, $_SERVER, $_GET, @@ -930,7 +924,7 @@ function renderPage($conf, $pluginManager, $bookmarkService, $history, $sessionM // Show login screen, then redirect to ?post=... if (isset($_GET['post'])) { header( // Redirect to login page, then back to post link. - 'Location: ?do=login&post='.urlencode($_GET['post']). + 'Location: /login?post='.urlencode($_GET['post']). (!empty($_GET['title'])?'&title='.urlencode($_GET['title']):''). (!empty($_GET['description'])?'&description='.urlencode($_GET['description']):''). (!empty($_GET['tags'])?'&tags='.urlencode($_GET['tags']):''). @@ -941,7 +935,7 @@ function renderPage($conf, $pluginManager, $bookmarkService, $history, $sessionM showLinkList($PAGE, $bookmarkService, $conf, $pluginManager, $loginManager); if (isset($_GET['edit_link'])) { - header('Location: ?do=login&edit_link='. escape($_GET['edit_link'])); + header('Location: /login?edit_link='. escape($_GET['edit_link'])); exit; } @@ -1183,7 +1177,7 @@ function renderPage($conf, $pluginManager, $bookmarkService, $history, $sessionM $bookmarkService->addOrSet($bookmark, false); // To preserve backward compatibility with 3rd parties, plugins still use arrays - $factory = new FormatterFactory($conf); + $factory = new FormatterFactory($conf, $loginManager->isLoggedIn()); $formatter = $factory->getFormatter('raw'); $data = $formatter->format($bookmark); $pluginManager->executeHooks('save_link', $data); @@ -1230,7 +1224,7 @@ function renderPage($conf, $pluginManager, $bookmarkService, $history, $sessionM if (!count($ids)) { die('no id provided'); } - $factory = new FormatterFactory($conf); + $factory = new FormatterFactory($conf, $loginManager->isLoggedIn()); $formatter = $factory->getFormatter('raw'); foreach ($ids as $id) { $id = (int) escape($id); @@ -1286,7 +1280,7 @@ function renderPage($conf, $pluginManager, $bookmarkService, $history, $sessionM } else { $private = $_GET['newVisibility'] === 'private'; } - $factory = new FormatterFactory($conf); + $factory = new FormatterFactory($conf, $loginManager->isLoggedIn()); $formatter = $factory->getFormatter('raw'); foreach ($ids as $id) { $id = (int) escape($id); @@ -1324,14 +1318,18 @@ function renderPage($conf, $pluginManager, $bookmarkService, $history, $sessionM exit; } - $factory = new FormatterFactory($conf); + $factory = new FormatterFactory($conf, $loginManager->isLoggedIn()); $formatter = $factory->getFormatter('raw'); $formattedLink = $formatter->format($link); + $tags = $bookmarkService->bookmarksCountPerTag(); + if ($conf->get('formatter') === 'markdown') { + $tags[BookmarkMarkdownFormatter::NO_MD_TAG] = 1; + } $data = array( 'link' => $formattedLink, 'link_is_new' => false, 'http_referer' => (isset($_SERVER['HTTP_REFERER']) ? escape($_SERVER['HTTP_REFERER']) : ''), - 'tags' => $bookmarkService->bookmarksCountPerTag(), + 'tags' => $tags, ); $pluginManager->executeHooks('render_editlink', $data); @@ -1391,17 +1389,21 @@ function renderPage($conf, $pluginManager, $bookmarkService, $history, $sessionM 'private' => $private, ]; } else { - $factory = new FormatterFactory($conf); - $formatter = $factory->getFormatter('raw'); + $factory = new FormatterFactory($conf, $loginManager->isLoggedIn()); + $formatter = $factory->getFormatter('raw'); $link = $formatter->format($bookmark); } + $tags = $bookmarkService->bookmarksCountPerTag(); + if ($conf->get('formatter') === 'markdown') { + $tags[BookmarkMarkdownFormatter::NO_MD_TAG] = 1; + } $data = [ 'link' => $link, 'link_is_new' => $link_is_new, 'http_referer' => (isset($_SERVER['HTTP_REFERER']) ? escape($_SERVER['HTTP_REFERER']) : ''), 'source' => (isset($_GET['source']) ? $_GET['source'] : ''), - 'tags' => $bookmarkService->bookmarksCountPerTag(), + 'tags' => $tags, 'default_private_links' => $conf->get('privacy.default_private_links', false), ]; $pluginManager->executeHooks('render_editlink', $data); @@ -1451,8 +1453,8 @@ function renderPage($conf, $pluginManager, $bookmarkService, $history, $sessionM } try { - $factory = new FormatterFactory($conf); - $formatter = $factory->getFormatter('raw'); + $factory = new FormatterFactory($conf, $loginManager->isLoggedIn()); + $formatter = $factory->getFormatter('raw'); $PAGE->assign( 'links', NetscapeBookmarkUtils::filterAndFormat( @@ -1633,7 +1635,7 @@ function renderPage($conf, $pluginManager, $bookmarkService, $history, $sessionM $bookmark->setThumbnail($thumbnailer->get($bookmark->getUrl())); $bookmarkService->set($bookmark); - $factory = new FormatterFactory($conf); + $factory = new FormatterFactory($conf, $loginManager->isLoggedIn()); echo json_encode($factory->getFormatter('raw')->format($bookmark)); exit; } @@ -1655,7 +1657,7 @@ function renderPage($conf, $pluginManager, $bookmarkService, $history, $sessionM */ function buildLinkList($PAGE, $linkDb, $conf, $pluginManager, $loginManager) { - $factory = new FormatterFactory($conf); + $factory = new FormatterFactory($conf, $loginManager->isLoggedIn()); $formatter = $factory->getFormatter(); // Used in templates @@ -1681,7 +1683,7 @@ function buildLinkList($PAGE, $linkDb, $conf, $pluginManager, $loginManager) } } else { // Filter bookmarks according search parameters. - $visibility = ! empty($_SESSION['visibility']) ? $_SESSION['visibility'] : ''; + $visibility = ! empty($_SESSION['visibility']) ? $_SESSION['visibility'] : null; $request = [ 'searchtags' => $searchtags, 'searchterm' => $searchterm, @@ -1889,7 +1891,7 @@ function install($conf, $sessionManager, $loginManager) echo ''; + .');document.location=\'./login\';'; exit; } @@ -1919,20 +1921,18 @@ if (isset($_SERVER['QUERY_STRING']) && startsWith($_SERVER['QUERY_STRING'], 'do= exit; } -$container = new \Slim\Container(); -$container['conf'] = $conf; -$container['plugins'] = $pluginManager; -$container['history'] = $history; -$app = new \Slim\App($container); +$containerBuilder = new ContainerBuilder($conf, $sessionManager, $loginManager); +$container = $containerBuilder->build(); +$app = new App($container); // REST API routes $app->group('/api/v1', function () { $this->get('/info', '\Shaarli\Api\Controllers\Info:getInfo')->setName('getInfo'); - $this->get('/bookmarks', '\Shaarli\Api\Controllers\Links:getLinks')->setName('getLinks'); - $this->get('/bookmarks/{id:[\d]+}', '\Shaarli\Api\Controllers\Links:getLink')->setName('getLink'); - $this->post('/bookmarks', '\Shaarli\Api\Controllers\Links:postLink')->setName('postLink'); - $this->put('/bookmarks/{id:[\d]+}', '\Shaarli\Api\Controllers\Links:putLink')->setName('putLink'); - $this->delete('/bookmarks/{id:[\d]+}', '\Shaarli\Api\Controllers\Links:deleteLink')->setName('deleteLink'); + $this->get('/links', '\Shaarli\Api\Controllers\Links:getLinks')->setName('getLinks'); + $this->get('/links/{id:[\d]+}', '\Shaarli\Api\Controllers\Links:getLink')->setName('getLink'); + $this->post('/links', '\Shaarli\Api\Controllers\Links:postLink')->setName('postLink'); + $this->put('/links/{id:[\d]+}', '\Shaarli\Api\Controllers\Links:putLink')->setName('putLink'); + $this->delete('/links/{id:[\d]+}', '\Shaarli\Api\Controllers\Links:deleteLink')->setName('deleteLink'); $this->get('/tags', '\Shaarli\Api\Controllers\Tags:getTags')->setName('getTags'); $this->get('/tags/{tagName:[\w]+}', '\Shaarli\Api\Controllers\Tags:getTag')->setName('getTag'); @@ -1942,6 +1942,10 @@ $app->group('/api/v1', function () { $this->get('/history', '\Shaarli\Api\Controllers\HistoryController:getHistory')->setName('getHistory'); })->add('\Shaarli\Api\ApiMiddleware'); +$app->group('', function () { + $this->get('/login', '\Shaarli\Front\Controller\LoginController:index')->setName('login'); +})->add('\Shaarli\Front\ShaarliMiddleware'); + $response = $app->run(true); // Hack to make Slim and Shaarli router work together: