]> BookStack Code Mirror - bookstack/blobdiff - app/Http/Controllers/WebhookController.php
Removed bad trailing comma in method
[bookstack] / app / Http / Controllers / WebhookController.php
index 15a31f312fd02a185af5dc52781150e7971320de..264921dfc39ed7743f1f58f27afe5d400196a2a9 100644 (file)
@@ -20,8 +20,14 @@ class WebhookController extends Controller
      */
     public function index()
     {
-        // TODO - Get and pass webhooks
-        return view('settings.webhooks.index');
+        $webhooks = Webhook::query()
+            ->orderBy('name', 'desc')
+            ->with('trackedEvents')
+            ->get();
+
+        $this->setPageTitle(trans('settings.webhooks'));
+
+        return view('settings.webhooks.index', ['webhooks' => $webhooks]);
     }
 
     /**
@@ -29,6 +35,8 @@ class WebhookController extends Controller
      */
     public function create()
     {
+        $this->setPageTitle(trans('settings.webhooks_create'));
+
         return view('settings.webhooks.create');
     }
 
@@ -37,8 +45,21 @@ class WebhookController extends Controller
      */
     public function store(Request $request)
     {
-        // TODO - Create webhook
+        $validated = $this->validate($request, [
+            'name'     => ['required', 'max:150'],
+            'endpoint' => ['required', 'url', 'max:500'],
+            'events'   => ['required', 'array'],
+            'active'   => ['required'],
+            'timeout'  => ['required', 'integer', 'min:1', 'max:600'],
+        ]);
+
+        $webhook = new Webhook($validated);
+        $webhook->active = $validated['active'] === 'true';
+        $webhook->save();
+        $webhook->updateTrackedEvents(array_values($validated['events']));
+
         $this->logActivity(ActivityType::WEBHOOK_CREATE, $webhook);
+
         return redirect('/settings/webhooks');
     }
 
@@ -48,7 +69,11 @@ class WebhookController extends Controller
     public function edit(string $id)
     {
         /** @var Webhook $webhook */
-        $webhook = Webhook::query()->findOrFail($id);
+        $webhook = Webhook::query()
+            ->with('trackedEvents')
+            ->findOrFail($id);
+
+        $this->setPageTitle(trans('settings.webhooks_edit'));
 
         return view('settings.webhooks.edit', ['webhook' => $webhook]);
     }
@@ -58,12 +83,23 @@ class WebhookController extends Controller
      */
     public function update(Request $request, string $id)
     {
+        $validated = $this->validate($request, [
+            'name'     => ['required', 'max:150'],
+            'endpoint' => ['required', 'url', 'max:500'],
+            'events'   => ['required', 'array'],
+            'active'   => ['required'],
+            'timeout'  => ['required', 'integer', 'min:1', 'max:600'],
+        ]);
+
         /** @var Webhook $webhook */
         $webhook = Webhook::query()->findOrFail($id);
 
-        // TODO - Update
+        $webhook->active = $validated['active'] === 'true';
+        $webhook->fill($validated)->save();
+        $webhook->updateTrackedEvents($validated['events']);
 
         $this->logActivity(ActivityType::WEBHOOK_UPDATE, $webhook);
+
         return redirect('/settings/webhooks');
     }
 
@@ -74,6 +110,9 @@ class WebhookController extends Controller
     {
         /** @var Webhook $webhook */
         $webhook = Webhook::query()->findOrFail($id);
+
+        $this->setPageTitle(trans('settings.webhooks_delete'));
+
         return view('settings.webhooks.delete', ['webhook' => $webhook]);
     }
 
@@ -85,10 +124,11 @@ class WebhookController extends Controller
         /** @var Webhook $webhook */
         $webhook = Webhook::query()->findOrFail($id);
 
-        // TODO - Delete event type relations
+        $webhook->trackedEvents()->delete();
         $webhook->delete();
 
         $this->logActivity(ActivityType::WEBHOOK_DELETE, $webhook);
+
         return redirect('/settings/webhooks');
     }
 }