# encoding: utf-8 module LocalPac module App class ApplicationController < Sinatra::Base @local_storage_mutex = Mutex.new class << self attr_reader :local_storage_mutex end set :root, ::File.expand_path('../../', __FILE__) set :haml, :format => :html5 def local_storage return @local_storage if @local_storage ApplicationController.local_storage_mutex.synchronize do if settings.respond_to? :local_storage LocalPac.ui_logger.debug 'Using local storage in production mode: loaded once on startup' @local_storage = settings.local_storage else LocalPac.ui_logger.debug 'Using local storage in development mode: reloaded per request' @local_storage = LocalPac::LocalStorage.new end end end use Rack::Deflater use Rack::Locale use Rack::NestedParams use Rack::PostBodyContentTypeParser not_found do @error_summary = I18n.t('errors.unknown_proxy_pac.summary') @error_details = I18n.t('errors.unknown_proxy_pac.details', name: env['PATH_INFO']) halt 404, haml(:error, layout: :application) end error do @error_summary = I18n.t('errors.default.summary') @error_details = I18n.t('errors.default.details') halt 500, haml(:error, layout: :application) end error Exceptions::GivenUrlInvalid do @error_summary = I18n.t('errors.invalid_url.summary') @error_details = I18n.t('errors.invalid_url.details', url: env['sinatra.error'].message) halt 401, haml(:error, layout: :application) end set :raise_sinatra_param_exceptions, true error Sinatra::Param::InvalidParameterError do @error_summary = I18n.t('errors.invalid_parameter.summary') @error_details = I18n.t('errors.invalid_parameter.details', parameter: env['sinatra.error'].param) halt 401, haml(:error, layout: :application) end configure :profile do require 'ruby-prof' use Rack::RubyProf, files: '/tmp/profiles' use Rack::CommonLogger, LocalPac::AccessLogger.new(LocalPac.config.access_log) set :raise_errors, false set :local_storage, LocalPac::LocalStorage.new end configure :production do use Rack::CommonLogger, LocalPac::AccessLogger.new(LocalPac.config.access_log) set :raise_errors, false set :local_storage, LocalPac::LocalStorage.new end configure :development do set :raise_errors, true before do LocalPac.ui_logger.debug "Parameters: " + params.to_s end end configure :test do use Rack::CommonLogger, LocalPac::NullAccessLogger.new set :raise_errors, false end configure do mime_type :proxy_pac_file, 'application/x-ns-proxy-autoconfig' I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks) I18n.load_path = Dir[::File.join(settings.root, 'locales', '*.yml')] I18n.backend.load_translations I18n.enforce_available_locales = true end helpers do include Sprockets::Helpers def h(text) Rack::Utils.escape_html(text) end def t(*args) I18n.t(*args) end end end end end