Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 11
0.00% covered (danger)
0.00%
0 / 1
CRAP
0.00% covered (danger)
0.00%
0 / 1
FreshdeskController
0.00% covered (danger)
0.00%
0 / 11
0.00% covered (danger)
0.00%
0 / 1
20
0.00% covered (danger)
0.00%
0 / 1
 webhook
0.00% covered (danger)
0.00%
0 / 11
0.00% covered (danger)
0.00%
0 / 1
20
1<?php
2
3namespace App\Http\Controllers;
4
5use App\Exceptions\AppException;
6use App\Http\Resources\ClientTicketResource;
7use App\Services\FreshdeskWebhookService;
8use Illuminate\Http\Request;
9
10class FreshdeskController extends Controller
11{
12    /**
13     * POST /webhooks/freshdesk
14     * Receive Freshdesk ticket events, match to client, and upsert.
15     */
16    function webhook(Request $request)
17    {
18        $token = config('services.freshdesk_webhook_token');
19
20        if (empty($token)) {
21            return response(['message' => 'KO', 'error' => 'Webhook token not configured'], 500);
22        }
23
24        if (!hash_equals($token, $request->header('X-Webhook-Token', ''))) {
25            return response(['message' => 'Unauthorized'], 401);
26        }
27
28        try {
29            $payload = $request->all();
30
31            $ticket = (new FreshdeskWebhookService())->processWebhook($payload);
32
33            return new ClientTicketResource($ticket);
34
35        } catch (\Exception $e) {
36            report(AppException::fromException($e, 'FRESHDESK_WEBHOOK_EXCEPTION'));
37            return response(['message' => 'KO', 'error' => $e->getMessage()]);
38        }
39    }
40}