diff --git a/.gitignore b/.gitignore index ea3e8de3..4d5fd427 100644 --- a/.gitignore +++ b/.gitignore @@ -31,3 +31,8 @@ pickle-email-*.html /doc/app .ruby-version .vagrant/ +.env +.env.production +.env.development +.env.test +.env.local diff --git a/.travis.yml b/.travis.yml index 050f1f04..f380c1b9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -18,8 +18,6 @@ notifications: on_failure: change before_script: - cp config/database.yml.example config/database.yml - - cp config/config.yml.example config/config.yml - - cp config/secrets.yml.example config/secrets.yml - RAILS_ENV=test bundle exec rake db:migrate --trace script: - 'bundle exec rubocop -Dc .rubocop.yml' diff --git a/Gemfile b/Gemfile index 0bf0e035..93505e29 100644 --- a/Gemfile +++ b/Gemfile @@ -8,6 +8,11 @@ end # as web framework gem 'rails', '~> 4.2' +# enables serving assets in production and setting your logger to standard out +# both of which are required to run an application on a twelve-factor provider +# like heroku.com +gem 'rails_12factor', group: :production + # respond_to methods have been extracted to the responders gem # http://edgeguides.rubyonrails.org/upgrading_ruby_on_rails.html#responders gem 'responders', '~> 2.0' @@ -166,6 +171,10 @@ gem 'ruby-oembed' # for uploading images to the cloud gem 'cloudinary' +# for setting app configuration in the environment +gem 'dotenv-rails' + +# Use guard and spring for testing in development group :development do # to launch specs when files are modified gem 'guard-rspec', '~> 4.2.8' diff --git a/Gemfile.lock b/Gemfile.lock index 02c56dec..95f4f966 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -162,6 +162,10 @@ GEM docile (1.1.5) domain_name (0.5.20160310) unf (>= 0.0.5, < 1.0.0) + dotenv (2.1.1) + dotenv-rails (2.1.1) + dotenv (= 2.1.1) + railties (>= 4.0, < 5.1) erubis (2.7.0) execjs (2.6.0) factory_girl (4.5.0) @@ -372,6 +376,11 @@ GEM railties (~> 4.0) rails-observers (0.1.2) activemodel (~> 4.0) + rails_12factor (0.0.3) + rails_serve_static_assets + rails_stdout_logging + rails_serve_static_assets (0.0.4) + rails_stdout_logging (0.0.3) railties (4.2.5.2) actionpack (= 4.2.5.2) activesupport (= 4.2.5.2) @@ -539,6 +548,7 @@ DEPENDENCIES delayed_job_active_record devise devise_ichain_authenticatable + dotenv-rails factory_girl_rails font-awesome-rails formtastic (~> 3.1.1) @@ -581,6 +591,7 @@ DEPENDENCIES rails-assets-waypoints! rails-i18n (~> 4.0.0) rails-observers + rails_12factor rdoc-generator-fivefish redcarpet responders (~> 2.0) diff --git a/INSTALL.md b/INSTALL.md index be33e189..a38ef13e 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -5,7 +5,33 @@ base operating systems. [Check Google](https://encrypted.google.com/search?hl=en For more information about rails and what it can do, see the [rails guides.](http://guides.rubyonrails.org/getting_started.html) -## Dependency for ImageMagick +## Configuring OSEM +There are a couple of environment variables you can set to configure OSEM. + +| Variable | Content | Purpose | +|---------- |--------- |--------- | +| OSEM_NAME | openSUSE Events | The name of your page | +| OSEM_HOSTNAME | events.opensuse.org | The host this OSEM instance runs on | +| OSEM_EMAIL_ADDRESS | events@opensuse.org | The address OSEM uses for sending mails | +| OSEM_ICHAIN_ENABLED | true/false | Enable the usage of [devise_ichain_authenticatable](https://github.com/openSUSE/devise_ichain_authenticatable) | +| OSEM_TRANSIFEX_APIKEY | *string* | Use this api key for [transifex](https://www.transifex.com/). See TRANSLATION.md for details. | +| OSEM_ERRBIT_HOST | errbit.opensuse.org | The [errbit](https://github.com/errbit/errbit) host to post exceptions to | +| OSEM_ERRBIT_APIKEY | *string* | The api key for the errbit host | +| OSEM_FACTORY_LINT | *boolean* (true/false) | Setting this to false will disable linting of factories before running spec +| OSEM_GOOGLE_KEY/OSEM_GOOGLE_SECRET | *string* | OMNIAUTH Developer Keys/Secrets for GOOGLE +| OSEM_FACEBOOK_KEY/OSEM_FACEBOOK_SECRET | *string* | OMNIAUTH Developer Keys/Secrets for Facebook +| OSEM_GITHUB_KEY/OSEM_GITHUB_SECRET |*string* | OMNIAUTH Developer Keys/Secrets for GitHub +| OSEM_SMTP_ADDRESS | smtp.opensuse.org | The smtp server to use +| OSEM_SMTP_PORT | *int* | The port on the smtp server +| OSEM_SMTP_USERNAME | *string* | The user for the smtp server +| OSEM_SMTP_PASSWORD | *string* | The password for the smtp server +| OSEM_SMTP_AUTHENTICATION | plain, login or cram_md5 | The auth method for the smtp server +| OSEM_SMTP_DOMAIN | opensuse.org | The HELO domain for the smtp server +| CLOUDINARY_URL | *sting* | Configure your cloudinary.com cloud name and api key/secret + +## Dependencies + +### ImageMagick We use [ImageMagick](http://imagemagick.org/) for image manipulation so it needs to be available in your installation. If you would like to resize exisiting logos in your OSEM installation you can do so by running the following rake task: @@ -13,11 +39,11 @@ If you would like to resize exisiting logos in your OSEM installation you can do $ bundle exec rake logo:reprocess ``` -## Using openID +### openID In order to use [openID](http://openid.net/) logins for your OSEM installation you need to register your application with the providers ([Google](https://code.google.com/apis/console#:access), [GitHub](https://github.com/settings/applications/new) or [Facebook](https://developers.facebook.com/)) and enter their API keys in `config/secrets.yml` file, changing the existing sample values. - ## Recurring Jobs +======= Open a separate terminal and go into the directory where the rails app is present, and type the following to start the delayed_jobs worker for sending email notifications. ``` bundle exec rake jobs:work diff --git a/app/controllers/conference_registrations_controller.rb b/app/controllers/conference_registrations_controller.rb index a16659a2..6bf79202 100644 --- a/app/controllers/conference_registrations_controller.rb +++ b/app/controllers/conference_registrations_controller.rb @@ -13,7 +13,7 @@ class ConferenceRegistrationsController < ApplicationController redirect_to edit_conference_conference_registrations_path(@conference.short_title) return # ichain does not allow us to create users during registration - elsif CONFIG['authentication']['ichain']['enabled'] && !current_user + elsif (ENV['OSEM_ICHAIN_ENABLED'] == 'true') && !current_user redirect_to root_path, alert: 'You need to sign in or sign up before continuing.' return end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index a2bec3a7..e04b902d 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -274,8 +274,10 @@ module ApplicationHelper unless Rails.application.secrets.send(provider_key).blank? || Rails.application.secrets.send(provider_secret).blank? providers << provider end + providers << provider if !ENV["OSEM_#{provider.upcase}_KEY"].blank? && !ENV["OSEM_#{provider.upcase}_SECRET"].blank? end - return providers + + return providers.uniq end # Receives a hash, generated from User model, function get_roles @@ -294,7 +296,7 @@ module ApplicationHelper end def sign_in_path - if CONFIG['authentication']['ichain']['enabled'] + if ENV['OSEM_ICHAIN_ENABLED'] == 'true' new_user_ichain_session_path else new_user_session_path @@ -302,7 +304,7 @@ module ApplicationHelper end def sign_up_path - if CONFIG['authentication']['ichain']['enabled'] + if ENV['OSEM_ICHAIN_ENABLED'] == 'true' new_user_ichain_registration_path else new_user_registration_path diff --git a/app/models/ability.rb b/app/models/ability.rb index e3d34ec8..3570c90b 100644 --- a/app/models/ability.rb +++ b/app/models/ability.rb @@ -45,7 +45,7 @@ class Ability # can view Commercials of confirmed Events can :show, Commercial, commercialable_type: 'Event', commercialable_id: Event.where(state: 'confirmed').pluck(:id) can [:show, :create], User - unless CONFIG['authentication']['ichain']['enabled'] + unless ENV['OSEM_ICHAIN_ENABLED'] == 'true' can :show, Registration do |registration| registration.new_record? end diff --git a/app/models/email_settings.rb b/app/models/email_settings.rb index 7390ba93..af4579b2 100644 --- a/app/models/email_settings.rb +++ b/app/models/email_settings.rb @@ -9,12 +9,12 @@ class EmailSettings < ActiveRecord::Base 'conference_start_date' => conference.start_date, 'conference_end_date' => conference.end_date, 'registrationlink' => Rails.application.routes.url_helpers.conference_conference_registrations_url( - conference.short_title, host: CONFIG['url_for_emails']), + conference.short_title, host: (ENV['OSEM_HOSTNAME'] || 'localhost:3000')), 'conference_splash_link' => Rails.application.routes.url_helpers.conference_url( - conference.short_title, host: CONFIG['url_for_emails']), + conference.short_title, host: (ENV['OSEM_HOSTNAME'] || 'localhost:3000')), 'schedule_link' => Rails.application.routes.url_helpers.schedule_conference_url( - conference.short_title, host: CONFIG['url_for_emails']) + conference.short_title, host: (ENV['OSEM_HOSTNAME'] || 'localhost:3000')) } if conference.program.cfp @@ -41,7 +41,7 @@ class EmailSettings < ActiveRecord::Base if event h['eventtitle'] = event.title h['proposalslink'] = Rails.application.routes.url_helpers.conference_program_proposal_index_url( - conference.short_title, host: CONFIG['url_for_emails']) + conference.short_title, host: (ENV['OSEM_HOSTNAME'] || 'localhost:3000')) end h end diff --git a/app/models/user.rb b/app/models/user.rb index 3586834e..d3c847a2 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -19,7 +19,7 @@ class User < ActiveRecord::Base # :lockable, :timeoutable and :omniauthable devise_modules = [] - if CONFIG['authentication']['ichain']['enabled'] + if ENV['OSEM_ICHAIN_ENABLED'] == 'true' devise_modules += [ :ichain_authenticatable, :ichain_registerable, :omniauthable, omniauth_providers: [] ] else devise_modules += [:database_authenticatable, :registerable, diff --git a/app/views/conference_registrations/_form.html.haml b/app/views/conference_registrations/_form.html.haml index 53ad4a29..33cfb755 100644 --- a/app/views/conference_registrations/_form.html.haml +++ b/app/views/conference_registrations/_form.html.haml @@ -11,7 +11,7 @@ %legend %span =link_to('#signup', role: 'tab', "aria-controls" => "home", "data-toggle" => "tab") do - = CONFIG['name'] + = ENV['OSEM_NAME'] || 'OSEM' Account %span.pull-right#account-already =link_to('#signin', role: 'tab', "aria-controls" => "home", "data-toggle" => "tab") do diff --git a/app/views/devise/shared/_sign_in_form_embedded.html.haml b/app/views/devise/shared/_sign_in_form_embedded.html.haml index 43704315..e08ece92 100644 --- a/app/views/devise/shared/_sign_in_form_embedded.html.haml +++ b/app/views/devise/shared/_sign_in_form_embedded.html.haml @@ -1,4 +1,4 @@ -- if !CONFIG['authentication']['ichain']['enabled'] +- if ENV['OSEM_ICHAIN_ENABLED'] == 'true' = form_tag(new_user_session_path, class: 'form-horizontal') do %legend %span diff --git a/app/views/layouts/_navigation.html.haml b/app/views/layouts/_navigation.html.haml index e94a0c92..5b76ac0e 100644 --- a/app/views/layouts/_navigation.html.haml +++ b/app/views/layouts/_navigation.html.haml @@ -7,7 +7,7 @@ %span.icon-bar %span.icon-bar %span.icon-bar - = link_to CONFIG['name'], root_path, class: 'navbar-brand', title: 'Open Source Event Manager' + = link_to (ENV['OSEM_NAME'] || 'OSEM'), root_path, class: 'navbar-brand', title: 'Open Source Event Manager' .collapse.navbar-collapse - if content_for :splash_nav %ul.nav.navbar-nav#splash-nav @@ -43,7 +43,7 @@ %li= link_to 'See all Comments', admin_comments_path(anchor: 'all_comments') - else %ul.nav.navbar-nav.navbar-right - - if CONFIG['authentication']['ichain']['enabled'] + - if ENV['OSEM_ICHAIN_ENABLED'] == 'true' %li{:class=> "#{active_nav_li(new_ichain_registration_path('user'))}"} = link_to(new_ichain_registration_path('user')) do %span.fa.fa-heart @@ -59,7 +59,7 @@ Sign In %span.caret .dropdown-menu{:style => "padding: 17px; min-width: 225px;"} - - if CONFIG['authentication']['ichain']['enabled'] + - if ENV['OSEM_ICHAIN_ENABLED'] == 'true' = form_tag User.ichain_login_url do = text_field_tag 'username', nil, id: 'user_ichain_email_dd', placeholder: 'Username' = password_field_tag 'password', nil, id: 'user_ichain_password_dd', placeholder: 'Password' diff --git a/app/views/layouts/_user_menu.html.haml b/app/views/layouts/_user_menu.html.haml index 24808027..26f02b5a 100644 --- a/app/views/layouts/_user_menu.html.haml +++ b/app/views/layouts/_user_menu.html.haml @@ -1,4 +1,4 @@ -- unless CONFIG['authentication']['ichain']['enabled'] +- unless ENV['OSEM_ICHAIN_ENABLED'] == 'true' %li = link_to(edit_user_registration_path) do %span.fa.fa-wrench @@ -13,7 +13,7 @@ %span.fa.fa-comment My Submissions %li - - if CONFIG['authentication']['ichain']['enabled'] + - if ENV['OSEM_ICHAIN_ENABLED'] == 'true' = link_to(destroy_user_ichain_session_path, :method=>'delete') do %span.fa.fa-minus Sign out diff --git a/app/views/layouts/application.html.haml b/app/views/layouts/application.html.haml index 8220dab3..893198fa 100644 --- a/app/views/layouts/application.html.haml +++ b/app/views/layouts/application.html.haml @@ -2,7 +2,7 @@ %head %meta{:charset => "utf-8"} %meta{:name => "viewport", :content => "width=device-width, initial-scale=1, maximum-scale=1"} - %title= content_for?(:title) ? yield(:title) : CONFIG['name'] + %title= content_for?(:title) ? yield(:title) : (ENV['OSEM_NAME'] || 'OSEM') %meta{:content => "", :name => "description"} %meta{:content => "", :name => "author"} = stylesheet_link_tag "application", :media => "all" @@ -11,7 +11,7 @@ = csrf_meta_tags :javascript window.liveSettings = { - api_key: "#{CONFIG['transifex_live_api_key']}", + api_key: "#{ENV['OSEM_TRANSIFEX_APIKEY']}", picker: "bottom-right", detectlang: true, autocollect: true diff --git a/app/views/layouts/schedule.html.haml b/app/views/layouts/schedule.html.haml index f1f726ed..d5dfaf8c 100644 --- a/app/views/layouts/schedule.html.haml +++ b/app/views/layouts/schedule.html.haml @@ -3,7 +3,7 @@ %head %meta{:charset => "utf-8"} %meta{:name => "viewport", :content => "width=device-width, initial-scale=1, maximum-scale=1"} - %title= content_for?(:title) ? yield(:title) : CONFIG['name'] + %title= content_for?(:title) ? yield(:title) : (ENV['OSEM_NAME'] || 'OSEM') %meta{:content => "", :name => "description"} %meta{:content => "", :name => "author"} = stylesheet_link_tag "/stylesheets/schedule/jquery-ui-1.9.2.custom.min" @@ -17,4 +17,4 @@ = yield(:head) %body .content - = yield \ No newline at end of file + = yield diff --git a/app/views/proposal/new.html.haml b/app/views/proposal/new.html.haml index 37e89b94..37e415f7 100644 --- a/app/views/proposal/new.html.haml +++ b/app/views/proposal/new.html.haml @@ -12,7 +12,7 @@ %legend %span =link_to('#signup', role: 'tab', 'aria-controls' => 'home', 'data-toggle' => 'tab') do - = CONFIG['name'] + = ENV['OSEM_NAME'] || 'OSEM' Account %span.pull-right#account-already =link_to('#signin', role: 'tab', 'aria-controls' => 'home', 'data-toggle' => 'tab') do diff --git a/bootstrap.sh b/bootstrap.sh index 7ef62f4a..9bebd04d 100644 --- a/bootstrap.sh +++ b/bootstrap.sh @@ -15,24 +15,6 @@ gem install bundler echo -e "\ninstalling your bundle...\n" su - vagrant -c "cd /vagrant/; bundle install --quiet" -# Configure the app if it isn't -if [ ! -f /vagrant/config/config.yml ] && [ -f /vagrant/config/config.yml.example ]; then - echo "Configuring your app in config/options.yml..." - cp config/config.yml.example config/config.yml -else - echo -e "\n\nWARNING: You have already configured your app in config/options.yml." - echo -e "WARNING: Please make sure this configuration works in this vagrant box!\n\n" -fi - -# Configure the app if it isn't -if [ ! -f /vagrant/config/secrets.yml ] && [ -f /vagrant/config/secrets.yml.example ]; then - echo "Configuring your secrets in config/secrets.yml..." - cp config/secrets.yml.example config/secrets.yml -else - echo -e "\n\nWARNING: You have already configured your secrets in config/secrets.yml." - echo -e "WARNING: Please make sure this configuration works in this vagrant box!\n\n" -fi - # Configure the database if it isn't if [ ! -f /vagrant/config/database.yml ] && [ -f /vagrant/config/database.yml.example ]; then echo -e "\nSetting up your database from config/database.yml...\n" diff --git a/config/config.yml.example b/config/config.yml.example deleted file mode 100644 index 0e46666b..00000000 --- a/config/config.yml.example +++ /dev/null @@ -1,41 +0,0 @@ -defaults: &defaults - # The name of your instance - name: OSEM - # The sender address of emails - sender_for_emails: "no-reply@localhost" - # The hostname to be used when building the URL in the emails - url_for_emails: "localhost:3000" - # errbit configuration, get your own instance: https://github.com/errbit/errbit - #errbit_key: See config/secrets.yml - #errbit_host: errbit.exmaple.com - # These are the currently supported commercial types for conference and events - - # If you want to use iChain to handle registration and authentication enable the next lines - authentication: - ichain: - enabled: false - - # Set it to false if you don't want FactoryGirl lint to run before every test suit. - # You can run lint manually with: bundle exec rake factory_girl:lint - factory_girl_lint: true - -development: - <<: *defaults - -test: - <<: *defaults - -production: - <<: *defaults - - # If you add more providers that do not require a key, you still have to create the 2 variables with sample data - - transifex_live_api_key: '' - - # Set the smtp configuration of your service provider - # For further details of each configuration checkout: http://guides.rubyonrails.org/action_mailer_basics.html#action-mailer-configuration - mail_address: 'smtp.host.com' - mail_port: 587 - mail_username: 'username@host.com' - mail_password: 'password' - mail_authentication: 'plain' diff --git a/config/deploy.rb b/config/deploy.rb index 4821ea37..7ac957c4 100644 --- a/config/deploy.rb +++ b/config/deploy.rb @@ -10,7 +10,7 @@ set :repository, 'https://github.com/openSUSE/osem.git' # Manually create these paths in shared/ (eg: shared/config/database.yml) in your server. # They will be linked in the 'deploy:link_shared_paths' step. -set :shared_paths, %w{ config/database.yml log public/system config/secrets.yml config/config.yml config/piwik.yml tmp} +set :shared_paths, %w{ config/database.yml log public/system config/secrets.yml config/piwik.yml tmp} task setup: :environment do queue! %[mkdir -p "#{deploy_to}/shared/log"] diff --git a/config/environment.rb b/config/environment.rb index 0e52b624..dc8ed0e0 100644 --- a/config/environment.rb +++ b/config/environment.rb @@ -3,11 +3,18 @@ require File.expand_path('../application', __FILE__) # Load the configuration file path = Rails.root.join('config', 'config.yml') -begin - CONFIG = YAML.load_file(path)[Rails.env] -rescue - puts "Error while parsing config file #{path}" - CONFIG = {} +if File.exist?(path) + puts " + +WARNING: The OSEM configuration file + +#{path} + +is deprecated. Please use the environment variables +explained in INSTALL.md instead. + + +" end # Initialize the rails application diff --git a/config/environments/development.rb b/config/environments/development.rb index 14a74d8a..61d9fd57 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -35,7 +35,10 @@ Osem::Application.configure do config.eager_load = false # Set the detault url for action mailer - config.action_mailer.default_url_options = { host: CONFIG['url_for_emails'] } + config.action_mailer.default_url_options = { host: (ENV['OSEM_HOSTNAME'] || 'localhost:3000') } + + # Set the secret key base if it's not set via other means + config.secret_key_base ||= 'f4be765bc98e516de82ac01daa8f8aa11c5ca13cb6c911887851ac89457b6c0b056b2361a21b5c08926c9386e0f91eef84fc0b103d522bf00bc0c78ea8ce7c58' # Use omniauth mock credentials OmniAuth.config.test_mode = true diff --git a/config/environments/production.rb b/config/environments/production.rb index 530b821b..d2b43a46 100644 --- a/config/environments/production.rb +++ b/config/environments/production.rb @@ -67,15 +67,20 @@ Osem::Application.configure do config.active_support.deprecation = :notify # Set the detault url for action mailer - config.action_mailer.default_url_options = { host: CONFIG['url_for_emails'] } + config.action_mailer.default_url_options = { host: (ENV['OSEM_HOSTNAME'] || 'localhost:3000') } # Set the smtp configuration of your service provider # For further details of each configuration checkout: http://guides.rubyonrails.org/action_mailer_basics.html#action-mailer-configuration config.action_mailer.smtp_settings = { - address: CONFIG['MAIL_ADDRESS'], - port: CONFIG['MAIL_PORT'], - user_name: CONFIG['MAIL_USERNAME'], - password: CONFIG['MAIL_PASSWORD'], - authentication: CONFIG['MAIL_AUTHENTICATION'] + address: ENV['OSEM_SMTP_ADDRESS'], + port: ENV['OSEM_SMTP_PORT'], + user_name: ENV['OSEM_SMTP_USERNAME'], + password: ENV['OSEM_SMTP_PASSWORD'], + authentication: ENV['OSEM_SMTP_AUTHENTICATION'].try(:to_sym), + domain: ENV['OSEM_SMTP_DOMAIN'], + enable_starttls_auto: true } + + # Set the secret_key_base from the env, if not set by any other means + config.secret_key_base ||= ENV["SECRET_KEY_BASE"] end diff --git a/config/environments/test.rb b/config/environments/test.rb index 42d753ee..68c74dab 100644 --- a/config/environments/test.rb +++ b/config/environments/test.rb @@ -41,6 +41,9 @@ Osem::Application.configure do # Do not perform deliveries on test config.action_mailer.perform_deliveries = false + # Set the secret key base if it's not set via other means + config.secret_key_base ||= 'f4be765bc98e516de82ac01daa8f8aa11c5ca13cb6c911887851ac89457b6c0b056b2361a21b5c08926c9386e0f91eef84fc0b103d522bf00bc0c78ea8ce7c58' + config.after_initialize do ActiveRecord::Base.logger = nil # Set Time.now to May 1, 2014 00:01:00 AM (at this instant), but allow it to move forward diff --git a/config/initializers/devise.rb b/config/initializers/devise.rb index 3312206f..1de0259a 100644 --- a/config/initializers/devise.rb +++ b/config/initializers/devise.rb @@ -2,24 +2,21 @@ # Many of these configuration options can be set straight in your model. Devise.setup do |config| - # ==> Secret key, generate one with `rake secret` - config.secret_key = Rails.application.secrets.devise_secret_key - # ==> openIDs configuration # Define the available openID providers that can be used to log in # Pass each provider to User model in :omniauth_providers (for open_id providers use their name) config.omniauth :open_id, name: 'suse', identifier: 'http://www.opensuse.org/openid/user' - config.omniauth :google_oauth2, Rails.application.secrets.google_key, Rails.application.secrets.google_secret, + config.omniauth :google_oauth2, (ENV['OSEM_GOOGLE_KEY'] || Rails.application.secrets.google_key), (ENV['OSEM_GOOGLE_SECRET'] || Rails.application.secrets.google_secret), name: 'google', scope: 'email' - config.omniauth :facebook, Rails.application.secrets.facebook_key, Rails.application.secrets.facebook_secret - config.omniauth :github, Rails.application.secrets.github_key, Rails.application.secrets.github_secret + config.omniauth :facebook, (ENV['OSEM_FACEBOOK_KEY'] || Rails.application.secrets.facebook_key), (ENV['OSEM_FACEBOOK_SECRET'] || Rails.application.secrets.facebook_secret) + config.omniauth :github, (ENV['OSEM_GITHUB_KEY'] || Rails.application.secrets.github_key), (ENV['OSEM_GITHUB_SECRET'] || Rails.application.secrets.github_secret) # ==> Mailer Configuration # Configure the e-mail address which will be shown in Devise::Mailer, # note that it will be overwritten if you use your own mailer class with default "from" parameter. - config.mailer_sender = CONFIG['sender_for_emails'] + config.mailer_sender = ENV['OSEM_EMAIL_ADDRESS'] || 'no-reply@localhost' # Configure the class responsible to send e-mails. # config.mailer = "Devise::Mailer" diff --git a/config/initializers/hoptoad.rb b/config/initializers/hoptoad.rb index 813dc3b0..992a53e7 100644 --- a/config/initializers/hoptoad.rb +++ b/config/initializers/hoptoad.rb @@ -1,7 +1,7 @@ HoptoadNotifier.configure do |config| # Change this to some sensible data for your errbit instance - config.api_key = Rails.application.secrets.errbit_key || '' - config.host = Rails.application.secrets.errbit_host || '' + config.api_key = ENV['OSEM_ERRBIT_APIKEY'] || Rails.application.secrets.errbit_key || '' + config.host = ENV['OSEM_ERRBIT_HOST'] if config.api_key.blank? || config.host.blank? config.development_environments = 'production development test' else diff --git a/config/routes.rb b/config/routes.rb index 5c0b3858..5882a854 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,6 +1,6 @@ Osem::Application.routes.draw do - if CONFIG['authentication']['ichain']['enabled'] + if ENV['OSEM_ICHAIN_ENABLED'] == 'true' devise_for :users, controllers: { registrations: :registrations } else devise_for :users, diff --git a/config/secrets.yml.example b/config/secrets.yml.example index 5f97b833..308bc858 100644 --- a/config/secrets.yml.example +++ b/config/secrets.yml.example @@ -1,18 +1,9 @@ -defaults: &defaults - # You can generate secret keys with 'rake secret' - - # For rails cookies - secret_key_base: '12345' - - # For devise login tokens - devise_secret_key: '12345' - - # Your errbit API key - # errbit_key: '12345' - development: - <<: *defaults - # Sample data so that mocks work + # Generate your own with rake secret + # secret_key_base: '12345' + + ########## OMNIAUTH Providers ########## + # This is just sample data so mocks work google_key: 'sample' google_secret: 'sample' @@ -23,33 +14,45 @@ development: suse_secret: 'sample' test: - <<: *defaults + # Generate your own with rake secret + # secret_key_base: '12345' production: - <<: *defaults - # Leave the variables' names empty, unless you use the providers, in which case you need to - # register your applicaton and add the actual keys. + # Generate your own with rake secret or use the environment + # secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> - # If you add more providers, keep the format of the variables: provider_key, provider_secret + # Your errbit API key + # errbit_key: '12345' - # Register your appllication with Google from https://code.google.com/apis/console#:access + ########## OMNIAUTH Providers ########## + # Leave the variables' names empty, unless you use the providers, in which + # case you need to register your applicaton and add the actual keys. + # + # If you add a provider, keep the format of the variables: + # *provider*_key and *provider*_secret + + # If you add a provider that does not require a key, you still have to + # create the 2 variables with sample data or they won't show up in the app. + + # Register your appllication with Google from + # https://code.google.com/apis/console#:access google_key: '' google_secret: '' - # Register your application with Facebook from https://developers.facebook.com/ + # Register your application with Facebook from + # https://developers.facebook.com/ facebook_key: '' facebook_secret: '' - # Developers do not need to register their application for suse account to work. - # You must, however, add some sample value to the variables, for the login option to appear. - # For example: + # Developers do not need to register their application for suse account to + # work. You must, however, add some sample value to the variables, for the + # login option to appear. For example: #suse_key: 'sample data' #suse_secret: 'sample data' suse_key: '' suse_secret: '' - # Register your application with GitHub from https://github.com/settings/applications + # Register your application with GitHub from + # https://github.com/settings/applications github_key: '' github_secret: '' - - # If you add more providers that do not require a key, you still have to create the 2 variables with sample data diff --git a/dotenv.example b/dotenv.example new file mode 100644 index 00000000..921020d1 --- /dev/null +++ b/dotenv.example @@ -0,0 +1,54 @@ +# Set environment variables for OSEM in this file +# and copy it to .env or .env.rails_environment +# (like env.production or env.development) +# +# The following is a list of variables and default +# values that OSEM uses to configure some aspects +# of the app + +# The name of your page +OSEM_NAME="OSEM" + +# The host this OSEM instance runs on. Used for +# generating urls in emails sent +OSEM_HOSTNAME="localhost:3000" + +# The address OSEM uses for sending mails +OSEM_EMAIL_ADDRESS="no-reply@localhost" + +# The api key for transifex.com. +# See TRANSLATION.md for details +OSEM_TRANSIFEX_APIKEY="" + +# The errbit host to post exceptions to +OSEM_ERRBIT_HOST="" +# The api key for the errbit host +OSEM_ERRBIT_APIKEY="" + +# OMNIAUTH Developer Key/Secret for GOOGLE +OSEM_GOOGLE_KEY='' +OSEM_GOOGLE_SECRET='' + +# OMNIAUTH Developer Key/Secret for Facebook +OSEM_FACEBOOK_KEY='' +OSEM_FACEBOOK_SECRET='' + +# OMNIAUTH Developer Key/Secret for GitHub +OSEM_GITHUB_KEY='' +OSEM_GITHUB_SECRET='' + +# Disable linting of factories in the test suite. +# Speeds up turn around times of tests +OSEM_FACTORY_LINT="false" + +# The smtp configuration. See the rails guides for more +# http://guides.rubyonrails.org/action_mailer_basics.html#action-mailer-configuration +OSEM_SMTP_ADDRESS="" +OSEM_SMTP_PORT="" +OSEM_SMTP_USERNAME="" +OSEM_SMTP_PASSWORD="" +OSEM_SMTP_AUTHENTICATION="" +OSEM_SMTP_DOMAIN="" + +# Enable the usage of the devise ichain plugin +OSEM_ICHAIN_ENABLED=false diff --git a/lib/tasks/migrate_config.rake b/lib/tasks/migrate_config.rake new file mode 100644 index 00000000..452a061f --- /dev/null +++ b/lib/tasks/migrate_config.rake @@ -0,0 +1,41 @@ +namespace :data do + namespace :migrate do + desc 'Create a dotenv file from config/config.yml' + task config2dotenv: :environment do + # Create the dotenv file + dot_env = Rails.root.join(".env.#{Rails.env}") + if File.exist?(dot_env) + abort("Sorry can't migrate, #{dot_env} already exists") + else + dot_env = File.open(dot_env, 'w') + end + + # Load the configuration file + config_yml = Rails.root.join('config', 'config.yml') + begin + CONFIG = YAML.load_file(config_yml)[Rails.env] + rescue + CONFIG = {} + end + + # Write the dotenv file + dot_env.puts '# OSEM environment variables. Check INSTALL.md for more information' + dot_env.puts "OSEM_NAME=\"#{CONFIG['name']}\"" + dot_env.puts "OSEM_HOSTNAME=\"#{CONFIG['url_for_emails']}\"" + dot_env.puts "OSEM_EMAIL_ADDRESS=\"#{CONFIG['sender_for_emails']}\"" + dot_env.puts "OSEM_ICHAIN_ENABLED=\"#{CONFIG['authentication']['ichain']['enabled']}\"" if CONFIG.has_key?(:authentication) + dot_env.puts "OSEM_TRANSIFEX_APIKEY=\"#{CONFIG['transifex_live_api_key']}\"" + dot_env.puts "OSEM_ERRBIT_HOST=\"#{CONFIG['errbit_host']}\"" + dot_env.puts "OSEM_FACTORY_LINT=\"#{CONFIG['factory_girl_lint']}\"" + dot_env.puts "OSEM_SMTP_ADDRESS=\"#{CONFIG['mail_address']}\"" + dot_env.puts "OSEM_SMTP_PORT=\"#{CONFIG['mail_port']}\"" + dot_env.puts "OSEM_SMTP_USERNAME=\"#{CONFIG['mail_username']}\"" + dot_env.puts "OSEM_SMTP_PASSWORD=\"#{CONFIG['mail_password']}\"" + dot_env.puts "OSEM_SMTP_AUTHENTICATION=\"#{CONFIG['mail_authentication']}\"" + dot_env.puts 'OSEM_SMTP_DOMAIN=""' + dot_env.close + + puts "Migrated config/config.yml to .env.#{Rails.env}" + end + end +end diff --git a/spec/support/factory_girl.rb b/spec/support/factory_girl.rb index 95d350ef..c46a5105 100644 --- a/spec/support/factory_girl.rb +++ b/spec/support/factory_girl.rb @@ -3,7 +3,7 @@ require_relative 'external_request' RSpec.configure do |config| config.before(:suite) do - if CONFIG['factory_girl_lint'] + if ENV['OSEM_FACTORY_LINT'] != 'false' mock_commercial_request FactoryGirl.lint end