# 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>
38 lines
928 B
Ruby
38 lines
928 B
Ruby
class Cloudflare::CreateCustomHostnameService < Cloudflare::BaseCloudflareZoneService
|
|
pattr_initialize [:portal!]
|
|
|
|
def perform
|
|
return { errors: ['Cloudflare API token or zone ID not found'] } if api_token.blank? || zone_id.blank?
|
|
return { errors: ['No hostname found'] } if @portal.custom_domain.blank?
|
|
|
|
response = create_hostname
|
|
|
|
return { errors: response.parsed_response['errors'] } unless response.success?
|
|
|
|
data = response.parsed_response['result']
|
|
|
|
if data.present?
|
|
update_portal_ssl_settings(@portal, data)
|
|
return { data: data }
|
|
end
|
|
|
|
{ errors: ['Could not create hostname'] }
|
|
end
|
|
|
|
private
|
|
|
|
def create_hostname
|
|
HTTParty.post(
|
|
"#{BASE_URI}/zones/#{zone_id}/custom_hostnames",
|
|
headers: headers,
|
|
body: {
|
|
hostname: @portal.custom_domain,
|
|
ssl: {
|
|
method: 'http',
|
|
type: 'dv'
|
|
}
|
|
}.to_json
|
|
)
|
|
end
|
|
end
|