diff options
author | David Heinemeier Hansson <david@loudthinking.com> | 2018-09-27 17:39:13 -0700 |
---|---|---|
committer | David Heinemeier Hansson <david@loudthinking.com> | 2018-09-27 17:39:13 -0700 |
commit | e1486aa3535005175ae9859daba44b1e1d67f1d1 (patch) | |
tree | d1623ac451b3662531f81ad439a4832dfa144665 /app | |
parent | ab92058bbdb3240dca2fbf51d86a720ee7bce1ca (diff) | |
download | rails-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.rb | 25 | ||||
-rw-r--r-- | app/controllers/rails/conductor/action_mailroom/inbound_emails_controller.rb | 30 | ||||
-rw-r--r-- | app/controllers/rails/conductor/base_controller.rb | 10 | ||||
-rw-r--r-- | app/views/action_mailroom/inbound_emails/new.html.erb | 8 | ||||
-rw-r--r-- | app/views/layouts/action_mailroom.html.erb | 7 | ||||
-rw-r--r-- | app/views/layouts/rails/conductor.html.erb | 7 | ||||
-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.erb | 27 | ||||
-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> |