2019-07-16 04:38:11 +02:00
< ? php
2024-01-17 17:41:54 +01:00
use App\Http\Controllers\ClientPortal\EmailPreferencesController ;
2023-11-26 08:41:42 +01:00
use App\Http\Controllers\Auth\ContactForgotPasswordController ;
2023-03-15 12:59:40 +01:00
use App\Http\Controllers\Auth\ContactLoginController ;
use App\Http\Controllers\Auth\ContactRegisterController ;
use App\Http\Controllers\Auth\ContactResetPasswordController ;
use App\Http\Controllers\ClientPortal\PaymentMethodController ;
2023-11-26 08:41:42 +01:00
use App\Http\Controllers\ClientPortal\PrePaymentController ;
use App\Http\Controllers\ClientPortal\SubscriptionController ;
use App\Http\Controllers\ClientPortal\TaskController ;
use App\Http\Controllers\CreditController ;
use App\Http\Controllers\InvoiceController ;
use App\Http\Controllers\QuoteController ;
use App\Http\Controllers\RecurringInvoiceController ;
use App\Models\Account ;
use App\Utils\Ninja ;
use App\Utils\PhantomJS\Phantom ;
use Illuminate\Support\Facades\Route ;
2020-03-23 18:10:42 +01:00
2023-07-14 06:23:01 +02:00
Route :: get ( 'client' , [ ContactLoginController :: class , 'showLoginForm' ]) -> name ( 'client.catchall' ) -> middleware ([ 'domain_db' , 'contact_account' , 'locale' , 'throttle:portal' ]); //catch all
2019-08-05 00:17:46 +02:00
2023-07-14 06:23:01 +02:00
Route :: get ( 'client/login/{company_key?}' , [ ContactLoginController :: class , 'showLoginForm' ]) -> name ( 'client.login' ) -> middleware ([ 'domain_db' , 'contact_account' , 'locale' , 'throttle:portal' ]);
2022-07-29 07:05:47 +02:00
Route :: post ( 'client/login/{company_key?}' , [ ContactLoginController :: class , 'login' ]) -> name ( 'client.login.submit' );
2019-07-16 04:38:11 +02:00
2022-07-15 14:59:25 +02:00
Route :: get ( 'client/register/{company_key?}' , [ ContactRegisterController :: class , 'showRegisterForm' ]) -> name ( 'client.register' ) -> middleware ([ 'domain_db' , 'contact_account' , 'contact_register' , 'locale' ]);
2023-07-14 06:23:01 +02:00
Route :: post ( 'client/register/{company_key?}' , [ ContactRegisterController :: class , 'register' ]) -> middleware ([ 'domain_db' , 'contact_account' , 'contact_register' , 'locale' , 'throttle:portal' ]);
2020-05-28 17:39:38 +02:00
2023-07-14 06:23:01 +02:00
Route :: get ( 'client/password/reset' , [ ContactForgotPasswordController :: class , 'showLinkRequestForm' ]) -> name ( 'client.password.request' ) -> middleware ([ 'domain_db' , 'contact_account' , 'locale' , 'throttle:portal' ]);
Route :: post ( 'client/password/email' , [ ContactForgotPasswordController :: class , 'sendResetLinkEmail' ]) -> name ( 'client.password.email' ) -> middleware ([ 'locale' , 'throttle:portal' ]);
Route :: get ( 'client/password/reset/{token}' , [ ContactResetPasswordController :: class , 'showResetForm' ]) -> name ( 'client.password.reset' ) -> middleware ([ 'domain_db' , 'contact_account' , 'locale' , 'throttle:portal' ]);
Route :: post ( 'client/password/reset' , [ ContactResetPasswordController :: class , 'reset' ]) -> name ( 'client.password.update' ) -> middleware ([ 'domain_db' , 'contact_account' , 'locale' , 'throttle:portal' ]);
2019-07-17 06:15:25 +02:00
2023-10-26 03:25:56 +02:00
Route :: post ( 'set_password' , [ App\Http\Controllers\ClientPortal\InvitationController :: class , 'handlePasswordSet' ]) -> name ( 'client.set_password' ) -> middleware ( 'domain_db' );
2020-04-16 23:19:21 +02:00
2022-07-15 14:59:25 +02:00
Route :: get ( 'tmp_pdf/{hash}' , [ App\Http\Controllers\ClientPortal\TempRouteController :: class , 'index' ]) -> name ( 'tmp_pdf' );
2020-11-27 10:14:01 +01:00
2022-07-15 14:59:25 +02:00
Route :: get ( 'client/key_login/{contact_key}' , [ App\Http\Controllers\ClientPortal\ContactHashLoginController :: class , 'login' ]) -> name ( 'client.contact_login' ) -> middleware ([ 'domain_db' , 'contact_key_login' ]);
Route :: get ( 'client/magic_link/{magic_link}' , [ App\Http\Controllers\ClientPortal\ContactHashLoginController :: class , 'magicLink' ]) -> name ( 'client.contact_magic_link' ) -> middleware ([ 'domain_db' , 'contact_key_login' ]);
2024-01-25 10:33:47 +01:00
2023-06-29 08:38:33 +02:00
Route :: get ( 'documents/{document_hash}' , [ App\Http\Controllers\ClientPortal\DocumentController :: class , 'publicDownload' ]) -> name ( 'documents.public_download' ) -> middleware ([ 'api_db' , 'token_auth' ]);
2024-01-25 10:33:47 +01:00
Route :: get ( 'documents/{hash}/hashed' , [ App\Http\Controllers\ClientPortal\DocumentController :: class , 'hashDownload' ]) -> name ( 'documents.hashed_download' );
2022-07-15 14:59:25 +02:00
Route :: get ( 'error' , [ App\Http\Controllers\ClientPortal\ContactHashLoginController :: class , 'errorPage' ]) -> name ( 'client.error' );
Route :: get ( 'client/payment/{contact_key}/{payment_id}' , [ App\Http\Controllers\ClientPortal\InvitationController :: class , 'paymentRouter' ]) -> middleware ([ 'domain_db' , 'contact_key_login' ]);
Route :: get ( 'client/ninja/{contact_key}/{company_key}' , [ App\Http\Controllers\ClientPortal\NinjaPlanController :: class , 'index' ]) -> name ( 'client.ninja_contact_login' ) -> middleware ([ 'domain_db' ]);
Route :: post ( 'client/ninja/trial_confirmation' , [ App\Http\Controllers\ClientPortal\NinjaPlanController :: class , 'trial_confirmation' ]) -> name ( 'client.trial.response' ) -> middleware ([ 'domain_db' ]);
2020-09-23 03:45:07 +02:00
2022-02-16 22:17:29 +01:00
Route :: group ([ 'middleware' => [ 'auth:contact' , 'locale' , 'domain_db' , 'check_client_existence' ], 'prefix' => 'client' , 'as' => 'client.' ], function () {
2022-07-15 14:59:25 +02:00
Route :: get ( 'dashboard' , [ App\Http\Controllers\ClientPortal\DashboardController :: class , 'index' ]) -> name ( 'dashboard' ); // name = (dashboard. index / create / show / update / destroy / edit
2020-03-23 18:10:42 +01:00
2022-07-15 14:59:25 +02:00
Route :: get ( 'plan' , [ App\Http\Controllers\ClientPortal\NinjaPlanController :: class , 'plan' ]) -> name ( 'plan' ); // name = (dashboard. index / create / show / update / destroy / edit
2024-03-10 15:40:25 +01:00
2023-07-15 01:17:38 +02:00
Route :: get ( 'showBlob/{hash}' , [ App\Http\Controllers\ClientPortal\InvoiceController :: class , 'showBlob' ]) -> name ( 'invoices.showBlob' );
2022-07-15 14:59:25 +02:00
Route :: get ( 'invoices' , [ App\Http\Controllers\ClientPortal\InvoiceController :: class , 'index' ]) -> name ( 'invoices.index' ) -> middleware ( 'portal_enabled' );
Route :: post ( 'invoices/payment' , [ App\Http\Controllers\ClientPortal\InvoiceController :: class , 'bulk' ]) -> name ( 'invoices.bulk' );
Route :: get ( 'invoices/payment' , [ App\Http\Controllers\ClientPortal\InvoiceController :: class , 'catch_bulk' ]) -> name ( 'invoices.catch_bulk' );
Route :: post ( 'invoices/download' , [ App\Http\Controllers\ClientPortal\InvoiceController :: class , 'download' ]) -> name ( 'invoices.download' );
2022-12-22 05:58:18 +01:00
Route :: get ( 'invoices/{invoice}/{hash?}' , [ App\Http\Controllers\ClientPortal\InvoiceController :: class , 'show' ]) -> name ( 'invoice.show' );
2022-07-15 14:59:25 +02:00
Route :: get ( 'invoices/{invoice_invitation}' , [ App\Http\Controllers\ClientPortal\InvoiceController :: class , 'show' ]) -> name ( 'invoice.show_invitation' );
2020-03-23 18:10:42 +01:00
2022-07-15 14:59:25 +02:00
Route :: get ( 'recurring_invoices' , [ App\Http\Controllers\ClientPortal\RecurringInvoiceController :: class , 'index' ]) -> name ( 'recurring_invoices.index' ) -> middleware ( 'portal_enabled' );
Route :: get ( 'recurring_invoices/{recurring_invoice}' , [ App\Http\Controllers\ClientPortal\RecurringInvoiceController :: class , 'show' ]) -> name ( 'recurring_invoice.show' );
Route :: get ( 'recurring_invoices/{recurring_invoice}/request_cancellation' , [ App\Http\Controllers\ClientPortal\RecurringInvoiceController :: class , 'requestCancellation' ]) -> name ( 'recurring_invoices.request_cancellation' );
Route :: post ( 'payments/process' , [ App\Http\Controllers\ClientPortal\PaymentController :: class , 'process' ]) -> name ( 'payments.process' );
Route :: get ( 'payments/process' , [ App\Http\Controllers\ClientPortal\PaymentController :: class , 'catch_process' ]) -> name ( 'payments.catch_process' );
2020-03-23 18:10:42 +01:00
2022-07-15 14:59:25 +02:00
Route :: post ( 'payments/credit_response' , [ App\Http\Controllers\ClientPortal\PaymentController :: class , 'credit_response' ]) -> name ( 'payments.credit_response' );
2021-12-15 00:07:04 +01:00
2022-07-15 14:59:25 +02:00
Route :: get ( 'payments' , [ App\Http\Controllers\ClientPortal\PaymentController :: class , 'index' ]) -> name ( 'payments.index' ) -> middleware ( 'portal_enabled' );
2023-03-16 05:27:16 +01:00
Route :: get ( 'payments/{payment}' , [ App\Http\Controllers\ClientPortal\PaymentController :: class , 'show' ]) -> name ( 'payments.show' );
2020-10-13 12:32:15 +02:00
2023-03-15 12:59:40 +01:00
Route :: get ( 'pre_payments' , [ PrePaymentController :: class , 'index' ]) -> name ( 'pre_payments.index' ) -> middleware ( 'portal_enabled' );
2023-03-16 05:27:16 +01:00
Route :: post ( 'pre_payments/process' , [ PrePaymentController :: class , 'process' ]) -> name ( 'pre_payments.process' ) -> middleware ( 'portal_enabled' );
2023-03-15 12:59:40 +01:00
2022-07-15 14:59:25 +02:00
Route :: get ( 'profile/{client_contact}/edit' , [ App\Http\Controllers\ClientPortal\ProfileController :: class , 'edit' ]) -> name ( 'profile.edit' );
Route :: put ( 'profile/{client_contact}/edit' , [ App\Http\Controllers\ClientPortal\ProfileController :: class , 'update' ]) -> name ( 'profile.update' );
Route :: put ( 'profile/{client_contact}/edit_client' , [ App\Http\Controllers\ClientPortal\ProfileController :: class , 'updateClient' ]) -> name ( 'profile.edit_client' );
Route :: put ( 'profile/{client_contact}/localization' , [ App\Http\Controllers\ClientPortal\ProfileController :: class , 'updateClientLocalization' ]) -> name ( 'profile.edit_localization' );
2022-07-09 04:15:35 +02:00
2022-07-15 14:59:25 +02:00
Route :: get ( 'payment_methods/{payment_method}/verification' , [ App\Http\Controllers\ClientPortal\PaymentMethodController :: class , 'verify' ]) -> name ( 'payment_methods.verification' );
2023-07-14 06:23:01 +02:00
Route :: post ( 'payment_methods/{payment_method}/verification' , [ App\Http\Controllers\ClientPortal\PaymentMethodController :: class , 'processVerification' ]) -> middleware ([ 'throttle:portal' ]);
2020-03-23 18:10:42 +01:00
2022-07-15 14:59:25 +02:00
Route :: get ( 'payment_methods/confirm' , [ App\Http\Controllers\ClientPortal\PaymentMethodController :: class , 'store' ]) -> name ( 'payment_methods.confirm' );
2020-03-23 18:10:42 +01:00
2022-07-15 14:59:25 +02:00
Route :: resource ( 'payment_methods' , PaymentMethodController :: class ) -> except ([ 'edit' , 'update' ]);
2020-06-09 14:42:23 +02:00
2022-07-15 14:59:25 +02:00
Route :: match ([ 'GET' , 'POST' ], 'quotes/approve' , [ App\Http\Controllers\ClientPortal\QuoteController :: class , 'bulk' ]) -> name ( 'quotes.bulk' );
Route :: get ( 'quotes' , [ App\Http\Controllers\ClientPortal\QuoteController :: class , 'index' ]) -> name ( 'quotes.index' ) -> middleware ( 'portal_enabled' );
Route :: get ( 'quotes/{quote}' , [ App\Http\Controllers\ClientPortal\QuoteController :: class , 'show' ]) -> name ( 'quote.show' );
Route :: get ( 'quotes/{quote_invitation}' , [ App\Http\Controllers\ClientPortal\QuoteController :: class , 'show' ]) -> name ( 'quote.show_invitation' );
Route :: post ( 'quotes/download' , [ App\Http\Controllers\ClientPortal\QuoteController :: class , 'download' ]) -> name ( 'quotes.download' );
2021-09-29 16:26:15 +02:00
2022-07-15 14:59:25 +02:00
Route :: get ( 'credits' , [ App\Http\Controllers\ClientPortal\CreditController :: class , 'index' ]) -> name ( 'credits.index' );
Route :: get ( 'credits/{credit}' , [ App\Http\Controllers\ClientPortal\CreditController :: class , 'show' ]) -> name ( 'credit.show' );
2020-03-23 18:10:42 +01:00
2022-07-15 14:59:25 +02:00
Route :: get ( 'credits/{credit_invitation}' , [ App\Http\Controllers\ClientPortal\CreditController :: class , 'show' ]) -> name ( 'credits.show_invitation' );
2020-03-23 18:10:42 +01:00
2022-07-31 11:11:32 +02:00
Route :: get ( 'client/switch_company/{contact}' , App\Http\Controllers\ClientPortal\SwitchCompanyController :: class ) -> name ( 'switch_company' );
2020-10-29 11:19:10 +01:00
2022-07-15 14:59:25 +02:00
Route :: post ( 'documents/download_multiple' , [ App\Http\Controllers\ClientPortal\DocumentController :: class , 'downloadMultiple' ]) -> name ( 'documents.download_multiple' );
Route :: get ( 'documents/{document}/download' , [ App\Http\Controllers\ClientPortal\DocumentController :: class , 'download' ]) -> name ( 'documents.download' );
2022-07-27 07:39:43 +02:00
Route :: resource ( 'documents' , App\Http\Controllers\ClientPortal\DocumentController :: class ) -> only ([ 'index' , 'show' ]);
2020-03-23 18:10:42 +01:00
2022-07-15 14:59:25 +02:00
Route :: get ( 'subscriptions/{recurring_invoice}/plan_switch/{target}' , [ App\Http\Controllers\ClientPortal\SubscriptionPlanSwitchController :: class , 'index' ]) -> name ( 'subscription.plan_switch' );
2023-04-03 17:55:40 +02:00
2023-01-12 05:58:02 +01:00
Route :: get ( 'subscriptions/{recurring_invoice}' , [ SubscriptionController :: class , 'show' ]) -> middleware ( 'portal_enabled' ) -> name ( 'subscriptions.show' );
Route :: get ( 'subscriptions' , [ SubscriptionController :: class , 'index' ]) -> middleware ( 'portal_enabled' ) -> name ( 'subscriptions.index' );
2020-08-14 17:29:26 +02:00
2022-07-15 14:59:25 +02:00
Route :: resource ( 'tasks' , TaskController :: class ) -> only ([ 'index' ]);
2021-04-07 18:08:26 +02:00
2022-07-15 14:59:25 +02:00
Route :: get ( 'statement' , [ App\Http\Controllers\ClientPortal\StatementController :: class , 'index' ]) -> name ( 'statement' );
Route :: get ( 'statement/raw' , [ App\Http\Controllers\ClientPortal\StatementController :: class , 'raw' ]) -> name ( 'statement.raw' );
2021-03-29 14:35:27 +02:00
2022-07-31 12:02:21 +02:00
Route :: post ( 'upload' , App\Http\Controllers\ClientPortal\UploadController :: class ) -> name ( 'upload.store' );
2022-07-15 14:59:25 +02:00
Route :: get ( 'logout' , [ ContactLoginController :: class , 'logout' ]) -> name ( 'logout' );
2019-07-17 00:59:09 +02:00
});
2022-07-15 14:59:25 +02:00
Route :: post ( 'payments/process/response' , [ App\Http\Controllers\ClientPortal\PaymentController :: class , 'response' ]) -> name ( 'client.payments.response' ) -> middleware ([ 'locale' , 'domain_db' , 'verify_hash' ]);
Route :: get ( 'payments/process/response' , [ App\Http\Controllers\ClientPortal\PaymentController :: class , 'response' ]) -> name ( 'client.payments.response.get' ) -> middleware ([ 'locale' , 'domain_db' , 'verify_hash' ]);
2022-07-09 04:15:35 +02:00
2022-07-15 14:59:25 +02:00
Route :: get ( 'client/subscriptions/{subscription}/purchase' , [ App\Http\Controllers\ClientPortal\SubscriptionPurchaseController :: class , 'index' ]) -> name ( 'client.subscription.purchase' ) -> middleware ( 'domain_db' );
2022-11-23 07:27:43 +01:00
Route :: get ( 'client/subscriptions/{subscription}/purchase/v2' , [ App\Http\Controllers\ClientPortal\SubscriptionPurchaseController :: class , 'upgrade' ]) -> name ( 'client.subscription.upgrade' ) -> middleware ( 'domain_db' );
2024-02-08 19:55:50 +01:00
Route :: get ( 'client/subscriptions/{subscription}/purchase/v3' , [ App\Http\Controllers\ClientPortal\SubscriptionPurchaseController :: class , 'v3' ]) -> name ( 'client.subscription.v3' ) -> middleware ( 'domain_db' );
2022-11-23 07:27:43 +01:00
2021-11-13 22:20:33 +01:00
Route :: group ([ 'middleware' => [ 'invite_db' ], 'prefix' => 'client' , 'as' => 'client.' ], function () {
2020-04-15 02:30:52 +02:00
/*Invitation catches*/
2022-07-15 14:59:25 +02:00
Route :: get ( 'recurring_invoice/{invitation_key}' , [ App\Http\Controllers\ClientPortal\InvitationController :: class , 'recurringRouter' ]);
Route :: get ( 'invoice/{invitation_key}' , [ App\Http\Controllers\ClientPortal\InvitationController :: class , 'invoiceRouter' ]);
Route :: get ( 'quote/{invitation_key}' , [ App\Http\Controllers\ClientPortal\InvitationController :: class , 'quoteRouter' ]);
Route :: get ( 'credit/{invitation_key}' , [ App\Http\Controllers\ClientPortal\InvitationController :: class , 'creditRouter' ]);
2023-12-08 00:51:16 +01:00
Route :: get ( 'recurring_invoice/{invitation_key}/download_pdf' , [ RecurringInvoiceController :: class , 'downloadPdf' ]) -> name ( 'recurring_invoice.download_invitation_key' ) -> middleware ( 'token_auth' );
Route :: get ( 'invoice/{invitation_key}/download_pdf' , [ InvoiceController :: class , 'downloadPdf' ]) -> name ( 'invoice.download_invitation_key' ) -> middleware ( 'token_auth' );
Route :: get ( 'invoice/{invitation_key}/download_e_invoice' , [ InvoiceController :: class , 'downloadEInvoice' ]) -> name ( 'invoice.download_e_invoice' ) -> middleware ( 'token_auth' );
Route :: get ( 'quote/{invitation_key}/download_pdf' , [ QuoteController :: class , 'downloadPdf' ]) -> name ( 'quote.download_invitation_key' ) -> middleware ( 'token_auth' );
2024-03-20 12:54:18 +01:00
Route :: get ( 'quote/{invitation_key}/download_e_quote' , [ QuoteController :: class , " downloadEQuote " ]) -> name ( 'invoice.download_e_quote' ) -> middleware ( 'token_auth' );
2023-12-08 00:51:16 +01:00
Route :: get ( 'credit/{invitation_key}/download_pdf' , [ CreditController :: class , 'downloadPdf' ]) -> name ( 'credit.download_invitation_key' ) -> middleware ( 'token_auth' );
2024-03-20 12:54:18 +01:00
Route :: get ( 'credit/{invitation_key}/download_e_credit' , [ CreditController :: class , 'downloadECredit' ]) -> name ( 'credit.download_e_credit' ) -> middleware ( 'token_auth' );
2023-12-08 00:51:16 +01:00
Route :: get ( '{entity}/{invitation_key}/download' , [ App\Http\Controllers\ClientPortal\InvitationController :: class , 'routerForDownload' ]) -> middleware ( 'token_auth' );
2022-07-15 14:59:25 +02:00
Route :: get ( 'pay/{invitation_key}' , [ App\Http\Controllers\ClientPortal\InvitationController :: class , 'payInvoice' ]) -> name ( 'pay.invoice' );
2024-04-17 23:29:06 +02:00
Route :: get ( 'email_preferences/{entity}/{invitation_key}' , [ EmailPreferencesController :: class , 'index' ]) -> name ( 'email_preferences' );
2024-01-19 03:45:24 +01:00
Route :: put ( 'email_preferences/{entity}/{invitation_key}' , [ EmailPreferencesController :: class , 'update' ]);
2022-07-15 14:59:25 +02:00
Route :: get ( 'unsubscribe/{entity}/{invitation_key}' , [ App\Http\Controllers\ClientPortal\InvitationController :: class , 'unsubscribe' ]) -> name ( 'unsubscribe' );
2019-09-23 07:59:01 +02:00
});
2024-02-03 12:26:43 +01:00
Route :: get ( 'route/{hash}' , function ( $hash ) {
2024-03-10 15:40:25 +01:00
2024-04-26 06:13:22 +02:00
$route = '/' ;
2024-02-03 12:26:43 +01:00
2024-04-26 06:13:22 +02:00
try {
$route = decrypt ( $hash );
}
catch ( \Exception $e ) {
abort ( 404 );
}
return redirect ( $route );
}) -> middleware ( 'throttle:404' );
2024-02-03 12:26:43 +01:00
2022-07-18 00:21:17 +02:00
Route :: get ( 'phantom/{entity}/{invitation_key}' , [ Phantom :: class , 'displayInvitation' ]) -> middleware ([ 'invite_db' , 'phantom_secret' ]) -> name ( 'phantom_view' );
2023-09-10 23:22:22 +02:00
Route :: get ( 'blade/' , [ Phantom :: class , 'blade' ]) -> name ( 'blade' );
2020-08-04 13:00:19 +02:00
2023-06-10 01:20:59 +02:00
Route :: get ( '.env' , function () {
}) -> middleware ( 'throttle:honeypot' );
2023-04-05 05:13:01 +02:00
Route :: fallback ( function () {
2024-04-08 00:51:33 +02:00
if ( Ninja :: isSelfHost ()) {
$result = false ;
try {
$result = DB :: connection () -> getPdo ();
$result = DB :: connection () -> getDatabaseName ();
} catch ( \Exception $e ) {
$result = false ;
}
if ( ! $result ) {
return redirect ( '/setup' );
}
2023-04-05 05:13:01 +02:00
$account = Account :: first ();
2024-04-08 00:51:33 +02:00
return $account -> set_react_as_default_ap ? response () -> view ( 'react.index' , [
2023-04-05 05:13:01 +02:00
'rc' => request () -> input ( 'rc' , '' ),
'login' => request () -> input ( 'login' , '' ),
'signup' => request () -> input ( 'signup' , '' ),
'report_errors' => $account -> report_errors ,
'user_agent' => request () -> server ( 'HTTP_USER_AGENT' ),
2024-04-08 00:51:33 +02:00
]) -> header ( 'X-Frame-Options' , 'SAMEORIGIN' , false ) : abort ( 404 );
2023-04-05 05:13:01 +02:00
}
abort ( 404 );
2024-04-08 00:51:33 +02:00
}) -> middleware ( 'throttle:404' );