Skip to content
Snippets Groups Projects
Select Git revision
  • aacc5be00b37f556b7c44152a31c90a8eb2da5a9
  • 2023ss default protected
  • 2022ss
  • 2021ss
  • 2020ss
  • 2019ss
  • 2018ss
  • 2017ss
  • 2016ss
  • 2015ss
  • 2014ss
11 results

test-4.c

Blame
  • 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