浏览代码

feat: add basic auth no webhook

Gustavo Mantovani 2 周之前
父节点
当前提交
ec2c6b6f22
共有 2 个文件被更改,包括 23 次插入10 次删除
  1. 21 9
      app/Http/Controllers/WebhookController.php
  2. 2 1
      config/services.php

+ 21 - 9
app/Http/Controllers/WebhookController.php

@@ -14,7 +14,7 @@ class WebhookController extends Controller
 
     public function pagarme(Request $request): JsonResponse
     {
-        if (! $this->validPagarmeToken($request)) {
+        if (! $this->validPagarmeCredentials($request)) {
             return $this->errorResponse(message: __('http.unauthorized_token'), code: 401);
         }
 
@@ -23,18 +23,30 @@ class WebhookController extends Controller
         return $this->successResponse(message: __('http.webhook_received'));
     }
 
-    private function validPagarmeToken(Request $request): bool
+    //
+
+    private function validPagarmeCredentials(Request $request): bool
     {
-        $configuredToken = config('services.pagarme.webhook_token');
+        $configuredUser = config('services.pagarme.webhook_user');
+        $configuredPassword = config('services.pagarme.webhook_password');
 
-        if (empty($configuredToken)) {
-            return true;
+        if (empty($configuredUser) || empty($configuredPassword)) {
+            return false;
         }
 
-        $receivedToken = $request->bearerToken()
-            ?: $request->header('X-Webhook-Token')
-            ?: $request->query('token');
+        return is_string($configuredUser)
+            && is_string($configuredPassword)
+            && $this->validBasicAuthCredentials($request, $configuredUser, $configuredPassword);
+    }
+
+    private function validBasicAuthCredentials(Request $request, string $configuredUser, string $configuredPassword): bool
+    {
+        $receivedUser = $request->getUser();
+        $receivedPassword = $request->getPassword();
 
-        return is_string($receivedToken) && hash_equals($configuredToken, $receivedToken);
+        return is_string($receivedUser)
+            && is_string($receivedPassword)
+            && hash_equals($configuredUser, $receivedUser)
+            && hash_equals($configuredPassword, $receivedPassword);
     }
 }

+ 2 - 1
config/services.php

@@ -39,7 +39,8 @@ return [
         'secret_key'            => env('PAGARME_SECRET_KEY'),
         'service_referer_name'  => env('PAGARME_SERVICE_REFERER_NAME', env('APP_NAME', 'Laravel')),
         'base_url'              => env('PAGARME_BASE_URL', 'https://api.pagar.me/core/v5'),
-        'webhook_token'         => env('PAGARME_WEBHOOK_TOKEN'),
+        'webhook_user'          => env('PAGARME_WEBHOOK_USER'),
+        'webhook_password'      => env('PAGARME_WEBHOOK_PASSWORD'),
         'platform_recipient_id' => env('PAGARME_PLATFORM_RECIPIENT_ID'),
         'pix_disable_split'     => env('PAGARME_PIX_DISABLE_SPLIT', false),
     ],