152 lines
3.9 KiB
Ruby
152 lines
3.9 KiB
Ruby
class ActionController::Base
|
|
before_action :lookup_domain
|
|
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
|