From 4b8d576b13fcf665d7cd4253467ad19c45982048 Mon Sep 17 00:00:00 2001 From: Peter Bouda Date: Tue, 22 Oct 2024 09:48:23 +0100 Subject: [PATCH] DEV: Check if plugin is enabled --- app/controllers/scim_v2/groups_controller.rb | 15 ++++++++++++--- app/controllers/scim_v2/users_controller.rb | 15 ++++++++++++--- 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/app/controllers/scim_v2/groups_controller.rb b/app/controllers/scim_v2/groups_controller.rb index 1395c6f..211b8b5 100644 --- a/app/controllers/scim_v2/groups_controller.rb +++ b/app/controllers/scim_v2/groups_controller.rb @@ -4,10 +4,20 @@ require "scimitar" module Scim class ScimV2::GroupsController < Scimitar::ActiveRecordBackedResourcesController - # TODO: Check why requires_plugin is not available here - # requires_plugin PLUGIN_NAME protect_from_forgery with: :null_session + # We check for the plugin here manually as we do not inherit from Discourse's ApplicationController + # and do not have access to requires_plugin + before_action do + if plugin = Discourse.plugins_by_name[DiscourseScim::PLUGIN_NAME] + raise PluginDisabled.new if !plugin.enabled? + elsif Rails.env.test? + raise "Required plugin '#{DiscourseScim::PLUGIN_NAME}' not found. The string passed to requires_plugin should match the plugin's name at the top of plugin.rb" + else + Rails.logger.warn("Required plugin '#{DiscourseScim::PLUGIN_NAME}' not found") + end + end + protected def storage_class @@ -17,6 +27,5 @@ module Scim def storage_scope Group.all # Or e.g. "User.where(is_deleted: false)" - whatever base scope you require end - end end \ No newline at end of file diff --git a/app/controllers/scim_v2/users_controller.rb b/app/controllers/scim_v2/users_controller.rb index 30f3931..1f59809 100644 --- a/app/controllers/scim_v2/users_controller.rb +++ b/app/controllers/scim_v2/users_controller.rb @@ -4,10 +4,20 @@ require "scimitar" module Scim class ScimV2::UsersController < Scimitar::ActiveRecordBackedResourcesController - # TODO: Check why requires_plugin is not available here - # requires_plugin PLUGIN_NAME protect_from_forgery with: :null_session + # We check for the plugin here manually as we do not inherit from Discourse's ApplicationController + # and do not have access to requires_plugin + before_action do + if plugin = Discourse.plugins_by_name[DiscourseScim::PLUGIN_NAME] + raise PluginDisabled.new if !plugin.enabled? + elsif Rails.env.test? + raise "Required plugin '#{DiscourseScim::PLUGIN_NAME}' not found. The string passed to requires_plugin should match the plugin's name at the top of plugin.rb" + else + Rails.logger.warn("Required plugin '#{DiscourseScim::PLUGIN_NAME}' not found") + end + end + protected def storage_class @@ -17,6 +27,5 @@ module Scim def storage_scope User.all # Or e.g. "User.where(is_deleted: false)" - whatever base scope you require end - end end \ No newline at end of file