diff --git a/src/api-umbrella/web-app/app/mailers/api_user_mailer.rb b/src/api-umbrella/web-app/app/mailers/api_user_mailer.rb index 996a2f2ca..8feb13c77 100644 --- a/src/api-umbrella/web-app/app/mailers/api_user_mailer.rb +++ b/src/api-umbrella/web-app/app/mailers/api_user_mailer.rb @@ -23,4 +23,16 @@ def signup_email(user, options) :from => MailSanitizer.sanitize_address(from), :to => MailSanitizer.sanitize_address(user.email) end + + def notify_api_admin(user) + @user = user + + to = ApiUmbrellaConfig[:admin_notify_email].presence || ApiUmbrellaConfig[:web][:contact_form_email] + + full_name = "#{@user.first_name} #{@user.last_name}" + + mail :subject => "#{full_name} just subscribed", + :from => MailSanitizer.sanitize_address(user.email), + :to => MailSanitizer.sanitize_address(to) + end end diff --git a/src/api-umbrella/web-app/app/views/api_user_mailer/notify_api_admin.erb b/src/api-umbrella/web-app/app/views/api_user_mailer/notify_api_admin.erb new file mode 100644 index 000000000..3a45d2276 --- /dev/null +++ b/src/api-umbrella/web-app/app/views/api_user_mailer/notify_api_admin.erb @@ -0,0 +1,39 @@ +

<%= @user.first_name %> <%= @user.last_name %> just subscribed

+

Description

+ +

+ <%= @user.use_description %> +

+ +

Extra-informations

+ + + + + + + <% unless @user.registration_source.blank? -%> + + + + + <% end -%> + <% unless @user.website.blank? -%> + + + + + <% end -%> + + + + + + + + + + + + +
Email<%= @user.email %>
Source<%= @user.registration_source %>
Website<%= @user.website %>
IP Adress<%= @user.registration_ip %>
Referer<%= @user.registration_referer %>
Origin<%= @user.registration_origin %>
diff --git a/src/api-umbrella/web-app/spec/mailers/api_user_mailer_spec.rb b/src/api-umbrella/web-app/spec/mailers/api_user_mailer_spec.rb index c4280e873..436b19fc8 100644 --- a/src/api-umbrella/web-app/spec/mailers/api_user_mailer_spec.rb +++ b/src/api-umbrella/web-app/spec/mailers/api_user_mailer_spec.rb @@ -1,88 +1,129 @@ require "spec_helper" describe ApiUserMailer do - describe "OSVDB-131677 security" do - it "accepts recipients without newlines" do - expect do - api_user = FactoryGirl.create(:api_user, :email => "foo@example.com") - ApiUserMailer.signup_email(api_user, {}).deliver - end.to change { ActionMailer::Base.deliveries.count }.by(1) - end - - it "rejects recipients with newlines" do - expect do + describe "signup_email" do + describe "OSVDB-131677 security" do + it "accepts recipients without newlines" do expect do - api_user = FactoryGirl.create(:api_user, :email => "foo@example.com\nfoo") + api_user = FactoryGirl.create(:api_user, :email => "foo@example.com") ApiUserMailer.signup_email(api_user, {}).deliver - end.to raise_error(MailSanitizer::InvalidAddress) - end.to change { ActionMailer::Base.deliveries.count }.by(0) - end + end.to change { ActionMailer::Base.deliveries.count }.by(1) + end - it "rejects recipients with carriage returns" do - expect do + it "rejects recipients with newlines" do expect do - api_user = FactoryGirl.create(:api_user, :email => "foo@example.com\rfoo") - ApiUserMailer.signup_email(api_user, {}).deliver - end.to raise_error(MailSanitizer::InvalidAddress) - end.to change { ActionMailer::Base.deliveries.count }.by(0) - end + expect do + api_user = FactoryGirl.create(:api_user, :email => "foo@example.com\nfoo") + ApiUserMailer.signup_email(api_user, {}).deliver + end.to raise_error(MailSanitizer::InvalidAddress) + end.to change { ActionMailer::Base.deliveries.count }.by(0) + end - it "accepts recipients 500 chars or less" do - expect do - api_user = FactoryGirl.create(:api_user, :email => "#{"o" * 488}@example.com") - ApiUserMailer.signup_email(api_user, {}).deliver - end.to change { ActionMailer::Base.deliveries.count }.by(1) - end + it "rejects recipients with carriage returns" do + expect do + expect do + api_user = FactoryGirl.create(:api_user, :email => "foo@example.com\rfoo") + ApiUserMailer.signup_email(api_user, {}).deliver + end.to raise_error(MailSanitizer::InvalidAddress) + end.to change { ActionMailer::Base.deliveries.count }.by(0) + end - it "rejects recipients greater than 500 chars" do - expect do + it "accepts recipients 500 chars or less" do expect do - api_user = FactoryGirl.create(:api_user, :email => "#{"o" * 489}@example.com") + api_user = FactoryGirl.create(:api_user, :email => "#{"o" * 488}@example.com") ApiUserMailer.signup_email(api_user, {}).deliver - end.to raise_error(MailSanitizer::InvalidAddress) - end.to change { ActionMailer::Base.deliveries.count }.by(0) - end + end.to change { ActionMailer::Base.deliveries.count }.by(1) + end - it "accepts from addresses without newlines" do - expect do - api_user = FactoryGirl.create(:api_user) - ApiUserMailer.signup_email(api_user, { :email_from_address => "foo@example.com" }).deliver - end.to change { ActionMailer::Base.deliveries.count }.by(1) - end + it "rejects recipients greater than 500 chars" do + expect do + expect do + api_user = FactoryGirl.create(:api_user, :email => "#{"o" * 489}@example.com") + ApiUserMailer.signup_email(api_user, {}).deliver + end.to raise_error(MailSanitizer::InvalidAddress) + end.to change { ActionMailer::Base.deliveries.count }.by(0) + end - it "rejects from addresses with newlines" do - expect do + it "accepts from addresses without newlines" do expect do api_user = FactoryGirl.create(:api_user) - ApiUserMailer.signup_email(api_user, { :email_from_address => "foo@example.com\nfoo" }).deliver - end.to raise_error(MailSanitizer::InvalidAddress) - end.to change { ActionMailer::Base.deliveries.count }.by(0) - end + ApiUserMailer.signup_email(api_user, { :email_from_address => "foo@example.com" }).deliver + end.to change { ActionMailer::Base.deliveries.count }.by(1) + end + + it "rejects from addresses with newlines" do + expect do + expect do + api_user = FactoryGirl.create(:api_user) + ApiUserMailer.signup_email(api_user, { :email_from_address => "foo@example.com\nfoo" }).deliver + end.to raise_error(MailSanitizer::InvalidAddress) + end.to change { ActionMailer::Base.deliveries.count }.by(0) + end + + it "rejects from addresses with carriage returns" do + expect do + expect do + api_user = FactoryGirl.create(:api_user) + ApiUserMailer.signup_email(api_user, { :email_from_address => "foo@example.com\rfoo" }).deliver + end.to raise_error(MailSanitizer::InvalidAddress) + end.to change { ActionMailer::Base.deliveries.count }.by(0) + end - it "rejects from addresses with carriage returns" do - expect do + it "accepts from addresses 500 chars or less" do expect do api_user = FactoryGirl.create(:api_user) - ApiUserMailer.signup_email(api_user, { :email_from_address => "foo@example.com\rfoo" }).deliver - end.to raise_error(MailSanitizer::InvalidAddress) - end.to change { ActionMailer::Base.deliveries.count }.by(0) + ApiUserMailer.signup_email(api_user, { :email_from_address => "#{"o" * 488}@example.com" }).deliver + end.to change { ActionMailer::Base.deliveries.count }.by(1) + end + + it "rejects from addresses greater than 500 chars" do + expect do + expect do + api_user = FactoryGirl.create(:api_user) + ApiUserMailer.signup_email(api_user, { :email_from_address => "#{"o" * 489}@example.com" }).deliver + end.to raise_error(MailSanitizer::InvalidAddress) + end.to change { ActionMailer::Base.deliveries.count }.by(0) + end + end + end - it "accepts from addresses 500 chars or less" do - expect do - api_user = FactoryGirl.create(:api_user) - ApiUserMailer.signup_email(api_user, { :email_from_address => "#{"o" * 488}@example.com" }).deliver - end.to change { ActionMailer::Base.deliveries.count }.by(1) + describe "signup_email" do + before(:each) do + ApiUmbrellaConfig[:web][:contact_form_email] = "aaa@bbb.com" end - it "rejects from addresses greater than 500 chars" do - expect do - expect do - api_user = FactoryGirl.create(:api_user) - ApiUserMailer.signup_email(api_user, { :email_from_address => "#{"o" * 489}@example.com" }).deliver - end.to raise_error(MailSanitizer::InvalidAddress) - end.to change { ActionMailer::Base.deliveries.count }.by(0) + let(:api_user) { FactoryGirl.create(:api_user, + :first_name => "aaa", + :last_name => "bbb", + :use_description => "I WANNA DO EVERYTHING", + :email => "foo@example.com") } + + subject { ApiUserMailer.notify_api_admin(api_user).deliver } + + it "send an email " do + expect { subject }.to change { ActionMailer::Base.deliveries.count }.by(1) end + it "send an email to the contact email" do + subject + expect(ActionMailer::Base.deliveries.first.to).to eq ["aaa@bbb.com"] + end + + it "the receiver can be overwrited by the admin " do + ApiUmbrellaConfig[:admin_notify_email] = "ccc@ddd.com" + subject + expect(ActionMailer::Base.deliveries.first.to).to eq ["ccc@ddd.com"] + end + + it "send an email with the name of the person in the subject" do + subject + expect(ActionMailer::Base.deliveries.first.subject).to eq "aaa bbb just subscribed" + end + + it "send an email with usage in the body" do + subject + expect(ActionMailer::Base.deliveries.first.encoded).to include "I WANNA DO EVERYTHING" + end end end