['web','permission:reporting.browse','json.request','GrahamCampbell\Throttle\Http\Middleware\ThrottleMiddleware:300,1'], 'prefix' => 'api/webform', 'namespace' => 'Modules\Api\Http\Controllers'], function () { Route::get('ccDashboard','\App\Http\Controllers\AstmanController@dashboardAjax')->name('ccdashboard'); Route::get('getAvailAgent','\App\Http\Controllers\AstmanController@getAvailAgent')->name('getAvailAgent'); Route::group(['prefix' => 'test'], function (){ Route::post('auth','Webform\ContactsWebformController@authTest'); // }); Route::group(['prefix' => 'contacts'], function (){ Route::post('create','Webform\ContactsWebformController@store'); }); Route::group(['prefix' => 'leads'], function (){ Route::post('create','Webform\LeadsWebformController@store'); }); }); // Public API routes (no authentication required) Route::group(['as' => 'api.', 'prefix' => 'api', 'namespace' => 'Modules\Api\Http\Controllers'], function () { Route::post('login', 'Base\ApiAuthController@login'); Route::post('refresh', 'Base\ApiAuthController@refresh'); Route::post('webhook', 'CallThroughApiController@webhook'); }); // Protected API routes (authentication required) Route::group(['middleware' => ['auth:api', 'api.guard', 'api.throttle:120,1'],'as' => 'api.', 'prefix' => 'api', 'namespace' => 'Modules\Api\Http\Controllers'], function () { Route::get('ccDashboard','DashboardApiController@dashboardAjax')->middleware('permission:reporting.browse'); // User API routes — same access rule as the Web User Management // (settings.users.*): admin.settings (Company Admin) or user.settings. Route::group(['middleware' => ['permission:admin.settings|user.settings']], function () { Route::post('users', 'UserApiController@store'); Route::get('users', 'UserApiController@index'); Route::delete('users/{id}', 'UserApiController@destroy'); }); // Logged-in user's current status (same logic as the Dashboard Users section) Route::get('user-status', 'UserApiController@status'); // Group API routes Route::get('groups/', 'GroupApiController@index'); Route::post('groups/', 'GroupApiController@store'); Route::put('groups/{id}', 'GroupApiController@update'); Route::delete('groups/{id}', 'GroupApiController@destroy'); Route::post('update-profile', 'Base\ApiAuthController@updateProfile'); Route::post('logout', 'Base\ApiAuthController@logout'); Route::post('change-password', 'Base\ApiAuthController@changePassword'); Route::get('user-data', 'Base\ApiAuthController@userData'); Route::get('permissions', 'Base\ApiAuthController@permissions'); // Company Data Settings (Settings → Company Data Settings). Permission // check happens in the controller (admin.settings), mirroring the web page. Route::get('settings/company-data', 'CompanyDataSettingsApiController@index'); Route::any('switch-company', 'Base\ApiAuthController@switchCompanyContext'); Route::group(['prefix' => 'saas'], function (){ Route::post('/save-or-update-user','Saas\SaasApiController@saveOrUpdateUser'); Route::post('/delete-user','Saas\SaasApiController@deleteUser'); Route::post('/validate','Saas\SaasApiController@validateAccount'); Route::post('/register','Saas\SaasApiController@registerCompany'); Route::post('/deactivate-account','Saas\SaasApiController@deactivateAccount'); Route::post('/resume-account','Saas\SaasApiController@resumeAccount'); Route::post('/update-plan','Saas\SaasApiController@updatePlan'); }); Route::group(['prefix' => 'home'], function (){ Route::get('/','HomeApiController@home'); }); Route::group(['prefix' => 'operations'], function (){ Route::post('/status/update','OperationsApiController@statusUpdate'); Route::post('/callme','OperationsApiController@callme'); }); Route::group(['prefix' => 'leads'], function (){ Route::group(['middleware' => ['permission:leads.browse']], function () { Route::get('/','LeadsApiController@index'); Route::get('fields','LeadsApiController@fields'); Route::get('get/{id}','LeadsApiController@get'); Route::get('/all-statuses','LeadsApiController@allStatuses'); Route::get('/all-sources','LeadsApiController@allSources'); Route::get('/all-industries','LeadsApiController@allIndustries'); Route::get('/all-ratings','LeadsApiController@allRatings'); }); Route::post('create','LeadsApiController@store')->middleware('permission:leads.create'); Route::post('update/{id}','LeadsApiController@update')->middleware('permission:leads.update'); Route::delete('delete/{id}','LeadsApiController@destroy')->middleware('permission:leads.destroy'); }); Route::group(['prefix' => 'attachments'], function (){ Route::post('list','AttachmentsController@getAttachments'); Route::post('delete','AttachmentsController@deleteAttachment'); Route::post('upload','AttachmentsController@uploadAttachments'); }); Route::group(['prefix' => 'contacts'], function (){ Route::group(['middleware' => ['permission:contacts.browse']], function () { Route::get('/','ContactsApiController@index'); Route::get('fields','ContactsApiController@fields'); Route::get('get/{id}','ContactsApiController@get'); Route::get('/all-statuses','ContactsApiController@allStatuses'); Route::get('/all-sources','ContactsApiController@allSources'); }); Route::post('create','ContactsApiController@store')->middleware('permission:contacts.create'); Route::post('update/{id}','ContactsApiController@update')->middleware('permission:contacts.update'); Route::delete('delete/{id}','ContactsApiController@destroy')->middleware('permission:contacts.destroy'); }); Route::group(['prefix' => 'tickets'], function (){ Route::group(['middleware' => ['permission:tickets.browse']], function () { Route::get('/','TicketsApiController@index'); Route::get('fields','TicketsApiController@fields'); Route::get('get/{id}','TicketsApiController@get'); Route::get('all-statuses','TicketsApiController@allStatuses'); Route::get('all-priorities','TicketsApiController@allPriorities'); Route::get('all-severities','TicketsApiController@allSeverities'); Route::get('all-categories','TicketsApiController@allCategories'); }); Route::post('create','TicketsApiController@store')->middleware('permission:tickets.create'); Route::post('update/{id}','TicketsApiController@update')->middleware('permission:tickets.update'); Route::delete('delete/{id}','TicketsApiController@destroy')->middleware('permission:tickets.destroy'); }); Route::group(['prefix' => 'calllogs'], function (){ Route::group(['middleware' => ['permission:calllogs.browse']], function () { Route::get('/','CallLogsApiController@index'); Route::get('fields','CallLogsApiController@fields'); Route::get('get/{id}','CallLogsApiController@get'); Route::get('all-statuses','CallLogsApiController@allStatuses'); Route::get('all-sources','CallLogsApiController@allSources'); Route::get('all-outcomes','CallLogsApiController@allOutcomes'); Route::get('active-linkedid','CallLogsApiController@activeLinkedid'); }); Route::post('create','CallLogsApiController@store')->middleware('permission:calllogs.create'); Route::post('update/{id}','CallLogsApiController@update')->middleware('permission:calllogs.update'); Route::delete('delete/{id}','CallLogsApiController@destroy')->middleware('permission:calllogs.destroy'); }); // SMS endpoints Route::group(['prefix' => 'sms'], function () { Route::get('quota', 'SmsApiController@quota')->middleware('permission:sms.browse'); Route::post('send', 'SmsApiController@send')->middleware('permission:sms.create'); }); Route::group(['prefix' => 'contact-requests'], function (){ Route::group(['middleware' => ['permission:contactrequests.browse']], function () { Route::get('/','ContactRequestsApiController@index'); Route::get('get/{id}','ContactRequestsApiController@get'); Route::get('all-statuses','ContactRequestsApiController@allStatuses'); Route::get('all-priorities','ContactRequestsApiController@allPriorities'); Route::get('all-severities','ContactRequestsApiController@allSeverities'); Route::get('all-categories','ContactRequestsApiController@allCategories'); }); Route::post('create','ContactRequestsApiController@store')->middleware('permission:contactrequests.create'); Route::post('update/{id}','ContactRequestsApiController@update')->middleware('permission:contactrequests.update'); Route::delete('delete/{id}','ContactRequestsApiController@destroy')->middleware('permission:contactrequests.destroy'); }); Route::group(['prefix' => 'reporting', 'as' => 'reporting.', 'middleware' => ['permission:reporting.browse']], function (){ Route::group(['middleware' => ['permission:reporting.missied']], function () { Route::get('/missed', 'MissedCallsApiController@missed'); Route::get('/ring-details/{callid}', 'MissedCallsApiController@getRingDetails'); Route::post('/missed-done/{num}', 'MissedCallsApiController@missedDone'); Route::get('/missed/stats', 'MissedCallsApiController@callStats')->name('missed.stats'); }); Route::group(['middleware' => ['permission:reporting.inbound']], function () { Route::get('/inbound', 'InboundApiController@inbound'); Route::get('/inbound/{linkedid}/transfers', 'InboundApiController@getTransfers')->name('inbound.transfers'); Route::post('/inbound/done/{id}', 'InboundApiController@inDone')->name('inbound.done'); }); Route::group(['middleware' => ['permission:reporting.inbound_distribution']], function () { Route::get('/inDist', 'InboundApiController@inDist'); }); Route::group(['middleware' => ['permission:reporting.outbound']], function () { Route::get('/outbound', 'OutboundApiController@outbound'); Route::post('/outbound/done/{id}', 'OutboundApiController@outDone')->name('outbound.done'); }); Route::group(['middleware' => ['permission:reporting.outbound_distribution']], function () { Route::get('/outDist', 'OutboundApiController@outDist'); }); Route::group(['middleware' => ['permission:reporting.attendance']], function () { Route::get('/attendance', 'AttendenceApiController@attendance')->name('attendance'); Route::get('/attendance/summary', 'AttendenceApiController@summary')->name('attendance.summary'); Route::get('/attendance/users', 'AttendenceApiController@users')->name('attendance.users'); Route::get('/attendance/groups', 'AttendenceApiController@groups')->name('attendance.groups'); }); Route::group(['middleware' => ['permission:reporting.blacklist']], function () { Route::get('/blacklist', 'ReportingApiController@blacklist'); Route::post('/blacklistAdd', 'ReportingApiController@blacklistAdd'); }); Route::group(['middleware' => ['permission:reporting.performance']], function () { Route::get('/performance', 'ReportingApiController@performance'); Route::get('/outPerformance', 'ReportingApiController@outPerformance'); }); Route::group(['middleware' => ['permission:reporting.inbound']], function () { Route::get('/calls', 'CallsApiController@calls'); Route::get('/listen/{id}', 'CallsApiController@listenFile'); }); }); Route::get('all-languages','LeadsApiController@allLanguages'); Route::get('all-countries','LeadsApiController@allCountries'); Route::get('all-owned-by','LeadsApiController@allOwnedBy'); Route::get('all-users','LeadsApiController@allUsers'); // Call Through API Route::group(['middleware' => ['permission:calls.through.api'], 'prefix' => 'calls'], function () { Route::post('/initiate', 'CallThroughApiController@initiate'); }); }); /* |-------------------------------------------------------------------------- | External Client Softphone Integration |-------------------------------------------------------------------------- | */ // CORS preflight. Browsers never send the API token here, so this sits // outside the authenticated group; the middleware answers it with 204. Route::group([ 'as' => 'api.softphone.', 'prefix' => 'api/softphone', 'namespace' => 'Modules\Api\Http\Controllers', 'middleware' => [\App\Http\Middleware\SoftphoneIntegrationCors::class], ], function () { Route::options('session', 'SoftphoneIntegrationController@preflight')->name('session.preflight'); Route::options('session/revoke', 'SoftphoneIntegrationController@preflight')->name('session.revoke.preflight'); }); Route::group([ 'as' => 'api.softphone.', 'prefix' => 'api/softphone', 'namespace' => 'Modules\Api\Http\Controllers', 'middleware' => [ \App\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \App\Http\Middleware\SoftphoneIntegrationCors::class, \Illuminate\Session\Middleware\StartSession::class, 'auth:api', 'api.guard', 'api.throttle:120,1', ], ], function () { Route::post('session', 'SoftphoneIntegrationController@createSession')->name('session'); Route::post('session/revoke', 'SoftphoneIntegrationController@revokeSession')->name('session.revoke'); });