aboutsummaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
Diffstat (limited to 'app')
-rw-r--r--app/controllers/application_controller.rb6
-rw-r--r--app/helpers/agents_helper.rb20
-rw-r--r--app/jobs/agency_watcher_job.rb60
3 files changed, 25 insertions, 61 deletions
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 5299f54..1eff1a9 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -10,14 +10,18 @@ class ApplicationController < ActionController::Base
protected
include ApplicationHelper
+ include AgentsHelper
+ # Set current agent globally
def current_agent
- @current_agent = Agent.find_by(name: session[:current_agent] || current_user.presence&.agents&.first&.name || 'incommon')
+ @current_agent = Agent.find_by(name: current_agent_name)
end
helper_method :current_agent
+ # Set current user globally
def current_user
@current_user ||= User.find_by(external_id: session[:current_user]) if session[:current_user].present?
end
helper_method :current_user
+
end
diff --git a/app/helpers/agents_helper.rb b/app/helpers/agents_helper.rb
index bbaeeca..3ecfd73 100644
--- a/app/helpers/agents_helper.rb
+++ b/app/helpers/agents_helper.rb
@@ -3,4 +3,24 @@
# SPDX-License-Identifier: AGPL-3.0-or-later
module AgentsHelper
+ DEFAULT_AGENT_UUID = "154cd5a4-3341-4c5f-8dd3-805c976c2a26".freeze
+ DEFAULT_AGENT_NAME = 'Anonymous'.freeze
+
+ protected
+
+ # Return the name of the current agent from context
+ def current_agent_name
+ session[:current_agent] || current_user.presence&.agents&.first&.name || default_agent_name
+ end
+
+ # Default Agent for users coming from unknown sources
+ # This agent uses a different database for writing resources
+ def default_agent
+ @default_agent ||= Agent.find_by(uuid: DEFAULT_AGENT_UUID) # Anonymous
+ end
+
+ # Return the name of the default
+ def default_agent_name
+ DEFAULT_AGENT_NAME
+ end
end
diff --git a/app/jobs/agency_watcher_job.rb b/app/jobs/agency_watcher_job.rb
deleted file mode 100644
index 23266e8..0000000
--- a/app/jobs/agency_watcher_job.rb
+++ /dev/null
@@ -1,60 +0,0 @@
-# SPDX-FileCopyrightText: 2020 IN COMMON Collective <collective@incommon.cc>
-#
-# SPDX-License-Identifier: AGPL-3.0-or-later
-
-# frozen_string_literal: true
-
-# = AgencyWatcherJob
-#
-# This job performs checks on existing records for the given user and group
-# names and updates Agencies accordingly.
-#
-# @param user (User) currently logged in user
-# @param groups (Array) a list of group names
-#
-class AgencyWatcherJob < ApplicationJob
- queue_as :default
-
- def perform(user, groups)
- # Check groups against user agents
- existing_agents = Agent.where(name: groups)
- existing_agent_names = existing_agents.map(&:name)
-
- groups.each do |g|
- # Only work with existing agents
- next unless existing_agent_names.include?(g)
-
- a = existing_agents.select { |a| a.name = g }.first
-
- Rails.logger.debug("AgencyWatcher checking roles for %s in %s" % [user.username, g])
- # Check if user is a group owner
- r = a.agencies.find_or_create_by(user: user)
- if !r.leader? && is_group_owner?(g, user.username)
- Rails.logger.debug("AgencyWatcher: grant leader to %s in %s" % [user.username, g])
- # Grant leader
- r.grant(:leader)
- # Grant maintainer
- r.grant(:maintainer)
- elsif r.roles == 0
- # No role: grant editor
- Rails.logger.debug("AgencyWatcher: grant editor to %s in %s" % [user.username, g])
- r.grant(:observer)
- else
- # No change
- Rails.logger.debug("AgencyWatcher: %s's roles in %s are %s" % [user.username, g, r.bitfield_values(:roles)])
- end
- end
- end
-
- private
-
- # Connect to Discourse and check whether current user is a group owner
- def is_group_owner?(group, username)
- c = ::DiscourseApi::Client.new('https://talk.incommon.cc')
- c.api_key = Rails.application.credentials.talk_api_key
- c.api_username = username
-
- group = c.group(group)
- group['group']['is_group_owner'] == true
- end
-end