mirror of
https://github.com/discourse/discourse.git
synced 2024-12-15 12:43:42 +08:00
30990006a9
This reduces chances of errors where consumers of strings mutate inputs and reduces memory usage of the app. Test suite passes now, but there may be some stuff left, so we will run a few sites on a branch prior to merging
87 lines
1.6 KiB
Ruby
87 lines
1.6 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class UserActivator
|
|
attr_reader :user, :request, :session, :cookies, :message
|
|
|
|
def initialize(user, request, session, cookies)
|
|
@user = user
|
|
@session = session
|
|
@cookies = cookies
|
|
@request = request
|
|
@message = nil
|
|
end
|
|
|
|
def start
|
|
end
|
|
|
|
def finish
|
|
@message = activator.activate
|
|
end
|
|
|
|
def success_message
|
|
activator.success_message
|
|
end
|
|
|
|
private
|
|
|
|
def activator
|
|
factory.new(user, request, session, cookies)
|
|
end
|
|
|
|
def factory
|
|
invite = Invite.find_by(email: Email.downcase(@user.email))
|
|
|
|
if !user.active?
|
|
EmailActivator
|
|
elsif SiteSetting.must_approve_users? && !(invite.present? && !invite.expired? && !invite.destroyed? && invite.link_valid?)
|
|
ApprovalActivator
|
|
else
|
|
LoginActivator
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
class ApprovalActivator < UserActivator
|
|
def activate
|
|
success_message
|
|
end
|
|
|
|
def success_message
|
|
I18n.t("login.wait_approval")
|
|
end
|
|
end
|
|
|
|
class EmailActivator < UserActivator
|
|
def activate
|
|
email_token = user.email_tokens.unconfirmed.active.first
|
|
email_token = user.email_tokens.create(email: user.email) if email_token.nil?
|
|
|
|
Jobs.enqueue(:critical_user_email,
|
|
type: :signup,
|
|
user_id: user.id,
|
|
email_token: email_token.token
|
|
)
|
|
|
|
success_message
|
|
end
|
|
|
|
def success_message
|
|
I18n.t("login.activate_email", email: Rack::Utils.escape_html(user.email))
|
|
end
|
|
end
|
|
|
|
class LoginActivator < UserActivator
|
|
include CurrentUser
|
|
|
|
def activate
|
|
log_on_user(user)
|
|
user.enqueue_welcome_message('welcome_user')
|
|
success_message
|
|
end
|
|
|
|
def success_message
|
|
I18n.t("login.active")
|
|
end
|
|
end
|