Set the default brand to Moreminimore Chat while keeping branding configurable via the existing InstallationConfig/ENV mechanism. - installation_config.yml: INSTALLATION_NAME/BRAND_NAME -> Moreminimore Chat, BRAND_URL/WIDGET_BRAND_URL -> https://www.moreminimore.com, TERMS/PRIVACY -> moreminimore.com, MAILER_SUPPORT_EMAIL -> contact@moreminimore.com; drop LOGO_DARK (single PNG logo for light+dark). - Mailer sender defaults -> 'Moreminimore Chat Team <contact@moreminimore.com>' across devise.rb, application_mailer, conversation_reply_mailer, mail_presenter, email_address_parseable. - Replace SVG brand assets with logo.png/logo_thumbnail.png (1000x1000); update onboarding, super_admin login/nav, Vue login/signup/saml, survey, helpcenter, widget, year-in-review to use the single PNG and Moreminimore Chat name; remove dark dual-logo pattern. - manifest.json name/short_name -> Moreminimore Chat; en.yml integration copy. Approved by independent five-key pre-commit review deleg_a733cdf4 (passed=true, security_concerns=[], logic_errors=[]). Privacy audit findings=0.
107 lines
3.5 KiB
Ruby
107 lines
3.5 KiB
Ruby
class DashboardController < ActionController::Base
|
|
include SwitchLocale
|
|
include PortalHomeData
|
|
|
|
GLOBAL_CONFIG_KEYS = %w[
|
|
LOGO
|
|
LOGO_THUMBNAIL
|
|
INSTALLATION_NAME
|
|
WIDGET_BRAND_URL
|
|
TERMS_URL
|
|
BRAND_URL
|
|
BRAND_NAME
|
|
PRIVACY_URL
|
|
DISPLAY_MANIFEST
|
|
CREATE_NEW_ACCOUNT_FROM_DASHBOARD
|
|
CHATWOOT_INBOX_TOKEN
|
|
API_CHANNEL_NAME
|
|
API_CHANNEL_THUMBNAIL
|
|
DIRECT_UPLOADS_ENABLED
|
|
MAXIMUM_FILE_UPLOAD_SIZE
|
|
HCAPTCHA_SITE_KEY
|
|
LOGOUT_REDIRECT_LINK
|
|
DISABLE_USER_PROFILE_UPDATE
|
|
DISABLE_META_INBOX_CREATION
|
|
DISABLE_META_MESSAGE_SENDING
|
|
DEPLOYMENT_ENV
|
|
INSTALLATION_PRICING_PLAN
|
|
].freeze
|
|
|
|
before_action :set_application_pack
|
|
before_action :set_global_config
|
|
around_action :switch_locale
|
|
before_action :ensure_installation_onboarding, only: [:index]
|
|
before_action :render_hc_if_custom_domain, only: [:index]
|
|
before_action :ensure_html_format
|
|
layout 'vueapp'
|
|
|
|
def index; end
|
|
|
|
private
|
|
|
|
def ensure_html_format
|
|
render json: { error: 'Please use API routes instead of dashboard routes for JSON requests' }, status: :not_acceptable if request.format.json?
|
|
end
|
|
|
|
def set_global_config
|
|
@global_config = GlobalConfig.get(*GLOBAL_CONFIG_KEYS).slice(*GLOBAL_CONFIG_KEYS).merge(app_config)
|
|
end
|
|
|
|
def ensure_installation_onboarding
|
|
redirect_to '/installation/onboarding' if ::Redis::Alfred.get(::Redis::Alfred::CHATWOOT_INSTALLATION_ONBOARDING)
|
|
end
|
|
|
|
def render_hc_if_custom_domain
|
|
domain = request.host
|
|
return if domain == URI.parse(ENV.fetch('FRONTEND_URL', '')).host
|
|
|
|
@portal = Portal.find_by(custom_domain: domain)
|
|
return unless @portal
|
|
|
|
@locale = @portal.default_locale
|
|
request.variant = :documentation if @portal.layout == 'documentation'
|
|
load_home_data
|
|
render 'public/api/v1/portals/show', layout: 'portal', portal: @portal and return
|
|
end
|
|
|
|
def app_config
|
|
{
|
|
APP_VERSION: Chatwoot.config[:version],
|
|
VAPID_PUBLIC_KEY: VapidService.public_key,
|
|
ENABLE_ACCOUNT_SIGNUP: GlobalConfigService.load('ENABLE_ACCOUNT_SIGNUP', 'false'),
|
|
FB_APP_ID: GlobalConfigService.load('FB_APP_ID', ''),
|
|
INSTAGRAM_APP_ID: GlobalConfigService.load('INSTAGRAM_APP_ID', ''),
|
|
TIKTOK_APP_ID: GlobalConfigService.load('TIKTOK_APP_ID', ''),
|
|
FACEBOOK_API_VERSION: GlobalConfigService.load('FACEBOOK_API_VERSION', 'v18.0'),
|
|
WHATSAPP_APP_ID: GlobalConfigService.load('WHATSAPP_APP_ID', ''),
|
|
WHATSAPP_CONFIGURATION_ID: GlobalConfigService.load('WHATSAPP_CONFIGURATION_ID', ''),
|
|
IS_ENTERPRISE: ChatwootApp.enterprise?,
|
|
AZURE_APP_ID: GlobalConfigService.load('AZURE_APP_ID', ''),
|
|
GIT_SHA: GIT_HASH,
|
|
ALLOWED_LOGIN_METHODS: allowed_login_methods,
|
|
ACTIVE_PLATFORM_BANNERS: active_platform_banners
|
|
}
|
|
end
|
|
|
|
def active_platform_banners
|
|
return [] unless ChatwootApp.chatwoot_cloud?
|
|
|
|
PlatformBanner.active.order(created_at: :desc).as_json(only: %i[id banner_message banner_type updated_at])
|
|
end
|
|
|
|
def allowed_login_methods
|
|
methods = ['email']
|
|
methods << 'google_oauth' if GlobalConfigService.load('ENABLE_GOOGLE_OAUTH_LOGIN', 'true').to_s != 'false'
|
|
methods << 'saml' if ChatwootHub.pricing_plan != 'community' && GlobalConfigService.load('ENABLE_SAML_SSO_LOGIN', 'true').to_s != 'false'
|
|
methods
|
|
end
|
|
|
|
def set_application_pack
|
|
@application_pack = if request.path.include?('/auth') || request.path.include?('/login')
|
|
'v3app'
|
|
else
|
|
'dashboard'
|
|
end
|
|
end
|
|
end
|