discourse/lib/tasks/admin.rake
Osama Sayegh 3187606d34
FEATURE: Add option to hide full name input at signup (#30471)
This commit replaces the `full_name_required` setting with a new `full_name_requirement` setting to allow more flexibility with the name field in the signup form. The new setting has 2 options, "Required at signup" and "Optional at signup", which are equivalent to the true/false possibilities of the old setting, and a third option "Hidden at signup" that hides the name field from the signup form, making it effectively optional too.

New sites will have the "Hidden at signup" option as the default option, and existing site will continue to use the option that maps to their current configuration.

Internal topic: t/136746.
2024-12-30 22:26:20 +03:00

113 lines
3.3 KiB
Ruby

# frozen_string_literal: true
desc "invite an admin to this discourse instance"
task "admin:invite", [:email] => [:environment] do |_, args|
email = args[:email]
if !email || email !~ /@/
puts "ERROR: Expecting rake admin:invite[some@email.com]"
exit 1
end
unless user = User.find_by_email(email)
puts "Creating new account!"
user = User.new(email: email)
user.password = SecureRandom.hex
user.username = UserNameSuggester.suggest(user.email)
end
user.active = true
user.save!
puts "Granting admin!"
user.grant_admin!
user.change_trust_level!(1) if user.trust_level < 1
user.email_tokens.update_all confirmed: true
puts "Sending email!"
email_token =
user.email_tokens.create!(email: user.email, scope: EmailToken.scopes[:password_reset])
Jobs.enqueue(
:user_email,
type: "account_created",
user_id: user.id,
email_token: email_token.token,
)
end
desc "Creates a forum administrator"
task "admin:create" => :environment do
require "highline/import"
begin
email = ask("Email: ")
existing_user = User.find_by_email(email)
# check if user account already exists
if existing_user
# user already exists, ask for password reset
admin = existing_user
reset_password =
ask(
"User with this email already exists! Do you want to reset the password for this email? (Y/n) ",
)
if (reset_password == "" || reset_password.downcase == "y")
begin
password = ask("Password: ") { |q| q.echo = false }
password_confirmation = ask("Repeat password: ") { |q| q.echo = false }
passwords_match = password == password_confirmation
say("Passwords don't match, try again...") unless passwords_match
end while !passwords_match
admin.password = password
end
else
# create new user
admin = User.new
admin.email = email
admin.username = UserNameSuggester.suggest(admin.email)
begin
if ENV["RANDOM_PASSWORD"] == "1"
password = password_confirmation = SecureRandom.hex
else
password = ask("Password: ") { |q| q.echo = false }
password_confirmation = ask("Repeat password: ") { |q| q.echo = false }
end
passwords_match = password == password_confirmation
say("Passwords don't match, try again...") unless passwords_match
end while !passwords_match
admin.password = password
end
admin.name = ask("Full name: ") if SiteSetting.full_name_requirement == "required_at_signup" &&
admin.name.blank?
# save/update user account
saved = admin.save
say(admin.errors.full_messages.join("\n")) unless saved
end while !saved
say "\nEnsuring account is active!"
admin.active = true
admin.save
if existing_user
say("\nAccount updated successfully!")
else
say("\nAccount created successfully with username #{admin.username}")
end
# grant admin privileges
grant_admin = ask("Do you want to grant Admin privileges to this account? (Y/n) ")
if (grant_admin == "" || grant_admin.downcase == "y")
admin.grant_admin!
admin.change_trust_level!(1) if admin.trust_level < 1
admin.email_tokens.update_all confirmed: true
admin.activate
say("\nYour account now has Admin privileges!")
end
end