- `Rails.root` is a `Pathname`, so let's use `Rails.root.join` - Clean up most of the remaining `File.join`s
173 lines
5.1 KiB
Ruby
173 lines
5.1 KiB
Ruby
# Copyright (c) 2010-2011, Diaspora Inc. This file is
|
|
# licensed under the Affero General Public License version 3 or later. See
|
|
# the COPYRIGHT file.
|
|
|
|
require 'uri'
|
|
require Rails.root.join('lib', 'enviroment_configuration')
|
|
|
|
class AppConfig < Settingslogic
|
|
def self.source_file_name
|
|
if ENV['application_yml'].present?
|
|
puts "using remote application.yml"
|
|
return ENV['application_yml']
|
|
end
|
|
config_file = Rails.root.join("config", "application.yml")
|
|
if !File.exists?(config_file) && (Rails.env == 'test' || Rails.env.include?("integration") || EnviromentConfiguration.heroku?)
|
|
config_file = Rails.root.join("config", "application.yml.example")
|
|
end
|
|
config_file
|
|
end
|
|
source source_file_name
|
|
namespace Rails.env
|
|
|
|
def self.load!
|
|
unless EnviromentConfiguration.heroku?
|
|
if no_config_file? && !have_old_config_file?
|
|
$stderr.puts <<-HELP
|
|
******** You haven't set up your Diaspora settings file. **********
|
|
Please do the following:
|
|
1. Copy config/application.yml.example to config/application.yml.
|
|
2. Have a look at the settings in that file. It has sensible defaults for development, which (we hope)
|
|
work without modification. However, it's always good to know what's available to change later.
|
|
3. Restart Diaspora!
|
|
******** Thanks for being an alpha tester! **********
|
|
HELP
|
|
Process.exit(1)
|
|
end
|
|
|
|
if ((no_config_file? && have_old_config_file?) || config_file_is_old_style?)
|
|
$stderr.puts <<-HELP
|
|
******** The Diaspora configuration file format has changed. **********
|
|
Please do the following:
|
|
1. Copy config/application.yml.example to config/application.yml.
|
|
2. Make any changes in config/application.yml that you previously made in config/app.yml or config/app_config.yml.
|
|
3. Delete config/app.yml and config/app_config.yml. Don't worry if they don't exist, though.
|
|
4. Restart Diaspora!
|
|
******** Thanks for being an alpha tester! **********
|
|
HELP
|
|
Process.exit(1)
|
|
end
|
|
end
|
|
|
|
begin
|
|
super
|
|
rescue TypeError
|
|
puts "Couldn't find section ''#{self.namespace}' in config/application.yml."
|
|
puts "Double check it's there and that you haven't set RAILS_ENV to something weired (check it for typos)"
|
|
Process.exit(1)
|
|
end
|
|
|
|
if !EnviromentConfiguration.heroku? && no_cert_file_in_prod?
|
|
$stderr.puts <<-HELP
|
|
******** Diaspora does not know where your SSL-CA-Certificates file is. **********
|
|
Please add the root certificate bundle (this is operating system specific) to application.yml. Defaults:
|
|
CentOS: '/etc/pki/tls/certs/ca-bundle.crt'
|
|
Debian: '/etc/ssl/certs/ca-certificates.crt'
|
|
|
|
Example:
|
|
ca_file: '/etc/ssl/certs/ca-certificates.crt'
|
|
******** Thanks for being secure! **********
|
|
HELP
|
|
Process.exit(1)
|
|
end
|
|
end
|
|
|
|
def self.setup!
|
|
normalize_pod_url
|
|
normalize_admins
|
|
normalize_pod_services
|
|
deprecate_hoptoad_api_key
|
|
end
|
|
|
|
def self.configured_services
|
|
self['configured_services'] || []
|
|
end
|
|
|
|
def self.config_file_is_old_style?
|
|
!(File.read(@source) =~ /^defaults: &defaults/)
|
|
end
|
|
|
|
def self.no_config_file?
|
|
!File.exists?(@source)
|
|
end
|
|
|
|
def self.no_cert_file_in_prod?
|
|
(Rails.env == "production") && (self[:ca_file].blank? || !File.exists?(self[:ca_file]))
|
|
end
|
|
|
|
def self.have_old_config_file?
|
|
File.exists?(Rails.root.join("config", "app.yml")) || (File.exists?(Rails.root.join("config", "app_config.yml")))
|
|
end
|
|
|
|
def self.new_relic_app_name
|
|
self[:new_relic_app_name] || self[:pod_uri].host
|
|
end
|
|
|
|
def self.normalize_pod_url
|
|
unless self[:pod_url] =~ /^(https?:\/\/)/ # starts with http:// or https://
|
|
self[:pod_url] = "http://#{self[:pod_url]}"
|
|
end
|
|
unless self[:pod_url] =~ /\/$/ # ends with slash
|
|
self[:pod_url] = "#{self[:pod_url]}/"
|
|
end
|
|
end
|
|
|
|
def self.bare_pod_uri
|
|
self[:pod_uri].authority.gsub('www.', '')
|
|
end
|
|
|
|
def self.normalize_admins
|
|
self[:admins] ||= []
|
|
self[:admins].collect! { |username| username.downcase }
|
|
end
|
|
|
|
def self.normalize_pod_services
|
|
self['configured_services'] = []
|
|
if defined?(SERVICES)
|
|
SERVICES.keys.each do |service|
|
|
unless SERVICES[service].keys.any?{|service_key| SERVICES[service][service_key].blank?}
|
|
self['configured_services'] << service
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
def deprecate_hoptoad_api_key
|
|
if self[:hoptoad_api_key].present?
|
|
$stderr.puts "WARNING: Please change hoptoad_api_key to airbrake_api_key in your application.yml"
|
|
self[:airbrake_api_key] = self[:hoptoad_api_key]
|
|
end
|
|
end
|
|
|
|
load!
|
|
|
|
def self.[] (key)
|
|
return self.pod_uri if key == :pod_uri
|
|
super
|
|
end
|
|
|
|
def self.[]= (key, value)
|
|
super
|
|
if key.to_sym == :pod_url
|
|
@@pod_uri = nil
|
|
normalize_pod_url
|
|
end
|
|
end
|
|
|
|
cattr_accessor :pod_uri
|
|
|
|
def self.pod_uri
|
|
if @@pod_uri.nil?
|
|
begin
|
|
@@pod_uri = Addressable::URI.parse(self[:pod_url])
|
|
rescue
|
|
puts "WARNING: pod url " + self[:pod_url] + " is not a legal URI"
|
|
end
|
|
end
|
|
return @@pod_uri
|
|
end
|
|
|
|
def self.single_process_mode?
|
|
(ENV['SINGLE_PROCESS'] == "true" || ENV['SINGLE_PROCESS_MODE'] == "true" || self[:single_process_mode]) ? true : false
|
|
end
|
|
end
|