# frozen_string_literal: true module Docuseal URL_CACHE = ActiveSupport::Cache::MemoryStore.new PRODUCT_URL = 'https://www.docuseal.com' PRODUCT_EMAIL_URL = ENV.fetch('PRODUCT_EMAIL_URL', PRODUCT_URL) NEWSLETTER_URL = "#{PRODUCT_URL}/newsletters".freeze ENQUIRIES_URL = "#{PRODUCT_URL}/enquiries".freeze PRODUCT_NAME = 'DocuSeal' DEFAULT_APP_URL = ENV.fetch('APP_URL', 'http://localhost:3000') GITHUB_URL = 'https://github.com/docusealco/docuseal' DISCORD_URL = 'https://discord.gg/qygYCDGck9' TWITTER_URL = 'https://twitter.com/docusealco' TWITTER_HANDLE = '@docusealco' CHATGPT_URL = "#{PRODUCT_URL}/chat".freeze SUPPORT_EMAIL = 'support@docuseal.com' HOST = ENV.fetch('HOST', 'localhost') AATL_CERT_NAME = 'docuseal_aatl' CONSOLE_URL = if Rails.env.development? 'http://console.localhost.io:3001' elsif ENV['MULTITENANT'] == 'true' "https://console.#{HOST}" else 'https://console.docuseal.com' end CLOUD_URL = if Rails.env.development? 'http://localhost:3000' else 'https://docuseal.com' end CDN_URL = if Rails.env.development? 'http://localhost:3000' elsif ENV['MULTITENANT'] == 'true' "https://cdn.#{HOST}" else 'https://cdn.docuseal.com' end CERTS = JSON.parse(ENV.fetch('CERTS', '{}')) TIMESERVER_URL = ENV.fetch('TIMESERVER_URL', nil) VERSION_FILE_PATH = Rails.root.join('.version') DEFAULT_URL_OPTIONS = { host: HOST, protocol: ENV['FORCE_SSL'].present? ? 'https' : 'http' }.freeze module_function def version @version ||= VERSION_FILE_PATH.read.strip if VERSION_FILE_PATH.exist? end def multitenant? ENV['MULTITENANT'] == 'true' end def demo? ENV['DEMO'] == 'true' end def active_storage_public? ENV['ACTIVE_STORAGE_PUBLIC'] == 'true' end def default_pkcs return if Docuseal::CERTS['enabled'] == false @default_pkcs ||= GenerateCertificate.load_pkcs(Docuseal::CERTS) end def enable_pwa? true end def trusted_certs @trusted_certs ||= ENV['TRUSTED_CERTS'].to_s.gsub('\\n', "\n").split("\n\n").map do |base64| OpenSSL::X509::Certificate.new(base64) end end def default_url_options return DEFAULT_URL_OPTIONS if multitenant? @default_url_options ||= begin value = EncryptedConfig.find_by(key: EncryptedConfig::APP_URL_KEY)&.value if ENV['APP_URL'].blank? value ||= DEFAULT_APP_URL url = Addressable::URI.parse(value) { host: url.host, port: url.port, protocol: url.scheme } end end def product_name PRODUCT_NAME end def refresh_default_url_options! @default_url_options = nil end end