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