aboutsummaryrefslogtreecommitdiffstats
path: root/app
diff options
context:
space:
mode:
authorDavid Heinemeier Hansson <david@loudthinking.com>2018-09-27 16:45:59 -0700
committerDavid Heinemeier Hansson <david@loudthinking.com>2018-09-27 16:45:59 -0700
commitb1e08b468b7041ef5df179213f686722b0ead358 (patch)
treefee5085088a1b24f323f5e67f6dd2534dbb49d5e /app
parent4f0d6c87b15d96a4dba252be833b367bcd675e2b (diff)
downloadrails-b1e08b468b7041ef5df179213f686722b0ead358.tar.gz
rails-b1e08b468b7041ef5df179213f686722b0ead358.tar.bz2
rails-b1e08b468b7041ef5df179213f686722b0ead358.zip
Provide a basic admin interface
BEHOLD THE CONDUCTOR!
Diffstat (limited to 'app')
-rw-r--r--app/controllers/action_mailroom/inbound_emails_controller.rb27
-rw-r--r--app/views/action_mailroom/inbound_emails/index.html.erb15
-rw-r--r--app/views/action_mailroom/inbound_emails/new.html.erb8
-rw-r--r--app/views/action_mailroom/inbound_emails/show.html.erb8
-rw-r--r--app/views/layouts/action_mailroom.html.erb7
5 files changed, 63 insertions, 2 deletions
diff --git a/app/controllers/action_mailroom/inbound_emails_controller.rb b/app/controllers/action_mailroom/inbound_emails_controller.rb
index cf44367b7b..b8fa6cde49 100644
--- a/app/controllers/action_mailroom/inbound_emails_controller.rb
+++ b/app/controllers/action_mailroom/inbound_emails_controller.rb
@@ -2,15 +2,38 @@
# 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 :require_rfc822_message
+ 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])
- head :created
+
+ respond_to do |format|
+ format.html { redirect_to main_app.rails_new_inbound_email_url }
+ format.any { head :created }
+ end
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/views/action_mailroom/inbound_emails/index.html.erb b/app/views/action_mailroom/inbound_emails/index.html.erb
new file mode 100644
index 0000000000..6636e351be
--- /dev/null
+++ b/app/views/action_mailroom/inbound_emails/index.html.erb
@@ -0,0 +1,15 @@
+<% provide :title, "Deliver new inbound email" %>
+
+<h1>All inbound emails</h1>
+
+<table>
+ <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><%= 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
diff --git a/app/views/action_mailroom/inbound_emails/new.html.erb b/app/views/action_mailroom/inbound_emails/new.html.erb
new file mode 100644
index 0000000000..dfd0bd7ea5
--- /dev/null
+++ b/app/views/action_mailroom/inbound_emails/new.html.erb
@@ -0,0 +1,8 @@
+<% 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/action_mailroom/inbound_emails/show.html.erb b/app/views/action_mailroom/inbound_emails/show.html.erb
new file mode 100644
index 0000000000..bc443775e4
--- /dev/null
+++ b/app/views/action_mailroom/inbound_emails/show.html.erb
@@ -0,0 +1,8 @@
+<% provide :title, @inbound_email.message_id %>
+
+<h1><%= @inbound_email.message_id %>: <%= @inbound_email.status %></h1>
+
+<ul>
+ <li>Retry</li>
+ <li>Incinerate</li>
+</ul>
diff --git a/app/views/layouts/action_mailroom.html.erb b/app/views/layouts/action_mailroom.html.erb
new file mode 100644
index 0000000000..3efa8c3989
--- /dev/null
+++ b/app/views/layouts/action_mailroom.html.erb
@@ -0,0 +1,7 @@
+<html>
+<head>
+ <title><%= yield :title %></title>
+</head>
+<body>
+<%= yield %>
+</html>