chartboard/app/Config/Routes.php

164 lines
10 KiB
PHP

<?php
use CodeIgniter\Router\RouteCollection;
/**
* @var RouteCollection $routes
*/
$routes->get('/', 'Auth\LoginController::index');
// Authentication
$routes->group('', static function ($routes) {
$routes->get('login', 'Auth\LoginController::index');
$routes->post('login', 'Auth\LoginController::authenticate');
$routes->get('logout', 'Auth\LoginController::logout');
$routes->get('register', 'Auth\RegisterController::index');
$routes->post('register', 'Auth\RegisterController::store');
$routes->get('verify/(:segment)', 'Auth\RegisterController::verify/$1');
$routes->get('forgot-password', 'Auth\PasswordController::forgot');
$routes->post('forgot-password', 'Auth\PasswordController::sendResetLink');
$routes->get('reset-password/(:segment)', 'Auth\PasswordController::reset/$1');
$routes->post('reset-password/(:segment)', 'Auth\PasswordController::updatePassword/$1');
});
// App modules protected by auth
$routes->group('', ['filter' => 'auth'], static function ($routes) {
$routes->group('dashboard', ['filter' => 'workspace'], static function ($routes) {
$routes->get('/', 'Dashboard\DashboardController::index');
$routes->post('store', 'Dashboard\DashboardController::store');
$routes->get('view/(:num)', 'Dashboard\DashboardController::viewBoard/$1');
$routes->get('settings/(:num)', 'Dashboard\DashboardController::settings/$1');
$routes->post('settings/(:num)', 'Dashboard\DashboardController::updateSettings/$1');
$routes->post('delete/(:num)', 'Dashboard\DashboardController::delete/$1');
$routes->post('pin/(:num)', 'Dashboard\DashboardController::pinToggle/$1');
$routes->post('(:num)/layout', 'Dashboard\DashboardController::saveLayout/$1');
$routes->get('(:num)/variables', 'Dashboard\DashboardController::variables/$1');
$routes->post('(:num)/widget', 'Dashboard\DashboardController::addWidget/$1');
$routes->post('widget/(:num)/update', 'Dashboard\DashboardController::updateWidget/$1');
$routes->post('widget/(:num)/delete', 'Dashboard\DashboardController::removeWidget/$1');
});
$routes->get('profile', 'ProfileController::index');
$routes->post('profile/update', 'ProfileController::update');
$routes->post('profile/password', 'ProfileController::changePassword');
$routes->post('profile/generate-api-token', 'ProfileController::generateApiToken');
$routes->group('workspace', static function ($routes) {
$routes->get('/', 'Workspace\WorkspaceController::index');
$routes->get('create', 'Workspace\WorkspaceController::create');
$routes->post('store', 'Workspace\WorkspaceController::store');
$routes->get('switch/(:num)', 'Workspace\WorkspaceController::switch/$1');
});
$routes->group('workspace', ['filter' => 'workspace'], static function ($routes) {
$routes->get('settings/(:num)', 'Workspace\WorkspaceController::settings/$1');
$routes->post('update/(:num)', 'Workspace\WorkspaceController::update/$1');
$routes->post('delete/(:num)', 'Workspace\WorkspaceController::delete/$1');
$routes->get('members/(:num)', 'Workspace\WorkspaceMemberController::index/$1');
$routes->post('members/(:num)/role/(:num)', 'Workspace\WorkspaceMemberController::updateRole/$1/$2');
$routes->post('members/(:num)/remove/(:num)', 'Workspace\WorkspaceMemberController::remove/$1/$2');
$routes->get('invite/(:num)', 'Workspace\WorkspaceInvitationController::index/$1');
$routes->post('invite/(:num)', 'Workspace\WorkspaceInvitationController::send/$1');
$routes->post('invite/(:num)/cancel/(:num)', 'Workspace\WorkspaceInvitationController::cancel/$1/$2');
});
$routes->group('datasource', static function ($routes) {
$routes->get('/', 'DataSource\DataSourceController::index', ['filter' => 'workspace']);
$routes->get('view/(:num)', 'DataSource\DataSourceController::show/$1', ['filter' => 'workspace']);
$routes->get('view/(:num)/proof', 'DataSource\DataSourceController::proof/$1', ['filter' => 'workspace']);
$routes->get('create', 'DataSource\DataSourceController::create', ['filter' => 'workspace']);
$routes->post('store', 'DataSource\DataSourceController::store', ['filter' => 'workspace']);
$routes->get('edit/(:num)', 'DataSource\DataSourceController::edit/$1', ['filter' => 'workspace']);
$routes->post('update/(:num)', 'DataSource\DataSourceController::update/$1', ['filter' => 'workspace']);
$routes->post('delete/(:num)', 'DataSource\DataSourceController::delete/$1', ['filter' => 'workspace']);
$routes->post('test', 'DataSource\DataSourceController::test', ['filter' => 'workspace']);
$routes->get('(:num)/schema', 'DataSource\DataSourceController::schema/$1', ['filter' => 'workspace']);
});
$routes->group('query', static function ($routes) {
$routes->get('/', 'Query\QueryController::index', ['filter' => 'workspace']);
$routes->get('create', 'Query\QueryController::create', ['filter' => 'workspace']);
$routes->post('store', 'Query\QueryController::store', ['filter' => 'workspace']);
$routes->get('view/(:num)', 'Query\QueryController::show/$1', ['filter' => 'workspace']);
$routes->get('edit/(:num)', 'Query\QueryController::edit/$1', ['filter' => 'workspace']);
$routes->post('update/(:num)', 'Query\QueryController::update/$1', ['filter' => 'workspace']);
$routes->post('execute', 'Query\QueryController::execute', ['filter' => 'workspace']);
$routes->post('detect-variables', 'Query\QueryController::detectVariables', ['filter' => 'workspace']);
});
$routes->group('chart', static function ($routes) {
$routes->get('/', 'Chart\ChartController::index', ['filter' => 'workspace']);
$routes->get('create', 'Chart\ChartController::create', ['filter' => 'workspace']);
$routes->post('store', 'Chart\ChartController::store', ['filter' => 'workspace']);
$routes->get('edit/(:num)', 'Chart\ChartController::edit/$1', ['filter' => 'workspace']);
$routes->post('update/(:num)', 'Chart\ChartController::update/$1', ['filter' => 'workspace']);
$routes->post('delete/(:num)', 'Chart\ChartController::delete/$1', ['filter' => 'workspace']);
$routes->post('duplicate/(:num)', 'Chart\ChartController::duplicate/$1', ['filter' => 'workspace']);
$routes->get('saved-query/(:num)/variables', 'Chart\ChartController::savedQueryVariables/$1', ['filter' => 'workspace']);
$routes->post('preview-query', 'Chart\ChartController::previewQuery', ['filter' => 'workspace']);
$routes->post('preview-render', 'Chart\ChartController::previewRender', ['filter' => 'workspace']);
$routes->post('(:num)/data', 'Chart\ChartController::data/$1', ['filter' => 'workspace']);
$routes->get('(:num)/export', 'Chart\ChartController::export/$1', ['filter' => 'workspace']);
});
$routes->group('alert', ['filter' => 'workspace'], static function ($routes) {
$routes->get('/', 'Alert\AlertController::index');
$routes->get('create', 'Alert\AlertController::create');
$routes->post('store', 'Alert\AlertController::store');
$routes->get('edit/(:num)', 'Alert\AlertController::edit/$1');
$routes->post('update/(:num)', 'Alert\AlertController::update/$1');
$routes->post('delete/(:num)', 'Alert\AlertController::delete/$1');
$routes->post('mute/(:num)', 'Alert\AlertController::mute/$1');
$routes->post('unmute/(:num)', 'Alert\AlertController::unmute/$1');
$routes->get('history/(:num)', 'Alert\AlertController::history/$1');
});
$routes->get('sharing/links', 'Share\LinkController::listResource', ['filter' => 'workspace']);
$routes->post('sharing/generate', 'Share\LinkController::generate', ['filter' => 'workspace']);
$routes->post('sharing/revoke/(:num)', 'Share\LinkController::revoke/$1', ['filter' => 'workspace']);
$routes->group('admin/users', ['filter' => 'role:superadmin'], static function ($routes) {
$routes->get('/', 'Admin\UserController::index');
$routes->get('edit/(:num)', 'Admin\UserController::edit/$1');
$routes->post('update/(:num)', 'Admin\UserController::update/$1');
});
$routes->group('admin', ['filter' => 'role:superadmin'], static function ($routes) {
$routes->get('settings', 'Admin\SettingsController::index');
$routes->post('settings', 'Admin\SettingsController::update');
});
$routes->group('audit', ['filter' => ['workspace', 'workspaceadmin']], static function ($routes) {
$routes->get('/', 'Audit\AuditController::index');
$routes->get('detail/(:num)', 'Audit\AuditController::detail/$1');
});
$routes->group('settings', ['filter' => 'workspace'], static function ($routes) {
$routes->get('workspace', 'Settings\SettingsController::workspace');
$routes->post('workspace', 'Settings\SettingsController::saveWorkspace');
});
$routes->group('settings', ['filter' => ['workspace', 'workspaceadmin']], static function ($routes) {
$routes->get('notifications', 'Settings\SettingsController::notifications');
$routes->post('notifications/slack-webhook', 'Settings\SettingsController::saveSlackWebhook');
$routes->post('notifications/smtp-test', 'Settings\SettingsController::testSmtp');
$routes->post('notifications/slack-test', 'Settings\SettingsController::testSlack');
});
$routes->post('settings/theme', 'Settings\SettingsController::saveTheme');
});
$routes->get('invite/(:segment)', 'Workspace\WorkspaceInvitationController::accept/$1');
// Public share (no auth)
$routes->get('share/(:segment)', 'Share\PublicController::show/$1');
$routes->post('share/(:segment)/unlock', 'Share\PublicController::unlock/$1');
$routes->post('share/(:segment)/chart/(:num)/data', 'Share\PublicController::chartData/$1/$2');
$routes->get('share/(:segment)/dashboard/variables', 'Share\PublicController::dashboardVariables/$1');
$routes->get('share/(:segment)/saved-query/(:num)/variables', 'Share\PublicController::savedQueryVariables/$1/$2');
// API v1 routes
$routes->group('api/v1', ['filter' => 'apiauth'], static function ($routes) {
$routes->options('(:any)', static fn() => service('response')->setStatusCode(200));
});