Skip to content
Snippets Groups Projects
Unverified Commit 89f9f6a8 authored by Samuel Couillard's avatar Samuel Couillard Committed by GitHub
Browse files

Migration upgrade (V2): addition of RolePermissions, RoomSettings,...

Migration upgrade (V2): addition of RolePermissions, RoomSettings, SharedAccess, SiteSettings, RoomConfiguration data (#4339)

* Add SiteSettings and RoomConfigs to migration

* Create standalone task for Room Settings

* Quickfixes

* Quickfix

* Rubo

* Add JSON parse

* Fix RoomSettings data structure

* Remove default values from room_settings hash

* Put RoomSettings logicin Room task

* Add SharedAccess task

* Fix SharedAccess logs

* Fix SiteSettings task

* Fix registration method

* Add RolePermissions to Role task

* Move SharedAccess to Room, fix SiteSettings

* Fix SharedAccess

* Add RoomsConfiguration

* Fix Roles after test

* Rename SiteSettings to Settings

* Rubocop

* Add logic to bypass HomeRoom empty string

* fix typos

* Rubocop

* Remove PrimaryColorDark from settings data
parent c1573809
No related branches found
No related tags found
No related merge requests found
......@@ -17,7 +17,23 @@ namespace :migrations do
.select(:id, :name)
.where.not(name: COMMON[:filtered_roles])
.find_each(batch_size: COMMON[:batch_size]) do |r|
params = { role: { name: r.name.capitalize } }
# RolePermissions
role_permissions_hash = RolePermission.where(role_id: r.id).pluck(:name, :value).to_h
# Returns nil if the RolePermission value is the same as the corresponding default value in V3
role_permissions = {
CreateRoom: role_permissions_hash['can_create_rooms'] == "true" ? nil : "false",
CanRecord: role_permissions_hash['can_launch_recording'] == "true" ? nil : "false",
ManageUsers: role_permissions_hash['can_manage_users'] == "false" ? nil : "true",
ManageRoles: role_permissions_hash['can_edit_roles'] == "false" ? nil : "true",
# In V3, can_manage_room_recordings is split into two distinct permissions: ManageRooms and ManageRecordings
ManageRooms: role_permissions_hash['can_manage_rooms_recordings'] == "false" ? nil : "true",
ManageRecordings: role_permissions_hash['can_manage_room_recordings'] == "false" ? nil : "true",
ManageSiteSettings: role_permissions_hash['can_edit_site_settings'] == "false" ? nil : "true"
}.compact
params = { role: { name: r.name.capitalize,
role_permissions: role_permissions } }
response = Net::HTTP.post(uri('roles'), payload(params), COMMON[:headers])
case response
......@@ -50,6 +66,7 @@ namespace :migrations do
.find_each(start: start, finish: stop, batch_size: COMMON[:batch_size]) do |u|
role_name = infer_role_name(u.role.name)
params = { user: { name: u.name, email: u.email, external_id: u.social_uid, language: u.language, role: role_name } }
response = Net::HTTP.post(uri('users'), payload(params), COMMON[:headers])
case response
......@@ -85,16 +102,35 @@ namespace :migrations do
.where(name: COMMON[:filtered_user_roles])
.pluck(:id)
Room.unscoped
.select(:id, :uid, :name, :bbb_id, :last_session, :user_id)
Room.unscoped.select(:id, :uid, :name, :bbb_id, :last_session, :user_id, :room_settings)
.includes(:owner)
.where.not(users: { role_id: filtered_roles_ids, deleted: true }, deleted: true)
.find_each(start: start, finish: stop, batch_size: COMMON[:batch_size]) do |r|
# RoomSettings
parsed_room_settings = JSON.parse(r.room_settings)
# Returns nil if the RoomSetting value is the same as the corresponding default value in V3
room_settings = if parsed_room_settings.empty? # Bypass Home Rome room_settings which is an empty hash by default
{}
else
{
record: parsed_room_settings["recording"] == false ? nil : "true",
muteOnStart: parsed_room_settings["muteOnStart"] == false ? nil : "true",
glAnyoneCanStart: parsed_room_settings["anyoneCanStart"] == false ? nil : "true",
glAnyoneJoinAsModerator: parsed_room_settings["joinModerator"] == false ? nil : "true",
guestPolicy: parsed_room_settings["requireModeratorApproval"] == false ? nil : "ASK_MODERATOR",
}.compact
end
shared_users_emails = SharedAccess.joins(:user).where(room_id: r.id).pluck(:'users.email')
params = { room: { friendly_id: r.uid,
name: r.name,
meeting_id: r.bbb_id,
last_session: r.last_session&.to_datetime,
owner_email: r.owner.email } }
owner_email: r.owner.email,
room_settings: room_settings,
shared_users_emails: shared_users_emails } }
response = Net::HTTP.post(uri('rooms'), payload(params), COMMON[:headers])
case response
......@@ -121,6 +157,52 @@ namespace :migrations do
exit has_encountred_issue
end
task settings: :environment do |_task|
has_encountred_issue = 0
settings_hash = Setting.find_by(provider: 'greenlight').features.pluck(:name, :value).to_h
# SiteSettings
site_settings = {
PrimaryColor: settings_hash['Primary Color'],
PrimaryColorLight: settings_hash['Primary Color Lighten'],
Terms: settings_hash['Legal URL'],
PrivacyPolicy: settings_hash['Privacy Policy URL'],
RegistrationMethod: infer_registration_method(settings_hash['Registration Method']),
ShareRooms: settings_hash['Shared Access'],
PreuploadPresentation: settings_hash['Preupload Presentation'],
}.compact
# RoomConfigurations
room_configurations = {
record: settings_hash['Room Configuration Recording'],
muteOnStart: settings_hash['Room Configuration Mute On Join'],
guestPolicy: settings_hash['Room Configuration Require Moderator'],
glAnyoneCanStart: settings_hash['Room Configuration Allow Any Start'],
glAnyoneJoinAsModerator: settings_hash['Room Configuration All Join Moderator'],
glRequireAuthentication: settings_hash['Room Authentication']
}.compact
params = { settings: { site_settings: site_settings, room_configurations: room_configurations } }
response = Net::HTTP.post(uri('settings'), payload(params), COMMON[:headers])
case response
when Net::HTTPCreated
puts green "Successfully migrated Settings"
else
puts red "Unable to migrate Settings"
has_encountred_issue = 1 # At least one of the migrations failed.
end
puts
puts green "Settings migration completed."
puts yellow "In case of an error please retry the process to resolve." unless has_encountred_issue.zero?
exit has_encountred_issue
end
private
def encrypt_params(params)
......@@ -165,4 +247,16 @@ namespace :migrations do
def infer_role_name(name)
DEFAULT_ROLES_MAP[name] || name.capitalize
end
# Registration Method returns "0", "1" or "2" but V3 expects "open", "invite" or "approval"
def infer_registration_method(registration_method)
case registration_method
when "1"
"invite"
when "2"
"approval"
else
"open"
end
end
end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment