From bd36ce0fb2291866d1efb2a56c44493d5398b497 Mon Sep 17 00:00:00 2001 From: Henne Vogelsang Date: Tue, 22 Mar 2016 17:53:49 +0100 Subject: [PATCH 01/13] Switch logic for linting factories Only if you set the environment variable OSEM_FACTORY_LINT to 'false' it won't lint. --- spec/support/factory_girl.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 From d532016312885e1f0c2e4e3af97a28876337dc82 Mon Sep 17 00:00:00 2001 From: Henne Vogelsang Date: Tue, 22 Mar 2016 18:08:17 +0100 Subject: [PATCH 02/13] Get config.yml/secrets.yml out of travis/vagrant --- .travis.yml | 2 -- bootstrap.sh | 18 ------------------ 2 files changed, 20 deletions(-) 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/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" From 45c31f210fce0cb70e8859fd59bf78bbff2b162f Mon Sep 17 00:00:00 2001 From: Henne Vogelsang Date: Tue, 22 Mar 2016 18:09:18 +0100 Subject: [PATCH 03/13] Drop config/config.yml.example. Not needed anymore Also make config/secrets.yml.example read a bit nicer --- config/config.yml.example | 41 --------------------------- config/deploy.rb | 2 +- config/secrets.yml.example | 57 ++++++++++++++++++++------------------ 3 files changed, 31 insertions(+), 69 deletions(-) delete mode 100644 config/config.yml.example 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/secrets.yml.example b/config/secrets.yml.example index 5f97b833..fc3c1496 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' + + ########## OMNIAUT 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 + ########## OMNIAUT 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 From ebcb2780cdf538f5b7680da7d4f5d25b6e3dd03f Mon Sep 17 00:00:00 2001 From: Henne Vogelsang Date: Tue, 22 Mar 2016 18:14:40 +0100 Subject: [PATCH 04/13] Configure OSEM via environment variables Instead of reading a yaml file we get configuration from the environment. --- .../conference_registrations_controller.rb | 2 +- app/helpers/application_helper.rb | 8 +++++--- app/models/ability.rb | 2 +- app/models/email_settings.rb | 8 ++++---- app/models/user.rb | 2 +- app/views/conference_registrations/_form.html.haml | 2 +- .../devise/shared/_sign_in_form_embedded.html.haml | 2 +- app/views/layouts/_navigation.html.haml | 6 +++--- app/views/layouts/_user_menu.html.haml | 4 ++-- app/views/layouts/application.html.haml | 4 ++-- app/views/layouts/schedule.html.haml | 4 ++-- app/views/proposal/new.html.haml | 2 +- config/environments/development.rb | 5 ++++- config/environments/production.rb | 5 ++++- config/initializers/devise.rb | 11 ++++------- config/initializers/hoptoad.rb | 4 ++-- config/routes.rb | 2 +- 17 files changed, 39 insertions(+), 34 deletions(-) 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/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..bc267278 100644 --- a/config/environments/production.rb +++ b/config/environments/production.rb @@ -67,7 +67,7 @@ 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 @@ -78,4 +78,7 @@ Osem::Application.configure do password: CONFIG['MAIL_PASSWORD'], authentication: CONFIG['MAIL_AUTHENTICATION'] } + + # 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/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, From 64830e9cffdd9afaec77394dcd79cdf2cbb38f4a Mon Sep 17 00:00:00 2001 From: Henne Vogelsang Date: Tue, 22 Mar 2016 18:16:51 +0100 Subject: [PATCH 05/13] Don't read config.yml anymore add some heroku support gems and document all the new variables --- Gemfile | 5 +++++ Gemfile.lock | 6 ++++++ INSTALL.md | 23 +++++++++++++++++++++-- config/environment.rb | 17 ++++++++++++----- 4 files changed, 44 insertions(+), 7 deletions(-) diff --git a/Gemfile b/Gemfile index 0bf0e035..20b346f1 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' diff --git a/Gemfile.lock b/Gemfile.lock index 02c56dec..fe930585 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -372,6 +372,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) @@ -581,6 +586,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..0daa7bea 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -5,7 +5,26 @@ 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 + +## Dependences + +### 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,7 +32,7 @@ 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. diff --git a/config/environment.rb b/config/environment.rb index 0e52b624..9aa63f60 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 environment variables +explained in INSTALL.md instead. + + +" end # Initialize the rails application From fee8adba4bb718ca427d85cf09eb1a9acd1d4f8c Mon Sep 17 00:00:00 2001 From: Henne Vogelsang Date: Wed, 23 Mar 2016 11:49:30 +0100 Subject: [PATCH 06/13] Also set a default secret_key_base in test env --- config/environments/test.rb | 3 +++ 1 file changed, 3 insertions(+) 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 From d79a9b6fc1d0f75bf0c351b8db054d9578de2574 Mon Sep 17 00:00:00 2001 From: Henne Vogelsang Date: Fri, 22 Apr 2016 16:14:41 +0200 Subject: [PATCH 07/13] Make use of dotenv --- .gitignore | 5 +++++ Gemfile | 4 ++++ Gemfile.lock | 5 +++++ dotenv.example | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 60 insertions(+) create mode 100644 dotenv.example 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/Gemfile b/Gemfile index 20b346f1..93505e29 100644 --- a/Gemfile +++ b/Gemfile @@ -171,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 fe930585..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) @@ -544,6 +548,7 @@ DEPENDENCIES delayed_job_active_record devise devise_ichain_authenticatable + dotenv-rails factory_girl_rails font-awesome-rails formtastic (~> 3.1.1) diff --git a/dotenv.example b/dotenv.example new file mode 100644 index 00000000..bee645ee --- /dev/null +++ b/dotenv.example @@ -0,0 +1,46 @@ +# 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" + + +# Enable the usage of the devise ichain plugin +OSEM_ICHAIN_ENABLED=false From beac27405edd1486f09f627c8fd18c49f2c96dc3 Mon Sep 17 00:00:00 2001 From: Henne Vogelsang Date: Fri, 22 Apr 2016 16:30:01 +0200 Subject: [PATCH 08/13] Use the environment for ActionMailer configuration --- config/environments/production.rb | 10 +++++----- dotenv.example | 7 +++++++ 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/config/environments/production.rb b/config/environments/production.rb index bc267278..7901720c 100644 --- a/config/environments/production.rb +++ b/config/environments/production.rb @@ -72,11 +72,11 @@ Osem::Application.configure do # 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'] } # Set the secret_key_base from the env, if not set by any other means diff --git a/dotenv.example b/dotenv.example index bee645ee..51ea5be5 100644 --- a/dotenv.example +++ b/dotenv.example @@ -41,6 +41,13 @@ OSEM_GITHUB_SECRET='' # 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="" # Enable the usage of the devise ichain plugin OSEM_ICHAIN_ENABLED=false From 5b0202c052a0215439b202ea9968af343a6eed4c Mon Sep 17 00:00:00 2001 From: Henne Vogelsang Date: Fri, 22 Apr 2016 17:11:18 +0200 Subject: [PATCH 09/13] Expand and document SMTP configuration --- INSTALL.md | 36 ++++++++++++++++++------------- config/environments/production.rb | 4 +++- dotenv.example | 1 + 3 files changed, 25 insertions(+), 16 deletions(-) diff --git a/INSTALL.md b/INSTALL.md index 0daa7bea..4a2df84d 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -8,21 +8,27 @@ For more information about rails and what it can do, see the [rails guides.](htt ## 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 +| 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 -## Dependences +## Dependencies ### ImageMagick We use [ImageMagick](http://imagemagick.org/) for image manipulation so it needs to be available in your installation. @@ -35,8 +41,8 @@ $ bundle exec rake logo:reprocess ### 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/config/environments/production.rb b/config/environments/production.rb index 7901720c..d4f16683 100644 --- a/config/environments/production.rb +++ b/config/environments/production.rb @@ -76,7 +76,9 @@ Osem::Application.configure do port: ENV['OSEM_SMTP_PORT'], user_name: ENV['OSEM_SMTP_USERNAME'], password: ENV['OSEM_SMTP_PASSWORD'], - authentication: ENV['OSEM_SMTP_AUTHENTICATION'] + authentication: ENV['OSEM_SMTP_AUTHENTICATION'].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 diff --git a/dotenv.example b/dotenv.example index 51ea5be5..921020d1 100644 --- a/dotenv.example +++ b/dotenv.example @@ -48,6 +48,7 @@ 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 From f97e2715664cc9aa39545fbb1563bf1eb39b27f1 Mon Sep 17 00:00:00 2001 From: Henne Vogelsang Date: Fri, 29 Apr 2016 14:36:40 +0200 Subject: [PATCH 10/13] Fix some typos --- config/environment.rb | 2 +- config/secrets.yml.example | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/config/environment.rb b/config/environment.rb index 9aa63f60..dc8ed0e0 100644 --- a/config/environment.rb +++ b/config/environment.rb @@ -10,7 +10,7 @@ WARNING: The OSEM configuration file #{path} -is deprecated. Please use the environment environment variables +is deprecated. Please use the environment variables explained in INSTALL.md instead. diff --git a/config/secrets.yml.example b/config/secrets.yml.example index fc3c1496..308bc858 100644 --- a/config/secrets.yml.example +++ b/config/secrets.yml.example @@ -2,7 +2,7 @@ development: # Generate your own with rake secret # secret_key_base: '12345' - ########## OMNIAUT Providers ########## + ########## OMNIAUTH Providers ########## # This is just sample data so mocks work google_key: 'sample' google_secret: 'sample' @@ -24,7 +24,7 @@ production: # Your errbit API key # errbit_key: '12345' - ########## OMNIAUT Providers ########## + ########## 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. # From 14a9d701f70f448f7285b4694de2ad7e0424cb8c Mon Sep 17 00:00:00 2001 From: Henne Vogelsang Date: Fri, 29 Apr 2016 16:32:05 +0200 Subject: [PATCH 11/13] If operating on a env variable make sure its there Fix booting the app without OSEM_SMTP_AUTHENTICATION set --- config/environments/production.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/environments/production.rb b/config/environments/production.rb index d4f16683..d2b43a46 100644 --- a/config/environments/production.rb +++ b/config/environments/production.rb @@ -76,7 +76,7 @@ Osem::Application.configure do port: ENV['OSEM_SMTP_PORT'], user_name: ENV['OSEM_SMTP_USERNAME'], password: ENV['OSEM_SMTP_PASSWORD'], - authentication: ENV['OSEM_SMTP_AUTHENTICATION'].to_sym, + authentication: ENV['OSEM_SMTP_AUTHENTICATION'].try(:to_sym), domain: ENV['OSEM_SMTP_DOMAIN'], enable_starttls_auto: true } From 78501b17ca998bafa1ca3de42cf1d82e8388fc29 Mon Sep 17 00:00:00 2001 From: Henne Vogelsang Date: Fri, 29 Apr 2016 16:34:30 +0200 Subject: [PATCH 12/13] Rake task to migrate config.yml to a dotenv file --- lib/tasks/migrate_config.rake | 41 +++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 lib/tasks/migrate_config.rake 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 From 332b309dd58e7c226ffb1a8aec874c04d35d7807 Mon Sep 17 00:00:00 2001 From: Henne Vogelsang Date: Fri, 29 Apr 2016 16:40:15 +0200 Subject: [PATCH 13/13] Document CLOUDINARY_URL --- INSTALL.md | 1 + 1 file changed, 1 insertion(+) diff --git a/INSTALL.md b/INSTALL.md index 4a2df84d..a38ef13e 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -27,6 +27,7 @@ There are a couple of environment variables you can set to configure OSEM. | 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