Skip to content

Commit

Permalink
feat: export authorization metadata to user extended data (#568)
Browse files Browse the repository at this point in the history
* feat: export authorization metadata to user extended data

* feat: auto save AH metadata to user extended data

* fix: normalize project_extends.rb filename

* Update app/services/decidim/authorization_data_to_user_data_service.rb

Co-authored-by: Quentin Champenois <[email protected]>

* Update lib/tasks/authorizations.rake

Co-authored-by: Quentin Champenois <[email protected]>

* move the ENV variable to application secrets

* feat: Update authorization_extends.rb

---------

Co-authored-by: Quentin Champenois <[email protected]>
  • Loading branch information
moustachu and Quentinchampenois authored Sep 16, 2024
1 parent 1a742f6 commit d183a2e
Show file tree
Hide file tree
Showing 8 changed files with 74 additions and 1 deletion.
4 changes: 4 additions & 0 deletions .env-example
Original file line number Diff line number Diff line change
Expand Up @@ -99,3 +99,7 @@ RAILS_LOG_LEVEL=warn

# Redirect to the TOS page after signup (default: true)
# DECIDIM_HALF_SIGNUP_SHOW_TOS_PAGE_AFTER_SIGNUP=true

# Automatically save AH metadata to user extended data
# Format : comma separated list of auhtorization handler names
# AUTO_EXPORT_AUTHORIZATIONS_DATA_TO_USER_DATA_ENABLED_FOR="authorization1,authorization2"
9 changes: 9 additions & 0 deletions app/jobs/authorization_data_to_user_data_job.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# frozen_string_literal: true

class AuthorizationDataToUserDataJob < ApplicationJob
queue_as :exports

def perform(*args)
Decidim::AuthorizationDataToUserDataService.run(*args)
end
end
27 changes: 27 additions & 0 deletions app/services/decidim/authorization_data_to_user_data_service.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# frozen_string_literal: true

module Decidim
class AuthorizationDataToUserDataService
def self.run(**args)
new(**args).execute
end

def initialize(**args)
@name = args[:name]
@user = args[:user]
end

def execute
Decidim::Authorization.find_each(filter) do |authorization|
authorization.user.update(extended_data: authorization.user.extended_data.merge({ @name.to_s => authorization.metadata }))
end
end

def filter
@filter ||= {
name: @name,
user: @user
}.compact
end
end
end
3 changes: 2 additions & 1 deletion config/application.rb
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,8 @@ class Application < Rails::Application
require "extends/helpers/decidim/icon_helper_extends"
require "extends/commands/decidim/initiatives/admin/update_initiative_answer_extends"
require "extends/controllers/decidim/initiatives/committee_requests_controller_extends"
require "extends/models/decidim/budgets/project_extend"
require "extends/models/decidim/budgets/project_extends"
require "extends/models/decidim/authorization_extends"
require "extends/forms/decidim/initiatives/admin/initiative_form_extends"
require "extends/commands/decidim/budgets/admin/import_proposals_to_budgets_extends"
require "extends/controllers/decidim/newsletters_controller_extends"
Expand Down
2 changes: 2 additions & 0 deletions config/secrets.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ default: &default
min_length: <%= ENV.fetch("DECIDIM_ADMIN_PASSWORD_MIN_LENGTH", 15).to_i %>
repetition_times: <%= ENV.fetch("DECIDIM_ADMIN_PASSWORD_REPETITION_TIMES", 5).to_i %>
strong: <%= ENV.fetch("DECIDIM_ADMIN_PASSWORD_STRONG", "false").to_s %>
authorizations:
export_data_to_userdata_enabled_for: <%= ENV.fetch("AUTO_EXPORT_AUTHORIZATIONS_DATA_TO_USER_DATA_ENABLED_FOR", "") %>
currency: <%= ENV["CURRENCY"] || "€" %>
half_signup:
show_tos_page_after_signup: <%= ENV.fetch("DECIDIM_HALF_SIGNUP_SHOW_TOS_PAGE_AFTER_SIGNUP", "true") == "true" %>
Expand Down
18 changes: 18 additions & 0 deletions lib/extends/models/decidim/authorization_extends.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# frozen_string_literal: true

require "active_support/concern"
module AuthorizationExtends
extend ActiveSupport::Concern

included do
after_commit :export_to_user_extended_data, if: proc { |authorization|
Rails.application.secrets.dig(:decidim, :export_data_to_userdata_enabled_for)&.split(",")&.include?(authorization.name)
}

def export_to_user_extended_data
Decidim::AuthorizationDataToUserDataService.run(name: name, user: user)
end
end
end

Decidim::Authorization.include(AuthorizationExtends)
12 changes: 12 additions & 0 deletions lib/tasks/authorizations.rake
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# frozen_string_literal: true

namespace :authorizations do
task export_to_user_extended_data: :environment do
name = ENV["AUTHORIZATION_HANDLE_NAME"].presence
raise "AUTHORIZATION_HANDLE_NAME is blank." if name.blank?

raise "No data found for authorization handler name '#{name}'" unless Decidim::Authorization.exists?(name: name)

AuthorizationDataToUserDataJob.perform_later(name: name)
end
end

0 comments on commit d183a2e

Please sign in to comment.