discourse/lib/tasks/admin.rake

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

112 lines
3.3 KiB
Ruby
Raw Normal View History

# frozen_string_literal: true
2014-09-09 07:03:42 +08:00
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
2014-09-09 07:03:42 +08:00
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,
)
2014-09-09 07:03:42 +08:00
end
2013-06-10 09:56:51 +08:00
desc "Creates a forum administrator"
task "admin:create" => :environment do
require "highline/import"
2014-07-02 04:33:02 +08:00
2013-06-10 09:56:51 +08:00
begin
2014-07-02 16:00:38 +08:00
email = ask("Email: ")
2014-07-02 04:33:02 +08:00
existing_user = User.find_by_email(email)
# check if user account already exists
2014-07-02 16:00:38 +08:00
if existing_user
2014-07-02 04:33:02 +08:00
# user already exists, ask for password reset
admin = existing_user
2014-07-07 19:28:23 +08:00
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")
2014-07-02 04:33:02 +08:00
begin
2014-07-02 16:00:38 +08:00
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
2014-07-02 04:33:02 +08:00
admin.password = password
end
else
# create new user
admin = User.new
admin.email = email
admin.username = UserNameSuggester.suggest(admin.email)
2014-07-02 04:33:02 +08:00
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
2014-07-02 04:33:02 +08:00
admin.password = password
end
admin.name = ask("Full name: ") if SiteSetting.full_name_required && admin.name.blank?
2014-07-02 04:33:02 +08:00
# save/update user account
2013-06-10 09:56:51 +08:00
saved = admin.save
say(admin.errors.full_messages.join("\n")) unless saved
2013-06-10 09:56:51 +08:00
end while !saved
2014-07-02 04:33:02 +08:00
say "\nEnsuring account is active!"
admin.active = true
admin.save
2014-07-02 16:00:38 +08:00
if existing_user
2014-07-02 04:33:02 +08:00
say("\nAccount updated successfully!")
else
say("\nAccount created successfully with username #{admin.username}")
end
# grant admin privileges
2014-07-07 19:28:23 +08:00
grant_admin = ask("Do you want to grant Admin privileges to this account? (Y/n) ")
if (grant_admin == "" || grant_admin.downcase == "y")
2014-07-02 04:33:02 +08:00
admin.grant_admin!
2018-04-07 19:27:17 +08:00
admin.change_trust_level!(1) if admin.trust_level < 1
2014-07-02 04:33:02 +08:00
admin.email_tokens.update_all confirmed: true
admin.activate
say("\nYour account now has Admin privileges!")
end
2013-06-10 09:56:51 +08:00
end