From 8ca58cd15851d80350b017d2a03d2464211bc621 Mon Sep 17 00:00:00 2001 From: Alan deLevie Date: Wed, 4 Jan 2017 13:25:27 -0500 Subject: [PATCH] Revert "Revert "Clean up credentials"" --- .ruby-gemset | 1 + app/credentials/c2_credentials.rb | 25 ------- .../concerns/user_provided_service.rb | 21 ------ app/credentials/data_dot_gov_credentials.rb | 13 ---- app/credentials/github_credentials.rb | 21 ------ app/credentials/new_relic_credentials.rb | 21 ------ app/credentials/secrets.rb | 13 ---- app/credentials/smtp_credentials.rb | 37 ---------- app/credentials/tock_credentials.rb | 13 ---- app/mailers/admin_mailer.rb | 4 +- app/mailers/auction_mailer.rb | 4 +- app/mailers/winning_bidder_mailer.rb | 14 ++-- app/models/credentials.rb | 25 +++++++ app/models/credentials/cloud_foundry.rb | 19 +++++ app/models/credentials/local.rb | 11 +++ app/models/sam_account_reckoner.rb | 2 +- app/models/winning_bidder_export.rb | 2 +- app/services/c2_api_wrapper.rb | 10 +-- app/services/create_c2_proposal.rb | 2 +- app/services/tock_importer.rb | 8 +- config/environments/production.rb | 4 +- config/initializers/credentials_map.rb | 7 ++ config/initializers/mailer.rb | 2 +- config/initializers/omniauth.rb | 4 +- config/newrelic.yml | 4 +- config/secrets.yml | 2 +- docs/deployment.md | 36 +++------ .../data_dot_gov_credentials_spec.rb | 14 ---- spec/credentials/github_credentials_spec.rb | 18 ----- spec/credentials/smtp_credentials_spec.rb | 27 ------- spec/mailers/auction_mailer_spec.rb | 4 +- spec/mailers/winning_bidder_mailer_spec.rb | 2 +- spec/models/credentials_spec.rb | 73 +++++++++++++++++++ 33 files changed, 183 insertions(+), 280 deletions(-) create mode 100644 .ruby-gemset delete mode 100644 app/credentials/c2_credentials.rb delete mode 100644 app/credentials/concerns/user_provided_service.rb delete mode 100644 app/credentials/data_dot_gov_credentials.rb delete mode 100644 app/credentials/github_credentials.rb delete mode 100644 app/credentials/new_relic_credentials.rb delete mode 100644 app/credentials/secrets.rb delete mode 100644 app/credentials/smtp_credentials.rb delete mode 100644 app/credentials/tock_credentials.rb create mode 100644 app/models/credentials.rb create mode 100644 app/models/credentials/cloud_foundry.rb create mode 100644 app/models/credentials/local.rb create mode 100644 config/initializers/credentials_map.rb delete mode 100644 spec/credentials/data_dot_gov_credentials_spec.rb delete mode 100644 spec/credentials/github_credentials_spec.rb delete mode 100644 spec/credentials/smtp_credentials_spec.rb create mode 100644 spec/models/credentials_spec.rb diff --git a/.ruby-gemset b/.ruby-gemset new file mode 100644 index 00000000..dd63c6bf --- /dev/null +++ b/.ruby-gemset @@ -0,0 +1 @@ +micropurchase diff --git a/app/credentials/c2_credentials.rb b/app/credentials/c2_credentials.rb deleted file mode 100644 index f0fc11aa..00000000 --- a/app/credentials/c2_credentials.rb +++ /dev/null @@ -1,25 +0,0 @@ -require 'concerns/user_provided_service' - -class C2Credentials - extend UserProvidedService - - def self.host - ENV['C2_HOST'] - end - - def self.oauth_key - if use_env_var? - ENV['MICROPURCHASE_C2_OAUTH_KEY'] - else - credentials('micropurchase-c2')['oauth_key'] - end - end - - def self.oauth_secret - if use_env_var? - ENV['MICROPURCHASE_C2_OAUTH_SECRET'] - else - credentials('micropurchase-c2')['oauth_secret'] - end - end -end diff --git a/app/credentials/concerns/user_provided_service.rb b/app/credentials/concerns/user_provided_service.rb deleted file mode 100644 index e2a0f39f..00000000 --- a/app/credentials/concerns/user_provided_service.rb +++ /dev/null @@ -1,21 +0,0 @@ -module UserProvidedService - def credentials(service_name) - user_provided_service(service_name)['credentials'] - end - - def use_env_var? - Rails.env.development? || Rails.env.test? - end - - def user_provided_service(name) - user_provided_services.find { |service| service['name'] == name } - end - - def user_provided_services - vcap_services['user-provided'] - end - - def vcap_services - JSON.parse(ENV['VCAP_SERVICES']) - end -end diff --git a/app/credentials/data_dot_gov_credentials.rb b/app/credentials/data_dot_gov_credentials.rb deleted file mode 100644 index 8a23069b..00000000 --- a/app/credentials/data_dot_gov_credentials.rb +++ /dev/null @@ -1,13 +0,0 @@ -require 'concerns/user_provided_service' - -class DataDotGovCredentials - extend UserProvidedService - - def self.api_key - if use_env_var? - ENV['DATA_DOT_GOV_API_KEY'] - else - credentials('data-dot-gov')['api_key'] - end - end -end diff --git a/app/credentials/github_credentials.rb b/app/credentials/github_credentials.rb deleted file mode 100644 index b5ffe62b..00000000 --- a/app/credentials/github_credentials.rb +++ /dev/null @@ -1,21 +0,0 @@ -require 'concerns/user_provided_service' - -class GithubCredentials - extend UserProvidedService - - def self.client_id - if use_env_var? - ENV['MICROPURCHASE_GITHUB_CLIENT_ID'] - else - credentials('micropurchase-github')['client_id'] - end - end - - def self.secret - if use_env_var? - ENV['MICROPURCHASE_GITHUB_SECRET'] - else - credentials('micropurchase-github')['secret'] - end - end -end diff --git a/app/credentials/new_relic_credentials.rb b/app/credentials/new_relic_credentials.rb deleted file mode 100644 index fe06a3c1..00000000 --- a/app/credentials/new_relic_credentials.rb +++ /dev/null @@ -1,21 +0,0 @@ -require 'concerns/user_provided_service' - -class NewRelicCredentials - extend UserProvidedService - - def self.app_name - if use_env_var? - ENV['NEW_RELIC_APP_NAME'] - else - credentials('new-relic')['app_name'] - end - end - - def self.license_key - if use_env_var? - ENV['NEW_RELIC_API_KEY'] - else - credentials('new-relic')['license_key'] - end - end -end diff --git a/app/credentials/secrets.rb b/app/credentials/secrets.rb deleted file mode 100644 index c7ea90cd..00000000 --- a/app/credentials/secrets.rb +++ /dev/null @@ -1,13 +0,0 @@ -require 'concerns/user_provided_service' - -class Secrets - extend UserProvidedService - - def self.secret_key_base - if use_env_var? - '' - else - credentials('secrets')['secret_key_base'] - end - end -end diff --git a/app/credentials/smtp_credentials.rb b/app/credentials/smtp_credentials.rb deleted file mode 100644 index 82f73b97..00000000 --- a/app/credentials/smtp_credentials.rb +++ /dev/null @@ -1,37 +0,0 @@ -require 'concerns/user_provided_service' - -class SMTPCredentials - extend UserProvidedService - - def self.smtp_password - if use_env_var? - ENV['MICROPURCHASE_SMTP_SMTP_PASSWORD'] - else - credentials('micropurchase-smtp')['smtp_password'] - end - end - - def self.smtp_username - if use_env_var? - ENV['MICROPURCHASE_SMTP_SMTP_USERNAME'] - else - credentials('micropurchase-smtp')['smtp_username'] - end - end - - def self.default_url_host - if use_env_var? - ENV['MICROPURCHASE_SMTP_DEFAULT_URL_HOST'] - else - credentials('micropurchase-smtp')['default_url_host'] - end - end - - def self.default_from - if use_env_var? - ENV['MICROPURCHASE_SMTP_DEFAULT_FROM'] - else - credentials('micropurchase-smtp')['default_from'] - end - end -end diff --git a/app/credentials/tock_credentials.rb b/app/credentials/tock_credentials.rb deleted file mode 100644 index 4d3eb7ae..00000000 --- a/app/credentials/tock_credentials.rb +++ /dev/null @@ -1,13 +0,0 @@ -require 'concerns/user_provided_service' - -class TockCredentials - extend UserProvidedService - - def self.api_token - if use_env_var? - ENV['MICROPURCHASE_TOCK_API_KEY'] - else - credentials('micropurchase-tock')['api_token'] - end - end -end diff --git a/app/mailers/admin_mailer.rb b/app/mailers/admin_mailer.rb index 093f33c6..f24e06e4 100644 --- a/app/mailers/admin_mailer.rb +++ b/app/mailers/admin_mailer.rb @@ -11,7 +11,7 @@ def vendor_started_work(auction:) to: ADMIN_EMAIL_ADDRESS, subject: I18n.t('mailers.admin_mailer.vendor_started_work.subject', auction_name: @auction.title), - from: SMTPCredentials.default_from, + from: Credentials.smtp_default_from, reply_to: 'micropurchase@gsa.gov' ) end @@ -27,7 +27,7 @@ def vendor_finished_work(auction:) subject: I18n.t('mailers.admin_mailer.vendor_finished_work.subject', winner_name: @winner_name, auction_name: @auction.title), - from: SMTPCredentials.default_from, + from: Credentials.smtp_default_from, reply_to: 'micropurchase@gsa.gov' ) end diff --git a/app/mailers/auction_mailer.rb b/app/mailers/auction_mailer.rb index 4a9bdd89..bdf56391 100644 --- a/app/mailers/auction_mailer.rb +++ b/app/mailers/auction_mailer.rb @@ -5,7 +5,7 @@ def losing_bidder_notification(bidder:, auction:) mail( to: bidder.email, subject: I18n.t('mailers.auction_mailer.losing_bidder_notification.subject'), - from: SMTPCredentials.default_from, + from: Credentials.smtp_default_from, reply_to: 'micropurchase@gsa.gov' ) end @@ -17,7 +17,7 @@ def auction_accepted_customer_notification(auction:) mail( to: customer.email, subject: I18n.t('mailers.auction_mailer.auction_accepted_customer_notification.subject'), - from: SMTPCredentials.default_from, + from: Credentials.smtp_default_from, reply_to: 'micropurchase@gsa.gov' ) end diff --git a/app/mailers/winning_bidder_mailer.rb b/app/mailers/winning_bidder_mailer.rb index 606af73f..9949da61 100644 --- a/app/mailers/winning_bidder_mailer.rb +++ b/app/mailers/winning_bidder_mailer.rb @@ -5,7 +5,7 @@ def auction_ended(bidder:, auction:) mail( to: bidder.email, subject: I18n.t('mailers.winning_bidder_mailer.auction_ended.subject'), - from: SMTPCredentials.default_from, + from: Credentials.smtp_default_from, reply_to: 'micropurchase@gsa.gov' ) end @@ -17,7 +17,7 @@ def auction_accepted(auction:) mail( to: @winning_bid.bidder.email, subject: I18n.t('mailers.winning_bidder_mailer.auction_accepted.subject'), - from: SMTPCredentials.default_from, + from: Credentials.smtp_default_from, reply_to: 'micropurchase@gsa.gov' ) end @@ -29,7 +29,7 @@ def auction_accepted_missing_payment_method(auction:) mail( to: @winning_bid.bidder.email, subject: I18n.t('mailers.winning_bidder_mailer.auction_accepted_missing_payment_method.subject'), - from: SMTPCredentials.default_from, + from: Credentials.smtp_default_from, reply_to: 'micropurchase@gsa.gov' ) end @@ -42,7 +42,7 @@ def auction_rejected(auction:) mail( to: @winning_bid.bidder.email, subject: I18n.t('mailers.winning_bidder_mailer.auction_rejected.subject'), - from: SMTPCredentials.default_from, + from: Credentials.smtp_default_from, reply_to: 'micropurchase@gsa.gov' ) end @@ -56,7 +56,7 @@ def auction_not_delivered(auction:) to: @winning_bid.bidder.email, subject: I18n.t('mailers.winning_bidder_mailer.auction_not_delivered.subject', auction_title: @auction.title), - from: SMTPCredentials.default_from, + from: Credentials.smtp_default_from, reply_to: 'micropurchase@gsa.gov' ) end @@ -71,7 +71,7 @@ def auction_paid_default_pcard(auction:) 'mailers.winning_bidder_mailer.auction_paid_default_pcard.subject', auction_title: @auction.title ), - from: SMTPCredentials.default_from, + from: Credentials.smtp_default_from, reply_to: 'micropurchase@gsa.gov' ) end @@ -86,7 +86,7 @@ def auction_paid_other_pcard(auction:) 'mailers.winning_bidder_mailer.auction_paid_other_pcard.subject', auction_title: @auction.title ), - from: SMTPCredentials.default_from, + from: Credentials.smtp_default_from, reply_to: 'micropurchase@gsa.gov' ) end diff --git a/app/models/credentials.rb b/app/models/credentials.rb new file mode 100644 index 00000000..a3644697 --- /dev/null +++ b/app/models/credentials.rb @@ -0,0 +1,25 @@ +class Credentials + def get(*name) + type_delegate.get(*name) + end + + def self.get(*name) + new.get(*name) + end + + def self.map(method_name, options) + define_singleton_method(method_name) do + new.get(options[:to]) + end + end + + private + + def type_delegate + @credentials_delegate ||= local? ? Local.new : CloudFoundry.new + end + + def local? + Rails.env == 'development' || Rails.env == 'test' + end +end diff --git a/app/models/credentials/cloud_foundry.rb b/app/models/credentials/cloud_foundry.rb new file mode 100644 index 00000000..94e654b9 --- /dev/null +++ b/app/models/credentials/cloud_foundry.rb @@ -0,0 +1,19 @@ +class Credentials::CloudFoundry + attr_reader :data + + def get(namespace, key = nil) + service(namespace)[key] || local(namespace, key) + end + + def service(namespace) + services.find { |service| service['name'] == namespace } || { } + end + + def services + @services ||= JSON.parse(ENV['VCAP_SERVICES'])['user-provided'] + end + + def local(namespace, key) + key ? Local.new.get(namespace, key) : Credentials::Local.new.get(namespace) + end +end diff --git a/app/models/credentials/local.rb b/app/models/credentials/local.rb new file mode 100644 index 00000000..aabafbcc --- /dev/null +++ b/app/models/credentials/local.rb @@ -0,0 +1,11 @@ +class Credentials::Local + def get(*name) + ENV[normalize(*name)] + end + + private + + def normalize(*names) + names.join('_').underscore.upcase + end +end diff --git a/app/models/sam_account_reckoner.rb b/app/models/sam_account_reckoner.rb index 3973a03d..bdf15ac3 100644 --- a/app/models/sam_account_reckoner.rb +++ b/app/models/sam_account_reckoner.rb @@ -45,7 +45,7 @@ def sam_status end def client - @client ||= Samwise::Client.new(api_key: DataDotGovCredentials.api_key) + @client ||= Samwise::Client.new(api_key: Credentials.data_dot_gov_api_key) end def vendor_summary diff --git a/app/models/winning_bidder_export.rb b/app/models/winning_bidder_export.rb index 5ab44434..3a67c082 100644 --- a/app/models/winning_bidder_export.rb +++ b/app/models/winning_bidder_export.rb @@ -162,6 +162,6 @@ def winning_bid end def client - @client ||= Samwise::Client.new(api_key: DataDotGovCredentials.api_key) + @client ||= Samwise::Client.new(api_key: Credentials.data_dot_gov_api_key) end end diff --git a/app/services/c2_api_wrapper.rb b/app/services/c2_api_wrapper.rb index 52a0f847..f68e7c01 100644 --- a/app/services/c2_api_wrapper.rb +++ b/app/services/c2_api_wrapper.rb @@ -10,15 +10,15 @@ def proposal_json(auction) end def c2_proposal_path(auction) - auction.c2_proposal_url.gsub("#{C2Credentials.host}/", "") + auction.c2_proposal_url.gsub("#{Credentials.c2_host}/", "") end def configure_c2_client C2::Client.new( - oauth_key: C2Credentials.oauth_key, - oauth_secret: C2Credentials.oauth_secret, - host: C2Credentials.host, - debug: ENV.fetch('C2_DEBUG', false) + oauth_key: Credentials.get('micropurchase-c2', 'oauth_key'), + oauth_secret: Credentials.get('micropurchase-c2', 'oauth_secret'), + host: Credentials.c2_host, + debug: ENV.fetch('C2_DEBUG', false) ) end end diff --git a/app/services/create_c2_proposal.rb b/app/services/create_c2_proposal.rb index 6cbb0a22..c61eece0 100644 --- a/app/services/create_c2_proposal.rb +++ b/app/services/create_c2_proposal.rb @@ -19,7 +19,7 @@ def perform attr_reader :auction def proposal_url - "#{C2Credentials.host}/proposals/#{proposal.id}" + "#{Credentials.c2_host}/proposals/#{proposal.id}" end def proposal diff --git a/app/services/tock_importer.rb b/app/services/tock_importer.rb index b9956a73..eee2fff3 100644 --- a/app/services/tock_importer.rb +++ b/app/services/tock_importer.rb @@ -23,8 +23,12 @@ def data def request RestClient.get( - TOCK_PROJECTS, - 'Authorization' => "Token #{TockCredentials.api_token}" + TOCK_PROJECTS, 'Authorization' => "Token #{token}" ) end + + def token + Credentials.get('micropurchase-tock', 'api_token') || + Credentials.get('micropurchase-tock', 'api_key') + end end diff --git a/config/environments/production.rb b/config/environments/production.rb index 8406c0c5..beb089d1 100644 --- a/config/environments/production.rb +++ b/config/environments/production.rb @@ -5,8 +5,8 @@ address: 'smtp.mandrillapp.com', port: 587, domain: ENV['SMTP_DOMAIN'] || "18f.gsa.gov", - user_name: SMTPCredentials.smtp_username, - password: SMTPCredentials.smtp_password, + user_name: Credentials.get('micropurchase-smtp', 'smtp_username'), + password: Credentials.get('micropurchase-smtp', 'smtp_password'), authentication: 'login', enable_starttls_auto: true } diff --git a/config/initializers/credentials_map.rb b/config/initializers/credentials_map.rb new file mode 100644 index 00000000..657c6f1a --- /dev/null +++ b/config/initializers/credentials_map.rb @@ -0,0 +1,7 @@ +# Note: as a practice, only envars used in more than one file should be +# mapped to a method. It prevents shotgun surgery in the event of changes +# to storage location. + +Credentials.map(:data_dot_gov_api_key, to: ['data-dot-gov', 'api_key']) +Credentials.map(:c2_host, to: ['c2_host']) +Credentials.map(:smtp_default_from, to: ['micropurchase-smtp', 'default_from']) diff --git a/config/initializers/mailer.rb b/config/initializers/mailer.rb index 9b7872f8..a9b5e225 100644 --- a/config/initializers/mailer.rb +++ b/config/initializers/mailer.rb @@ -3,6 +3,6 @@ end Micropurchase::Application.config.action_mailer.default_url_options ||= { - host: SMTPCredentials.default_url_host, + host: Credentials.get('micropurchase-smtp', 'default_url_host'), protocol: protocol || "http" } diff --git a/config/initializers/omniauth.rb b/config/initializers/omniauth.rb index cec50d3b..ddf05279 100644 --- a/config/initializers/omniauth.rb +++ b/config/initializers/omniauth.rb @@ -1,8 +1,8 @@ Rails.application.config.middleware.use OmniAuth::Builder do provider( :github, - GithubCredentials.client_id, - GithubCredentials.secret, + Credentials.get('micropurchase-github', 'client_id'), + Credentials.get('micropurchase-github', 'secret'), scope: "user:email" ) end diff --git a/config/newrelic.yml b/config/newrelic.yml index 49c452e6..bd957475 100644 --- a/config/newrelic.yml +++ b/config/newrelic.yml @@ -1,5 +1,5 @@ common: &default_settings - app_name: <%= NewRelicCredentials.app_name %> + app_name: <%= Credentials.get('new-relic', 'app_name') %> audit_log: enabled: false browser_monitoring: @@ -10,7 +10,7 @@ common: &default_settings capture_source: true enabled: true ignore_errors: "ActionController::RoutingError" - license_key: <%= NewRelicCredentials.license_key %> + license_key: <%= Credentials.get('new-relic', 'license_key') || Credentials.get('new-relic', 'api_key') %> log_level: info monitor_mode: true transaction_tracer: diff --git a/config/secrets.yml b/config/secrets.yml index 95bfc6e4..83868835 100644 --- a/config/secrets.yml +++ b/config/secrets.yml @@ -5,4 +5,4 @@ test: secret_key_base: 8607c91c228d6414a72e6b0da24abd6f43ba21395ec05ffbf174e78afc7792cf294ff00f44c35f10f078bd374b04c99c499a89e4997750d83df452e9c76b5f7a production: - secret_key_base: <%= Secrets.secret_key_base %> + secret_key_base: <%= Credentials.get('secrets', 'secret_key_base') %> diff --git a/docs/deployment.md b/docs/deployment.md index 002b2b09..53e5e183 100644 --- a/docs/deployment.md +++ b/docs/deployment.md @@ -44,35 +44,21 @@ directly in your system. Steps to set new environment variables: -1. Create a credentials class for accessing the value. Example: +A `Credentials` class handles the abstraction and differences in +locations between Cloud Foundry and local environmental variables. You +can choose to use the class directly with your new environmental +variable: - ```ruby - # app/credentials/github_credentials.rb + Credentials.get('micropurchase-github', 'client_id') + Credentials.get('micropurchase-github', 'secret') - class GithubCredentials +You can also setup mapping to easy class methods: - def self.client_id - ENV['MICROPURCHASE_GITHUB_CLIENT_ID'] - end + Credentials.map(:github_client_id, to: ['micropurchase-github', 'client_id']) + Credentials.map(:github_secret, to: ['micropurchase-github', 'secret']) - def self.secret - ENV['MICROPURCHASE_GITHUB_SECRET'] - end - end - ``` - -1. Access the value with the class. Example: - - ```ruby - Rails.application.config.middleware.use OmniAuth::Builder do - provider( - :github, - GithubCredentials.client_id, - GithubCredentials.secret, - scope: "user:email" - ) - end - ``` +For development and test environments locally and on CI it will look +for `ENV['MICROPURCHASE_GITHUB_CLIENT_ID']` and `ENV['MICROPURCHASE_SECRET']` respectively. Using `cups` on Cloud Foundry, see below #2. 1. If the environment variable is needed to run the application locally, add the environment variable to your local `.env` file for local usage. Also add it diff --git a/spec/credentials/data_dot_gov_credentials_spec.rb b/spec/credentials/data_dot_gov_credentials_spec.rb deleted file mode 100644 index 0c32b157..00000000 --- a/spec/credentials/data_dot_gov_credentials_spec.rb +++ /dev/null @@ -1,14 +0,0 @@ -require 'rails_helper' - -describe DataDotGovCredentials do - context "using env var" do - it "returns correct value" do - env_var_api_key = "super secret api key" - ENV['DATA_DOT_GOV_API_KEY'] = env_var_api_key - - api_key = DataDotGovCredentials.api_key - - expect(api_key).to eq env_var_api_key - end - end -end diff --git a/spec/credentials/github_credentials_spec.rb b/spec/credentials/github_credentials_spec.rb deleted file mode 100644 index 71aa2804..00000000 --- a/spec/credentials/github_credentials_spec.rb +++ /dev/null @@ -1,18 +0,0 @@ -require 'rails_helper' - -describe GithubCredentials do - context "using env var" do - it "returns correct value" do - env_var_client_id = "super secret key" - env_var_secret = "super secret secret" - ENV['MICROPURCHASE_GITHUB_CLIENT_ID'] = env_var_client_id - ENV['MICROPURCHASE_GITHUB_SECRET'] = env_var_secret - - client_id = GithubCredentials.client_id - secret = GithubCredentials.secret - - expect(client_id).to eq env_var_client_id - expect(secret).to eq env_var_secret - end - end -end diff --git a/spec/credentials/smtp_credentials_spec.rb b/spec/credentials/smtp_credentials_spec.rb deleted file mode 100644 index 30a07684..00000000 --- a/spec/credentials/smtp_credentials_spec.rb +++ /dev/null @@ -1,27 +0,0 @@ -require 'rails_helper' - -describe SMTPCredentials do - context 'using env var' do - it 'returns correct value' do - env_var_smtp_password = 'fake smtp password' - env_var_smtp_username = 'fake smtp username' - env_var_default_url_host = 'fake url host' - env_var_default_from = 'fake@fakeurl.fake' - - allow(ENV).to receive(:[]).with('MICROPURCHASE_SMTP_SMTP_PASSWORD').and_return(env_var_smtp_password) - allow(ENV).to receive(:[]).with('MICROPURCHASE_SMTP_SMTP_USERNAME').and_return(env_var_smtp_username) - allow(ENV).to receive(:[]).with('MICROPURCHASE_SMTP_DEFAULT_URL_HOST').and_return(env_var_default_url_host) - allow(ENV).to receive(:[]).with('MICROPURCHASE_SMTP_DEFAULT_FROM').and_return(env_var_default_from) - - password = SMTPCredentials.smtp_password - username = SMTPCredentials.smtp_username - url_host = SMTPCredentials.default_url_host - from = SMTPCredentials.default_from - - expect(password).to eq env_var_smtp_password - expect(username).to eq env_var_smtp_username - expect(url_host).to eq env_var_default_url_host - expect(from).to eq env_var_default_from - end - end -end diff --git a/spec/mailers/auction_mailer_spec.rb b/spec/mailers/auction_mailer_spec.rb index 7d1cdc85..2bf393c9 100644 --- a/spec/mailers/auction_mailer_spec.rb +++ b/spec/mailers/auction_mailer_spec.rb @@ -12,7 +12,7 @@ expect(email.subject).to eq( I18n.t('mailers.auction_mailer.losing_bidder_notification.subject') ) - expect(email.from).to eq [SMTPCredentials.default_from] + expect(email.from).to eq [Credentials.smtp_default_from] expect(email.body.encoded).to include( I18n.t( 'mailers.auction_mailer.losing_bidder_notification.para_1', @@ -42,7 +42,7 @@ expect(email.subject).to eq( I18n.t('mailers.auction_mailer.auction_accepted_customer_notification.subject') ) - expect(email.from).to eq [SMTPCredentials.default_from] + expect(email.from).to eq [Credentials.smtp_default_from] expect(email.body.encoded).to include( I18n.t( 'mailers.auction_mailer.auction_accepted_customer_notification.para_1', diff --git a/spec/mailers/winning_bidder_mailer_spec.rb b/spec/mailers/winning_bidder_mailer_spec.rb index baed9ea1..dd4980a7 100644 --- a/spec/mailers/winning_bidder_mailer_spec.rb +++ b/spec/mailers/winning_bidder_mailer_spec.rb @@ -14,7 +14,7 @@ I18n.t('mailers.winning_bidder_mailer.auction_ended.subject') ) - expect(email.from).to eq [SMTPCredentials.default_from] + expect(email.from).to eq [Credentials.smtp_default_from] expect(email.body.encoded).to include( I18n.t( 'mailers.winning_bidder_mailer.auction_ended.para_1', diff --git a/spec/models/credentials_spec.rb b/spec/models/credentials_spec.rb new file mode 100644 index 00000000..c76eca7c --- /dev/null +++ b/spec/models/credentials_spec.rb @@ -0,0 +1,73 @@ +require 'rails_helper' + +describe Credentials do + # NOTE: mappings for class methods are in config/initializers/credentials_map.rb + + around do |example| + env_var_names = [ + 'VCAP_SERVICES', 'C2_HOST', 'NEW_RELIC_APP_NAME', + 'DATA_DOT_GOV_API_KEY' + ] + env_vars = {} + env_var_names.each do |name| + env_vars[name] = ENV[name] + end + + example.run + + env_var_names.each do |name| + ENV[name] = env_vars[name] + end + end + + describe 'when local' do + before do + ENV['NEW_RELIC_APP_NAME'] = 'new-relic-app-name-here-too' + ENV['DATA_DOT_GOV_API_KEY'] = 'data-gov-api-key' + ENV['C2_HOST'] = 'c2-host.something-app.gov.local' + end + + it 'uses converts the names to get an envar directly' do + expect(Credentials.get('new-relic', 'app_name')).to eq('new-relic-app-name-here-too') + end + + it "returns finds the data dot gov api key" do + expect(Credentials.get('data-dot-gov', 'api_key')).to eq('data-gov-api-key') + end + + it "finds that same data dot gov api key via a mapped reference" do + expect(Credentials.data_dot_gov_api_key).to eq('data-gov-api-key') + end + + it 'finds c2 host locally' do + expect(Credentials.get('c2_host')).to eq('c2-host.something-app.gov.local') + expect(Credentials.c2_host).to eq('c2-host.something-app.gov.local') + end + end + + describe 'when on cloud foundry' do + let(:vcap) { + { + 'user-provided' => [ + 'name' => 'new-relic', + 'app_name' => 'new-relic-app-name-here' + ] + } + } + + before do + allow(Rails).to receive(:env).and_return('production') + ENV['VCAP_SERVICES'] = vcap.to_json + ENV['C2_HOST'] = 'c2-host.something-app.gov' + end + + it 'uses the variables found in vcap' do + expect(Credentials.get('new-relic', 'app_name')).to eq('new-relic-app-name-here') + end + + it 'bypasses cloud foundary config and goes to env vars when necessary' do + expect(Credentials.get('c2_host')).to eq('c2-host.something-app.gov') + expect(Credentials.c2_host).to eq('c2-host.something-app.gov') + end + end +end