discourse/app/services/user_activator.rb
Gabriel Grubba 52eb4e2ec4
DEV: Change authenticated_with_oauth to use key instead of string. (#38381)
Minor cleanup updating how `authenticated_with_oauth` was being called.

`Rack::Session` object supports indifferent access, all
`authenticated_with_oauth` uses are key-based, and this one was off

Also added tests for `LoginActivator` class.
2026-03-10 18:31:32 -03:00

78 lines
1.5 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.redeemable?)
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.create!(email: user.email, scope: EmailToken.scopes[:signup])
EmailToken.enqueue_signup_email(email_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, { authenticated_with_oauth: session[:authenticated_with_oauth] })
user.enqueue_welcome_message("welcome_user")
success_message
end
def success_message
I18n.t("login.active")
end
end