File: /home/xedaptot/ai.naniguide.com/routes/web.php
<?php
namespace App\Http\Controllers;
use Route;
use Auth;
use Illuminate\Routing\Route as RoutingRoute;
/*
|--------------------------------------------------------------------------
| Application Routes
|--------------------------------------------------------------------------
|
| Here is where you can register all of the routes for an application.
| It's a breeze. Simply tell Laravel the URIs it should respond to
| and give it the controller to call when that URI is requested.
|
*/
Route::get('/s1', function () {
session(['test' => 'hello']);
var_dump(session()->all());
return 'Session set. <a href="/s2">Go to s2</a>';
});
Route::get('/s2', function () {
var_dump(session()->all());
return 'Session value: ' . (session('test') ?? 'NO SESSION');
});
// Health check endpoint — no auth, no middleware
Route::get('/health', function () {
$status = 'ok';
$checks = [];
try {
\Illuminate\Support\Facades\DB::connection()->getPdo();
$checks['database'] = 'connected';
} catch (\Throwable $e) {
$checks['database'] = 'error';
$status = 'degraded';
}
$checks['queue_driver'] = config('queue.default');
$checks['cache_driver'] = config('cache.default');
$checks['timestamp'] = now()->toIso8601String();
return response()->json(array_merge(['status' => $status], $checks));
});
// Installation wizard — only accessible when app is NOT installed
Route::group([
'prefix' => 'install',
'middleware' => ['installed'],
], function () {
Route::get('/', [\App\Http\Controllers\InstallController::class, 'starting'])->name('install');
Route::get('system-check', [\App\Http\Controllers\InstallController::class, 'systemCompatibility'])->name('install.compatibility');
Route::get('configuration', [\App\Http\Controllers\InstallController::class, 'siteInfo'])->name('install.site_info');
Route::post('configuration', [\App\Http\Controllers\InstallController::class, 'siteInfo']);
Route::get('database', [\App\Http\Controllers\InstallController::class, 'database'])->name('install.database');
Route::post('database', [\App\Http\Controllers\InstallController::class, 'database']);
Route::get('database-import', [\App\Http\Controllers\InstallController::class, 'databaseImport'])->name('install.database_import');
Route::get('import', [\App\Http\Controllers\InstallController::class, 'import'])->name('install.import');
Route::get('background-jobs', [\App\Http\Controllers\InstallController::class, 'cronJobs'])->name('install.cron_jobs');
Route::post('background-jobs', [\App\Http\Controllers\InstallController::class, 'cronJobs']);
Route::get('finishing', [\App\Http\Controllers\InstallController::class, 'finishing'])->name('install.finishing');
Route::get('finish', [\App\Http\Controllers\InstallController::class, 'finish'])->name('install.finish');
});
/**
* Public routes
*
*/
// Public asset URL, notice that {filename} is for decoration only
// Works for both application-wide and customers' assets
Route::get('media/{uid}-{filename}', [AssetController::class, 'serveAsset'])
->name('public_media');
Route::get('asset/{dirname}/{basename}', [AssetController::class, 'serveAssetPath'])
->name('public_asset');
// User profile avatar — dedicated controller route. Public; see
// SubscriberController::avatar for the same precedent.
Route::get('users/{uid}/avatar', [\App\Http\Controllers\UserController::class, 'avatar'])
->name('user.avatar');
// assets path for email
Route::get('theme/assets/{theme}/f/{path?}', [AssetController::class, 'themeAssets'])
->where('path', '.*')
->name('theme_assets');
// Setting upload path
Route::get('setting/{filename}', [SettingController::class, 'file']);
/**
* Misc
*
*/
Route::get('/datatable_locale', [AppController::class, 'datatable_locale']);
Route::get('/jquery_validate_locale', [AppController::class, 'jquery_validate_locale']);
// Term of service
Route::get('/terms-of-service', [AppController::class, 'termsOfService']);
// Something went wrong
Route::get('/something-went-wrong', [AppController::class, 'somethingWentWrong']);
// For visitor with Web UI, loading the right app language
Route::group(['namespace' => '\App\Http\Controllers', 'middleware' => ['not_installed', 'not_logged_in']], function () {
// Helper method to generate other routes for authentication
Auth::routes();
// Google OAuth 2.0
Route::get('/auth/google/redirect', 'AuthController@googleRedirect');
Route::get('/auth/google/callback', 'AuthController@googleCallback');
// Facebook OAuth 2.0
Route::get('/auth/facebook/redirect', 'AuthController@facebookRedirect');
Route::get('/auth/facebook/callback', 'AuthController@facebookCallback');
Route::get('/login/token/{token}', 'AppController@tokenLogin');
Route::get('/validate-token/{api_token}', 'AppController@validateToken');
Route::get('user/activate/{token}', 'UserController@activate');
Route::get('/disabled', 'AppController@userDisabled');
Route::get('/offline', 'AppController@offline');
Route::get('/not-authorized', 'AppController@notAuthorized');
Route::get('/demo', function () {
return redirect('/rui/demo');
});
Route::get('/demo/go/{view}', 'AppController@demoGo');
Route::get('/autologin/{api_token}', 'AppController@autoLogin');
Route::get('/migrate/run', 'Admin\Upgrade@migrate');
Route::get('/autologin/{api_token}/{email}', 'AppController@autoLoginEmail');
//Subscriber avatar
Route::get('assets/images/avatar/subscriber-{id?}.jpg', 'SubscriberController@avatar');
Route::get('assets/images/avatar/subscribe-origin-{id?}.jpg', 'SubscriberController@avatarOrigin');
// User resend activation email
Route::get('users/resend-activation-email', 'UserController@resendActivationEmail');
// Plan
// Customer registration
Route::post('users/register', 'UserController@register');
Route::get('users/register', 'UserController@register');
// public campaign report
Route::get('pub/campaigns/job/{uid}/{customer_uid}/download', 'Pub\CampaignController@download');
Route::get('pub/campaigns/{uid}/{customer_uid}/tracking-log/download', 'Pub\CampaignController@trackingLogDownload');
Route::get('pub/campaigns/job/{uid}/{customer_uid}/progress', 'Pub\CampaignController@trackingLogExportProgress');
Route::get('pub/campaigns/{uid}/{customer_uid}/tracking-log/download', 'Pub\CampaignController@trackingLogDownload');
Route::get('pub/campaigns/{uid}/{customer_uid}/overview', 'Pub\CampaignController@overview');
Route::get('pub/campaigns/{uid}/{customer_uid}/subscribers', 'Pub\CampaignController@subscribers');
Route::get('pub/campaigns/{uid}/{customer_uid}/subscribers/listing', 'Pub\CampaignController@subscribersListing');
Route::get('pub/campaigns/{uid}/{customer_uid}/open-map', 'Pub\CampaignController@openMap');
Route::get('pub/campaigns/{uid}/{customer_uid}/tracking-log', 'Pub\CampaignController@trackingLog');
Route::get('pub/campaigns/{uid}/{customer_uid}/tracking-log/listing', 'Pub\CampaignController@trackingLogListing');
Route::get('pub/campaigns/{uid}/{customer_uid}/bounce-log', 'Pub\CampaignController@bounceLog');
Route::get('pub/campaigns/{uid}/{customer_uid}/bounce-log/listing', 'Pub\CampaignController@bounceLogListing');
Route::get('pub/campaigns/{uid}/{customer_uid}/feedback-log', 'Pub\CampaignController@feedbackLog');
Route::get('pub/campaigns/{uid}/{customer_uid}/feedback-log/listing', 'Pub\CampaignController@feedbackLogListing');
Route::get('pub/campaigns/{uid}/{customer_uid}/open-log', 'Pub\CampaignController@openLog');
Route::get('pub/campaigns/{uid}/{customer_uid}/open-log/listing', 'Pub\CampaignController@openLogListing');
Route::get('pub/campaigns/{uid}/{customer_uid}/click-log', 'Pub\CampaignController@clickLog');
Route::get('pub/campaigns/{uid}/{customer_uid}/click-log/listing', 'Pub\CampaignController@clickLogListing');
Route::get('pub/campaigns/{uid}/{customer_uid}/unsubscribe-log', 'Pub\CampaignController@unsubscribeLog');
Route::get('pub/campaigns/{uid}/{customer_uid}/unsubscribe-log/listing', 'Pub\CampaignController@unsubscribeLogListing');
Route::get('pub/campaigns/{uid}/{customer_uid}/chart24h', 'Pub\CampaignController@chart24h');
Route::get('pub/campaigns/{uid}/{customer_uid}/chart', 'Pub\CampaignController@chart');
Route::get('pub/campaigns/{uid}/{customer_uid}/chart/countries/open', 'Pub\CampaignController@chartCountry');
Route::get('pub/campaigns/{uid}/{customer_uid}/chart/countries/click', 'Pub\CampaignController@chartClickCountry');
Route::get('pub/campaigns/{uid}/{customer_uid}/overview', 'Pub\CampaignController@overview');
Route::get('pub/campaigns/{uid}/{customer_uid}/links', 'Pub\CampaignController@links');
Route::get('pub/campaigns/{uid}/{customer_uid}/preview/content/{subscriber_id?}', 'Pub\CampaignController@previewContent');
Route::get('pub/campaigns/{uid}/{customer_uid}/preview', 'Pub\CampaignController@preview');
// Email Verification
Route::get('email-verification/checkout/{api_token}/redirect', 'EmailVerificationController@redirect');
//
Route::get('popup/support/renew', 'PopupController@supportRenew');
// Public page
Route::get('pricing-page', 'Pub\PricingPageController@index');
Route::get('pricing-page/json', 'Pub\PricingPageController@json');
Route::get('terms-and-policy', 'Pub\TermsPageController@index');
});
// Without authentication
Route::group(['namespace' => '\App\Http\Controllers', 'middleware' => ['not_installed']], function () {
// Public funnel page
Route::get('f/{funnelSlug}/{stepSlug?}', 'FunnelPageController@show')->name('funnel.page');
// Form — visitor pipeline migrated to the refactor namespace + view folder
// (2026-04-29). URL surface unchanged so embedded customer snippets keep
// working without a re-paste. The legacy
// App\Http\Controllers\FormController::frontend{Save,Popup,Content} methods
// are left orphaned for emergency revert (single-line route swap).
Route::post('frontend/forms/{uid}/save', [\App\Http\Controllers\Refactor\FormFrontendController::class, 'save']);
Route::get('frontend/forms/{uid}/popup.js', [\App\Http\Controllers\Refactor\FormFrontendController::class, 'popup']);
Route::get('frontend/forms/{uid}/content', [\App\Http\Controllers\Refactor\FormFrontendController::class, 'content']);
// Website
Route::get('websites/{uid}/connect.js', 'WebsiteController@connectJs');
// Blank
Route::match(['get', 'post'], 'blank', function () {
return;
});
Route::get('p/{message_id}/open', [\App\Http\Controllers\Refactor\CampaignController::class, 'open'])->name('openTrackingUrl');
Route::get('p/click/', [\App\Http\Controllers\Refactor\CampaignController::class, 'click'])->name('clickTrackingUrl');
// Unsubscribe redesign — see docs/unsubscribe-redesign/.
// `unsubscribe.form` is the GET=form/POST=action route used by both the
// email body link ({{ unsubscribe_url }} tag) and the human-browser variant of
// the List-Unsubscribe header. `unsubscribe.oneclick` is the RFC 8058
// POST-only endpoint that Gmail/Apple Mail's native unsubscribe button
// posts to. Both are signed with App_KEY so bot enumeration of subscriber
// ids returns 403 at the middleware.
Route::match(['get', 'post'], 'c/{subscriber}/unsubscribe-form/{message_id}',
[\App\Http\Controllers\Refactor\CampaignController::class, 'unsubscribeForm'])
->middleware('signed')
->name('unsubscribe.form');
// CSRF exemption for this path is configured in bootstrap/app.php
// (validateCsrfTokens) because mail clients (Gmail/Apple) POST without a
// session/cookie and cannot acquire a CSRF token. The signed URL is the
// integrity check.
Route::post('c/{subscriber}/unsubscribe-oneclick/{message_id}',
[\App\Http\Controllers\Refactor\CampaignController::class, 'unsubscribeOneClick'])
->middleware('signed')
->name('unsubscribe.oneclick');
Route::get('campaigns/{message_id}/web-view', [\App\Http\Controllers\Refactor\CampaignController::class, 'webView'])->name('webViewerUrl');
Route::post('lists/{uid}/{customer_uid}/embedded-form-subscribe', 'LegacyMailListController@embeddedFormSubscribe');
Route::post('lists/{uid}/{customer_uid}/embedded-form-subscribe-captcha', 'LegacyMailListController@embeddedFormSubscribe');
Route::get('lists/{uid}/check-email', 'LegacyMailListController@checkEmail');
// Wave F: legacy /delivery/notify (DeliveryController::notify) deleted.
// Vendor webhooks now route through `webhook.handle` below — driver
// resolves the server by uid + parses the payload.
Route::post('delivery/report', 'DeliveryController@report');
// Sending-server vendor webhook (Wave C — new path, runs in parallel with
// legacy /delivery/notify until vendor dashboards are migrated). Per-instance
// URL so tenant resolves directly from `serverUid` (handshake events have no
// msg id; legacy lookup-by-msg-id failed for them).
Route::match(['POST', 'GET'], 'webhook/{driverType}/{serverUid}', 'SendingServerWebhookController@handle')
->name('webhook.handle');
// Also allow GET logout (the logout route generated by Route::auth() is POST)
Route::get('logout', 'Auth\LoginController@logout')->name('auth.logout'); // use GET for logout, keep compatible with 5.2
// Get Application Key
Route::get('appkey', 'AppController@appkey')->name('appkey');
// Campaign test links
Route::get('campaigns/test/{message}', [\App\Http\Controllers\Refactor\CampaignController::class, 'notification'])->name('campaign_message');
// Tutorial iframe (public, no auth required)
Route::get('tutorials/{slug}/view', 'TutorialViewController@show');
// products
Route::get('/products/widget/products/list', 'ProductController@widgetProductList');
Route::post('/products/widget/product', 'ProductController@widgetProduct');
//
Route::get('frontend/websites/{uid}/check-js', 'WebsiteController@checkJs');
// Mail list public pages
Route::get('frontend/lists/{list_uid}/{customer_uid}/sign-up', 'Pub\MailListController@signUpForm');
Route::post('frontend/lists/{list_uid}/{customer_uid}/sign-up', 'Pub\MailListController@signUpForm');
Route::get('frontend/lists/{list_uid}/sign-up/{subscriber_id}/{customer_uid}/thank-you', 'Pub\MailListController@signUpThankyouPage');
Route::get('frontend/lists/{list_uid}/subscribe-confirm/{id}/{customer_uid}', 'Pub\MailListController@thankYou')->middleware('signed')->name('lists.subscribe_confirm');
Route::get('frontend/lists/{list_uid}/update-profile/{id}/{customer_uid}', 'Pub\MailListController@profileUpdateForm')->name('updateProfileUrl');
Route::post('frontend/lists/{list_uid}/update-profile/{id}/{customer_uid}', 'Pub\MailListController@profileUpdateForm');
Route::get('frontend/lists/{list_uid}/update-profile-success/{id}/{customer_uid}', 'Pub\MailListController@profileUpdateSuccessPage');
Route::get('frontend/lists/{list_uid}/profile-update-email-sent/{id}/{customer_uid}', 'Pub\MailListController@profileUpdateEmailSent');
});
Route::group(['namespace' => '\App\Http\Controllers', 'middleware' => ['not_installed', 'auth']], function () {
// get files from download
Route::get('/download/{name?}', [\App\Http\Controllers\AssetController::class, 'download'])
->where('name', '.+')
->name('download');
// 2fa
Route::match(['get', 'post'], 'auth/verify/select', 'UserController@verifySelectMethod');
// 2fa Veridy Email
Route::match(['get', 'post'], 'auth/verify/email', 'Email2FAController@emailVerify');
// 2fa Google Authenticator
Route::get('2fa/google-authenticator/enter-code', 'Google2FAController@enterCode');
Route::post('2fa/google-authenticator/check', 'Google2FAController@check');
});
Route::group(['namespace' => '\App\Http\Controllers', 'middleware' => ['not_installed', 'auth', '2fa']], function () {
// 2fa
Route::post('2fa/google-authenticator/secret-key/save', 'Google2FAController@saveKey');
Route::get('2fa/google-authenticator/secret-key/generate', 'Google2FAController@generateSecretKey');
});
Route::group(['namespace' => '\App\Http\Controllers', 'middleware' => ['not_installed', 'auth', 'frontend', '2fa']], function () {
//
Route::get('sites/{id}/template', 'SiteController@template');
Route::post('sites', 'SiteController@store');
Route::get('sites/create', 'SiteController@create');
Route::get('sites', 'SiteController@index');
// Signature
Route::get('signatures/select-box', 'SignatureController@selectBox');
Route::post('signatures/{uid}/set-default', 'SignatureController@setDefault');
Route::post('signatures/disable', 'SignatureController@disable');
Route::post('signatures/enable', 'SignatureController@enable');
Route::get('signatures/list/{page?}', 'SignatureController@list');
Route::get('signatures/sort', 'SignatureController@sort');
Route::post('signatures/delete', 'SignatureController@delete');
Route::resource('signatures', 'SignatureController');
// Checkout
Route::get('checkout/{invoice_uid}/invoices/list', 'CheckoutController@invoiceList');
Route::post('checkout/{invoice_uid}/cancel', 'CheckoutController@cancel');
Route::post('checkout/{invoice_uid}/checkout', 'CheckoutController@checkout');
Route::get('checkout/{invoice_uid}/order-box', 'CheckoutController@orderBox');
Route::match(['get', 'post'], 'checkout/{invoice_uid}/payment', 'CheckoutController@payment');
Route::match(['get', 'post'], 'checkout/{invoice_uid}/address', 'CheckoutController@billingAddress');
Route::get('checkout/{invoice_uid}/cart', 'CheckoutController@cart');
Route::match(['get', 'post'], 'checkout/{invoice_uid}/billing-address', 'CheckoutController@billingAddress');
// Audience
Route::get('audience/growth-chart', 'AudienceController@growthChart');
Route::get('audience/overview', 'AudienceController@overview');
// Form
Route::post('forms/{uid}/save-template', 'FormController@builderSave');
Route::post('forms/{uid}/change-template', 'FormController@changeTemplate');
Route::post('forms/{uid}/preview', 'FormController@preview');
Route::post('forms/publish', 'FormController@publish');
Route::post('forms/unpublish', 'FormController@unpublish');
Route::get('forms/{uid}/edit/content', 'FormController@builderContent');
Route::post('forms/{uid}/disconnect', 'FormController@disconnect');
Route::match(['get', 'post'], 'forms/{uid}/connect', 'FormController@connect');
Route::post('forms/{uid}/settings', 'FormController@settings');
Route::get('forms/{uid}/builder', 'FormController@builder');
Route::get('forms/{uid}/build', 'FormController@build');
Route::get('forms/templates', 'FormController@templates');
Route::match(['get', 'post'], 'forms/create', 'FormController@create');
Route::post('forms/delete', 'FormController@delete');
Route::get('forms/list', 'FormController@list');
Route::get('forms', 'FormController@index');
// Website
Route::get('websites/{uid}/check', 'WebsiteController@check');
Route::post('websites/{uid}/connect', 'WebsiteController@connect');
Route::post('websites/disconnect', 'WebsiteController@disconnect');
Route::get('websites/{uid}/show', 'WebsiteController@show');
Route::match(['get', 'post'], 'websites/create', 'WebsiteController@create');
Route::post('websites/delete', 'WebsiteController@delete');
Route::get('websites/list', 'WebsiteController@list');
Route::get('websites', 'WebsiteController@index');
// Legacy subscription routes deleted — use refactor.subscription.* (routes/refactor.php)
// Customer login back
Route::get('customers/login-back', 'CustomerController@loginBack');
Route::get('customers/admin-area', 'CustomerController@adminArea');
// Customer profile/information
Route::post('account/change-theme-mode', 'AccountController@changeThemeMode');
Route::get('account/save-auto-theme-mode', 'AccountController@saveAutoThemeMode');
Route::get('account/activity', 'AccountController@activity');
Route::match(['get', 'post'], 'account/wizard/menu-layout', 'AccountController@wizardMenuLayout');
Route::match(['get', 'post'], 'account/wizard/color-scheme', 'AccountController@wizardColorScheme');
Route::get('account/leftbar/state', 'AccountController@leftbarState');
Route::post('account/payment/remove', 'AccountController@removePaymentMethod');
Route::get('account/profile', 'AccountController@profile');
Route::post('account/profile', 'AccountController@profile');
Route::get('account/contact', 'AccountController@contact');
Route::post('account/contact', 'AccountController@contact');
Route::get('account/logs', 'AccountController@logs');
Route::get('account/logs/listing', 'AccountController@logsListing');
Route::get('account/quota_log_2', 'AccountController@quotaLog2');
Route::get('account/quota_log', 'AccountController@quotaLog');
Route::get('account/billing', 'AccountController@billing');
Route::match(['get', 'post'], 'account/billing/edit', 'AccountController@editBillingAddress');
Route::post('checkout/{invoice_uid}/{payment_method_id}/auto-charge', 'CheckoutController@autoCharge');
});
Route::group(['namespace' => '\App\Http\Controllers', 'namespace' => '\App\Http\Controllers', 'middleware' => ['not_installed', 'auth', 'frontend', 'subscription', '2fa']], function () {
// 2FA settings
Route::get('account/2fa', 'TwoFAController@index');
Route::post('account/2fa/save', 'TwoFAController@save');
// Search
Route::get('/search/websites', 'SearchController@websites');
Route::get('/search/forms', 'SearchController@forms');
Route::get('/search/subscribers', 'SearchController@subscribers');
Route::get('/search/templates', 'SearchController@templates');
Route::get('/search/automations', 'SearchController@automations');
Route::get('/search/lists', 'SearchController@lists');
Route::get('/search/campaigns', 'SearchController@campaigns');
Route::get('/search/general', 'SearchController@general');
Route::match(['get', 'post'], '/', 'HomeController@index');
Route::get('frontend/docs/api/v1', 'AppController@docsApiV1');
Route::get('account/api/renew', 'AccountController@renewToken');
Route::get('account/api', 'AccountController@api');
// Mail list
Route::post('lists/{uid}/outside-urls', [\App\Http\Controllers\Refactor\MailListController::class, 'saveOutsideUrls']);
Route::get('lists/{uid}/field-options-uid', 'LegacyMailListController@listFieldOptionsUid');
Route::get('lists/{uid}/field-options', 'LegacyMailListController@listFieldOptions');
Route::get('lists/{uid}/webhook/form', 'LegacyMailListController@webhookForm');
Route::get('lists/{uid}/webhook/json', 'LegacyMailListController@webhookJson');
Route::match(['get', 'post'], 'lists/select', 'LegacyMailListController@selectList');
Route::get('lists/{uid}/email-verification/chart', 'LegacyMailListController@emailVerificationChart');
Route::get('lists/{uid}/clone-to-customers/choose', 'LegacyMailListController@cloneForCustomersChoose');
Route::post('lists/{uid}/clone-to-customers', 'LegacyMailListController@cloneForCustomers');
Route::get('lists/{uid}/verification/{job_uid}/progress', [\App\Http\Controllers\Refactor\MailListController::class, 'verificationProgress']);
Route::get('lists/{uid}/verification', [\App\Http\Controllers\Refactor\MailListController::class, 'verification']);
Route::post('lists/{uid}/verification/start', [\App\Http\Controllers\Refactor\MailListController::class, 'startVerification']);
Route::post('lists/{uid}/verification/{job_uid}/stop', [\App\Http\Controllers\Refactor\MailListController::class, 'stopVerification']);
Route::post('lists/{uid}/verification/reset', [\App\Http\Controllers\Refactor\MailListController::class, 'resetVerification']);
Route::match(['get', 'post'], 'lists/copy', 'LegacyMailListController@copy');
Route::get('lists/{uid}/list-growth', 'LegacyMailListController@listGrowthChart');
Route::get('lists/{uid}/list-statistics-chart', 'LegacyMailListController@statisticsChart');
Route::get('lists/sort', 'LegacyMailListController@sort');
Route::get('lists/listing/{page?}', 'LegacyMailListController@listing');
Route::post('lists/delete', 'LegacyMailListController@delete');
Route::get('lists/delete/confirm', 'LegacyMailListController@deleteConfirm');
Route::get('lists/{uid}/overview', 'LegacyMailListController@overview')->name('mail_list');
Route::resource('lists', 'LegacyMailListController');
Route::get('lists/{uid}/edit', 'LegacyMailListController@edit');
Route::patch('lists/{uid}/update', 'LegacyMailListController@update');
Route::match(['get', 'post'], 'lists/{uid}/embedded-form', 'LegacyMailListController@embeddedForm');
Route::get('lists/{uid}/embedded-form-frame', 'LegacyMailListController@embeddedFormFrame');
// Field
Route::get('lists/{list_uid}/fields', 'FieldController@index');
Route::get('lists/{list_uid}/fields/sort', 'FieldController@sort');
Route::post('lists/{list_uid}/fields/store', 'FieldController@store');
Route::get('lists/{list_uid}/fields/sample/{type}', 'FieldController@sample');
Route::get('lists/{list_uid}/fields/{uid}/delete', 'FieldController@delete');
// Subscriber
Route::post('lists/{list_uid}/subscribers/move-to-blacklist', 'SubscriberController@moveToBlacklist');
Route::match(['post', 'get'], 'subscribers/{list_uid}/bulk-remove-tag', 'SubscriberController@bulkRemoveTag');
Route::post('subscribers/save-columns', 'SubscriberController@saveColumnsSettings');
Route::get('subscribers/{id}/timeline', 'SubscriberController@timeline');
Route::get('subscribers/{id}/timeline/list', 'SubscriberController@timelineList');
Route::match(['post', 'get'], 'subscribers/{list_uid}/add-tag', 'SubscriberController@addTag');
Route::get('lists/{list_uid}/subscribers/import2/progress/content', 'SubscriberController@import2ProgressContent');
Route::get('lists/{list_uid}/subscribers/import2/progress', 'SubscriberController@import2Progress');
Route::post('lists/{list_uid}/subscribers/import2/run', 'SubscriberController@import2Run');
Route::post('lists/{list_uid}/subscribers/import2/validate', 'SubscriberController@import2Validate');
Route::get('lists/{list_uid}/subscribers/import2/mapping', 'SubscriberController@import2Mapping');
Route::post('lists/{list_uid}/subscribers/import2/upload', 'SubscriberController@import2Upload');
Route::get('lists/{list_uid}/subscribers/import2/wizard', 'SubscriberController@import2Wizard');
Route::get('lists/{list_uid}/subscribers/import2', 'SubscriberController@import2');
Route::get('subscribers/no-list', 'SubscriberController@noList');
Route::match(['get', 'post'], 'lists/{list_uid}/subscribers/assign-values', 'SubscriberController@assignValues');
Route::match(['get', 'post'], 'lists/{list_uid}/subscribers/bulk-delete', 'SubscriberController@bulkDelete');
Route::post('lists/{list_uid}/subscriber/{id}/remove-tag', 'SubscriberController@removeTag');
Route::match(['get', 'post'], 'lists/{list_uid}/subscriber/{id}/update-tags', 'SubscriberController@updateTags');
Route::post('lists/{list_uid}/subscribers/resend/confirmation-email/{uids?}', 'SubscriberController@resendConfirmationEmail');
Route::post('subscriber/{id}/verification/start', 'SubscriberController@startVerification');
Route::post('subscriber/{id}/verification/reset', 'SubscriberController@resetVerification');
Route::get('lists/{from_uid}/copy-move-from/{action}', 'SubscriberController@copyMoveForm');
Route::post('subscribers/move', 'SubscriberController@move');
Route::post('subscribers/copy', 'SubscriberController@copy');
Route::get('lists/{list_uid}/subscribers', 'SubscriberController@index');
Route::get('lists/{list_uid}/subscribers/create', 'SubscriberController@create');
Route::get('lists/{list_uid}/subscribers/listing', 'SubscriberController@listing');
Route::post('lists/{list_uid}/subscribers/store', 'SubscriberController@store');
Route::get('lists/{list_uid}/subscribers/{id}/edit', 'SubscriberController@edit');
Route::patch('lists/{list_uid}/subscribers/{id}/update', 'SubscriberController@update');
Route::post('lists/{list_uid}/subscribers/delete', 'SubscriberController@delete');
Route::get('lists/{list_uid}/subscribers/delete', 'SubscriberController@delete');
Route::post('lists/{list_uid}/subscribers/subscribe', 'SubscriberController@subscribe');
Route::post('lists/{list_uid}/subscribers/unsubscribe', 'SubscriberController@unsubscribe');
Route::get('lists/{list_uid}/subscribers/import', 'SubscriberController@import');
Route::post('lists/{list_uid}/subscribers/import/dispatch', 'SubscriberController@dispatchImportJob');
Route::get('lists/{list_uid}/import/{job_uid}/progress', 'SubscriberController@importProgress');
Route::get('lists/import/{job_uid}/log/download', 'SubscriberController@downloadImportLog');
Route::post('lists/import/{job_uid}/cancel', 'SubscriberController@cancelImport');
Route::get('lists/{list_uid}/subscribers/export', 'SubscriberController@export');
Route::post('lists/{list_uid}/subscribers/export/dispatch', 'SubscriberController@dispatchExportJob');
Route::get('lists/export/{job_uid}/progress', 'SubscriberController@exportProgress');
Route::get('lists/export/{job_uid}/log/download', 'SubscriberController@downloadExportedFile');
Route::post('lists/export/{job_uid}/cancel', 'SubscriberController@cancelExport');
// Segment
Route::match(['get', 'post'], 'segments/{uid}/copy', 'SegmentController@copy');
Route::get('segments/no-list', 'SegmentController@noList');
Route::get('segments/condition-value-control', 'SegmentController@conditionValueControl');
Route::get('segments/select_box', 'SegmentController@selectBox');
Route::get('lists/{list_uid}/segments', 'SegmentController@index');
Route::get('lists/{list_uid}/segments/{uid}/subscribers', 'SegmentController@subscribers');
Route::get('lists/{list_uid}/segments/{uid}/listing_subscribers', 'SegmentController@listing_subscribers');
Route::get('lists/{list_uid}/segments/create', 'SegmentController@create');
Route::get('lists/{list_uid}/segments/listing', 'SegmentController@listing');
Route::post('lists/{list_uid}/segments/store', 'SegmentController@store');
Route::get('lists/{list_uid}/segments/{uid}/edit', 'SegmentController@edit');
Route::patch('lists/{list_uid}/segments/{uid}/update', 'SegmentController@update');
Route::get('lists/{list_uid}/segments/delete', 'SegmentController@delete');
Route::get('lists/{list_uid}/segments/sample_condition', 'SegmentController@sample_condition');
// Mail List Template
Route::post('lists/template/{uid}/change-template', 'MailListTemplateController@changeTemplate');
Route::post('lists/template/{uid}/restore-default', 'MailListTemplateController@restoreDefault');
Route::get('lists/{list_uid}/template/{alias}/update', 'MailListTemplateController@update');
Route::post('lists/{list_uid}/template/{alias}/update', 'MailListTemplateController@update');
Route::get('lists/template/{uid}/preview', 'MailListTemplateController@preview');
Route::get('lists/template/{uid}/builder', 'MailListTemplateController@builder');
Route::get('lists/{list_uid}/templates', 'MailListTemplateController@index');
// // Template
// Route::post('templates/{uid}/change', 'TemplateController@changeTemplate');
// Route::get('templates/ai-handler', 'TemplateController@aiHanlder');
// Route::post('templates/{uid}/export', 'TemplateController@export');
// Route::match(['get','post'], 'templates/{uid}/change-name', 'TemplateController@changeName');
// Route::match(['get','post'], 'templates/{uid}/categories', 'TemplateController@categories');
// Route::match(['get','post'], 'templates/{uid}/update-thumb-url', 'TemplateController@updateThumbUrl');
// Route::match(['get','post'], 'templates/{uid}/update-thumb', 'TemplateController@updateThumb');
// Route::get('templates/{uid}/builder/change-template/{change_uid}', 'TemplateController@builderChangeTemplate');
// Route::get('templates/builder/templates/{category_uid?}', 'TemplateController@builderTemplates');
// Route::post('templates/builder/create', 'TemplateController@builderCreate');
// Route::get('templates/builder/create', 'TemplateController@builderCreate');
// Route::get('templates/{uid}/builder/edit/content', 'TemplateController@builderEditContent');
// Route::post('templates/{uid}/builder/edit', 'TemplateController@builderEdit');
// Route::get('templates/{uid}/builder/edit', 'TemplateController@builderEdit');
// Route::post('templates/{uid}/copy', 'TemplateController@copy');
// Route::get('templates/{uid}/copy', 'TemplateController@copy');
// Route::get('templates/listing/{page?}', 'TemplateController@listing');
// Route::get('templates/choosing/{campaign_uid}/{page?}', 'TemplateController@choosing');
// Route::get('templates/upload', 'TemplateController@uploadTemplate');
// Route::post('templates/upload', 'TemplateController@uploadTemplate');
// Route::get('templates/{uid}/preview', 'TemplateController@preview');
// Route::get('templates/delete', 'TemplateController@delete');
// Route::resource('templates', 'TemplateController');
// Route::get('templates/{uid}/edit', 'TemplateController@edit');
// Route::patch('templates/{uid}/update', 'TemplateController@update');
// Template
Route::post('media/upload', [AssetController::class, 'uploadMedia'])->name('upload_media');
Route::post('templates/{uid}/change', 'TemplateController@changeTemplate');
Route::match(['get','post'], 'templates/{uid}/categories', 'TemplateController@categories');
Route::post('templates/{uid}/builder/edit', 'TemplateController@builderEdit');
// System Email Template
Route::match(['get','post'], 'email-template/{uid}/copy', 'CustomerEmailTemplateController@copy');
Route::match(['get','post'], 'email-template/{uid}/change-name', 'CustomerEmailTemplateController@changeName');
Route::get('email-template/{uid}/preview', 'CustomerEmailTemplateController@preview');
Route::get('email-template/{uid}/builder', 'CustomerEmailTemplateController@builder');
Route::get('email-template/templates', 'CustomerEmailTemplateController@templates');
Route::post('email-template/delete', 'CustomerEmailTemplateController@delete');
Route::match(['get', 'post'], 'email-template/add', 'CustomerEmailTemplateController@add');
Route::get('email-template/list/{page?}', 'CustomerEmailTemplateController@list');
Route::get('email-template', 'CustomerEmailTemplateController@index');
// RSS
Route::get('templates/rss/parse', 'TemplateController@parseRss');
// Campaigns — moved to routes/refactor.php (no /rui/ prefix). Routes live in
// the new "Campaign Routes (no /rui/ prefix)" group there. Public web-view
// (`webViewerUrl`, `campaign_message`) remain in this file's public group.
// User
Route::get('account/users/listing/{page?}', 'UserController@listing');
Route::get('account/users/delete', 'UserController@delete');
Route::get('account/users/disable', 'UserController@disable');
Route::get('account/users/enable', 'UserController@enable');
Route::resource('account/users', 'UserController');
Route::get('users/login-back', 'UserController@loginBack');
// Sending servers — legacy customer routes removed; use refactor.sending.server_*
// (see routes/refactor.php).
// Sending domain — legacy customer routes removed; use refactor.sending.domain_*
// (see routes/refactor.php). Customers now manage LOCAL_DKIM identities
// through the unified SendingIdentity flow.
// Tracking domain
Route::get('tracking_domains/{uid}/autossl', 'TrackingDomainController@autossl');
Route::post('tracking_domains/{uid}/autossl', 'TrackingDomainController@autossl');
Route::get('tracking_domains/listing/{page?}', 'TrackingDomainController@listing');
Route::get('tracking_domains/delete', 'TrackingDomainController@delete');
Route::get('tracking_domains/{uid}/verify', 'TrackingDomainController@verify');
Route::resource('tracking_domains', 'TrackingDomainController');
// Email verification servers
Route::get('email_verification_servers/options', 'EmailVerificationServerController@options');
Route::get('email_verification_servers/listing/{page?}', 'EmailVerificationServerController@listing');
Route::get('email_verification_servers/sort', 'EmailVerificationServerController@sort');
Route::get('email_verification_servers/delete', 'EmailVerificationServerController@delete');
Route::get('email_verification_servers/disable', 'EmailVerificationServerController@disable');
Route::get('email_verification_servers/enable', 'EmailVerificationServerController@enable');
Route::resource('email_verification_servers', 'EmailVerificationServerController');
// Blacklists
Route::get('blacklists/import', 'BlacklistController@import');
Route::post('blacklists/import/start', 'BlacklistController@startImport');
Route::get('blacklists/import/{job_uid}/progress', 'BlacklistController@importProgress');
Route::post('blacklists/import/{job_uid}/cancel', 'BlacklistController@cancelImport');
Route::get('blacklists/listing/{page?}', 'BlacklistController@listing');
Route::get('blacklists/delete', 'BlacklistController@delete');
Route::resource('blacklists', 'BlacklistController');
// Sender
Route::get('senders/dropbox', 'SenderController@dropbox');
Route::get('senders/listing/{page?}', 'SenderController@listing');
Route::get('senders/sort', 'SenderController@sort');
Route::get('senders/delete', 'SenderController@delete');
Route::get('senders/verify/{token}', 'SenderController@verify');
Route::get('senders/verify/{uid}/result', 'SenderController@verifyResult');
Route::resource('senders', 'SenderController');
// Notifications — legacy routes removed; refactor lives at /rui/account/notifications
// Automation2 — all legacy routes + Automation2Controller deleted. The
// refactor controller at app/Http/Controllers/Refactor/AutomationController.php
// serves /automations/* directly (see routes/refactor.php).
// Sample UI/UX
Route::get('sample', 'SamplesController@index');
// Products
Route::get('/products/widget/products/options', 'ProductController@widgetProductOptions');
Route::get('products/listing', 'ProductController@listing');
Route::resource('products', 'ProductController');
// Source
Route::get('sources/{uid}/detail', 'SourceController@show');
Route::match(['get', 'post'], 'sources/woo-connect', 'SourceController@wooConnect');
Route::post('sources/{uid}/sync', 'SourceController@sync');
Route::post('sources/delete', 'SourceController@delete');
Route::get('sources/connect', 'SourceController@connect');
Route::get('sources/listing', 'SourceController@listing');
Route::resource('sources', 'SourceController');
// Site - Menu
Route::get('site/menus', 'Site\MenuController@index');
// Category - Menu
Route::get('site/categories', 'Site\CategoryController@index');
// Site - Product
Route::post('site/products/{id}/delete', 'Site\ProductController@delete');
Route::match(['get', 'post'], 'site/products/{id}/edit', 'Site\ProductController@edit');
Route::match(['get', 'post'], 'site/products/add', 'Site\ProductController@add');
Route::post('site/products/{id}/activate', 'Site\TemplateController@activate');
Route::get('site/products/listing', 'Site\ProductController@listing');
Route::get('site/products', 'Site\ProductController@index');
Route::get('site/products-2', 'Site\ProductController@index2');
// Site - Template
Route::post('site/templates/{id}/activate', 'Site\TemplateController@activate');
Route::get('site/templates/listing', 'Site\TemplateController@listing');
Route::get('site/templates', 'Site\TemplateController@index');
// Site - Shop setting
Route::get('site/settings/home-page', 'Site\SettingController@homePage');
Route::get('site/settings/shop', 'Site\SettingController@shop');
Route::get('site/settings/slider', 'Site\SettingController@sliderRevolution');
Route::get('site/settings/products', 'Site\SettingController@products');
Route::get('site/settings/shipping', 'Site\SettingController@shipping');
Route::get('site/settings/payments', 'Site\SettingController@payments');
Route::get('site/settings/account-privacy', 'Site\SettingController@payments');
Route::get('site/settings/emails', 'Site\SettingController@emails');
Route::get('site/settings/account', 'Site\SettingController@account');
Route::get('site/settings/site', 'Site\SettingController@site');
Route::get('site/orders', 'Site\OrderController@index');
Route::get('site/customers', 'Site\CustomerController@index');
// Source
Route::get('site/sources/{uid}/detail', 'Site\SourceController@show');
Route::match(['get', 'post'], 'site/sources/woo-connect', 'Site\SourceController@wooConnect');
Route::post('site/sources/{uid}/sync', 'Site\SourceController@sync');
Route::post('site/sources/delete', 'Site\SourceController@delete');
Route::get('site/sources/connect', 'Site\SourceController@connect');
Route::get('site/sources/listing', 'Site\SourceController@listing');
Route::get('site/sources', 'Site\SourceController@index');
Route::get('site/sources/create', 'Site\SourceController@create');
// Invoice
Route::get('invoices/{uid}/show', 'InvoiceController@show');
Route::get('invoices/{uid}/download', 'InvoiceController@download');
Route::get('invoices/{invoice_uid}/logs', 'InvoiceController@logs');
Route::delete('invoices/{invoice_uid}/delete', 'InvoiceController@delete');
// Chat
Route::post('chat', 'ChatController@chat');
// Products
Route::get('store/products/attributes', 'Store\ProductController@attributes');
Route::get('store/products/list', 'Store\ProductController@list');
Route::DELETE('store/products/delete-selected', 'Store\ProductController@deleteSelected');
Route::DELETE('store/products/delete', 'Store\ProductController@delete');
Route::PATCH('store/products', 'Store\ProductController@updateStatus');
Route::PUT('store/products', 'Store\ProductController@multiltask');
Route::post('store/products/search', 'Store\ProductController@search');
Route::get('store/products/search', 'Store\ProductController@search');
Route::get('store/products', 'Store\ProductController@index');
Route::get('store/products/create', 'Store\ProductController@create');
Route::post('store/products/store', 'Store\ProductController@store');
Route::get('store/products/{product}/edit', 'Store\ProductController@edit');
Route::PATCH('store/products/{product}/update', 'Store\ProductController@edit');
// Orders
Route::get('store/orders/list', 'Store\OrdersController@list');
Route::resource('store/orders', 'Store\OrdersController');
/**
* attributess - đặc tính sản phẩm
*/
Route::get('store/attributes/list', 'Store\AttributeController@list');
Route::DELETE('store/attributes/delete-selected', 'Store\AttributeController@deleteSelected');
Route::PUT('store/attributes/chagse-status', 'Store\AttributeController@statusChangeSelected');
Route::DELETE('sms/attributes/delete', 'Store\AttributeController@delete');
Route::PATCH('store/attributes', 'Store\AttributeController@updateStatus');
Route::PUT('store/attributes', 'Store\AttributeController@multiltask');
Route::resource('store/attributes', 'Store\AttributeController');
/**
* categories
*/
Route::get('store/categories/get-attributes', 'Store\CategoryController@get_attrible_catid');
Route::get('store/categories/collection', 'Store\CategoryController@collection');
Route::get('store/categories/list', 'Store\CategoryController@list');
Route::DELETE('store/categories/delete-selected', 'Store\CategoryController@deleteSelected');
Route::PUT('store/categories/chagse-status', 'Store\CategoryController@statusChangeSelected');
Route::DELETE('sms/categories/delete', 'Store\CategoryController@delete');
Route::PATCH('store/categories', 'Store\CategoryController@updateStatus');
Route::PUT('store/categories', 'Store\CategoryController@multiltask');
Route::resource('store/categories', 'Store\CategoryController');
// Funnels — moved to routes/refactor.php (prefix /rui/)
// Public funnel page route stays here (no auth, visitor-facing)
// Media
Route::resource('store/media', 'Store\MediaController');
// Email Verification Plan Controller
Route::post('account/email-plan-verifications/invoices/{uid}/abort', 'EmailVerificationPlanController@invoiceAbort');
Route::post('account/email-plan-verifications/{plan_uid}/buy', 'EmailVerificationPlanController@buy');
Route::get('account/email-plan-verifications/select', 'EmailVerificationPlanController@select');
Route::get('account/email-plan-verifications/invoices/list', 'EmailVerificationPlanController@invoiceList');
Route::get('account/email-plan-verifications', 'EmailVerificationPlanController@index');
// Sending Credit Controller
Route::post('account/sending-credit/invoices/{uid}/abort', 'SendingCreditPlanController@invoiceAbort');
Route::post('account/sending-credit/{plan_uid}/buy', 'SendingCreditPlanController@buy');
Route::get('account/sending-credit/select', 'SendingCreditPlanController@select');
Route::get('account/sending-credit/invoices/list', 'SendingCreditPlanController@invoiceList');
Route::get('account/sending-credit', 'SendingCreditPlanController@index');
// Role
Route::post('account/roles/delete', 'RoleController@delete');
Route::post('account/roles/disable', 'RoleController@disable');
Route::post('account/roles/enable', 'RoleController@enable');
Route::get('account/roles/list', 'RoleController@list');
Route::resource('account/roles', 'RoleController');
Route::post('account/roles/{uid}/update', 'RoleController@update');
// HttpConfig
Route::get('http-config/http-request/{id}/logs', 'HttpConfigController@httpRequestLogs');
Route::get('http-config/http-request/{id}/logs/list', 'HttpConfigController@httpRequestLogsList');
Route::get('http-config/{id}/http-requests', 'HttpConfigController@httpRequests');
Route::get('http-config/{id}/http-requests/list', 'HttpConfigController@httpRequestsList');
Route::match(['get', 'post'], 'http_configs/{uid}/test', 'HttpConfigController@test');
// Payment Method
Route::post('payment-method/{uid}/delete', 'PaymentMethodController@delete');
});
// ADMIN AREA
Route::group(['namespace' => '\App\Http\Controllers\Admin', 'middleware' => ['not_installed', 'auth', 'backend', '2fa']], function () {
Route::post('admin/media/upload', [\App\Http\Controllers\AssetController::class, 'uploadApplicationMedia'])->name('upload_application_media');
// 2FA settings
Route::get('admin/2fa', 'TwoFAController@index');
Route::post('admin/2fa/save', 'TwoFAController@save');
Route::get('admin/monitor/campaign', 'MonitorCampaignController@index');
Route::get('admin/monitor/campaign/list', 'MonitorCampaignController@list');
Route::get('admin', [\App\Http\Controllers\Refactor\Admin\DashboardController::class, 'index'])
->middleware('demo_guard')
->name('refactor.admin.dashboard');
Route::get('admin/docs/api/v1', 'ApiController@doc');
// Search
Route::get('admin/search/sending-servers', 'SearchController@sending_servers');
Route::get('admin/search/plans', 'SearchController@plans');
Route::get('admin/search/templates', 'SearchController@templates');
Route::get('admin/search/customers', 'SearchController@customers');
Route::get('admin/search/general', 'SearchController@general');
// Admin notifications — legacy routes removed; refactor lives at /rui/admin/notifications
// User legacy routes removed; refactor lives at /admin/customers/{uid}/users/* (see routes/refactor.php /admin group).
// Template
Route::post('admin/templates/{uid}/change', 'TemplateController@changeTemplate');
Route::match(['get','post'], 'admin/templates/{uid}/categories', 'TemplateController@categories');
Route::post('admin/templates/{uid}/builder/edit', 'TemplateController@builderEdit');
// System Email Template
Route::match(['get','post'], 'admin/email-templates/{uid}/copy', 'SystemEmailTemplateController@copy');
Route::match(['get','post'], 'admin/email-templates/{uid}/change-name', 'SystemEmailTemplateController@changeName');
Route::get('admin/email-templates/{uid}/preview', 'SystemEmailTemplateController@preview');
Route::get('admin/email-templates/{uid}/builder', 'SystemEmailTemplateController@builder');
Route::get('admin/email-template/templates', 'SystemEmailTemplateController@templates');
Route::post('admin/email-template/delete', 'SystemEmailTemplateController@delete');
Route::match(['get', 'post'], 'admin/email-template/add', 'SystemEmailTemplateController@add');
Route::get('admin/email-template/list/{page?}', 'SystemEmailTemplateController@list');
Route::get('admin/email-template', 'SystemEmailTemplateController@index');
// Form Template
Route::match(['get','post'], 'admin/form-templates/{uid}/copy', 'FormTemplateController@copy');
Route::match(['get','post'], 'admin/form-templates/{uid}/change-name', 'FormTemplateController@changeName');
Route::get('admin/form-templates/{uid}/preview', 'FormTemplateController@preview');
Route::get('admin/form-templates/{uid}/builder', 'FormTemplateController@builder');
Route::get('admin/form-template/templates', 'FormTemplateController@templates');
Route::post('admin/form-template/delete', 'FormTemplateController@delete');
Route::match(['get', 'post'], 'admin/form-template/add', 'FormTemplateController@add');
Route::get('admin/form-template/list/{page?}', 'FormTemplateController@list');
Route::get('admin/form-template', 'FormTemplateController@index');
// SystemTemplate
Route::get('admin/system_templates/pricing-page/builder', 'SystemTemplateController@pricingPageBuilder');
Route::get('admin/system_templates/listing/{page?}', 'SystemTemplateController@listing');
Route::get('admin/system_templates/sort', 'SystemTemplateController@sort');
Route::resource('admin/system_templates', 'SystemTemplateController');
Route::post('admin/system_templates/{id}/save', 'SystemTemplateController@save');
// Sending servers — legacy admin routes removed; use refactor.admin.sending-servers.*
// (see routes/refactor.php).
// Bounce handlers
Route::post('admin/bounce_handlers/{uid}/test', 'BounceHandlerController@test');
Route::get('admin/bounce_handlers/listing/{page?}', 'BounceHandlerController@listing');
Route::get('admin/bounce_handlers/sort', 'BounceHandlerController@sort');
Route::get('admin/bounce_handlers/delete', 'BounceHandlerController@delete');
Route::get('admin/bounce_handlers/{uid}/run', 'BounceHandlerController@run');
Route::resource('admin/bounce_handlers', 'BounceHandlerController');
// Feedback Loop handlers
Route::post('admin/feedback_loop_handlers/{uid}/test', 'FeedbackLoopHandlerController@test');
Route::get('admin/feedback_loop_handlers/listing/{page?}', 'FeedbackLoopHandlerController@listing');
Route::get('admin/feedback_loop_handlers/sort', 'FeedbackLoopHandlerController@sort');
Route::get('admin/feedback_loop_handlers/delete', 'FeedbackLoopHandlerController@delete');
Route::resource('admin/feedback_loop_handlers', 'FeedbackLoopHandlerController');
// Language
Route::get('admin/languages/delete/confirm', 'LanguageController@deleteConfirm');
Route::get('admin/languages/listing/{page?}', 'LanguageController@listing');
Route::get('admin/languages/delete', 'LanguageController@delete');
Route::get('admin/languages/{id}/translate', 'LanguageController@translate');
Route::post('admin/languages/{id}/translate', 'LanguageController@translate');
Route::get('admin/languages/{id}/translate/intro', 'LanguageController@translateIntro');
Route::get('admin/languages/disable', 'LanguageController@disable');
Route::get('admin/languages/enable', 'LanguageController@enable');
Route::get('admin/languages/{id}/download', 'LanguageController@download');
Route::get('admin/languages/{id}/upload', 'LanguageController@upload');
Route::post('admin/languages/{id}/upload', 'LanguageController@upload');
Route::resource('admin/languages', 'LanguageController');
// Settings
Route::post('admin/settings/license/remove', 'SettingController@licenseRemove');
Route::post('admin/settings/payment', 'SettingController@payment');
Route::post('admin/settings/advanced/{name}/update', 'SettingController@advancedUpdate');
Route::get('admin/settings/advanced', 'SettingController@advanced');
Route::post('admin/settings/upgrade/cancel', 'SettingController@cancelUpgrade');
Route::post('admin/settings/upgrade', 'SettingController@doUpgrade');
Route::post('admin/settings/upgrade/upload', 'SettingController@uploadApplicationPatch');
Route::get('admin/settings/upgrade', 'SettingController@upgrade');
Route::get('u', fn () => redirect()->route('refactor.admin.settings.upgrade')); // shortcut → refactor upgrade page
Route::post('admin/settings/license', 'SettingController@license');
Route::get('admin/settings/license', 'SettingController@license');
Route::match(['get','post'], 'admin/settings/mailer/test', 'SettingController@mailerTest');
Route::get('admin/settings/mailer', 'SettingController@mailer');
Route::post('admin/settings/mailer', 'SettingController@mailer');
Route::get('admin/settings/cronjob', 'SettingController@cronjob');
Route::post('admin/settings/cronjob', 'SettingController@cronjob');
Route::get('admin/settings/urls', 'SettingController@urls');
Route::get('admin/settings/general', 'SettingController@general');
Route::post('admin/settings/general', 'SettingController@general');
Route::get('admin/settings/logs', 'SettingController@logs');
Route::get('log', 'SettingController@download_log');
Route::get('admin/settings/{tab?}', 'SettingController@index');
Route::post('admin/settings', 'SettingController@index');
Route::get('admin/update-urls', 'SettingController@updateUrls');
// Blacklist
Route::get('admin/blacklists/import', 'BlacklistController@import');
Route::get('admin/blacklists/import/{job_uid}/progress', 'BlacklistController@importProgress');
Route::post('admin/blacklists/import/{job_uid}/cancel', 'BlacklistController@cancelImport');
Route::post('admin/blacklists/import/start', 'BlacklistController@startImport');
Route::get('admin/blacklist', 'BlacklistController@index');
Route::get('admin/blacklist/listing', 'BlacklistController@listing');
Route::get('admin/blacklist/delete', 'BlacklistController@delete');
Route::get('admin/blacklists/{id}/reason', 'BlacklistController@reason');
// Customer legacy routes removed; refactor lives at /admin/customers/* (see routes/refactor.php /admin group).
// Admin Group
Route::get('admin/admin_groups/listing/{page?}', 'AdminGroupController@listing');
Route::get('admin/admin_groups/sort', 'AdminGroupController@sort');
Route::get('admin/admin_groups/delete', 'AdminGroupController@delete');
Route::resource('admin/admin_groups', 'AdminGroupController');
// Admin
Route::get('admin/admins/{uid}/one-click-login', 'AdminController@oneClickLogin');
Route::get('admin/admins/login-as/{uid}', 'AdminController@loginAs');
Route::get('admin/admins/listing/{page?}', 'AdminController@listing');
Route::get('admin/admins/sort', 'AdminController@sort');
Route::get('admin/admins/delete', 'AdminController@delete');
Route::get('admin/admins/disable', 'AdminController@disable');
Route::get('admin/admins/enable', 'AdminController@enable');
Route::get('admin/admins/login-back', 'AdminController@loginBack');
Route::resource('admin/admins', 'AdminController');
// Admin Group 2
Route::get('admin/admin_groups2/listing/{page?}', 'AdminGroup2Controller@listing');
Route::get('admin/admin_groups2/sort', 'AdminGroup2Controller@sort');
Route::get('admin/admin_groups2/delete', 'AdminGroup2Controller@delete');
Route::resource('admin/admin_groups2', 'AdminGroup2Controller');
// Admin2
Route::get('admin/admins2/login-as/{uid}', 'Admin2Controller@loginAs');
Route::get('admin/admins2/listing/{page?}', 'Admin2Controller@listing');
Route::get('admin/admins2/sort', 'Admin2Controller@sort');
Route::get('admin/admins2/delete', 'Admin2Controller@delete');
Route::get('admin/admins2/disable', 'Admin2Controller@disable');
Route::get('admin/admins2/enable', 'Admin2Controller@enable');
Route::get('admin/admins2/login-back', 'Admin2Controller@loginBack');
Route::get('admin/admins2', 'Admin2Controller@index');
// Account
Route::post('admin/account/change-theme-mode', 'AccountController@changeThemeMode');
Route::get('admin/account/save-auto-theme-mode', 'AccountController@saveAutoThemeMode');
Route::get('admin/account/leftbar/state', 'AccountController@leftbarState');
Route::get('admin/account/api/renew', 'AccountController@renewToken');
Route::get('admin/account/api', 'AccountController@api');
Route::get('admin/account/profile', 'AccountController@profile');
Route::post('admin/account/profile', 'AccountController@profile');
Route::get('admin/account/contact', 'AccountController@contact');
Route::post('admin/account/contact', 'AccountController@contact');
// Currency
Route::get('admin/currencies/select2', 'CurrencyController@select2');
Route::get('admin/currencies/listing/{page?}', 'CurrencyController@listing');
Route::get('admin/currencies/sort', 'CurrencyController@sort');
Route::get('admin/currencies/delete', 'CurrencyController@delete');
Route::get('admin/currencies/disable', 'CurrencyController@disable');
Route::get('admin/currencies/enable', 'CurrencyController@enable');
Route::resource('admin/currencies', 'CurrencyController');
// Subscription legacy routes removed; refactor lives at /admin/subscriptions/* (see routes/refactor.php /admin group).
// Email verification servers
Route::get('admin/email_verification_servers/options', 'EmailVerificationServerController@options');
Route::get('admin/email_verification_servers/listing/{page?}', 'EmailVerificationServerController@listing');
Route::get('admin/email_verification_servers/sort', 'EmailVerificationServerController@sort');
Route::get('admin/email_verification_servers/delete', 'EmailVerificationServerController@delete');
Route::get('admin/email_verification_servers/disable', 'EmailVerificationServerController@disable');
Route::get('admin/email_verification_servers/enable', 'EmailVerificationServerController@enable');
Route::get('admin/email_verification_servers', 'EmailVerificationServerController@index');
Route::get('admin/email_verification_servers/create', 'EmailVerificationServerController@create');
Route::post('admin/email_verification_servers', 'EmailVerificationServerController@store');
Route::get('admin/email_verification_servers/{email_verification_server}/edit', 'EmailVerificationServerController@edit');
Route::patch('admin/email_verification_servers/{email_verification_server}/update', 'EmailVerificationServerController@update');
// Plugin managements
Route::match(['get', 'post'], 'admin/plugins/install', 'PluginController@install');
Route::get('admin/plugins/listing/{page?}', 'PluginController@listing');
Route::get('admin/plugins/sort', 'PluginController@sort');
Route::match(['get', 'post'], 'admin/plugins/{uid}/delete', 'PluginController@delete');
Route::get('admin/plugins/disable', 'PluginController@disable');
Route::get('admin/plugins/enable', 'PluginController@enable');
Route::get('admin/plugins/reindex', 'PluginController@reindex');
Route::resource('admin/plugins', 'PluginController');
// GeoIP Management
Route::get('admin/geoip', 'GeoIpController@index');
Route::match(['get', 'post'], 'admin/geoip/setting', 'GeoIpController@setting');
Route::post('admin/geoip/reset', 'GeoIpController@reset');
// Update
Route::get('admin/upgrade/finalize', 'Upgrade@finalize');
// Modify jobs indexes
Route::get('jobs/drop-index', 'Upgrade@dropIndex');
Route::get('jobs/create-index', 'Upgrade@createIndex');
//
Route::post('tax/remove/{code}', 'TaxController@removeCountry');
Route::match(['get','post'], 'tax/add', 'TaxController@addTax');
Route::get('tax/countries', 'TaxController@countries');
Route::match(['get','post'], 'tax/settings', 'TaxController@settings');
// Invoice legacy routes removed; refactor lives at /admin/invoices/* (see routes/refactor.php /admin group).
// OAuth
Route::match(['get', 'post'], 'admin/auth/facebook-oauth', 'AuthController@facebookOAuth');
Route::match(['get', 'post'], 'admin/auth/google-oauth', 'AuthController@googleOAuth');
Route::match(['get', 'post'], 'admin/auth', 'AuthController@index');
// Chat
Route::post('admin/chat', 'ChatController@chat');
// Warmup Strategy
Route::post('admin/warmup-strategies/delete', 'WarmupStrategyController@delete');
Route::post('admin/warmup-strategies/enable', 'WarmupStrategyController@enable');
Route::post('admin/warmup-strategies/disable', 'WarmupStrategyController@disable');
Route::post('admin/warmup-strategies/preview', 'WarmupStrategyController@preview');
Route::get('admin/warmup-strategies/list', 'WarmupStrategyController@list');
Route::resource('admin/warmup-strategies', 'WarmupStrategyController');
// Role legacy routes removed; refactor lives at /admin/roles/* (see routes/refactor.php /admin group).
//
Route::post('admin/verify/index', 'VerificationController@index');
Route::get('admin/verify/index', 'VerificationController@index');
// Plan for Verification Credits
Route::get('admin/email-plan-verifications/delete/confirm', 'EmailVerificationPlanController@deleteConfirm');
Route::post('admin/email-plan-verifications/{uid}/visibility/on', 'EmailVerificationPlanController@visibilityOn');
Route::post('admin/email-plan-verifications/{uid}/visibility/off', 'EmailVerificationPlanController@visibilityOff');
Route::post('admin/email-plan-verifications/{uid}/delete', 'EmailVerificationPlanController@delete');
Route::match(['get', 'post'], 'admin/email-plan-verifications/billing-cycle/custom', 'EmailVerificationPlanController@billingCycleCustom');
Route::get('admin/email-plan-verifications/list', 'EmailVerificationPlanController@list');
Route::resource('admin/email-plan-verifications', 'EmailVerificationPlanController');
// Plan for Sending Credit Plan
Route::get('admin/sending-credit-plans/delete/confirm', 'SendingCreditPlanController@deleteConfirm');
Route::post('admin/sending-credit-plans/{uid}/visibility/on', 'SendingCreditPlanController@visibilityOn');
Route::post('admin/sending-credit-plans/{uid}/visibility/off', 'SendingCreditPlanController@visibilityOff');
Route::post('admin/sending-credit-plans/{uid}/delete', 'SendingCreditPlanController@delete');
Route::match(['get', 'post'], 'admin/sending-credit-plans/billing-cycle/custom', 'SendingCreditPlanController@billingCycleCustom');
Route::get('admin/sending-credit-plans/list', 'SendingCreditPlanController@list');
Route::resource('admin/sending-credit-plans', 'SendingCreditPlanController');
// Translation Phrases
Route::get('admin/translation', 'TranslationController@phrases');
Route::get('admin/translation/list', 'TranslationController@phrasesList');
Route::post('admin/translation/save', 'TranslationController@phrasesSave');
Route::post('admin/translation/finish-write', 'TranslationController@phrasesFinishWrite');
Route::post('admin/translation/{uid}/write', 'TranslationController@phrasesWrite');
// HttpCConfig
Route::get('admin/http-config/http-request/{id}/logs', 'HttpConfigController@httpRequestLogs');
Route::get('admin/http-config/http-request/{id}/logs/list', 'HttpConfigController@httpRequestLogsList');
Route::get('admin/http-config/{id}/http-requests', 'HttpConfigController@httpRequests');
Route::get('admin/http-config/{id}/http-requests/list', 'HttpConfigController@httpRequestsList');
Route::match(['get', 'post'], 'admin/http_configs/{uid}/test', 'HttpConfigController@test');
// Webhook
Route::get('admin/webhooks/{id}/jobs/details', 'WebhookController@jobsDetails');
Route::match(['get', 'post'], 'admin/webhooks/{id}/setup', 'WebhookController@setup');
Route::post('admin/webhooks/disable', 'WebhookController@disable');
Route::post('admin/webhooks/enable', 'WebhookController@enable');
Route::get('admin/webhooks/list/{page?}', 'WebhookController@list');
Route::post('admin/webhooks/delete', 'WebhookController@delete');
Route::resource('admin/webhooks', 'WebhookController');
// Payment Gateways
Route::get('admin/payment-gateways/settings', 'PaymentGatewayController@settings');
Route::get('admin/payment-gateways/list/{page?}', 'PaymentGatewayController@list');
Route::match(['get', 'post'], 'admin/payment-gateways/select-type', 'PaymentGatewayController@selectType');
Route::get('admin/payment-gateways', 'PaymentGatewayController@index');
Route::get('admin/payment-gateways/create/{type}', 'PaymentGatewayController@create');
Route::post('admin/payment-gateways/store/{type}', 'PaymentGatewayController@store');
Route::get('admin/payment-gateways/{uid}/edit', 'PaymentGatewayController@edit');
Route::patch('admin/payment-gateways/{uid}/update', 'PaymentGatewayController@update');
Route::post('admin/payment-gateways/{uid}/delete', 'PaymentGatewayController@delete');
Route::post('admin/payment-gateways/{uid}/disable', 'PaymentGatewayController@disable');
Route::post('admin/payment-gateways/{uid}/enable', 'PaymentGatewayController@enable');
Route::post('admin/payment-gateways/{uid}/test-connection', 'PaymentGatewayController@testConnection');
// Tutorial Guide (admin CRUD)
Route::get('tutorials/listing/{page?}', 'TutorialController@listing');
Route::get('tutorials/sort', 'TutorialController@sort');
Route::get('tutorials/delete', 'TutorialController@delete');
Route::get('tutorials', 'TutorialController@index');
Route::get('tutorials/create', 'TutorialController@create');
Route::post('tutorials/create', 'TutorialController@store');
Route::get('tutorials/{uid}/edit', 'TutorialController@edit');
Route::patch('tutorials/{uid}/update', 'TutorialController@update');
});
/*
|--------------------------------------------------------------------------
| Refactor Routes — override old routes with new controllers
|--------------------------------------------------------------------------
*/
require base_path('routes/refactor.php');