aboutsummaryrefslogtreecommitdiffstats
path: root/app
diff options
context:
space:
mode:
authorDavid Heinemeier Hansson <david@loudthinking.com>2018-09-27 17:39:13 -0700
committerDavid Heinemeier Hansson <david@loudthinking.com>2018-09-27 17:39:13 -0700
commite1486aa3535005175ae9859daba44b1e1d67f1d1 (patch)
treed1623ac451b3662531f81ad439a4832dfa144665 /app
parentab92058bbdb3240dca2fbf51d86a720ee7bce1ca (diff)
downloadrails-e1486aa3535005175ae9859daba44b1e1d67f1d1.tar.gz
rails-e1486aa3535005175ae9859daba44b1e1d67f1d1.tar.bz2
rails-e1486aa3535005175ae9859daba44b1e1d67f1d1.zip
Flesh out conductor interface
Diffstat (limited to 'app')
-rw-r--r--app/controllers/action_mailroom/inbound_emails_controller.rb25
-rw-r--r--app/controllers/rails/conductor/action_mailroom/inbound_emails_controller.rb30
-rw-r--r--app/controllers/rails/conductor/base_controller.rb10
-rw-r--r--app/views/action_mailroom/inbound_emails/new.html.erb8
-rw-r--r--app/views/layouts/action_mailroom.html.erb7
-rw-r--r--app/views/layouts/rails/conductor.html.erb7
-rw-r--r--app/views/rails/conductor/action_mailroom/inbound_emails/index.html.erb (renamed from app/views/action_mailroom/inbound_emails/index.html.erb)4
-rw-r--r--app/views/rails/conductor/action_mailroom/inbound_emails/new.html.erb27
-rw-r--r--app/views/rails/conductor/action_mailroom/inbound_emails/show.html.erb (renamed from app/views/action_mailroom/inbound_emails/show.html.erb)5
9 files changed, 82 insertions, 41 deletions
diff --git a/app/controllers/action_mailroom/inbound_emails_controller.rb b/app/controllers/action_mailroom/inbound_emails_controller.rb
index b8fa6cde49..0723bd39c3 100644
--- a/app/controllers/action_mailroom/inbound_emails_controller.rb
+++ b/app/controllers/action_mailroom/inbound_emails_controller.rb
@@ -2,38 +2,15 @@
# TODO: Spam/malware catching?
# TODO: Specific bounces for SMTP good citizenship: 200/404/400
class ActionMailroom::InboundEmailsController < ActionController::Base
- layout "action_mailroom"
-
skip_forgery_protection
- before_action :ensure_development_env, except: :create
before_action :require_rfc822_message, only: :create
- def index
- @inbound_emails = ActionMailroom::InboundEmail.order(created_at: :desc)
- end
-
- def new
- end
-
- def show
- @inbound_email = ActionMailroom::InboundEmail.find(params[:id])
- end
-
def create
ActionMailroom::InboundEmail.create_from_raw_email!(params[:message])
-
- respond_to do |format|
- format.html { redirect_to main_app.rails_new_inbound_email_url }
- format.any { head :created }
- end
+ head :created
end
private
- # TODO: Should probably separate the admin interface and do more to ensure that it isn't exposed to the web
- def ensure_development_env
- head :forbidden unless Rails.env.development?
- end
-
def require_rfc822_message
head :unsupported_media_type unless params.require(:message).content_type == 'message/rfc822'
end
diff --git a/app/controllers/rails/conductor/action_mailroom/inbound_emails_controller.rb b/app/controllers/rails/conductor/action_mailroom/inbound_emails_controller.rb
new file mode 100644
index 0000000000..2281f5bcae
--- /dev/null
+++ b/app/controllers/rails/conductor/action_mailroom/inbound_emails_controller.rb
@@ -0,0 +1,30 @@
+class Rails::Conductor::ActionMailroom::InboundEmailsController < Rails::Conductor::BaseController
+ def index
+ @inbound_emails = ActionMailroom::InboundEmail.order(created_at: :desc)
+ end
+
+ def new
+ end
+
+ def show
+ @inbound_email = ActionMailroom::InboundEmail.find(params[:id])
+ end
+
+ def create
+ inbound_email = create_inbound_email(new_mail)
+ redirect_to main_app.rails_conductor_inbound_email_url(inbound_email)
+ end
+
+ private
+ def new_mail
+ Mail.new params.require(:mail).permit(:from, :to, :cc, :bcc, :subject, :body)
+ end
+
+ def create_inbound_email(mail)
+ ActionMailroom::InboundEmail.create! raw_email: new_raw_email(mail), message_id: mail.message_id
+ end
+
+ def new_raw_email(mail)
+ { io: StringIO.new(new_mail.to_s), filename: 'inbound.eml', content_type: 'message/rfc822', identify: false }
+ end
+end
diff --git a/app/controllers/rails/conductor/base_controller.rb b/app/controllers/rails/conductor/base_controller.rb
new file mode 100644
index 0000000000..cfa0b84963
--- /dev/null
+++ b/app/controllers/rails/conductor/base_controller.rb
@@ -0,0 +1,10 @@
+# TODO: Move this to Rails::Conductor gem
+class Rails::Conductor::BaseController < ActionController::Base
+ layout "rails/conductor"
+ before_action :ensure_development_env
+
+ private
+ def ensure_development_env
+ head :forbidden unless Rails.env.development?
+ end
+end
diff --git a/app/views/action_mailroom/inbound_emails/new.html.erb b/app/views/action_mailroom/inbound_emails/new.html.erb
deleted file mode 100644
index dfd0bd7ea5..0000000000
--- a/app/views/action_mailroom/inbound_emails/new.html.erb
+++ /dev/null
@@ -1,8 +0,0 @@
-<% provide :title, "Deliver new inbound email" %>
-
-<h1>Deliver new inbound email</h1>
-
-<%= form_with(url: main_app.rails_inbound_emails_url, remote: false) do |form| %>
- <%= form.file_field :message, size: "150x50", autofocus: true %><br>
- <%= form.submit "Deliver inbound email" %>
-<% end %>
diff --git a/app/views/layouts/action_mailroom.html.erb b/app/views/layouts/action_mailroom.html.erb
deleted file mode 100644
index 3efa8c3989..0000000000
--- a/app/views/layouts/action_mailroom.html.erb
+++ /dev/null
@@ -1,7 +0,0 @@
-<html>
-<head>
- <title><%= yield :title %></title>
-</head>
-<body>
-<%= yield %>
-</html>
diff --git a/app/views/layouts/rails/conductor.html.erb b/app/views/layouts/rails/conductor.html.erb
new file mode 100644
index 0000000000..75157feb78
--- /dev/null
+++ b/app/views/layouts/rails/conductor.html.erb
@@ -0,0 +1,7 @@
+<html>
+<head>
+ <title>Rails Conductor: <%= yield :title %></title>
+</head>
+<body>
+<%= yield %>
+</html>
diff --git a/app/views/action_mailroom/inbound_emails/index.html.erb b/app/views/rails/conductor/action_mailroom/inbound_emails/index.html.erb
index 6636e351be..19c53984e2 100644
--- a/app/views/action_mailroom/inbound_emails/index.html.erb
+++ b/app/views/rails/conductor/action_mailroom/inbound_emails/index.html.erb
@@ -6,10 +6,10 @@
<tr><th>Message ID</th><th>Status</th></tr>
<% @inbound_emails.each do |inbound_email| %>
<tr>
- <td><%= link_to inbound_email.message_id, main_app.rails_inbound_email_path(inbound_email) %></td>
+ <td><%= link_to inbound_email.message_id, main_app.rails_conductor_inbound_email_path(inbound_email) %></td>
<td><%= inbound_email.status %></td>
</tr>
<% end %>
</table>
-<%= link_to "Deliver new inbound email", main_app.new_rails_inbound_email_path %> \ No newline at end of file
+<%= link_to "Deliver new inbound email", main_app.new_rails_conductor_inbound_email_path %> \ No newline at end of file
diff --git a/app/views/rails/conductor/action_mailroom/inbound_emails/new.html.erb b/app/views/rails/conductor/action_mailroom/inbound_emails/new.html.erb
new file mode 100644
index 0000000000..be989ff0bc
--- /dev/null
+++ b/app/views/rails/conductor/action_mailroom/inbound_emails/new.html.erb
@@ -0,0 +1,27 @@
+<% provide :title, "Deliver new inbound email" %>
+
+<h1>Deliver new inbound email</h1>
+
+<%= form_with(url: main_app.rails_conductor_inbound_emails_path, scope: :mail, local: true) do |form| %>
+ <div>
+ <%= form.label :from, "From" %><br>
+ <%= form.text_field :from %>
+ </div>
+
+ <div>
+ <%= form.label :to, "To" %><br>
+ <%= form.text_field :to %>
+ </div>
+
+ <div>
+ <%= form.label :subject, "Subject" %><br>
+ <%= form.text_field :subject %>
+ </div>
+
+ <div>
+ <%= form.label :body, "Body" %><br>
+ <%= form.text_area :body, size: "40x20" %>
+ </div>
+
+ <%= form.submit "Deliver inbound email" %>
+<% end %>
diff --git a/app/views/action_mailroom/inbound_emails/show.html.erb b/app/views/rails/conductor/action_mailroom/inbound_emails/show.html.erb
index bc443775e4..e6f40b19e2 100644
--- a/app/views/action_mailroom/inbound_emails/show.html.erb
+++ b/app/views/rails/conductor/action_mailroom/inbound_emails/show.html.erb
@@ -6,3 +6,8 @@
<li>Retry</li>
<li>Incinerate</li>
</ul>
+
+<details>
+ <summary>Full email source</summary>
+ <pre><%= @inbound_email.source %></pre>
+</details>