3 declare(strict_types
=1);
5 use FastRoute\RouteCollector
;
6 use PhpMyAdmin\Controllers\AjaxController
;
7 use PhpMyAdmin\Controllers\BrowseForeignersController
;
8 use PhpMyAdmin\Controllers\ChangeLogController
;
9 use PhpMyAdmin\Controllers\CheckRelationsController
;
10 use PhpMyAdmin\Controllers\Database\CentralColumnsController
;
11 use PhpMyAdmin\Controllers\Database\DataDictionaryController
;
12 use PhpMyAdmin\Controllers\Database\DesignerController
;
13 use PhpMyAdmin\Controllers\Database\EventsController
;
14 use PhpMyAdmin\Controllers\Database\ExportController
as DatabaseExportController
;
15 use PhpMyAdmin\Controllers\Database\ImportController
as DatabaseImportController
;
16 use PhpMyAdmin\Controllers\Database\MultiTableQueryController
;
17 use PhpMyAdmin\Controllers\Database\OperationsController
;
18 use PhpMyAdmin\Controllers\Database\QueryByExampleController
;
19 use PhpMyAdmin\Controllers\Database\RoutinesController
;
20 use PhpMyAdmin\Controllers\Database\SearchController
;
21 use PhpMyAdmin\Controllers\Database\SqlAutoCompleteController
;
22 use PhpMyAdmin\Controllers\Database\SqlController
as DatabaseSqlController
;
23 use PhpMyAdmin\Controllers\Database\SqlFormatController
;
24 use PhpMyAdmin\Controllers\Database\StructureController
;
25 use PhpMyAdmin\Controllers\Database\TrackingController
;
26 use PhpMyAdmin\Controllers\Database\TriggersController
;
27 use PhpMyAdmin\Controllers\ErrorReportController
;
28 use PhpMyAdmin\Controllers\ExportController
;
29 use PhpMyAdmin\Controllers\GisDataEditorController
;
30 use PhpMyAdmin\Controllers\HomeController
;
31 use PhpMyAdmin\Controllers\ImportController
;
32 use PhpMyAdmin\Controllers\ImportStatusController
;
33 use PhpMyAdmin\Controllers\LicenseController
;
34 use PhpMyAdmin\Controllers\LintController
;
35 use PhpMyAdmin\Controllers\LogoutController
;
36 use PhpMyAdmin\Controllers\NavigationController
;
37 use PhpMyAdmin\Controllers\NormalizationController
;
38 use PhpMyAdmin\Controllers\PhpInfoController
;
39 use PhpMyAdmin\Controllers\Preferences\ExportController
as PreferencesExportController
;
40 use PhpMyAdmin\Controllers\Preferences\FeaturesController
;
41 use PhpMyAdmin\Controllers\Preferences\ImportController
as PreferencesImportController
;
42 use PhpMyAdmin\Controllers\Preferences\MainPanelController
;
43 use PhpMyAdmin\Controllers\Preferences\ManageController
;
44 use PhpMyAdmin\Controllers\Preferences\NavigationController
as PreferencesNavigationController
;
45 use PhpMyAdmin\Controllers\Preferences\SqlController
as PreferencesSqlController
;
46 use PhpMyAdmin\Controllers\Preferences\TwoFactorController
;
47 use PhpMyAdmin\Controllers\SchemaExportController
;
48 use PhpMyAdmin\Controllers\Server\BinlogController
;
49 use PhpMyAdmin\Controllers\Server\CollationsController
;
50 use PhpMyAdmin\Controllers\Server\DatabasesController
;
51 use PhpMyAdmin\Controllers\Server\EnginesController
;
52 use PhpMyAdmin\Controllers\Server\ExportController
as ServerExportController
;
53 use PhpMyAdmin\Controllers\Server\ImportController
as ServerImportController
;
54 use PhpMyAdmin\Controllers\Server\PluginsController
;
55 use PhpMyAdmin\Controllers\Server\PrivilegesController
;
56 use PhpMyAdmin\Controllers\Server\ReplicationController
;
57 use PhpMyAdmin\Controllers\Server\SqlController
as ServerSqlController
;
58 use PhpMyAdmin\Controllers\Server\Status\AdvisorController
;
59 use PhpMyAdmin\Controllers\Server\Status\MonitorController
;
60 use PhpMyAdmin\Controllers\Server\Status\ProcessesController
;
61 use PhpMyAdmin\Controllers\Server\Status\QueriesController
;
62 use PhpMyAdmin\Controllers\Server\Status\StatusController
;
63 use PhpMyAdmin\Controllers\Server\Status\VariablesController
as StatusVariables
;
64 use PhpMyAdmin\Controllers\Server\UserGroupsController
;
65 use PhpMyAdmin\Controllers\Server\VariablesController
;
66 use PhpMyAdmin\Controllers\SqlController
;
67 use PhpMyAdmin\Controllers\Table\AddFieldController
;
68 use PhpMyAdmin\Controllers\Table\ChangeController
;
69 use PhpMyAdmin\Controllers\Table\ChartController
;
70 use PhpMyAdmin\Controllers\Table\CreateController
;
71 use PhpMyAdmin\Controllers\Table\DeleteController
;
72 use PhpMyAdmin\Controllers\Table\ExportController
as TableExportController
;
73 use PhpMyAdmin\Controllers\Table\FindReplaceController
;
74 use PhpMyAdmin\Controllers\Table\GetFieldController
;
75 use PhpMyAdmin\Controllers\Table\GisVisualizationController
;
76 use PhpMyAdmin\Controllers\Table\ImportController
as TableImportController
;
77 use PhpMyAdmin\Controllers\Table\IndexesController
;
78 use PhpMyAdmin\Controllers\Table\OperationsController
as TableOperationsController
;
79 use PhpMyAdmin\Controllers\Table\RecentFavoriteController
;
80 use PhpMyAdmin\Controllers\Table\RelationController
;
81 use PhpMyAdmin\Controllers\Table\ReplaceController
;
82 use PhpMyAdmin\Controllers\Table\SearchController
as TableSearchController
;
83 use PhpMyAdmin\Controllers\Table\SqlController
as TableSqlController
;
84 use PhpMyAdmin\Controllers\Table\StructureController
as TableStructureController
;
85 use PhpMyAdmin\Controllers\Table\TrackingController
as TableTrackingController
;
86 use PhpMyAdmin\Controllers\Table\TriggersController
as TableTriggersController
;
87 use PhpMyAdmin\Controllers\Table\ZoomSearchController
;
88 use PhpMyAdmin\Controllers\ThemesController
;
89 use PhpMyAdmin\Controllers\TransformationOverviewController
;
90 use PhpMyAdmin\Controllers\TransformationWrapperController
;
91 use PhpMyAdmin\Controllers\UserPasswordController
;
92 use PhpMyAdmin\Controllers\VersionCheckController
;
93 use PhpMyAdmin\Controllers\ViewCreateController
;
94 use PhpMyAdmin\Controllers\ViewOperationsController
;
96 if (! defined('PHPMYADMIN')) {
100 return static function (RouteCollector
$routes) {
101 $routes->addGroup('', static function (RouteCollector
$routes) {
102 $routes->addRoute(['GET', 'POST'], '[/]', [HomeController
::class, 'index']);
103 $routes->post('/set-theme', [HomeController
::class, 'setTheme']);
104 $routes->post('/collation-connection', [HomeController
::class, 'setCollationConnection']);
105 $routes->addRoute(['GET', 'POST'], '/recent-table', [HomeController
::class, 'reloadRecentTablesList']);
106 $routes->addRoute(['GET', 'POST'], '/git-revision', [HomeController
::class, 'gitRevision']);
108 $routes->addGroup('/ajax', static function (RouteCollector
$routes) {
109 $routes->post('/list-databases', [AjaxController
::class, 'databases']);
110 $routes->post('/list-tables', [AjaxController
::class, 'tables']);
111 $routes->post('/list-columns', [AjaxController
::class, 'columns']);
112 $routes->post('/config-get', [AjaxController
::class, 'getConfig']);
113 $routes->post('/config-set', [AjaxController
::class, 'setConfig']);
115 $routes->addRoute(['GET', 'POST'], '/browse-foreigners', [BrowseForeignersController
::class, 'index']);
116 $routes->get('/changelog', [ChangeLogController
::class, 'index']);
117 $routes->addRoute(['GET', 'POST'], '/check-relations', [CheckRelationsController
::class, 'index']);
118 $routes->addGroup('/database', static function (RouteCollector
$routes) {
119 $routes->addRoute(['GET', 'POST'], '/central-columns', [CentralColumnsController
::class, 'index']);
120 $routes->get('/data-dictionary', [DataDictionaryController
::class, 'index']);
121 $routes->addRoute(['GET', 'POST'], '/designer', [DesignerController
::class, 'index']);
122 $routes->addRoute(['GET', 'POST'], '/events', [EventsController
::class, 'index']);
123 $routes->addRoute(['GET', 'POST'], '/export', [DatabaseExportController
::class, 'index']);
124 $routes->addRoute(['GET', 'POST'], '/import', [DatabaseImportController
::class, 'index']);
125 $routes->addGroup('/multi-table-query', static function (RouteCollector
$routes) {
126 $routes->get('', [MultiTableQueryController
::class, 'index']);
127 $routes->get('/tables', [MultiTableQueryController
::class, 'table']);
128 $routes->post('/query', [MultiTableQueryController
::class, 'displayResults']);
130 $routes->addRoute(['GET', 'POST'], '/operations', [OperationsController
::class, 'index']);
131 $routes->addRoute(['GET', 'POST'], '/qbe', [QueryByExampleController
::class, 'index']);
132 $routes->addRoute(['GET', 'POST'], '/routines', [RoutinesController
::class, 'index']);
133 $routes->addRoute(['GET', 'POST'], '/search', [SearchController
::class, 'index']);
134 $routes->addGroup('/sql', static function (RouteCollector
$routes) {
135 $routes->addRoute(['GET', 'POST'], '', [DatabaseSqlController
::class, 'index']);
136 $routes->post('/autocomplete', [SqlAutoCompleteController
::class, 'index']);
137 $routes->post('/format', [SqlFormatController
::class, 'index']);
139 $routes->addGroup('/structure', static function (RouteCollector
$routes) {
140 $routes->addRoute(['GET', 'POST'], '', [StructureController
::class, 'index']);
141 $routes->post('/add-prefix', [StructureController
::class, 'addPrefix']);
142 $routes->post('/add-prefix-table', [StructureController
::class, 'addPrefixTable']);
143 $routes->post('/analyze-table', [StructureController
::class, 'analyzeTable']);
144 $routes->post('/central-columns-add', [StructureController
::class, 'centralColumnsAdd']);
145 $routes->post('/central-columns-make-consistent', [
146 StructureController
::class,
147 'centralColumnsMakeConsistent',
149 $routes->post('/central-columns-remove', [StructureController
::class, 'centralColumnsRemove']);
150 $routes->post('/change-prefix-form', [StructureController
::class, 'changePrefixForm']);
151 $routes->post('/check-table', [StructureController
::class, 'checkTable']);
152 $routes->post('/checksum-table', [StructureController
::class, 'checksumTable']);
153 $routes->post('/copy-form', [StructureController
::class, 'copyForm']);
154 $routes->post('/drop-form', [StructureController
::class, 'dropForm']);
155 $routes->post('/drop-table', [StructureController
::class, 'dropTable']);
156 $routes->post('/empty-form', [StructureController
::class, 'emptyForm']);
157 $routes->post('/empty-table', [StructureController
::class, 'emptyTable']);
158 $routes->post('/export', [StructureController
::class, 'export']);
159 $routes->addRoute(['GET', 'POST'], '/favorite-table', [
160 StructureController
::class,
161 'addRemoveFavoriteTablesAction',
163 $routes->post('/optimize-table', [StructureController
::class, 'optimizeTable']);
164 $routes->addRoute(['GET', 'POST'], '/real-row-count', [
165 StructureController
::class,
166 'handleRealRowCountRequestAction',
168 $routes->post('/repair-table', [StructureController
::class, 'repairTable']);
169 $routes->post('/show-create', [StructureController
::class, 'showCreate']);
171 $routes->addRoute(['GET', 'POST'], '/tracking', [TrackingController
::class, 'index']);
172 $routes->addRoute(['GET', 'POST'], '/triggers', [TriggersController
::class, 'index']);
174 $routes->addRoute(['GET', 'POST'], '/error-report', [ErrorReportController
::class, 'index']);
175 $routes->addRoute(['GET', 'POST'], '/export', [ExportController
::class, 'index']);
176 $routes->addRoute(['GET', 'POST'], '/gis-data-editor', [GisDataEditorController
::class, 'index']);
177 $routes->addRoute(['GET', 'POST'], '/import', [ImportController
::class, 'index']);
178 $routes->addRoute(['GET', 'POST'], '/import-status', [ImportStatusController
::class, 'index']);
179 $routes->get('/license', [LicenseController
::class, 'index']);
180 $routes->addRoute(['GET', 'POST'], '/lint', [LintController
::class, 'index']);
181 $routes->addRoute(['GET', 'POST'], '/logout', [LogoutController
::class, 'index']);
182 $routes->addRoute(['GET', 'POST'], '/navigation', [NavigationController
::class, 'index']);
183 $routes->addRoute(['GET', 'POST'], '/normalization', [NormalizationController
::class, 'index']);
184 $routes->get('/phpinfo', [PhpInfoController
::class, 'index']);
185 $routes->addGroup('/preferences', static function (RouteCollector
$routes) {
186 $routes->addRoute(['GET', 'POST'], '/export', [PreferencesExportController
::class, 'index']);
187 $routes->addRoute(['GET', 'POST'], '/features', [FeaturesController
::class, 'index']);
188 $routes->addRoute(['GET', 'POST'], '/import', [PreferencesImportController
::class, 'index']);
189 $routes->addRoute(['GET', 'POST'], '/main-panel', [MainPanelController
::class, 'index']);
190 $routes->addRoute(['GET', 'POST'], '/manage', [ManageController
::class, 'index']);
191 $routes->addRoute(['GET', 'POST'], '/navigation', [PreferencesNavigationController
::class, 'index']);
192 $routes->addRoute(['GET', 'POST'], '/sql', [PreferencesSqlController
::class, 'index']);
193 $routes->addRoute(['GET', 'POST'], '/two-factor', [TwoFactorController
::class, 'index']);
195 $routes->addRoute(['GET', 'POST'], '/schema-export', [SchemaExportController
::class, 'index']);
196 $routes->addGroup('/server', static function (RouteCollector
$routes) {
197 $routes->addRoute(['GET', 'POST'], '/binlog', [BinlogController
::class, 'index']);
198 $routes->get('/collations', [CollationsController
::class, 'index']);
199 $routes->addGroup('/databases', static function (RouteCollector
$routes) {
200 $routes->addRoute(['GET', 'POST'], '', [DatabasesController
::class, 'index']);
201 $routes->post('/create', [DatabasesController
::class, 'create']);
202 $routes->post('/destroy', [DatabasesController
::class, 'destroy']);
204 $routes->addGroup('/engines', static function (RouteCollector
$routes) {
205 $routes->get('', [EnginesController
::class, 'index']);
206 $routes->get('/{engine}[/{page}]', [EnginesController
::class, 'show']);
208 $routes->addRoute(['GET', 'POST'], '/export', [ServerExportController
::class, 'index']);
209 $routes->addRoute(['GET', 'POST'], '/import', [ServerImportController
::class, 'index']);
210 $routes->get('/plugins', [PluginsController
::class, 'index']);
211 $routes->addRoute(['GET', 'POST'], '/privileges', [PrivilegesController
::class, 'index']);
212 $routes->addRoute(['GET', 'POST'], '/replication', [ReplicationController
::class, 'index']);
213 $routes->addRoute(['GET', 'POST'], '/sql', [ServerSqlController
::class, 'index']);
214 $routes->addGroup('/status', static function (RouteCollector
$routes) {
215 $routes->get('', [StatusController
::class, 'index']);
216 $routes->get('/advisor', [AdvisorController
::class, 'index']);
217 $routes->addGroup('/monitor', static function (RouteCollector
$routes) {
218 $routes->get('', [MonitorController
::class, 'index']);
219 $routes->post('/chart', [MonitorController
::class, 'chartingData']);
220 $routes->post('/slow-log', [MonitorController
::class, 'logDataTypeSlow']);
221 $routes->post('/general-log', [MonitorController
::class, 'logDataTypeGeneral']);
222 $routes->post('/log-vars', [MonitorController
::class, 'loggingVars']);
223 $routes->post('/query', [MonitorController
::class, 'queryAnalyzer']);
225 $routes->addGroup('/processes', static function (RouteCollector
$routes) {
226 $routes->addRoute(['GET', 'POST'], '', [ProcessesController
::class, 'index']);
227 $routes->post('/refresh', [ProcessesController
::class, 'refresh']);
228 $routes->post('/kill/{id:\d+}', [ProcessesController
::class, 'kill']);
230 $routes->get('/queries', [QueriesController
::class, 'index']);
231 $routes->addRoute(['GET', 'POST'], '/variables', [StatusVariables
::class, 'index']);
233 $routes->addRoute(['GET', 'POST'], '/user-groups', [UserGroupsController
::class, 'index']);
234 $routes->addGroup('/variables', static function (RouteCollector
$routes) {
235 $routes->get('', [VariablesController
::class, 'index']);
236 $routes->get('/get/{name}', [VariablesController
::class, 'getValue']);
237 $routes->post('/set/{name}', [VariablesController
::class, 'setValue']);
240 $routes->addGroup('/sql', static function (RouteCollector
$routes) {
241 $routes->addRoute(['GET', 'POST'], '', [SqlController
::class, 'index']);
242 $routes->post('/get-relational-values', [SqlController
::class, 'getRelationalValues']);
243 $routes->post('/get-enum-values', [SqlController
::class, 'getEnumValues']);
244 $routes->post('/get-set-values', [SqlController
::class, 'getSetValues']);
245 $routes->get('/get-default-fk-check-value', [SqlController
::class, 'getDefaultForeignKeyCheckValue']);
246 $routes->post('/set-column-preferences', [SqlController
::class, 'setColumnOrderOrVisibility']);
248 $routes->addGroup('/table', static function (RouteCollector
$routes) {
249 $routes->addRoute(['GET', 'POST'], '/add-field', [AddFieldController
::class, 'index']);
250 $routes->addGroup('/change', static function (RouteCollector
$routes) {
251 $routes->addRoute(['GET', 'POST'], '', [ChangeController
::class, 'index']);
252 $routes->post('/rows', [ChangeController
::class, 'rows']);
254 $routes->addRoute(['GET', 'POST'], '/chart', [ChartController
::class, 'index']);
255 $routes->addRoute(['GET', 'POST'], '/create', [CreateController
::class, 'index']);
256 $routes->addGroup('/delete', static function (RouteCollector
$routes) {
257 $routes->post('/confirm', [DeleteController
::class, 'confirm']);
258 $routes->post('/rows', [DeleteController
::class, 'rows']);
260 $routes->addGroup('/export', static function (RouteCollector
$routes) {
261 $routes->addRoute(['GET', 'POST'], '', [TableExportController
::class, 'index']);
262 $routes->post('/rows', [TableExportController
::class, 'rows']);
264 $routes->addRoute(['GET', 'POST'], '/find-replace', [FindReplaceController
::class, 'index']);
265 $routes->addRoute(['GET', 'POST'], '/get-field', [GetFieldController
::class, 'index']);
266 $routes->addRoute(['GET', 'POST'], '/gis-visualization', [GisVisualizationController
::class, 'index']);
267 $routes->addRoute(['GET', 'POST'], '/import', [TableImportController
::class, 'index']);
268 $routes->addRoute(['GET', 'POST'], '/indexes', [IndexesController
::class, 'index']);
269 $routes->addRoute(['GET', 'POST'], '/operations', [TableOperationsController
::class, 'index']);
270 $routes->addRoute(['GET', 'POST'], '/recent-favorite', [RecentFavoriteController
::class, 'index']);
271 $routes->addRoute(['GET', 'POST'], '/relation', [RelationController
::class, 'index']);
272 $routes->addRoute(['GET', 'POST'], '/replace', [ReplaceController
::class, 'index']);
273 $routes->addRoute(['GET', 'POST'], '/search', [TableSearchController
::class, 'index']);
274 $routes->addRoute(['GET', 'POST'], '/sql', [TableSqlController
::class, 'index']);
275 $routes->addGroup('/structure', static function (RouteCollector
$routes) {
276 $routes->addRoute(['GET', 'POST'], '', [TableStructureController
::class, 'index']);
277 $routes->post('/add-key', [TableStructureController
::class, 'addKey']);
278 $routes->post('/browse', [TableStructureController
::class, 'browse']);
279 $routes->post('/central-columns-add', [TableStructureController
::class, 'addToCentralColumns']);
280 $routes->post('/central-columns-remove', [TableStructureController
::class, 'removeFromCentralColumns']);
281 $routes->addRoute(['GET', 'POST'], '/change', [TableStructureController
::class, 'change']);
282 $routes->post('/drop', [TableStructureController
::class, 'drop']);
283 $routes->post('/drop-confirm', [TableStructureController
::class, 'dropConfirm']);
284 $routes->post('/fulltext', [TableStructureController
::class, 'fulltext']);
285 $routes->post('/index', [TableStructureController
::class, 'addIndex']);
286 $routes->post('/move-columns', [TableStructureController
::class, 'moveColumns']);
287 $routes->post('/partitioning', [TableStructureController
::class, 'partitioning']);
288 $routes->post('/primary', [TableStructureController
::class, 'primary']);
289 $routes->post('/reserved-word-check', [TableStructureController
::class, 'reservedWordCheck']);
290 $routes->post('/save', [TableStructureController
::class, 'save']);
291 $routes->post('/spatial', [TableStructureController
::class, 'spatial']);
292 $routes->post('/unique', [TableStructureController
::class, 'unique']);
294 $routes->addRoute(['GET', 'POST'], '/tracking', [TableTrackingController
::class, 'index']);
295 $routes->addRoute(['GET', 'POST'], '/triggers', [TableTriggersController
::class, 'index']);
296 $routes->addRoute(['GET', 'POST'], '/zoom-search', [ZoomSearchController
::class, 'index']);
298 $routes->get('/themes', [ThemesController
::class, 'index']);
299 $routes->addGroup('/transformation', static function (RouteCollector
$routes) {
300 $routes->addRoute(['GET', 'POST'], '/overview', [TransformationOverviewController
::class, 'index']);
301 $routes->addRoute(['GET', 'POST'], '/wrapper', [TransformationWrapperController
::class, 'index']);
303 $routes->addRoute(['GET', 'POST'], '/user-password', [UserPasswordController
::class, 'index']);
304 $routes->addRoute(['GET', 'POST'], '/version-check', [VersionCheckController
::class, 'index']);
305 $routes->addGroup('/view', static function (RouteCollector
$routes) {
306 $routes->addRoute(['GET', 'POST'], '/create', [ViewCreateController
::class, 'index']);
307 $routes->addRoute(['GET', 'POST'], '/operations', [ViewOperationsController
::class, 'index']);