mirror of
https://github.com/codeninjasllc/discourse.git
synced 2024-11-27 09:36:19 -05:00
new 'enable_staged_users' site setting
This commit is contained in:
parent
ddebd76c44
commit
39863953cd
7 changed files with 45 additions and 7 deletions
|
@ -11,7 +11,7 @@ class Admin::EmailTemplatesController < Admin::AdminController
|
||||||
"system_messages.email_reject_destination", "system_messages.email_reject_empty",
|
"system_messages.email_reject_destination", "system_messages.email_reject_empty",
|
||||||
"system_messages.email_reject_invalid_access", "system_messages.email_reject_no_account",
|
"system_messages.email_reject_invalid_access", "system_messages.email_reject_no_account",
|
||||||
"system_messages.email_reject_parsing", "system_messages.email_reject_post_error",
|
"system_messages.email_reject_parsing", "system_messages.email_reject_post_error",
|
||||||
"system_messages.email_reject_post_error_specified",
|
"system_messages.email_reject_post_error_specified", "system_messages.email_reject_user_not_found",
|
||||||
"system_messages.email_reject_reply_key", "system_messages.email_reject_topic_closed",
|
"system_messages.email_reject_reply_key", "system_messages.email_reject_topic_closed",
|
||||||
"system_messages.email_reject_topic_not_found", "system_messages.email_reject_trust_level",
|
"system_messages.email_reject_topic_not_found", "system_messages.email_reject_trust_level",
|
||||||
"system_messages.pending_users_reminder", "system_messages.post_hidden",
|
"system_messages.pending_users_reminder", "system_messages.post_hidden",
|
||||||
|
|
|
@ -40,6 +40,7 @@ module Jobs
|
||||||
message_template = case e
|
message_template = case e
|
||||||
when Email::Receiver::EmptyEmailError then :email_reject_empty
|
when Email::Receiver::EmptyEmailError then :email_reject_empty
|
||||||
when Email::Receiver::NoBodyDetectedError then :email_reject_empty
|
when Email::Receiver::NoBodyDetectedError then :email_reject_empty
|
||||||
|
when Email::Receiver::UserNotFoundError then :email_reject_user_not_found
|
||||||
when Email::Receiver::AutoGeneratedEmailError then :email_reject_auto_generated
|
when Email::Receiver::AutoGeneratedEmailError then :email_reject_auto_generated
|
||||||
when Email::Receiver::InactiveUserError then :email_reject_inactive_user
|
when Email::Receiver::InactiveUserError then :email_reject_inactive_user
|
||||||
when Email::Receiver::BlockedUserError then :email_reject_blocked_user
|
when Email::Receiver::BlockedUserError then :email_reject_blocked_user
|
||||||
|
|
|
@ -1162,6 +1162,7 @@ en:
|
||||||
|
|
||||||
delete_email_logs_after_days: "Delete email logs after (N) days. 0 to keep indefinitely"
|
delete_email_logs_after_days: "Delete email logs after (N) days. 0 to keep indefinitely"
|
||||||
max_emails_per_day_per_user: "Maximum number of emails to send users per day. 0 to disable the limit"
|
max_emails_per_day_per_user: "Maximum number of emails to send users per day. 0 to disable the limit"
|
||||||
|
enable_staged_users: "Automatically create staged users when processing incoming emails."
|
||||||
|
|
||||||
manual_polling_enabled: "Push emails using the API for email replies."
|
manual_polling_enabled: "Push emails using the API for email replies."
|
||||||
pop3_polling_enabled: "Poll via POP3 for email replies."
|
pop3_polling_enabled: "Poll via POP3 for email replies."
|
||||||
|
@ -1828,6 +1829,13 @@ en:
|
||||||
|
|
||||||
Your account does not have the required trust level to post new topics to this email address. If you believe this is in error, contact a staff member.
|
Your account does not have the required trust level to post new topics to this email address. If you believe this is in error, contact a staff member.
|
||||||
|
|
||||||
|
email_reject_user_not_found:
|
||||||
|
subject_template: "[%{site_name}] Email issue -- User Not Found"
|
||||||
|
text_body_template: |
|
||||||
|
We're sorry, but your email message to %{destination} (titled %{former_title}) didn't work.
|
||||||
|
|
||||||
|
Your reply was sent from an unknown email address. Try sending from another email address, or contact a staff member.
|
||||||
|
|
||||||
email_reject_inactive_user:
|
email_reject_inactive_user:
|
||||||
subject_template: "[%{site_name}] Email issue -- Inactive User"
|
subject_template: "[%{site_name}] Email issue -- Inactive User"
|
||||||
text_body_template: |
|
text_body_template: |
|
||||||
|
|
|
@ -560,6 +560,7 @@ email:
|
||||||
default: 365
|
default: 365
|
||||||
min: 0
|
min: 0
|
||||||
max_emails_per_day_per_user: 100
|
max_emails_per_day_per_user: 100
|
||||||
|
enable_staged_users: true
|
||||||
|
|
||||||
files:
|
files:
|
||||||
max_image_size_kb: 3072
|
max_image_size_kb: 3072
|
||||||
|
|
|
@ -10,6 +10,7 @@ module Email
|
||||||
|
|
||||||
class ProcessingError < StandardError; end
|
class ProcessingError < StandardError; end
|
||||||
class EmptyEmailError < ProcessingError; end
|
class EmptyEmailError < ProcessingError; end
|
||||||
|
class UserNotFoundError < ProcessingError; end
|
||||||
class AutoGeneratedEmailError < ProcessingError; end
|
class AutoGeneratedEmailError < ProcessingError; end
|
||||||
class NoBodyDetectedError < ProcessingError; end
|
class NoBodyDetectedError < ProcessingError; end
|
||||||
class InactiveUserError < ProcessingError; end
|
class InactiveUserError < ProcessingError; end
|
||||||
|
@ -53,6 +54,9 @@ module Email
|
||||||
|
|
||||||
def process_internal
|
def process_internal
|
||||||
user = find_or_create_user(@from_email, @from_display_name)
|
user = find_or_create_user(@from_email, @from_display_name)
|
||||||
|
|
||||||
|
raise UserNotFoundError if user.nil?
|
||||||
|
|
||||||
@incoming_email.update_columns(user_id: user.id)
|
@incoming_email.update_columns(user_id: user.id)
|
||||||
|
|
||||||
body, @elided = select_body
|
body, @elided = select_body
|
||||||
|
@ -195,13 +199,23 @@ module Email
|
||||||
end
|
end
|
||||||
|
|
||||||
def find_or_create_user(email, display_name)
|
def find_or_create_user(email, display_name)
|
||||||
username = UserNameSuggester.sanitize_username(display_name) if display_name.present?
|
user = nil
|
||||||
|
|
||||||
User.find_or_create_by(email: email) do |user|
|
User.transaction do
|
||||||
user.username = UserNameSuggester.suggest(username.presence || email)
|
user = User.find_by_email(email)
|
||||||
user.name = display_name.presence || User.suggest_name(email)
|
|
||||||
user.staged = true
|
if user.nil? && SiteSetting.enable_staged_users
|
||||||
|
username = UserNameSuggester.sanitize_username(display_name) if display_name.present?
|
||||||
|
user = User.create(
|
||||||
|
email: email,
|
||||||
|
username: UserNameSuggester.suggest(username.presence || email),
|
||||||
|
name: display_name.presence || User.suggest_name(email),
|
||||||
|
staged: true
|
||||||
|
)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
user
|
||||||
end
|
end
|
||||||
|
|
||||||
def destinations
|
def destinations
|
||||||
|
@ -382,7 +396,7 @@ module Email
|
||||||
display_name = address_field.display_name.try(:to_s)
|
display_name = address_field.display_name.try(:to_s)
|
||||||
if should_invite?(email)
|
if should_invite?(email)
|
||||||
user = find_or_create_user(email, display_name)
|
user = find_or_create_user(email, display_name)
|
||||||
if can_invite?(topic, user)
|
if user && can_invite?(topic, user)
|
||||||
topic.topic_allowed_users.create!(user_id: user.id)
|
topic.topic_allowed_users.create!(user_id: user.id)
|
||||||
topic.add_small_action(sender, "invited_user", user.username)
|
topic.add_small_action(sender, "invited_user", user.username)
|
||||||
end
|
end
|
||||||
|
|
|
@ -21,6 +21,11 @@ describe Email::Receiver do
|
||||||
expect { Email::Receiver.new("") }.to raise_error(Email::Receiver::EmptyEmailError)
|
expect { Email::Receiver.new("") }.to raise_error(Email::Receiver::EmptyEmailError)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "raises and UserNotFoundError when staged users are disabled" do
|
||||||
|
SiteSetting.enable_staged_users = false
|
||||||
|
expect { process(:user_not_found) }.to raise_error(Email::Receiver::UserNotFoundError)
|
||||||
|
end
|
||||||
|
|
||||||
it "raises an AutoGeneratedEmailError when the mail is auto generated" do
|
it "raises an AutoGeneratedEmailError when the mail is auto generated" do
|
||||||
expect { process(:auto_generated_precedence) }.to raise_error(Email::Receiver::AutoGeneratedEmailError)
|
expect { process(:auto_generated_precedence) }.to raise_error(Email::Receiver::AutoGeneratedEmailError)
|
||||||
expect { process(:auto_generated_header) }.to raise_error(Email::Receiver::AutoGeneratedEmailError)
|
expect { process(:auto_generated_header) }.to raise_error(Email::Receiver::AutoGeneratedEmailError)
|
||||||
|
|
9
spec/fixtures/emails/user_not_found.eml
vendored
Normal file
9
spec/fixtures/emails/user_not_found.eml
vendored
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
Return-Path: <user@not.found>
|
||||||
|
From: Not Found <user@not.found>
|
||||||
|
Date: Fri, 15 Jan 2016 00:12:43 +0100
|
||||||
|
Message-ID: <50@foo.bar.mail>
|
||||||
|
Mime-Version: 1.0
|
||||||
|
Content-Type: text/plain
|
||||||
|
Content-Transfer-Encoding: 7bit
|
||||||
|
|
||||||
|
Email from an unknown user.
|
Loading…
Reference in a new issue