aboutsummaryrefslogtreecommitdiffhomepage
path: root/index.php
diff options
context:
space:
mode:
Diffstat (limited to 'index.php')
-rw-r--r--index.php77
1 files changed, 62 insertions, 15 deletions
diff --git a/index.php b/index.php
index b10397dd..862c53ef 100644
--- a/index.php
+++ b/index.php
@@ -1,4 +1,5 @@
1<?php 1<?php
2
2/** 3/**
3 * Shaarli - The personal, minimalist, super-fast, database free, bookmarking service. 4 * Shaarli - The personal, minimalist, super-fast, database free, bookmarking service.
4 * 5 *
@@ -25,9 +26,13 @@ require_once 'application/Utils.php';
25 26
26require_once __DIR__ . '/init.php'; 27require_once __DIR__ . '/init.php';
27 28
29use Katzgrau\KLogger\Logger;
30use Psr\Log\LogLevel;
28use Shaarli\Config\ConfigManager; 31use Shaarli\Config\ConfigManager;
29use Shaarli\Container\ContainerBuilder; 32use Shaarli\Container\ContainerBuilder;
30use Shaarli\Languages; 33use Shaarli\Languages;
34use Shaarli\Plugin\PluginManager;
35use Shaarli\Security\BanManager;
31use Shaarli\Security\CookieManager; 36use Shaarli\Security\CookieManager;
32use Shaarli\Security\LoginManager; 37use Shaarli\Security\LoginManager;
33use Shaarli\Security\SessionManager; 38use Shaarli\Security\SessionManager;
@@ -48,10 +53,22 @@ if ($conf->get('dev.debug', false)) {
48 }); 53 });
49} 54}
50 55
56$logger = new Logger(
57 dirname($conf->get('resource.log')),
58 !$conf->get('dev.debug') ? LogLevel::INFO : LogLevel::DEBUG,
59 ['filename' => basename($conf->get('resource.log'))]
60);
51$sessionManager = new SessionManager($_SESSION, $conf, session_save_path()); 61$sessionManager = new SessionManager($_SESSION, $conf, session_save_path());
52$sessionManager->initialize(); 62$sessionManager->initialize();
53$cookieManager = new CookieManager($_COOKIE); 63$cookieManager = new CookieManager($_COOKIE);
54$loginManager = new LoginManager($conf, $sessionManager, $cookieManager); 64$banManager = new BanManager(
65 $conf->get('security.trusted_proxies', []),
66 $conf->get('security.ban_after'),
67 $conf->get('security.ban_duration'),
68 $conf->get('resource.ban_file', 'data/ipbans.php'),
69 $logger
70);
71$loginManager = new LoginManager($conf, $sessionManager, $cookieManager, $banManager, $logger);
55$loginManager->generateStaySignedInToken($_SERVER['REMOTE_ADDR']); 72$loginManager->generateStaySignedInToken($_SERVER['REMOTE_ADDR']);
56 73
57// Sniff browser language and set date format accordingly. 74// Sniff browser language and set date format accordingly.
@@ -62,16 +79,26 @@ if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
62new Languages(setlocale(LC_MESSAGES, 0), $conf); 79new Languages(setlocale(LC_MESSAGES, 0), $conf);
63 80
64$conf->setEmpty('general.timezone', date_default_timezone_get()); 81$conf->setEmpty('general.timezone', date_default_timezone_get());
65$conf->setEmpty('general.title', t('Shared bookmarks on '). escape(index_url($_SERVER))); 82$conf->setEmpty('general.title', t('Shared bookmarks on ') . escape(index_url($_SERVER)));
66 83
67RainTPL::$tpl_dir = $conf->get('resource.raintpl_tpl').'/'.$conf->get('resource.theme').'/'; // template directory 84RainTPL::$tpl_dir = $conf->get('resource.raintpl_tpl') . '/' . $conf->get('resource.theme') . '/'; // template directory
68RainTPL::$cache_dir = $conf->get('resource.raintpl_tmp'); // cache directory 85RainTPL::$cache_dir = $conf->get('resource.raintpl_tmp'); // cache directory
69 86
70date_default_timezone_set($conf->get('general.timezone', 'UTC')); 87date_default_timezone_set($conf->get('general.timezone', 'UTC'));
71 88
72$loginManager->checkLoginState(client_ip_id($_SERVER)); 89$loginManager->checkLoginState(client_ip_id($_SERVER));
73 90
74$containerBuilder = new ContainerBuilder($conf, $sessionManager, $cookieManager, $loginManager); 91$pluginManager = new PluginManager($conf);
92$pluginManager->load($conf->get('general.enabled_plugins', []));
93
94$containerBuilder = new ContainerBuilder(
95 $conf,
96 $sessionManager,
97 $cookieManager,
98 $loginManager,
99 $pluginManager,
100 $logger
101);
75$container = $containerBuilder->build(); 102$container = $containerBuilder->build();
76$app = new App($container); 103$app = new App($container);
77 104
@@ -110,13 +137,16 @@ $app->group('/admin', function () {
110 $this->post('/configure', '\Shaarli\Front\Controller\Admin\ConfigureController:save'); 137 $this->post('/configure', '\Shaarli\Front\Controller\Admin\ConfigureController:save');
111 $this->get('/tags', '\Shaarli\Front\Controller\Admin\ManageTagController:index'); 138 $this->get('/tags', '\Shaarli\Front\Controller\Admin\ManageTagController:index');
112 $this->post('/tags', '\Shaarli\Front\Controller\Admin\ManageTagController:save'); 139 $this->post('/tags', '\Shaarli\Front\Controller\Admin\ManageTagController:save');
113 $this->get('/add-shaare', '\Shaarli\Front\Controller\Admin\ManageShaareController:addShaare'); 140 $this->post('/tags/change-separator', '\Shaarli\Front\Controller\Admin\ManageTagController:changeSeparator');
114 $this->get('/shaare', '\Shaarli\Front\Controller\Admin\ManageShaareController:displayCreateForm'); 141 $this->get('/add-shaare', '\Shaarli\Front\Controller\Admin\ShaareAddController:addShaare');
115 $this->get('/shaare/{id:[0-9]+}', '\Shaarli\Front\Controller\Admin\ManageShaareController:displayEditForm'); 142 $this->get('/shaare', '\Shaarli\Front\Controller\Admin\ShaarePublishController:displayCreateForm');
116 $this->post('/shaare', '\Shaarli\Front\Controller\Admin\ManageShaareController:save'); 143 $this->get('/shaare/{id:[0-9]+}', '\Shaarli\Front\Controller\Admin\ShaarePublishController:displayEditForm');
117 $this->get('/shaare/delete', '\Shaarli\Front\Controller\Admin\ManageShaareController:deleteBookmark'); 144 $this->get('/shaare/private/{hash}', '\Shaarli\Front\Controller\Admin\ShaareManageController:sharePrivate');
118 $this->get('/shaare/visibility', '\Shaarli\Front\Controller\Admin\ManageShaareController:changeVisibility'); 145 $this->post('/shaare-batch', '\Shaarli\Front\Controller\Admin\ShaarePublishController:displayCreateBatchForms');
119 $this->get('/shaare/{id:[0-9]+}/pin', '\Shaarli\Front\Controller\Admin\ManageShaareController:pinBookmark'); 146 $this->post('/shaare', '\Shaarli\Front\Controller\Admin\ShaarePublishController:save');
147 $this->get('/shaare/delete', '\Shaarli\Front\Controller\Admin\ShaareManageController:deleteBookmark');
148 $this->get('/shaare/visibility', '\Shaarli\Front\Controller\Admin\ShaareManageController:changeVisibility');
149 $this->get('/shaare/{id:[0-9]+}/pin', '\Shaarli\Front\Controller\Admin\ShaareManageController:pinBookmark');
120 $this->patch( 150 $this->patch(
121 '/shaare/{id:[0-9]+}/update-thumbnail', 151 '/shaare/{id:[0-9]+}/update-thumbnail',
122 '\Shaarli\Front\Controller\Admin\ThumbnailsController:ajaxUpdate' 152 '\Shaarli\Front\Controller\Admin\ThumbnailsController:ajaxUpdate'
@@ -128,11 +158,22 @@ $app->group('/admin', function () {
128 $this->get('/plugins', '\Shaarli\Front\Controller\Admin\PluginsController:index'); 158 $this->get('/plugins', '\Shaarli\Front\Controller\Admin\PluginsController:index');
129 $this->post('/plugins', '\Shaarli\Front\Controller\Admin\PluginsController:save'); 159 $this->post('/plugins', '\Shaarli\Front\Controller\Admin\PluginsController:save');
130 $this->get('/token', '\Shaarli\Front\Controller\Admin\TokenController:getToken'); 160 $this->get('/token', '\Shaarli\Front\Controller\Admin\TokenController:getToken');
161 $this->get('/server', '\Shaarli\Front\Controller\Admin\ServerController:index');
162 $this->get('/clear-cache', '\Shaarli\Front\Controller\Admin\ServerController:clearCache');
131 $this->get('/thumbnails', '\Shaarli\Front\Controller\Admin\ThumbnailsController:index'); 163 $this->get('/thumbnails', '\Shaarli\Front\Controller\Admin\ThumbnailsController:index');
132 164 $this->get('/metadata', '\Shaarli\Front\Controller\Admin\MetadataController:ajaxRetrieveTitle');
133 $this->get('/visibility/{visibility}', '\Shaarli\Front\Controller\Admin\SessionFilterController:visibility'); 165 $this->get('/visibility/{visibility}', '\Shaarli\Front\Controller\Admin\SessionFilterController:visibility');
134})->add('\Shaarli\Front\ShaarliAdminMiddleware'); 166})->add('\Shaarli\Front\ShaarliAdminMiddleware');
135 167
168$app->group('/plugin', function () use ($pluginManager) {
169 foreach ($pluginManager->getRegisteredRoutes() as $pluginName => $routes) {
170 $this->group('/' . $pluginName, function () use ($routes) {
171 foreach ($routes as $route) {
172 $this->{strtolower($route['method'])}('/' . ltrim($route['route'], '/'), $route['callable']);
173 }
174 });
175 }
176})->add('\Shaarli\Front\ShaarliMiddleware');
136 177
137// REST API routes 178// REST API routes
138$app->group('/api/v1', function () { 179$app->group('/api/v1', function () {
@@ -151,6 +192,12 @@ $app->group('/api/v1', function () {
151 $this->get('/history', '\Shaarli\Api\Controllers\HistoryController:getHistory')->setName('getHistory'); 192 $this->get('/history', '\Shaarli\Api\Controllers\HistoryController:getHistory')->setName('getHistory');
152})->add('\Shaarli\Api\ApiMiddleware'); 193})->add('\Shaarli\Api\ApiMiddleware');
153 194
154$response = $app->run(true); 195try {
155 196 $response = $app->run(true);
156$app->respond($response); 197 $app->respond($response);
198} catch (Throwable $e) {
199 die(nl2br(
200 'An unexpected error happened, and the error template could not be displayed.' . PHP_EOL . PHP_EOL .
201 exception2text($e)
202 ));
203}