all(); if (\abs(\time() - $request['signature']['timestamp']) > 15) { return response()->json(['message' => 'Success'], 200); } if (\hash_equals(\hash_hmac('sha256', $input['signature']['timestamp'] . $input['signature']['token'], config('services.mailgun.webhook_signing_key')), $input['signature']['signature'])) { ProcessMailgunWebhook::dispatch($request->all())->delay(10); } return response()->json(['message' => 'Success.'], 200); } /** * Process Mailgun Webhook. * * * @OA\Post( * path="/api/v1/mailgun_inbound_webhook", * operationId="mailgunInboundWebhook", * tags={"mailgun"}, * summary="Processing inbound webhooks from Mailgun", * description="Adds an credit to the system", * @OA\Parameter(ref="#/components/parameters/X-API-TOKEN"), * @OA\Parameter(ref="#/components/parameters/X-Requested-With"), * @OA\Parameter(ref="#/components/parameters/include"), * @OA\Response( * response=200, * description="Returns the saved credit object", * @OA\Header(header="X-MINIMUM-CLIENT-VERSION", ref="#/components/headers/X-MINIMUM-CLIENT-VERSION"), * @OA\Header(header="X-RateLimit-Remaining", ref="#/components/headers/X-RateLimit-Remaining"), * @OA\Header(header="X-RateLimit-Limit", ref="#/components/headers/X-RateLimit-Limit"), * @OA\JsonContent(ref="#/components/schemas/Credit"), * ), * @OA\Response( * response=422, * description="Validation error", * @OA\JsonContent(ref="#/components/schemas/ValidationError"), * * ), * @OA\Response( * response="default", * description="Unexpected Error", * @OA\JsonContent(ref="#/components/schemas/Error"), * ), * ) */ public function inboundWebhook(Request $request) { $input = $request->all(); if (!array_key_exists('attachments', $input) || count(json_decode($input['attachments'])) == 0) { Log::info('Message ignored because of missing attachments. Please ensure contacting this api-endpoint with a store & notify operation instead of a forward operation'); return response()->json(['message' => 'Sucess. Soft Fail. Missing Attachments.'], 200); } if (\abs(\time() - (int) $request['timestamp']) > 150) { Log::info('Message ignored because of request body is too old.'); return response()->json(['message' => 'Success. Soft Fail. Message too old.'], 200); } if (\hash_equals(\hash_hmac('sha256', $input['timestamp'] . $input['token'], config('services.mailgun.webhook_signing_key')), $input['signature'])) { ProcessMailgunInboundWebhook::dispatch($input)->delay(10); return response()->json(['message' => 'Success'], 201); } return response()->json(['message' => 'Unauthorized'], 403); } }