diff options
Diffstat (limited to 'application/legacy')
-rw-r--r-- | application/legacy/LegacyController.php | 130 | ||||
-rw-r--r-- | application/legacy/LegacyRouter.php | 187 | ||||
-rw-r--r-- | application/legacy/UnknowLegacyRouteException.php | 9 |
3 files changed, 326 insertions, 0 deletions
diff --git a/application/legacy/LegacyController.php b/application/legacy/LegacyController.php new file mode 100644 index 00000000..a97b07b1 --- /dev/null +++ b/application/legacy/LegacyController.php | |||
@@ -0,0 +1,130 @@ | |||
1 | <?php | ||
2 | |||
3 | declare(strict_types=1); | ||
4 | |||
5 | namespace Shaarli\Legacy; | ||
6 | |||
7 | use Shaarli\Feed\FeedBuilder; | ||
8 | use Shaarli\Front\Controller\Visitor\ShaarliVisitorController; | ||
9 | use Slim\Http\Request; | ||
10 | use Slim\Http\Response; | ||
11 | |||
12 | /** | ||
13 | * We use this to maintain legacy routes, and redirect requests to the corresponding Slim route. | ||
14 | * Only public routes, and both `?addlink` and `?post` were kept here. | ||
15 | * Other routes will just display the linklist. | ||
16 | * | ||
17 | * @deprecated | ||
18 | */ | ||
19 | class LegacyController extends ShaarliVisitorController | ||
20 | { | ||
21 | /** @var string[] Both `?post` and `?addlink` do not use `?do=` format. */ | ||
22 | public const LEGACY_GET_ROUTES = [ | ||
23 | 'post', | ||
24 | 'addlink', | ||
25 | ]; | ||
26 | |||
27 | /** | ||
28 | * This method will call `$action` method, which will redirect to corresponding Slim route. | ||
29 | */ | ||
30 | public function process(Request $request, Response $response, string $action): Response | ||
31 | { | ||
32 | if (!method_exists($this, $action)) { | ||
33 | throw new UnknowLegacyRouteException(); | ||
34 | } | ||
35 | |||
36 | return $this->{$action}($request, $response); | ||
37 | } | ||
38 | |||
39 | /** Legacy route: ?post= */ | ||
40 | public function post(Request $request, Response $response): Response | ||
41 | { | ||
42 | $parameters = count($request->getQueryParams()) > 0 ? '?' . http_build_query($request->getQueryParams()) : ''; | ||
43 | |||
44 | if (!$this->container->loginManager->isLoggedIn()) { | ||
45 | return $this->redirect($response, '/login' . $parameters); | ||
46 | } | ||
47 | |||
48 | return $this->redirect($response, '/admin/shaare' . $parameters); | ||
49 | } | ||
50 | |||
51 | /** Legacy route: ?addlink= */ | ||
52 | protected function addlink(Request $request, Response $response): Response | ||
53 | { | ||
54 | if (!$this->container->loginManager->isLoggedIn()) { | ||
55 | return $this->redirect($response, '/login'); | ||
56 | } | ||
57 | |||
58 | return $this->redirect($response, '/admin/add-shaare'); | ||
59 | } | ||
60 | |||
61 | /** Legacy route: ?do=login */ | ||
62 | protected function login(Request $request, Response $response): Response | ||
63 | { | ||
64 | return $this->redirect($response, '/login'); | ||
65 | } | ||
66 | |||
67 | /** Legacy route: ?do=logout */ | ||
68 | protected function logout(Request $request, Response $response): Response | ||
69 | { | ||
70 | return $this->redirect($response, '/logout'); | ||
71 | } | ||
72 | |||
73 | /** Legacy route: ?do=picwall */ | ||
74 | protected function picwall(Request $request, Response $response): Response | ||
75 | { | ||
76 | return $this->redirect($response, '/picture-wall'); | ||
77 | } | ||
78 | |||
79 | /** Legacy route: ?do=tagcloud */ | ||
80 | protected function tagcloud(Request $request, Response $response): Response | ||
81 | { | ||
82 | return $this->redirect($response, '/tags/cloud'); | ||
83 | } | ||
84 | |||
85 | /** Legacy route: ?do=taglist */ | ||
86 | protected function taglist(Request $request, Response $response): Response | ||
87 | { | ||
88 | return $this->redirect($response, '/tags/list'); | ||
89 | } | ||
90 | |||
91 | /** Legacy route: ?do=daily */ | ||
92 | protected function daily(Request $request, Response $response): Response | ||
93 | { | ||
94 | $dayParam = !empty($request->getParam('day')) ? '?day=' . escape($request->getParam('day')) : ''; | ||
95 | |||
96 | return $this->redirect($response, '/daily' . $dayParam); | ||
97 | } | ||
98 | |||
99 | /** Legacy route: ?do=rss */ | ||
100 | protected function rss(Request $request, Response $response): Response | ||
101 | { | ||
102 | return $this->feed($request, $response, FeedBuilder::$FEED_RSS); | ||
103 | } | ||
104 | |||
105 | /** Legacy route: ?do=atom */ | ||
106 | protected function atom(Request $request, Response $response): Response | ||
107 | { | ||
108 | return $this->feed($request, $response, FeedBuilder::$FEED_ATOM); | ||
109 | } | ||
110 | |||
111 | /** Legacy route: ?do=opensearch */ | ||
112 | protected function opensearch(Request $request, Response $response): Response | ||
113 | { | ||
114 | return $this->redirect($response, '/open-search'); | ||
115 | } | ||
116 | |||
117 | /** Legacy route: ?do=dailyrss */ | ||
118 | protected function dailyrss(Request $request, Response $response): Response | ||
119 | { | ||
120 | return $this->redirect($response, '/daily-rss'); | ||
121 | } | ||
122 | |||
123 | /** Legacy route: ?do=feed */ | ||
124 | protected function feed(Request $request, Response $response, string $feedType): Response | ||
125 | { | ||
126 | $parameters = count($request->getQueryParams()) > 0 ? '?' . http_build_query($request->getQueryParams()) : ''; | ||
127 | |||
128 | return $this->redirect($response, '/feed/' . $feedType . $parameters); | ||
129 | } | ||
130 | } | ||
diff --git a/application/legacy/LegacyRouter.php b/application/legacy/LegacyRouter.php new file mode 100644 index 00000000..cea99154 --- /dev/null +++ b/application/legacy/LegacyRouter.php | |||
@@ -0,0 +1,187 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Shaarli\Legacy; | ||
4 | |||
5 | /** | ||
6 | * Class Router | ||
7 | * | ||
8 | * (only displayable pages here) | ||
9 | * | ||
10 | * @deprecated | ||
11 | */ | ||
12 | class LegacyRouter | ||
13 | { | ||
14 | public static $AJAX_THUMB_UPDATE = 'ajax_thumb_update'; | ||
15 | |||
16 | public static $PAGE_LOGIN = 'login'; | ||
17 | |||
18 | public static $PAGE_PICWALL = 'picwall'; | ||
19 | |||
20 | public static $PAGE_TAGCLOUD = 'tagcloud'; | ||
21 | |||
22 | public static $PAGE_TAGLIST = 'taglist'; | ||
23 | |||
24 | public static $PAGE_DAILY = 'daily'; | ||
25 | |||
26 | public static $PAGE_FEED_ATOM = 'atom'; | ||
27 | |||
28 | public static $PAGE_FEED_RSS = 'rss'; | ||
29 | |||
30 | public static $PAGE_TOOLS = 'tools'; | ||
31 | |||
32 | public static $PAGE_CHANGEPASSWORD = 'changepasswd'; | ||
33 | |||
34 | public static $PAGE_CONFIGURE = 'configure'; | ||
35 | |||
36 | public static $PAGE_CHANGETAG = 'changetag'; | ||
37 | |||
38 | public static $PAGE_ADDLINK = 'addlink'; | ||
39 | |||
40 | public static $PAGE_EDITLINK = 'edit_link'; | ||
41 | |||
42 | public static $PAGE_DELETELINK = 'delete_link'; | ||
43 | |||
44 | public static $PAGE_CHANGE_VISIBILITY = 'change_visibility'; | ||
45 | |||
46 | public static $PAGE_PINLINK = 'pin'; | ||
47 | |||
48 | public static $PAGE_EXPORT = 'export'; | ||
49 | |||
50 | public static $PAGE_IMPORT = 'import'; | ||
51 | |||
52 | public static $PAGE_OPENSEARCH = 'opensearch'; | ||
53 | |||
54 | public static $PAGE_LINKLIST = 'linklist'; | ||
55 | |||
56 | public static $PAGE_PLUGINSADMIN = 'pluginadmin'; | ||
57 | |||
58 | public static $PAGE_SAVE_PLUGINSADMIN = 'save_pluginadmin'; | ||
59 | |||
60 | public static $PAGE_THUMBS_UPDATE = 'thumbs_update'; | ||
61 | |||
62 | public static $GET_TOKEN = 'token'; | ||
63 | |||
64 | /** | ||
65 | * Reproducing renderPage() if hell, to avoid regression. | ||
66 | * | ||
67 | * This highlights how bad this needs to be rewrite, | ||
68 | * but let's focus on plugins for now. | ||
69 | * | ||
70 | * @param string $query $_SERVER['QUERY_STRING']. | ||
71 | * @param array $get $_SERVER['GET']. | ||
72 | * @param bool $loggedIn true if authenticated user. | ||
73 | * | ||
74 | * @return string page found. | ||
75 | */ | ||
76 | public static function findPage($query, $get, $loggedIn) | ||
77 | { | ||
78 | $loggedIn = ($loggedIn === true) ? true : false; | ||
79 | |||
80 | if (empty($query) && !isset($get['edit_link']) && !isset($get['post'])) { | ||
81 | return self::$PAGE_LINKLIST; | ||
82 | } | ||
83 | |||
84 | if (startsWith($query, 'do=' . self::$PAGE_LOGIN) && $loggedIn === false) { | ||
85 | return self::$PAGE_LOGIN; | ||
86 | } | ||
87 | |||
88 | if (startsWith($query, 'do=' . self::$PAGE_PICWALL)) { | ||
89 | return self::$PAGE_PICWALL; | ||
90 | } | ||
91 | |||
92 | if (startsWith($query, 'do=' . self::$PAGE_TAGCLOUD)) { | ||
93 | return self::$PAGE_TAGCLOUD; | ||
94 | } | ||
95 | |||
96 | if (startsWith($query, 'do=' . self::$PAGE_TAGLIST)) { | ||
97 | return self::$PAGE_TAGLIST; | ||
98 | } | ||
99 | |||
100 | if (startsWith($query, 'do=' . self::$PAGE_OPENSEARCH)) { | ||
101 | return self::$PAGE_OPENSEARCH; | ||
102 | } | ||
103 | |||
104 | if (startsWith($query, 'do=' . self::$PAGE_DAILY)) { | ||
105 | return self::$PAGE_DAILY; | ||
106 | } | ||
107 | |||
108 | if (startsWith($query, 'do=' . self::$PAGE_FEED_ATOM)) { | ||
109 | return self::$PAGE_FEED_ATOM; | ||
110 | } | ||
111 | |||
112 | if (startsWith($query, 'do=' . self::$PAGE_FEED_RSS)) { | ||
113 | return self::$PAGE_FEED_RSS; | ||
114 | } | ||
115 | |||
116 | if (startsWith($query, 'do=' . self::$PAGE_THUMBS_UPDATE)) { | ||
117 | return self::$PAGE_THUMBS_UPDATE; | ||
118 | } | ||
119 | |||
120 | if (startsWith($query, 'do=' . self::$AJAX_THUMB_UPDATE)) { | ||
121 | return self::$AJAX_THUMB_UPDATE; | ||
122 | } | ||
123 | |||
124 | // At this point, only loggedin pages. | ||
125 | if (!$loggedIn) { | ||
126 | return self::$PAGE_LINKLIST; | ||
127 | } | ||
128 | |||
129 | if (startsWith($query, 'do=' . self::$PAGE_TOOLS)) { | ||
130 | return self::$PAGE_TOOLS; | ||
131 | } | ||
132 | |||
133 | if (startsWith($query, 'do=' . self::$PAGE_CHANGEPASSWORD)) { | ||
134 | return self::$PAGE_CHANGEPASSWORD; | ||
135 | } | ||
136 | |||
137 | if (startsWith($query, 'do=' . self::$PAGE_CONFIGURE)) { | ||
138 | return self::$PAGE_CONFIGURE; | ||
139 | } | ||
140 | |||
141 | if (startsWith($query, 'do=' . self::$PAGE_CHANGETAG)) { | ||
142 | return self::$PAGE_CHANGETAG; | ||
143 | } | ||
144 | |||
145 | if (startsWith($query, 'do=' . self::$PAGE_ADDLINK)) { | ||
146 | return self::$PAGE_ADDLINK; | ||
147 | } | ||
148 | |||
149 | if (isset($get['edit_link']) || isset($get['post'])) { | ||
150 | return self::$PAGE_EDITLINK; | ||
151 | } | ||
152 | |||
153 | if (isset($get['delete_link'])) { | ||
154 | return self::$PAGE_DELETELINK; | ||
155 | } | ||
156 | |||
157 | if (isset($get[self::$PAGE_CHANGE_VISIBILITY])) { | ||
158 | return self::$PAGE_CHANGE_VISIBILITY; | ||
159 | } | ||
160 | |||
161 | if (startsWith($query, 'do=' . self::$PAGE_PINLINK)) { | ||
162 | return self::$PAGE_PINLINK; | ||
163 | } | ||
164 | |||
165 | if (startsWith($query, 'do=' . self::$PAGE_EXPORT)) { | ||
166 | return self::$PAGE_EXPORT; | ||
167 | } | ||
168 | |||
169 | if (startsWith($query, 'do=' . self::$PAGE_IMPORT)) { | ||
170 | return self::$PAGE_IMPORT; | ||
171 | } | ||
172 | |||
173 | if (startsWith($query, 'do=' . self::$PAGE_PLUGINSADMIN)) { | ||
174 | return self::$PAGE_PLUGINSADMIN; | ||
175 | } | ||
176 | |||
177 | if (startsWith($query, 'do=' . self::$PAGE_SAVE_PLUGINSADMIN)) { | ||
178 | return self::$PAGE_SAVE_PLUGINSADMIN; | ||
179 | } | ||
180 | |||
181 | if (startsWith($query, 'do=' . self::$GET_TOKEN)) { | ||
182 | return self::$GET_TOKEN; | ||
183 | } | ||
184 | |||
185 | return self::$PAGE_LINKLIST; | ||
186 | } | ||
187 | } | ||
diff --git a/application/legacy/UnknowLegacyRouteException.php b/application/legacy/UnknowLegacyRouteException.php new file mode 100644 index 00000000..ae1518ad --- /dev/null +++ b/application/legacy/UnknowLegacyRouteException.php | |||
@@ -0,0 +1,9 @@ | |||
1 | <?php | ||
2 | |||
3 | declare(strict_types=1); | ||
4 | |||
5 | namespace Shaarli\Legacy; | ||
6 | |||
7 | class UnknowLegacyRouteException extends \Exception | ||
8 | { | ||
9 | } | ||