Files
sx-fc/config/initializers/action_controller.rb
2020-06-19 12:02:32 +06:30

152 lines
4.0 KiB
Ruby

class ActionController::Base
before_action :lookup_domain if Rails.env.production?
before_action :set_locale
helper_method :current_license,
def not_found
respond_to do |format|
format.html { render :file => "#{Rails.root}/public/404", :layout => false, :status => :not_found }
format.json { head :not_found }
end
end
private
def lookup_domain
if ENV["SERVER_MODE"] == "cloud" && request.subdomains.last && request.subdomains.last != "www"
if license = cache_license # request.subdomain.downcase
logger.info "Location - " + license.dbschema
ActiveRecord::Base.establish_connection(website_connection(license))
else
# reconnect_default_db
logger.info 'License is nil'
not_found
end
elsif ENV["SERVER_MODE"] == "application" || request.subdomains.last && request.subdomains.last != "www"
# check for license file
if !current_license.exists?
redirect_to activate_path
elsif current_license.expired?
redirect_to review_license_path
end
else
not_found
end
end
def current_license
@license ||= License.new(ENV["SX_PROVISION_URL"], request.host)
end
def cache_license
if (current_license.detail_with_local_cache == true)
return current_license
else
return nil
end
end
def check_subdomain
current_license.check_license_subdomain
end
def check_installation
if current_company.nil?
redirect_to install_path
end
end
def website_connection(license)
default_connection.dup.update(:host => license.dbhost, :database => license.dbschema.to_s.downcase,
:username => license.dbusername, :password => license.dbpassword)
end
def reconnect_default_db
ActiveRecord::Base.establish_connection(Rails.env)
end
# Regular database.yml configuration hash
def default_connection
@default_config ||= ActiveRecord::Base.connection.instance_variable_get("@config").dup
end
#change locallization
def set_locale
I18n.locale = params[:locale] || I18n.default_locale
end
# RESTful url for localize
def default_url_options
{ locale: I18n.locale }
end
end
class ActionController::API
before_action :lookup_domain if Rails.env.production?
def not_found
respond_to do |format|
format.html { render :file => "#{Rails.root}/public/404", :layout => false, :status => :not_found }
format.json { head :not_found }
end
end
private
def lookup_domain
if ENV["SERVER_CODE"] == "cloud" && request.subdomains.last && request.subdomains.last != "www"
if license = cache_license # request.subdomain.downcase
logger.info "Location - " + license.dbschema
ActiveRecord::Base.establish_connection(website_connection(license))
else
# reconnect_default_db
logger.info 'License is nil'
not_found
end
elsif ENV["SERVER_MODE"] == "application" || (request.subdomains.last && request.subdomains.last != "www")
not_found unless current_license.exists? && !current_license.expired?
else
not_found
end
end
def current_license
@license ||= License.new(ENV["SX_PROVISION_URL"], request.host)
end
def cache_license
if (current_license.detail_with_local_cache == true)
return current_license
else
return nil
end
end
def website_connection(license)
default_connection.dup.update(:host => license.dbhost, :database => license.dbschema.to_s.downcase,
:username => license.dbusername, :password => license.dbpassword)
end
def reconnect_default_db
ActiveRecord::Base.establish_connection(Rails.env)
end
# Regular database.yml configuration hash
def default_connection
@default_config ||= ActiveRecord::Base.connection.instance_variable_get("@config").dup
end
#change locallization
def set_locale
I18n.locale = params[:locale] || I18n.default_locale
end
# RESTful url for localize
def default_url_options
{ locale: I18n.locale }
end
end