Files
leadchat/enterprise/app/services/cloudflare/base_cloudflare_zone_service.rb
Sivin Varghese d9900e50a0 feat(cloud): Add support for viewing status of SSL in custom domains (#12011)
# Pull Request Template

## Description

Fixes
[CW-4620](https://linear.app/chatwoot/issue/CW-4620/rethinking-custom-domains-in-chatwoot)

<img width="642" height="187" alt="Screenshot 2025-07-29 at 8 17 44 PM"
src="https://github.com/user-attachments/assets/ad2f5dac-4b27-4dce-93ca-6cbba74443fb"
/>


## Type of change

- [x] New feature (non-breaking change which adds functionality)

## How Has This Been Tested?



## Checklist:

- [x] My code follows the style guidelines of this project
- [x] I have performed a self-review of my code
- [x] I have commented on my code, particularly in hard-to-understand
areas
- [ ] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [x] I have added tests that prove my fix is effective or that my
feature works
- [x] New and existing unit tests pass locally with my changes
- [ ] Any dependent changes have been merged and published in downstream
modules

---------

Co-authored-by: Vishnu Narayanan <iamwishnu@gmail.com>
Co-authored-by: Pranav <pranavrajs@gmail.com>
Co-authored-by: Pranav <pranav@chatwoot.com>
2025-07-30 10:52:47 -07:00

42 lines
1.3 KiB
Ruby

class Cloudflare::BaseCloudflareZoneService
BASE_URI = 'https://api.cloudflare.com/client/v4'.freeze
private
def headers
{
'Authorization' => "Bearer #{api_token}",
'Content-Type' => 'application/json'
}
end
def api_token
InstallationConfig.find_by(name: 'CLOUDFLARE_API_KEY')&.value
end
def zone_id
InstallationConfig.find_by(name: 'CLOUDFLARE_ZONE_ID')&.value
end
def update_portal_ssl_settings(portal, data)
verification_record = data['ownership_verification_http']
ssl_record = data['ssl']
verification_errors = data['verification_errors']&.first || ''
# Start with existing settings to preserve verification data if it exists
ssl_settings = portal.ssl_settings || {}
# Only update verification fields if they exist in the response (during initial setup)
if verification_record.present?
ssl_settings['cf_verification_id'] = verification_record['http_url'].split('/').last
ssl_settings['cf_verification_body'] = verification_record['http_body']
end
# Always update SSL status and errors from current response
ssl_settings['cf_status'] = ssl_record&.dig('status')
ssl_settings['cf_verification_errors'] = verification_errors
portal.update(ssl_settings: ssl_settings)
end
end