155 lines
5.3 KiB
PHP
155 lines
5.3 KiB
PHP
<?php
|
|
|
|
/*******************************************************************
|
|
|
|
Desc. : Loading Routing Setup
|
|
Created By : Siau Pheng ([email protected]).
|
|
Created Date : November 23rd, 2019.
|
|
Last Modified : November 4th, 2026.
|
|
|
|
(c) 3FONIA Software; WWW.3FONIA.COM.
|
|
|
|
*******************************************************************/
|
|
|
|
use flight\Engine;
|
|
use flight\Session;
|
|
use flight\net\Router;
|
|
use Webapp\App\Auth;
|
|
use Webapp\Data\Cache;
|
|
use Webapp\Web\Menu;
|
|
use App\Middleware\SecurityHeaders;
|
|
use App\Controller\IndexController;
|
|
use App\Controller\QZController;
|
|
|
|
/**
|
|
* Application routes.
|
|
*
|
|
* @var Router $router
|
|
* @var Engine $app
|
|
* @var Session $session
|
|
*/
|
|
|
|
$router = $app->router();
|
|
|
|
$router->group('', function(Router $router) use ($app, $session, $config) {
|
|
|
|
$router->get('/(@token(/@nowhere))', function(?string $token, ?string $nowhere) use ($app, $session, $config) {
|
|
$token_s = $session->get('APP_TOKEN');
|
|
if (!empty($token) && strlen($token ?? '') === 60) {
|
|
$auth = new Auth($app);
|
|
if ($token !== $token_s) {
|
|
if ($auth->token_check($token)) {
|
|
if (empty($session->get('WEB_USER'))) {
|
|
$auser = $auth->user_data($auth->getUserByToken($token));
|
|
$auth->pos_login($session->get("APP_INV")['CABANGID'] ?? 0, $auser['UserID'], $auser['UNIX'], $app->request()->ip);
|
|
$session->set('WEB_USER', $auser);
|
|
}
|
|
$auth->user_log();
|
|
$session->set('APP_TOKEN', $token);
|
|
} else {
|
|
$session->delete('APP_TOKEN');
|
|
$session->delete('WEB_USER');
|
|
$app->redirect('/', 301);
|
|
}
|
|
} else $auth->token_update();
|
|
if (!empty($nowhere)) $app->redirect($token ?? $token_s, 301);
|
|
} else {
|
|
if (!empty($token_s) && empty($nowhere) && $token !== 'monitor') $app->redirect($token_s, 301);
|
|
return true;
|
|
}
|
|
|
|
$asset = require('asset.php');
|
|
$_user = $session->get('WEB_USER') ?? [];
|
|
$_menu = new Menu($app);
|
|
$cache = new Cache($app);
|
|
$cache->set_dev($config->env() === 'development');
|
|
$cache->set_asset($asset);
|
|
|
|
$_web_app = $session->get('WEB_APP') ?? [];
|
|
$_web_app = array_merge($_web_app, $cache->Cache('index'));
|
|
|
|
$_web_app['NAVI_SIDEBAR'] = $_menu->Sidebar();
|
|
$_web_app['NAVI_HEADER'] = $_menu->Header();
|
|
$_web_app['USER_ID'] = $_user['UserID'] ?? "";
|
|
$_web_app['USER_USER'] = $_user['Username'] ?? "";
|
|
$_web_app['USER_NAME'] = $_user['Nama'] ?? "";
|
|
$_web_app['USER_POSISI'] = $_user['Posisi'] ?? "";
|
|
$_web_app['MENU_MODUL'] = $_menu->Modul();
|
|
$app->render('index', $_web_app);
|
|
});
|
|
|
|
$router->get('/login', function() use ($app, $session, $config) {
|
|
$asset = require('asset.php');
|
|
$cache = new Cache($app);
|
|
$cache->set_dev($config->env() === 'development');
|
|
$cache->set_asset($asset);
|
|
$_web_app = $session->get('WEB_APP') ?? [];
|
|
$_web_app = array_merge($_web_app, $cache->Cache('login'));
|
|
$app->render('login', $_web_app);
|
|
});
|
|
|
|
$router->get('/monitor', function() use ($app, $session, $config) {
|
|
$asset = require('asset.php');
|
|
$cache = new Cache($app);
|
|
$cache->set_dev($config->env() === 'development');
|
|
$cache->set_asset($asset);
|
|
$_web_app = $session->get('WEB_APP') ?? [];
|
|
$_web_app = array_merge($_web_app, $cache->Cache('monitor'));
|
|
$app->render('monitor', $_web_app);
|
|
});
|
|
|
|
$router->post('/(@path1(/@path2(/@path3(/@path4))))', static function ($path1, $path2, $path3, $path4) use ($app) {
|
|
$_path1 = ucfirst($path1) . '\\';
|
|
$_path2 = ucfirst($path2) . '\\';
|
|
if (empty($path3)) {
|
|
$_path1 = '';
|
|
$_path2 = '';
|
|
$controller = $path1;
|
|
$method = $path2;
|
|
} else if (empty($path4)) {
|
|
$_path2 = '';
|
|
$controller = $path2;
|
|
$method = $path3;
|
|
} else {
|
|
$controller = $path3;
|
|
$method = $path4;
|
|
}
|
|
$controller = $controller ? ucfirst(strtolower($controller)) : 'Index';
|
|
$method = $method ? $method : 'index';
|
|
$class = '\\App\\Controller\\' . $_path1 . $_path2 . $controller . 'Controller';
|
|
if (!class_exists($class) || (class_exists($class) && ! method_exists($class, $method))) return true;
|
|
$ct = $app->make($class);
|
|
$ct->$method();
|
|
});
|
|
|
|
// handle Cache css & js for application
|
|
$router->get('/cache/@filename', function($filename) use ($app) {
|
|
$rootdir = (defined('PROJECT_ROOT')) ? constant('PROJECT_ROOT') : $app->get('app.project_root');
|
|
$filePath = $rootdir . '/temp/cache/' . $filename;
|
|
if (file_exists($filePath) && !str_contains($filename, '..')) {
|
|
$mimeType = 'application/octet-stream';
|
|
if (str_ends_with($filePath, '.js')) $mimeType = 'application/javascript';
|
|
if (str_ends_with($filePath, '.css')) $mimeType = 'text/css';
|
|
$app->response()->header('Content-Type', $mimeType.'; charset=utf-8');
|
|
if (function_exists('gzencode') && str_contains($_SERVER['HTTP_ACCEPT_ENCODING'] ?? '', 'gzip')) {
|
|
$app->response()->header('Content-Encoding', 'gzip');
|
|
echo gzencode(file_get_contents($filePath), 9);
|
|
} else echo file_get_contents($filePath);
|
|
} else {
|
|
$app->notFound();
|
|
}
|
|
});
|
|
|
|
// handle QZ Printer
|
|
$router->group('/qz', function() use ($router) {
|
|
$router->get('/cert', [ QZController::class, 'getCert' ]);
|
|
$router->get('/sign(/@req)', [ QZController::class, 'getSign' ]);
|
|
});
|
|
|
|
$router->get('/401', [IndexController::class, 'get401']);
|
|
$router->get('/404', [IndexController::class, 'get404']);
|
|
$router->get('*', [IndexController::class, 'get404']);
|
|
$router->post('*', [IndexController::class, 'post404']);
|
|
|
|
}, [ SecurityHeaders::class ]);
|