Select Git revision
Forked from
Peter Gerwinski / bs
Source project has a limited visibility.
migrations.rake 12.44 KiB
# frozen_string_literal: true
# rubocop:disable all
namespace :migrations do
DEFAULT_ROLES_MAP = { "admin" => "Administrator", "user" => "User" }.freeze
COMMON = {
headers: { "Content-Type" => "application/json", "Accept" => "application/json" },
batch_size: 500,
filtered_roles: %w[admin user super_admin pending denied],
filtered_user_roles: %w[super_admin pending denied]
}.freeze
desc "Migrates v2 resources to v3"
task :roles, [:provider] => :environment do |_task, args|
has_encountred_issue = 0
roles = Role.unscoped
roles = roles.where(provider: args[:provider]) if args[:provider].present?
roles = roles.select(:id, :name, :provider)
.includes(:role_permissions)
.where.not(name: COMMON[:filtered_roles])
roles.find_each(batch_size: COMMON[:batch_size]) do |r|
# RolePermissions
role_permissions_hash = r.role_permissions.pluck(:name, :value).to_h
role_permissions = {
CreateRoom: role_permissions_hash['can_create_rooms'] == "true" ? "true" : "false",
CanRecord: role_permissions_hash['can_launch_recording'] == "true" ? "true" : "false",
ManageUsers: role_permissions_hash['can_manage_users'] == "true" ? "true" : "false",
ManageRoles: role_permissions_hash['can_edit_roles'] == "true" ? "true" : "false",
# In V3, can_manage_room_recordings is split into two distinct permissions: ManageRooms and ManageRecordings
ManageRooms: role_permissions_hash['can_manage_rooms_recordings'] == "true" ? "true" : "false",
ManageRecordings: role_permissions_hash['can_manage_rooms_recordings'] == "true" ? "true" : "false",
ManageSiteSettings: role_permissions_hash['can_edit_site_settings'] == "true" ? "true" : "false"
}
params = { role: { name: r.name.capitalize,
provider: r.provider,
role_permissions: role_permissions } }
response = Net::HTTP.post(uri('roles'), payload(params), COMMON[:headers])
case response
when Net::HTTPCreated
puts green "Successfully migrated Role:"
puts cyan "ID: #{r.id}"
puts cyan "Name: #{params[:role][:name]}"
puts cyan "Provider: #{params[:role][:provider]}"
else
puts red "Unable to migrate Role:"
puts yellow "ID: #{r.id}"
puts yellow "Name: #{params[:role][:name]}"
puts yellow "Provider: #{params[:role][:provider]}"
puts red "Errors: #{JSON.parse(response.body.to_s)['errors']}"
has_encountred_issue = 1 # At least one of the migrations failed.
end
end
puts
puts green "Roles migration complete."
puts yellow "In case of an error please retry the process to resolve." unless has_encountred_issue.zero?
exit has_encountred_issue
end
task :users, [:provider, :start, :stop] => :environment do |_task, args|
start, stop = range(args)
has_encountred_issue = 0
user = User.unscoped