From 7a70cea36b74df2ddffb3f7b9850efb7dd1997bf Mon Sep 17 00:00:00 2001 From: Tanmay Deep Sharma Date: Wed, 28 May 2025 20:22:37 +0530 Subject: [PATCH] fix circleci checks --- .../whatsapp/embedded_signup_service.rb | 25 ++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/app/services/whatsapp/embedded_signup_service.rb b/app/services/whatsapp/embedded_signup_service.rb index 09bb2425e..49c02d982 100644 --- a/app/services/whatsapp/embedded_signup_service.rb +++ b/app/services/whatsapp/embedded_signup_service.rb @@ -158,26 +158,45 @@ class Whatsapp::EmbeddedSignupService end def validate_token_waba_access(access_token, waba_id) + token_debug_data = fetch_token_debug_data(access_token) + waba_scope = extract_waba_scope(token_debug_data) + verify_waba_authorization(waba_scope, waba_id) + end + + def fetch_token_debug_data(access_token) response = Faraday.get( 'https://graph.facebook.com/v21.0/debug_token', { input_token: access_token, - access_token: "#{GlobalConfigService.load('WHATSAPP_APP_ID', '')}|#{GlobalConfigService.load('WHATSAPP_APP_SECRET', '')}" + access_token: build_app_access_token } ) raise "Token validation failed: #{response.body}" unless response.success? - data = JSON.parse(response.body) - granular_scopes = data.dig('data', 'granular_scopes') + JSON.parse(response.body) + end + def extract_waba_scope(token_data) + granular_scopes = token_data.dig('data', 'granular_scopes') waba_scope = granular_scopes&.find { |scope| scope['scope'] == 'whatsapp_business_management' } + raise 'No WABA scope found in token' unless waba_scope + waba_scope + end + + def verify_waba_authorization(waba_scope, waba_id) authorized_waba_ids = waba_scope['target_ids'] || [] return if authorized_waba_ids.include?(waba_id) raise "Token does not have access to WABA #{waba_id}. Authorized WABAs: #{authorized_waba_ids}" end + + def build_app_access_token + app_id = GlobalConfigService.load('WHATSAPP_APP_ID', '') + app_secret = GlobalConfigService.load('WHATSAPP_APP_SECRET', '') + "#{app_id}|#{app_secret}" + end end