class CamaleonCms::CamaleonController < ApplicationController add_flash_types :warning add_flash_types :error add_flash_types :notice add_flash_types :info include CamaleonCms::CamaleonHelper include CamaleonCms::SessionHelper include CamaleonCms::SiteHelper include CamaleonCms::HtmlHelper include CamaleonCms::UserRolesHelper include CamaleonCms::ShortCodeHelper include CamaleonCms::PluginsHelper include CamaleonCms::ThemeHelper include CamaleonCms::HooksHelper include CamaleonCms::ContentHelper include CamaleonCms::CaptchaHelper include CamaleonCms::UploaderHelper include CamaleonCms::EmailHelper include Mobu::DetectMobile PluginRoutes.all_helpers.each{|h| include h.constantize } before_action :cama_site_check_existence, except: [:render_error, :captcha] before_action :cama_before_actions, except: [:render_error, :captcha] after_action :cama_after_actions, except: [:render_error, :captcha] # Prevent CSRF attacks by raising an exception. # For APIs, you may want to use :null_session instead. # Skip forgery check on .js files located in /assets/ to avoid CORS errors # caused by requests for non-existent files. protect_from_forgery with: :exception, unless: -> { request.fullpath.match(/\A\/assets\/.*\.js\z/) } layout Proc.new { |controller| controller.request.xhr? ? false : 'default' } helper_method :current_user # show page error def render_error(status = 404, exception = nil, message = "") Rails.logger.debug "Camaleon CMS - 404 url: #{request.original_url rescue nil} ==> message: #{exception.message if exception.present?} ==> #{params[:error_msg]} ==> #{caller.inspect}" @message = "#{message} #{params[:error_msg] || (exception.present? ? "#{exception.message}

#{caller.inspect}" : "")}" @message = "" if Rails.env == "production" render "camaleon_cms/#{status}", :status => status end # generate captcha image def captcha image = cama_captcha_build(params[:len]) send_data image.to_blob, :type => image.mime_type, :disposition => 'inline' end private def cama_before_actions # including all helpers (system, themes, plugins) for this site # PluginRoutes.enabled_apps(current_site, current_theme.slug).each{|plugin| plugin_load_helpers(plugin) } # initializing short codes shortcodes_init() # initializing before and after contents cama_html_helpers_init # initializing before and after contents cama_content_init @_hooks_skip = [] # trigger all hooks before_load_app hooks_run("app_before_load") request.env.except!('HTTP_X_FORWARDED_HOST') if request.env['HTTP_X_FORWARDED_HOST'] # just drop the variable views_dir = "app/apps/" self.prepend_view_path(File.join($camaleon_engine_dir, views_dir).to_s) self.prepend_view_path(Rails.root.join(views_dir).to_s) CamaleonCms::PostDefault.current_user = cama_current_user CamaleonCms::PostDefault.current_site = current_site end # initialize ability for current user def current_ability @current_ability ||= CamaleonCms::Ability.new(cama_current_user, current_site) end def cama_after_actions # trigger all actions app after load hooks_run("app_after_load") end # redirect to sessions login form when the session was expired. def auth_session_error redirect_to cama_root_path end # check if current site exist, if not, this will be redirected to main domain # Also, check current site status def cama_site_check_existence() if !current_site.present? if Cama::Site.main_site.present? redirect_to Cama::Site.main_site.decorate.the_url else redirect_to cama_admin_installers_path end elsif (cama_current_user.present? && !cama_current_user.admin?) || !cama_current_user.present? # inactive page control if current_site.is_inactive? if request.original_url.to_s.match /\A#{current_site.the_url}admin(\/|\z)/ if cama_current_user.present? cama_logout_user flash[:error] = ('Site is Inactive') end else p = current_site.posts.find_by_id(current_site.get_option('page_inactive')).try(:decorate) if p redirect_to(p.the_url) unless params == {"controller"=>"camaleon_cms/frontend", "action"=>"post", "slug"=>p.the_slug} else render html: 'This site was inactivated. Please contact to administrator.' end end end # maintenance page and IP's control if current_site.is_maintenance? && !current_site.get_option('maintenance_ips', '').split(',').include?(request.remote_ip) p = current_site.posts.find_by_id(current_site.get_option('page_maintenance')).try(:decorate) if p redirect_to(p.the_url) if params != {"controller"=>"camaleon_cms/frontend", "action"=>"post", "slug"=>p.the_slug} else render html: 'This site is in maintenance mode. Please contact to administrator.' end end end end unless ApplicationController.method_defined?(:current_user) def current_user cama_current_user end end end