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

Add add_default_tenant rake task (#5269)

* Initial commit

* Rubo

* Remove duplication in controller

* rubo
parent dc6c9488
No related branches found
No related tags found
No related merge requests found
...@@ -41,10 +41,7 @@ module Api ...@@ -41,10 +41,7 @@ module Api
tenant = Tenant.new(name:, client_secret: tenant_params[:client_secret]) tenant = Tenant.new(name:, client_secret: tenant_params[:client_secret])
if tenant.save if tenant.save
create_roles(tenant.name) TenantSetup.new(name).call
create_site_settings(tenant.name)
create_rooms_configs_options(tenant.name)
create_role_permissions(tenant.name)
render_data status: :created render_data status: :created
else else
render_error errors: tenant.errors.to_a, status: :bad_request render_error errors: tenant.errors.to_a, status: :bad_request
...@@ -67,95 +64,6 @@ module Api ...@@ -67,95 +64,6 @@ module Api
def cache; end def cache; end
private
def create_roles(provider)
Role.create! [
{ name: 'Administrator', provider: },
{ name: 'User', provider: },
{ name: 'Guest', provider: }
]
end
def create_site_settings(provider)
SiteSetting.create! [
{ setting: Setting.find_by(name: 'PrimaryColor'), value: '#467fcf', provider: },
{ setting: Setting.find_by(name: 'PrimaryColorLight'), value: '#e8eff9', provider: },
{ setting: Setting.find_by(name: 'PrimaryColorDark'), value: '#316cbe', provider: },
{ setting: Setting.find_by(name: 'BrandingImage'),
value: ActionController::Base.helpers.image_path('bbb_logo.png'),
provider: },
{ setting: Setting.find_by(name: 'Terms'), value: '', provider: },
{ setting: Setting.find_by(name: 'PrivacyPolicy'), value: '', provider: },
{ setting: Setting.find_by(name: 'RegistrationMethod'), value: SiteSetting::REGISTRATION_METHODS[:open], provider: },
{ setting: Setting.find_by(name: 'ShareRooms'), value: 'true', provider: },
{ setting: Setting.find_by(name: 'PreuploadPresentation'), value: 'true', provider: },
{ setting: Setting.find_by(name: 'RoleMapping'), value: '', provider: },
{ setting: Setting.find_by(name: 'DefaultRole'), provider:, value: 'User' }
]
end
def create_rooms_configs_options(provider)
RoomsConfiguration.create! [
{ meeting_option: MeetingOption.find_by(name: 'record'), value: 'default_enabled', provider: },
{ meeting_option: MeetingOption.find_by(name: 'muteOnStart'), value: 'optional', provider: },
{ meeting_option: MeetingOption.find_by(name: 'guestPolicy'), value: 'optional', provider: },
{ meeting_option: MeetingOption.find_by(name: 'glAnyoneCanStart'), value: 'optional', provider: },
{ meeting_option: MeetingOption.find_by(name: 'glAnyoneJoinAsModerator'), value: 'optional', provider: },
{ meeting_option: MeetingOption.find_by(name: 'glRequireAuthentication'), value: 'optional', provider: },
{ meeting_option: MeetingOption.find_by(name: 'glViewerAccessCode'), value: 'optional', provider: },
{ meeting_option: MeetingOption.find_by(name: 'glModeratorAccessCode'), value: 'optional', provider: }
]
end
def create_role_permissions(provider)
admin = Role.find_by(name: 'Administrator', provider:)
user = Role.find_by(name: 'User', provider:)
guest = Role.find_by(name: 'Guest', provider:)
create_room = Permission.find_by(name: 'CreateRoom')
manage_users = Permission.find_by(name: 'ManageUsers')
manage_rooms = Permission.find_by(name: 'ManageRooms')
manage_recordings = Permission.find_by(name: 'ManageRecordings')
manage_site_settings = Permission.find_by(name: 'ManageSiteSettings')
manage_roles = Permission.find_by(name: 'ManageRoles')
shared_list = Permission.find_by(name: 'SharedList')
can_record = Permission.find_by(name: 'CanRecord')
room_limit = Permission.find_by(name: 'RoomLimit')
RolePermission.create! [
{ role: admin, permission: create_room, value: 'true' },
{ role: admin, permission: manage_users, value: 'true' },
{ role: admin, permission: manage_rooms, value: 'true' },
{ role: admin, permission: manage_recordings, value: 'true' },
{ role: admin, permission: manage_site_settings, value: 'true' },
{ role: admin, permission: manage_roles, value: 'true' },
{ role: admin, permission: shared_list, value: 'true' },
{ role: admin, permission: can_record, value: 'true' },
{ role: admin, permission: room_limit, value: '100' },
{ role: user, permission: create_room, value: 'true' },
{ role: user, permission: manage_users, value: 'false' },
{ role: user, permission: manage_rooms, value: 'false' },
{ role: user, permission: manage_recordings, value: 'false' },
{ role: user, permission: manage_site_settings, value: 'false' },
{ role: user, permission: manage_roles, value: 'false' },
{ role: user, permission: shared_list, value: 'true' },
{ role: user, permission: can_record, value: 'true' },
{ role: user, permission: room_limit, value: '100' },
{ role: guest, permission: create_room, value: 'false' },
{ role: guest, permission: manage_users, value: 'false' },
{ role: guest, permission: manage_rooms, value: 'false' },
{ role: guest, permission: manage_recordings, value: 'false' },
{ role: guest, permission: manage_site_settings, value: 'false' },
{ role: guest, permission: manage_roles, value: 'false' },
{ role: guest, permission: shared_list, value: 'true' },
{ role: guest, permission: can_record, value: 'true' },
{ role: guest, permission: room_limit, value: '100' }
]
end
def delete_roles(provider) def delete_roles(provider)
Role.where(provider:).destroy_all Role.where(provider:).destroy_all
end end
......
# BigBlueButton open source conferencing system - http://www.bigbluebutton.org/.
#
# Copyright (c) 2022 BigBlueButton Inc. and by respective authors (see below).
#
# This program is free software; you can redistribute it and/or modify it under the
# terms of the GNU Lesser General Public License as published by the Free Software
# Foundation; either version 3.0 of the License, or (at your option) any later
# version.
#
# Greenlight is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License along
# with Greenlight; if not, see <http://www.gnu.org/licenses/>.
# frozen_string_literal: true
# Creates the roles, site settings, and room config options for the given tenant.
class TenantSetup
def initialize(provider)
@provider = provider
end
def call
create_roles
create_site_settings
create_rooms_configs_options
create_role_permissions
end
def create_roles
Role.create! [
{ name: 'Administrator', provider: @provider },
{ name: 'User', provider: @provider },
{ name: 'Guest', provider: @provider }
]
end
def create_site_settings
SiteSetting.create! [
{ setting: Setting.find_by(name: 'PrimaryColor'), value: '#467fcf', provider: @provider },
{ setting: Setting.find_by(name: 'PrimaryColorLight'), value: '#e8eff9', provider: @provider },
{ setting: Setting.find_by(name: 'PrimaryColorDark'), value: '#316cbe', provider: @provider },
{ setting: Setting.find_by(name: 'BrandingImage'),
value: ActionController::Base.helpers.image_path('bbb_logo.png'),
provider: @provider },
{ setting: Setting.find_by(name: 'Terms'), value: '', provider: @provider },
{ setting: Setting.find_by(name: 'PrivacyPolicy'), value: '', provider: @provider },
{ setting: Setting.find_by(name: 'RegistrationMethod'), value: SiteSetting::REGISTRATION_METHODS[:open],
provider: @provider },
{ setting: Setting.find_by(name: 'ShareRooms'), value: 'true', provider: @provider },
{ setting: Setting.find_by(name: 'PreuploadPresentation'), value: 'true', provider: @provider },
{ setting: Setting.find_by(name: 'RoleMapping'), value: '', provider: @provider },
{ setting: Setting.find_by(name: 'DefaultRole'), provider: @provider, value: 'User' }
]
end
def create_rooms_configs_options
RoomsConfiguration.create! [
{ meeting_option: MeetingOption.find_by(name: 'record'), value: 'default_enabled', provider: @provider },
{ meeting_option: MeetingOption.find_by(name: 'muteOnStart'), value: 'optional', provider: @provider },
{ meeting_option: MeetingOption.find_by(name: 'guestPolicy'), value: 'optional', provider: @provider },
{ meeting_option: MeetingOption.find_by(name: 'glAnyoneCanStart'), value: 'optional', provider: @provider },
{ meeting_option: MeetingOption.find_by(name: 'glAnyoneJoinAsModerator'), value: 'optional', provider: @provider },
{ meeting_option: MeetingOption.find_by(name: 'glRequireAuthentication'), value: 'optional', provider: @provider },
{ meeting_option: MeetingOption.find_by(name: 'glViewerAccessCode'), value: 'optional', provider: @provider },
{ meeting_option: MeetingOption.find_by(name: 'glModeratorAccessCode'), value: 'optional', provider: @provider }
]
end
def create_role_permissions
admin = Role.find_by(name: 'Administrator', provider: @provider)
user = Role.find_by(name: 'User', provider: @provider)
guest = Role.find_by(name: 'Guest', provider: @provider)
create_room = Permission.find_by(name: 'CreateRoom')
manage_users = Permission.find_by(name: 'ManageUsers')
manage_rooms = Permission.find_by(name: 'ManageRooms')
manage_recordings = Permission.find_by(name: 'ManageRecordings')
manage_site_settings = Permission.find_by(name: 'ManageSiteSettings')
manage_roles = Permission.find_by(name: 'ManageRoles')
shared_list = Permission.find_by(name: 'SharedList')
can_record = Permission.find_by(name: 'CanRecord')
room_limit = Permission.find_by(name: 'RoomLimit')
RolePermission.create! [
{ role: admin, permission: create_room, value: 'true' },
{ role: admin, permission: manage_users, value: 'true' },
{ role: admin, permission: manage_rooms, value: 'true' },
{ role: admin, permission: manage_recordings, value: 'true' },
{ role: admin, permission: manage_site_settings, value: 'true' },
{ role: admin, permission: manage_roles, value: 'true' },
{ role: admin, permission: shared_list, value: 'true' },
{ role: admin, permission: can_record, value: 'true' },
{ role: admin, permission: room_limit, value: '100' },
{ role: user, permission: create_room, value: 'true' },
{ role: user, permission: manage_users, value: 'false' },
{ role: user, permission: manage_rooms, value: 'false' },
{ role: user, permission: manage_recordings, value: 'false' },
{ role: user, permission: manage_site_settings, value: 'false' },
{ role: user, permission: manage_roles, value: 'false' },
{ role: user, permission: shared_list, value: 'true' },
{ role: user, permission: can_record, value: 'true' },
{ role: user, permission: room_limit, value: '100' },
{ role: guest, permission: create_room, value: 'false' },
{ role: guest, permission: manage_users, value: 'false' },
{ role: guest, permission: manage_rooms, value: 'false' },
{ role: guest, permission: manage_recordings, value: 'false' },
{ role: guest, permission: manage_site_settings, value: 'false' },
{ role: guest, permission: manage_roles, value: 'false' },
{ role: guest, permission: shared_list, value: 'true' },
{ role: guest, permission: can_record, value: 'true' },
{ role: guest, permission: room_limit, value: '100' }
]
end
end
# BigBlueButton open source conferencing system - http://www.bigbluebutton.org/.
#
# Copyright (c) 2022 BigBlueButton Inc. and by respective authors (see below).
#
# This program is free software; you can redistribute it and/or modify it under the
# terms of the GNU Lesser General Public License as published by the Free Software
# Foundation; either version 3.0 of the License, or (at your option) any later
# version.
#
# Greenlight is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License along
# with Greenlight; if not, see <http://www.gnu.org/licenses/>.
# frozen_string_literal: true
require_relative 'task_helpers'
desc 'Add default tenant'
task :add_default_tenant, [:secret] => :environment do |_t, args|
err 'Missing secret' unless args.secret
tenant = Tenant.new(name: 'bn', client_secret: args.secret)
if tenant.save
TenantSetup.new('bn').call
success 'Tenant created successfully.'
else
err "Tenant not created. Errors: #{tenant.errors.to_a}"
end
end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment