aboutsummaryrefslogtreecommitdiffstats
path: root/actionmailbox/app/controllers/action_mailbox/base_controller.rb
diff options
context:
space:
mode:
Diffstat (limited to 'actionmailbox/app/controllers/action_mailbox/base_controller.rb')
-rw-r--r--actionmailbox/app/controllers/action_mailbox/base_controller.rb36
1 files changed, 36 insertions, 0 deletions
diff --git a/actionmailbox/app/controllers/action_mailbox/base_controller.rb b/actionmailbox/app/controllers/action_mailbox/base_controller.rb
new file mode 100644
index 0000000000..d4169cc9bb
--- /dev/null
+++ b/actionmailbox/app/controllers/action_mailbox/base_controller.rb
@@ -0,0 +1,36 @@
+# frozen_string_literal: true
+
+# The base class for all Active Mailbox ingress controllers.
+class ActionMailbox::BaseController < ActionController::Base
+ skip_forgery_protection
+
+ before_action :ensure_configured
+
+ def self.prepare
+ # Override in concrete controllers to run code on load.
+ end
+
+ private
+ def ensure_configured
+ unless ActionMailbox.ingress == ingress_name
+ head :not_found
+ end
+ end
+
+ def ingress_name
+ self.class.name.remove(/\AActionMailbox::Ingresses::/, /::InboundEmailsController\z/).underscore.to_sym
+ end
+
+
+ def authenticate_by_password
+ if password.present?
+ http_basic_authenticate_or_request_with name: "actionmailbox", password: password, realm: "Action Mailbox"
+ else
+ raise ArgumentError, "Missing required ingress credentials"
+ end
+ end
+
+ def password
+ Rails.application.credentials.dig(:action_mailbox, :ingress_password) || ENV["RAILS_INBOUND_EMAIL_PASSWORD"]
+ end
+end