Zapier integration (#491)
* create zapier app * install sanctum * move OAuthProviderController * make `api-external` middleware * add zapier endpoints * add tests * token management * zapier event handler * add policy * use `slug` instead of `id` * wip * check policies * change api prefix to `external` * ui tweaks * validate token abilities * open zapier URL * zapier ui tweaks * update zap * Fix linting * Added sample endpoints + minor UI changes * Run PHP code linter --------- Co-authored-by: Julien Nahum <julien@nahum.net>
This commit is contained in:
38
routes/api-external.php
Normal file
38
routes/api-external.php
Normal file
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* External API calls
|
||||
*/
|
||||
|
||||
use App\Http\Controllers\Integrations\Zapier;
|
||||
use App\Http\Controllers\Integrations\Zapier\ListFormsController;
|
||||
use App\Http\Controllers\Integrations\Zapier\ListWorkspacesController;
|
||||
|
||||
Route::prefix('external')
|
||||
->middleware('auth:sanctum')
|
||||
->group(function () {
|
||||
Route::prefix('zapier')->name('zapier.')->group(function () {
|
||||
Route::get('validate', Zapier\ValidateAuthController::class)
|
||||
->name('validate');
|
||||
|
||||
// Set and delete webhooks / manage integrations
|
||||
Route::middleware('ability:manage-integrations')
|
||||
->name('webhooks.')
|
||||
->group(function () {
|
||||
Route::post('webhook', [Zapier\IntegrationController::class, 'store'])
|
||||
->name('store');
|
||||
|
||||
Route::delete('webhook', [Zapier\IntegrationController::class, 'destroy'])
|
||||
->name('destroy');
|
||||
Route::get('submissions/recent', [Zapier\IntegrationController::class, 'poll'])->name('poll');
|
||||
});
|
||||
|
||||
Route::get('workspaces', ListWorkspacesController::class)
|
||||
->middleware('ability:list-workspaces')
|
||||
->name('workspaces');
|
||||
|
||||
Route::get('forms', ListFormsController::class)
|
||||
->middleware('ability:list-forms')
|
||||
->name('forms');
|
||||
});
|
||||
});
|
||||
@@ -15,9 +15,10 @@ use App\Http\Controllers\Forms\Integration\FormIntegrationsEventController;
|
||||
use App\Http\Controllers\Forms\Integration\FormZapierWebhookController;
|
||||
use App\Http\Controllers\Forms\PublicFormController;
|
||||
use App\Http\Controllers\Forms\RecordController;
|
||||
use App\Http\Controllers\OAuth\OAuthProviderController;
|
||||
use App\Http\Controllers\Settings\OAuthProviderController;
|
||||
use App\Http\Controllers\Settings\PasswordController;
|
||||
use App\Http\Controllers\Settings\ProfileController;
|
||||
use App\Http\Controllers\Settings\TokenController;
|
||||
use App\Http\Controllers\SubscriptionController;
|
||||
use App\Http\Controllers\TemplateController;
|
||||
use App\Http\Controllers\UserInviteController;
|
||||
@@ -51,6 +52,12 @@ Route::group(['middleware' => 'auth:api'], function () {
|
||||
Route::patch('/profile', [ProfileController::class, 'update']);
|
||||
Route::patch('/password', [PasswordController::class, 'update']);
|
||||
|
||||
Route::prefix('/tokens')->name('tokens.')->group(function () {
|
||||
Route::get('/', [TokenController::class, 'index'])->name('index');
|
||||
Route::post('/', [TokenController::class, 'store'])->name('store');
|
||||
Route::delete('{token}', [TokenController::class, 'destroy'])->name('destroy');
|
||||
});
|
||||
|
||||
Route::prefix('/providers')->name('providers.')->group(function () {
|
||||
Route::post('/connect/{service}', [OAuthProviderController::class, 'connect'])->name('connect');
|
||||
Route::post('/callback/{service}', [OAuthProviderController::class, 'handleRedirect'])->name('callback');
|
||||
|
||||
Reference in New Issue
Block a user