Skip to content

Commit b73f5ca

Browse files
committed
add method to send mail to admin
1 parent d01c6d3 commit b73f5ca

File tree

3 files changed

+154
-62
lines changed

3 files changed

+154
-62
lines changed

src/api-umbrella/web-app/app/mailers/api_user_mailer.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,16 @@ def signup_email(user, options)
2323
:from => MailSanitizer.sanitize_address(from),
2424
:to => MailSanitizer.sanitize_address(user.email)
2525
end
26+
27+
def notify_api_admin(user)
28+
@user = user
29+
30+
to = ApiUmbrellaConfig[:admin_notify_email].presence || ApiUmbrellaConfig[:web][:contact_form_email]
31+
32+
full_name = "#{@user.first_name} #{@user.last_name}"
33+
34+
mail :subject => "#{full_name} just subscribed",
35+
:from => MailSanitizer.sanitize_address(user.email),
36+
:to => MailSanitizer.sanitize_address(to)
37+
end
2638
end
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<h1><%= @user.first_name %> <%= @user.last_name %> just subscribed</h1>
2+
<h2>Description</h2>
3+
4+
<p>
5+
<%= @user.use_description %>
6+
</p>
7+
8+
<h2>Extra-informations</h2>
9+
10+
<table>
11+
<tr>
12+
<td>Email</td>
13+
<td><%= @user.email %></td>
14+
</tr>
15+
<% unless @user.registration_source.blank? -%>
16+
<tr>
17+
<td>Source</td>
18+
<td><%= @user.registration_source %></td>
19+
</tr>
20+
<% end -%>
21+
<% unless @user.website.blank? -%>
22+
<tr>
23+
<td>Website</td>
24+
<td><%= @user.website %></td>
25+
</tr>
26+
<% end -%>
27+
<tr>
28+
<td>IP Adress</td>
29+
<td><%= @user.registration_ip %></td>
30+
</tr>
31+
<tr>
32+
<td>Referer</td>
33+
<td><%= @user.registration_referer %></td>
34+
</tr>
35+
<tr>
36+
<td>Origin</td>
37+
<td><%= @user.registration_origin %></td>
38+
</tr>
39+
</table>
Lines changed: 103 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -1,88 +1,129 @@
11
require "spec_helper"
22

33
describe ApiUserMailer do
4-
describe "OSVDB-131677 security" do
5-
it "accepts recipients without newlines" do
6-
expect do
7-
api_user = FactoryGirl.create(:api_user, :email => "[email protected]")
8-
ApiUserMailer.signup_email(api_user, {}).deliver
9-
end.to change { ActionMailer::Base.deliveries.count }.by(1)
10-
end
11-
12-
it "rejects recipients with newlines" do
13-
expect do
4+
describe "signup_email" do
5+
describe "OSVDB-131677 security" do
6+
it "accepts recipients without newlines" do
147
expect do
15-
api_user = FactoryGirl.create(:api_user, :email => "[email protected]\nfoo")
8+
api_user = FactoryGirl.create(:api_user, :email => "[email protected]")
169
ApiUserMailer.signup_email(api_user, {}).deliver
17-
end.to raise_error(MailSanitizer::InvalidAddress)
18-
end.to change { ActionMailer::Base.deliveries.count }.by(0)
19-
end
10+
end.to change { ActionMailer::Base.deliveries.count }.by(1)
11+
end
2012

21-
it "rejects recipients with carriage returns" do
22-
expect do
13+
it "rejects recipients with newlines" do
2314
expect do
24-
api_user = FactoryGirl.create(:api_user, :email => "[email protected]\rfoo")
25-
ApiUserMailer.signup_email(api_user, {}).deliver
26-
end.to raise_error(MailSanitizer::InvalidAddress)
27-
end.to change { ActionMailer::Base.deliveries.count }.by(0)
28-
end
15+
expect do
16+
api_user = FactoryGirl.create(:api_user, :email => "[email protected]\nfoo")
17+
ApiUserMailer.signup_email(api_user, {}).deliver
18+
end.to raise_error(MailSanitizer::InvalidAddress)
19+
end.to change { ActionMailer::Base.deliveries.count }.by(0)
20+
end
2921

30-
it "accepts recipients 500 chars or less" do
31-
expect do
32-
api_user = FactoryGirl.create(:api_user, :email => "#{"o" * 488}@example.com")
33-
ApiUserMailer.signup_email(api_user, {}).deliver
34-
end.to change { ActionMailer::Base.deliveries.count }.by(1)
35-
end
22+
it "rejects recipients with carriage returns" do
23+
expect do
24+
expect do
25+
api_user = FactoryGirl.create(:api_user, :email => "[email protected]\rfoo")
26+
ApiUserMailer.signup_email(api_user, {}).deliver
27+
end.to raise_error(MailSanitizer::InvalidAddress)
28+
end.to change { ActionMailer::Base.deliveries.count }.by(0)
29+
end
3630

37-
it "rejects recipients greater than 500 chars" do
38-
expect do
31+
it "accepts recipients 500 chars or less" do
3932
expect do
40-
api_user = FactoryGirl.create(:api_user, :email => "#{"o" * 489}@example.com")
33+
api_user = FactoryGirl.create(:api_user, :email => "#{"o" * 488}@example.com")
4134
ApiUserMailer.signup_email(api_user, {}).deliver
42-
end.to raise_error(MailSanitizer::InvalidAddress)
43-
end.to change { ActionMailer::Base.deliveries.count }.by(0)
44-
end
35+
end.to change { ActionMailer::Base.deliveries.count }.by(1)
36+
end
4537

46-
it "accepts from addresses without newlines" do
47-
expect do
48-
api_user = FactoryGirl.create(:api_user)
49-
ApiUserMailer.signup_email(api_user, { :email_from_address => "[email protected]" }).deliver
50-
end.to change { ActionMailer::Base.deliveries.count }.by(1)
51-
end
38+
it "rejects recipients greater than 500 chars" do
39+
expect do
40+
expect do
41+
api_user = FactoryGirl.create(:api_user, :email => "#{"o" * 489}@example.com")
42+
ApiUserMailer.signup_email(api_user, {}).deliver
43+
end.to raise_error(MailSanitizer::InvalidAddress)
44+
end.to change { ActionMailer::Base.deliveries.count }.by(0)
45+
end
5246

53-
it "rejects from addresses with newlines" do
54-
expect do
47+
it "accepts from addresses without newlines" do
5548
expect do
5649
api_user = FactoryGirl.create(:api_user)
57-
ApiUserMailer.signup_email(api_user, { :email_from_address => "[email protected]\nfoo" }).deliver
58-
end.to raise_error(MailSanitizer::InvalidAddress)
59-
end.to change { ActionMailer::Base.deliveries.count }.by(0)
60-
end
50+
ApiUserMailer.signup_email(api_user, { :email_from_address => "[email protected]" }).deliver
51+
end.to change { ActionMailer::Base.deliveries.count }.by(1)
52+
end
53+
54+
it "rejects from addresses with newlines" do
55+
expect do
56+
expect do
57+
api_user = FactoryGirl.create(:api_user)
58+
ApiUserMailer.signup_email(api_user, { :email_from_address => "[email protected]\nfoo" }).deliver
59+
end.to raise_error(MailSanitizer::InvalidAddress)
60+
end.to change { ActionMailer::Base.deliveries.count }.by(0)
61+
end
62+
63+
it "rejects from addresses with carriage returns" do
64+
expect do
65+
expect do
66+
api_user = FactoryGirl.create(:api_user)
67+
ApiUserMailer.signup_email(api_user, { :email_from_address => "[email protected]\rfoo" }).deliver
68+
end.to raise_error(MailSanitizer::InvalidAddress)
69+
end.to change { ActionMailer::Base.deliveries.count }.by(0)
70+
end
6171

62-
it "rejects from addresses with carriage returns" do
63-
expect do
72+
it "accepts from addresses 500 chars or less" do
6473
expect do
6574
api_user = FactoryGirl.create(:api_user)
66-
ApiUserMailer.signup_email(api_user, { :email_from_address => "[email protected]\rfoo" }).deliver
67-
end.to raise_error(MailSanitizer::InvalidAddress)
68-
end.to change { ActionMailer::Base.deliveries.count }.by(0)
75+
ApiUserMailer.signup_email(api_user, { :email_from_address => "#{"o" * 488}@example.com" }).deliver
76+
end.to change { ActionMailer::Base.deliveries.count }.by(1)
77+
end
78+
79+
it "rejects from addresses greater than 500 chars" do
80+
expect do
81+
expect do
82+
api_user = FactoryGirl.create(:api_user)
83+
ApiUserMailer.signup_email(api_user, { :email_from_address => "#{"o" * 489}@example.com" }).deliver
84+
end.to raise_error(MailSanitizer::InvalidAddress)
85+
end.to change { ActionMailer::Base.deliveries.count }.by(0)
86+
end
87+
6988
end
89+
end
7090

71-
it "accepts from addresses 500 chars or less" do
72-
expect do
73-
api_user = FactoryGirl.create(:api_user)
74-
ApiUserMailer.signup_email(api_user, { :email_from_address => "#{"o" * 488}@example.com" }).deliver
75-
end.to change { ActionMailer::Base.deliveries.count }.by(1)
91+
describe "signup_email" do
92+
before(:each) do
93+
ApiUmbrellaConfig[:web][:contact_form_email] = "[email protected]"
7694
end
7795

78-
it "rejects from addresses greater than 500 chars" do
79-
expect do
80-
expect do
81-
api_user = FactoryGirl.create(:api_user)
82-
ApiUserMailer.signup_email(api_user, { :email_from_address => "#{"o" * 489}@example.com" }).deliver
83-
end.to raise_error(MailSanitizer::InvalidAddress)
84-
end.to change { ActionMailer::Base.deliveries.count }.by(0)
96+
let(:api_user) { FactoryGirl.create(:api_user,
97+
:first_name => "aaa",
98+
:last_name => "bbb",
99+
:use_description => "I WANNA DO EVERYTHING",
100+
:email => "[email protected]") }
101+
102+
subject { ApiUserMailer.notify_api_admin(api_user).deliver }
103+
104+
it "send an email " do
105+
expect { subject }.to change { ActionMailer::Base.deliveries.count }.by(1)
85106
end
86107

108+
it "send an email to the contact email" do
109+
subject
110+
expect(ActionMailer::Base.deliveries.first.to).to eq ["[email protected]"]
111+
end
112+
113+
it "the receiver can be overwrited by the admin " do
114+
ApiUmbrellaConfig[:admin_notify_email] = "[email protected]"
115+
subject
116+
expect(ActionMailer::Base.deliveries.first.to).to eq ["[email protected]"]
117+
end
118+
119+
it "send an email with the name of the person in the subject" do
120+
subject
121+
expect(ActionMailer::Base.deliveries.first.subject).to eq "aaa bbb just subscribed"
122+
end
123+
124+
it "send an email with usage in the body" do
125+
subject
126+
expect(ActionMailer::Base.deliveries.first.encoded).to include "I WANNA DO EVERYTHING"
127+
end
87128
end
88129
end

0 commit comments

Comments
 (0)