Skip to content

Commit

Permalink
LTI-265: Added rake tasks to manage tenant settings and API to retrie…
Browse files Browse the repository at this point in the history
…ve settings (#160)

* LTI-265: Add rake tasks for tenant settings

* LTI-265: Add API endpoint for tenant settings

---------

Co-authored-by: Jesus Federico <jesus@123it.ca>
  • Loading branch information
Mariam05 and jfederico authored Aug 23, 2023
1 parent 2fcb3a2 commit 55fd5e6
Show file tree
Hide file tree
Showing 3 changed files with 126 additions and 0 deletions.
38 changes: 38 additions & 0 deletions app/controllers/api/v1/tenants_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# frozen_string_literal: true

# BigBlueButton open source conferencing system - http://www.bigbluebutton.org/.

# Copyright (c) 2018 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.

# BigBlueButton 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 BigBlueButton; if not, see <http://www.gnu.org/licenses/>.

class Api::V1::TenantsController < Api::V1::BaseController
before_action :doorkeeper_authorize!

before_action :set_tenant, only: [:show]

# GET /api/v1/tenant/:uid
def show
render(json: @tenant, status: :ok)
end

private

def set_tenant
uid = params[:uid]
uid ||= ''
@tenant = RailsLti2Provider::Tenant.find_by(uid: uid)
rescue ApplicationRecord::RecordNotFound => e
render(json: { error: e.message }, status: :not_found)
end
end
1 change: 1 addition & 0 deletions config/routes.rb
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
get 'users/:id', to: 'users#show', as: :users
get 'user', to: 'users#show', as: :user
get 'sessions/:token', to: 'sessions#validate_launch', as: :sessions
get 'tenants/(:uid)', to: 'tenants#show', param: :uid
end
end

Expand Down
87 changes: 87 additions & 0 deletions lib/tasks/db_tenant_settings.rake
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
# frozen_string_literal: true

require 'bbb_lti_broker/helpers'

namespace :db do
namespace :tenants do
namespace :settings do
desc 'Show all settings for a tenant. If no id is specified, settings for all tenants will be shown'
task :showall, [:uid] => :environment do |_t, args|
tenant_id = args[:uid] || ''

if tenant_id.present?
tenant = RailsLti2Provider::Tenant.find_by(uid: tenant_id)
if tenant.nil?
puts("Tenant '#{tenant_id}' does not exist.")
exit(1)
end

puts("Settings for tenant #{tenant_id}: \n #{tenant.settings}")
else
tenants = RailsLti2Provider::Tenant.all
tenants_list = tenants.map do |t|
{
tenant: t.uid,
settings: t.settings,
}
end
puts(tenants_list)
end
end

desc 'Add a new tenant setting'
task :upsert, [:uid, :key, :value] => :environment do |_t, args|
tenant_id = args[:uid] || ''
key = args[:key]
value = args[:value]

unless key.present? && value.present?
puts('Error: key and value are required to create a tenant setting')
exit(1)
end

tenant = RailsLti2Provider::Tenant.find_by(uid: tenant_id)
if tenant.nil?
puts("Tenant '#{tenant_id}' does not exist.")
exit(1)
end

# Add the setting
tenant.settings[key] = value
tenant.save!

puts("Added setting #{key}=#{value} to tenant #{tenant_id}")
rescue StandardError => e
puts(e.backtrace)
exit(1)
end

desc 'Delete a setting'
task :delete, [:uid, :key] => :environment do |_t, args|
tenant_id = args[:uid] || ''
key = args[:key]

if key.blank?
puts('Error: The setting key is required to delete a tenant setting')
exit(1)
end

tenant = RailsLti2Provider::Tenant.find_by(uid: tenant_id)
if tenant.nil?
puts("Tenant '#{tenant_id}' does not exist.")
exit(1)
end

puts("Key '#{key}' not found for tenant #{tenant}") unless tenant.settings[key]

tenant.settings.delete(key)
tenant.save!

puts("Setting #{key} for tenant '#{tenant_id}' has been deleted")
rescue StandardError => e
puts(e.backtrace)
exit(1)
end
end
end
end

0 comments on commit 55fd5e6

Please sign in to comment.