chore: Automate SSL with Cloudflare (#12021)
This PR adds support for automatic SSL issuance using Cloudflare when a custom domain is updated. - Introduced a cloudflare configuration. If present, the system will attempt to issue an SSL certificate via Cloudflare whenever a custom domain is added or changed. - SSL verification is handled using an HTTP challenge. - The job will store the HTTP challenge response provided by Cloudflare and serve it under the /.well-known/cf path automatically. How to test: - Create a Cloudflare zone for your domain and copy the Zone ID. - Generate a Cloudflare API token with the required SSL certificate permissions. - Set the Fallback Origin under SSL -> Custom HostName to the Chatwoot installation. - Add or update a custom domain and verify that the SSL certificate is automatically issued. --------- Co-authored-by: Sojan Jose <sojan@pepalo.com>
This commit is contained in:
22
enterprise/app/controllers/custom_domains_controller.rb
Normal file
22
enterprise/app/controllers/custom_domains_controller.rb
Normal file
@@ -0,0 +1,22 @@
|
||||
class CustomDomainsController < ApplicationController
|
||||
def verify
|
||||
challenge_id = permitted_params[:id]
|
||||
|
||||
domain = request.host
|
||||
portal = Portal.find_by(custom_domain: domain)
|
||||
|
||||
return render plain: 'Domain not found', status: :not_found unless portal
|
||||
|
||||
ssl_settings = portal.ssl_settings || {}
|
||||
|
||||
return render plain: 'Challenge ID not found', status: :not_found unless ssl_settings['cf_verification_id'] == challenge_id
|
||||
|
||||
render plain: ssl_settings['cf_verification_body'], status: :ok
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def permitted_params
|
||||
params.permit(:id)
|
||||
end
|
||||
end
|
||||
@@ -34,6 +34,6 @@ module Enterprise::SuperAdmin::AppConfigsController
|
||||
def internal_config_options
|
||||
%w[CHATWOOT_INBOX_TOKEN CHATWOOT_INBOX_HMAC_KEY ANALYTICS_TOKEN CLEARBIT_API_KEY DASHBOARD_SCRIPTS INACTIVE_WHATSAPP_NUMBERS BLOCKED_EMAIL_DOMAINS
|
||||
CAPTAIN_CLOUD_PLAN_LIMITS ACCOUNT_SECURITY_NOTIFICATION_WEBHOOK_URL CHATWOOT_INSTANCE_ADMIN_EMAIL
|
||||
OG_IMAGE_CDN_URL OG_IMAGE_CLIENT_REF]
|
||||
OG_IMAGE_CDN_URL OG_IMAGE_CLIENT_REF CLOUDFLARE_API_KEY CLOUDFLARE_ZONE_ID]
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user