From 122f65b125e72c4c46c879d6ec27470451e8a1c5 Mon Sep 17 00:00:00 2001 From: Dillon Ngo Date: Thu, 26 Jun 2025 20:03:24 +0800 Subject: [PATCH] E-Invoice - Maintenance notice for normal user except admin --- app/Http/Kernel.php | 1 + app/Http/Middleware/EnsureUserIsAdmin.php | 27 +++++++++ .../assets/vue/general/mixins/request.js | 5 ++ routes/api.php | 57 ++++++++++--------- routes/web.php | 22 ++++--- 5 files changed, 75 insertions(+), 37 deletions(-) create mode 100644 app/Http/Middleware/EnsureUserIsAdmin.php diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index c6186664..2d50694d 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -80,5 +80,6 @@ class Kernel extends HttpKernel 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, 'valid.token' => ValidateToken::class, 'token.check' => \App\Http\Middleware\TokenCheckerMiddleware::class, + 'admin' => \App\Http\Middleware\EnsureUserIsAdmin::class, //cief todo: 90 - maintenance ]; } diff --git a/app/Http/Middleware/EnsureUserIsAdmin.php b/app/Http/Middleware/EnsureUserIsAdmin.php new file mode 100644 index 00000000..58c206ac --- /dev/null +++ b/app/Http/Middleware/EnsureUserIsAdmin.php @@ -0,0 +1,27 @@ +authenticate(); + if(!in_array($user->type, RoleTypes::ADMIN_ROLES)){ + return response()->view('errors.503', [], 503); + } + return $next($request); + } +} diff --git a/resources/assets/vue/general/mixins/request.js b/resources/assets/vue/general/mixins/request.js index 4048415a..96318920 100644 --- a/resources/assets/vue/general/mixins/request.js +++ b/resources/assets/vue/general/mixins/request.js @@ -13,6 +13,11 @@ export default { let statusCode = response.status, success = response.ok; + // console.log('statusCode: ' + statusCode); //cief todo: 90 - maintenance + if(statusCode == 503){ + window.location.href = '/maintenance'; + } + if (response.headers.get("content-type") === "application/zip") { const fileName = response.headers.get('Content-Disposition').split('filename=')[1].replaceAll('"', ''); diff --git a/routes/api.php b/routes/api.php index ef7025a5..74de21b6 100644 --- a/routes/api.php +++ b/routes/api.php @@ -26,53 +26,54 @@ Route::group(['middleware' => 'api', 'prefix' => 'v1', 'as' => 'api.'], function Route::post('online_payment/callback', 'Billplz\CallbackBillplzController@callback')->name('online_payment.callback'); Route::group(['middleware' => 'valid.token'], function () { + Route::group(['middleware' => 'admin'], function () { //cief todo: 90 - maintenance - Route::get('/storage/{fileName}/fetch', 'Documents\RenderDocumentController@fileStorageServe')->where(['fileName' => '.*'])->name('storage.document.file'); - Route::post('/import/update-debtor/f614e339d7058904a831aad742e24d55', 'Imports\ImportUpdateDebtorController@import')->name('debtor.import'); - Route::post('/import/upload-honey-trap', 'Imports\ImportHoneyTrapController@import')->name('honey_trap.upload'); - Route::post('/import/upload-import-invoices', 'Imports\ImportStatementInvoiceController@import')->name('import_invoices.upload'); - Route::post('/import/upload-import-receipt', 'Imports\ImportStatementReceiptsController@import')->name('import_receipts.upload'); - Route::post('/customers/invoices', 'Companies\BulkDownloadCustomerInvoicesController@download')->name('customers.invoices'); - Route::post('/supplier/white-form/bulk-download', 'Companies\BulkDownloadSupplierWhiteFormsController@download')->name('suppliers.white_forms'); + Route::get('/storage/{fileName}/fetch', 'Documents\RenderDocumentController@fileStorageServe')->where(['fileName' => '.*'])->name('storage.document.file'); + Route::post('/import/update-debtor/f614e339d7058904a831aad742e24d55', 'Imports\ImportUpdateDebtorController@import')->name('debtor.import'); + Route::post('/import/upload-honey-trap', 'Imports\ImportHoneyTrapController@import')->name('honey_trap.upload'); + Route::post('/import/upload-import-invoices', 'Imports\ImportStatementInvoiceController@import')->name('import_invoices.upload'); + Route::post('/import/upload-import-receipt', 'Imports\ImportStatementReceiptsController@import')->name('import_receipts.upload'); + Route::post('/customers/invoices', 'Companies\BulkDownloadCustomerInvoicesController@download')->name('customers.invoices'); + Route::post('/supplier/white-form/bulk-download', 'Companies\BulkDownloadSupplierWhiteFormsController@download')->name('suppliers.white_forms'); - require __DIR__ . '/company.php'; + require __DIR__ . '/company.php'; - require __DIR__ . '/document.php'; + require __DIR__ . '/document.php'; - require __DIR__ . '/segment.php'; + require __DIR__ . '/segment.php'; - require __DIR__ . '/segment_constant.php'; + require __DIR__ . '/segment_constant.php'; - require __DIR__ . '/currency.php'; + require __DIR__ . '/currency.php'; - require __DIR__ . '/bank.php'; + require __DIR__ . '/bank.php'; - require __DIR__ . '/booking.php'; + require __DIR__ . '/booking.php'; - require __DIR__ . '/transaction.php'; + require __DIR__ . '/transaction.php'; - require __DIR__ . '/crud.php'; + require __DIR__ . '/crud.php'; - require __DIR__ . '/announcement.php'; + require __DIR__ . '/announcement.php'; - require __DIR__ . '/billplz.php'; + require __DIR__ . '/billplz.php'; - require __DIR__ . '/wallet.php'; + require __DIR__ . '/wallet.php'; - require __DIR__ . '/voucher.php'; + require __DIR__ . '/voucher.php'; - require __DIR__ . '/accounting.php'; + require __DIR__ . '/accounting.php'; - require __DIR__ . '/reward.php'; + require __DIR__ . '/reward.php'; - require __DIR__ . '/milestone.php'; + require __DIR__ . '/milestone.php'; - require __DIR__ . '/remark.php'; + require __DIR__ . '/remark.php'; - require __DIR__ . '/job.php'; - -// require __DIR__ . '/rate.php'; -// require __DIR__ . '/receipt.php'; + require __DIR__ . '/job.php'; + // require __DIR__ . '/rate.php'; + // require __DIR__ . '/receipt.php'; + }); }); }); diff --git a/routes/web.php b/routes/web.php index b2e5df0e..6aef2081 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1203,42 +1203,42 @@ Route::get('/show-white-form-transactions-in-date-range/{from_date}/{to_date}', const fileInput = form.querySelector("input[type=\'file\']"); const files = fileInput.files; const userToken = localStorage.getItem("user-token"); - + if (files.length === 0) { alert("Please select at least one file to upload."); return; } - + const fileReaders = []; let totalFiles = files.length; - + // Create a promise for each file to read it as Base64 Array.from(files).forEach((file) => { const reader = new FileReader(); - + // Create a promise that resolves when the file is read const fileReadPromise = new Promise((resolve, reject) => { reader.onload = (event) => { resolve(event.target.result); }; - + reader.onerror = (error) => { reject(error); }; - + reader.readAsDataURL(file); // Read the file as Data URL (Base64) }); - + fileReaders.push(fileReadPromise); }); - + // Wait for all files to be read Promise.all(fileReaders) .then((fileData) => { const payload = { files: fileData, // Array of objects with name, type, and Base64 content }; - + // Send the payload as JSON return fetch(`/api/v1/transactions/${billId}/bill/verification`, { method: "POST", @@ -1364,3 +1364,7 @@ Route::get('/site.webmanifest', function () { Route::get('/test-test', function () { dd('test-test'); }); + +Route::get('/maintenance', function () { + return response()->view('errors.503', [], 503); +});