index.php 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. <?php
  2. require __DIR__ . '/../vendor/autoload.php';
  3. use FrameworkX\App;
  4. use Libs\ResponseLib;
  5. use Middlewares\CorsMiddleware;
  6. use Middlewares\JwtAuthMiddleware;
  7. use Psr\Http\Message\ServerRequestInterface;
  8. $requestUri = $_SERVER['REQUEST_URI'] ?? null;
  9. $path = $requestUri !== null ? parse_url($requestUri, PHP_URL_PATH) : '/';
  10. $file = __DIR__ . $path;
  11. if (php_sapi_name() === 'cli-server' && is_file($file)) {
  12. return false;
  13. }
  14. if (class_exists(Dotenv\Dotenv::class) && file_exists(__DIR__ . '/../.env')) {
  15. Dotenv\Dotenv::createImmutable(
  16. dirname(__DIR__),
  17. null,
  18. true
  19. )->safeLoad();
  20. }
  21. error_reporting(E_ALL);
  22. $dsn = $_ENV['DB_DSN'] ?? (function () {
  23. $host = $_ENV['DB_HOST'] ?? 'localhost';
  24. $port = $_ENV['DB_PORT'] ?? '5432';
  25. $name = $_ENV['DB_NAME'] ?? 'postgres';
  26. return "pgsql:host={$host};port={$port};dbname={$name}";
  27. })();
  28. $dbUser = $_ENV['DB_USER'] ?? 'postgres';
  29. $dbPass = $_ENV['DB_PASSWORD'] ?? '';
  30. $GLOBALS['pdo'] = new \PDO($dsn, $dbUser, $dbPass);
  31. $GLOBALS['pdo']->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
  32. $corsEnabled = filter_var($_ENV['CORS'] ?? 'false', FILTER_VALIDATE_BOOLEAN);
  33. $globalMiddleware = $corsEnabled ? [CorsMiddleware::class] : [];
  34. $app = new App(...$globalMiddleware);
  35. $authJwt = new JwtAuthMiddleware();
  36. $onlyCompany1Or2 = function (ServerRequestInterface $request, callable $next) {
  37. $companyId = (int)($request->getAttribute('api_company_id') ?? 0);
  38. if ($companyId !== 1 && $companyId !== 2) {
  39. return ResponseLib::sendFail('Forbidden', [], 'E_FORBIDDEN')->withStatus(403);
  40. }
  41. return $next($request);
  42. };
  43. $app->post('/verify/jwt', $authJwt,\Controllers\HelloController::class);
  44. $app->post('/login', \Controllers\LoginController::class);
  45. $app->post('/register', $authJwt, \Controllers\RegisterController::class);
  46. $app->post('/auth/superadmin', $authJwt, \Controllers\SuperAdminGetController::class);
  47. $app->post('/user/get', $authJwt, \Controllers\UserGetController::class);
  48. $app->post('/user/info', $authJwt, \Controllers\UserInfoController::class);
  49. $app->post('/user/delete', $authJwt, \Controllers\UserDeleteController::class);
  50. // Public endpoint to create company, user, and wallet in a single transaction
  51. $app->post('/company/user/create', \Controllers\CompanyWithUserController::class);
  52. $app->post('/company/user/kyc/status', \Controllers\CompanyCheckStatus::class);
  53. $app->post('/user/kyc/status', \Controllers\UserCheckStatus::class);
  54. // Authenticated user profile updates
  55. $app->post('/user/change-email', $authJwt, \Controllers\UserChangeEmailController::class);
  56. $app->post('/user/change-password', $authJwt, \Controllers\UserChangePasswordController::class);
  57. // Commodities (JWT-protected)
  58. $app->post('/commodity/create', $authJwt, \Controllers\CommodityCreateController::class);
  59. $app->post('/commodity/update', $authJwt, \Controllers\CommodityUpdateController::class);
  60. $app->post('/commodity/delete', $authJwt, \Controllers\CommodityDeleteController::class);
  61. $app->post('/commodities/get', $authJwt, \Controllers\CommoditiesGetController::class);
  62. // CPR registration
  63. $app->post('/cpr/create', $authJwt, \Controllers\RegisterCprController::class);
  64. // CPR history
  65. $app->post('/cpr/history', $authJwt, \Controllers\CprQueryController::class);
  66. $app->post('/wallet/tokens', $authJwt, \Controllers\WalletTokensController::class);
  67. $app->post('/company/summary', $authJwt, \Controllers\CompanySummaryController::class);
  68. $app->post('/token/get', $authJwt, \Controllers\TokenGetController::class);
  69. $app->post('/token/orderbook', $authJwt, \Controllers\TokenOrderbookController::class);
  70. $app->post('/orderbook/filter', $authJwt, \Controllers\OrderbookFilterController::class);
  71. $app->post('/orderbook/payment', $authJwt, \Controllers\OrderbookPaymentController::class);
  72. $app->post('/orderbook/cancel', $authJwt, \Controllers\OrderbookUpdateStatusController::class);
  73. $app->post('/orderbook/transfer', $authJwt, \Controllers\OrderbookTransferController::class);
  74. $app->post('/harvest/list', $authJwt, \Controllers\HarvestListController::class);
  75. $app->post('/discount/get', $authJwt, $onlyCompany1Or2, \Controllers\DiscountGetController::class);
  76. $app->post('/discount/create', $authJwt, $onlyCompany1Or2, \Controllers\DiscountCreateController::class);
  77. $app->post('/discount/delete', $authJwt, $onlyCompany1Or2, \Controllers\DiscountDeleteController::class);
  78. $app->post('/b3/token', \Controllers\B3TokenController::class);
  79. $app->post('/b3/cpr/register', $authJwt, $onlyCompany1Or2, \Controllers\B3CprRegisterController::class);
  80. $app->post('/b3/payment/confirm', $authJwt, \Controllers\PaymentConfirmController::class);
  81. $app->post('/cpr/fast-track', \Controllers\CprFastTrackController::class);
  82. $app->run();