53 lines
1.7 KiB
Ruby
53 lines
1.7 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
namespace :superadmin do
|
|
desc "create superadmin"
|
|
task create: :environment do
|
|
Kernel.puts "Seeding superadmin"
|
|
Barong::Seed.new().seeds["superadmin"]&.each do |seed|
|
|
Kernel.puts "---"
|
|
raise ConfigError.new("Email missing in users seed") if seed["email"].to_s.empty?
|
|
raise ConfigError.new("Level is missing for user #{seed["email"]}") unless seed["level"].is_a?(Integer)
|
|
|
|
# Skip existing users
|
|
if User.find_by(email: seed["email"], state: seed['state']).present?
|
|
Kernel.puts "User '#{seed['email']}' already exists"
|
|
next
|
|
elsif User.find_by(email: seed["email"]).present?
|
|
User.find_by(email: seed["email"]).update(state: seed['state'])
|
|
next
|
|
end
|
|
|
|
user = User.new(seed)
|
|
user.password ||= SecureRandom.base64(30)
|
|
|
|
if user.save
|
|
Kernel.puts "Created user for '#{user.email}'"
|
|
|
|
# Set correct level with labels
|
|
# levels = Level.where(id: 1..user.level)
|
|
levels = Level.where(id: 1..Level::LEVEL_ID_BOUNDS[user.level.to_s])
|
|
raise ConfigError.new("No enough levels found in database to grant the user to level #{user.level}") if levels.count < user.level
|
|
|
|
levels.find_each do |level|
|
|
user.labels.create(key: level.key, value: level.value, scope: 'private')
|
|
end
|
|
|
|
else
|
|
Kernel.puts "Can't create user '#{user.email}': #{user.errors.full_messages.join('; ')}"
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
task delete: :environment do
|
|
Kernel.puts "deleting superadmin"
|
|
Barong::Seed.new().seeds["superadmin"]&.each do |seed|
|
|
user = User.find_by(email: seed['email'])
|
|
user.update(state: 'inactive')
|
|
end
|
|
end
|
|
|
|
|
|
end
|