decidim-centers 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/LICENSE-AGPLv3.txt +661 -0
- data/README.md +144 -0
- data/Rakefile +40 -0
- data/app/commands/concerns/decidim/centers/create_omniauth_registration_override.rb +42 -0
- data/app/commands/concerns/decidim/centers/create_registration_override.rb +32 -0
- data/app/commands/concerns/decidim/centers/publish_center_update_event.rb +20 -0
- data/app/commands/concerns/decidim/centers/update_account_override.rb +35 -0
- data/app/commands/decidim/centers/admin/create_center.rb +50 -0
- data/app/commands/decidim/centers/admin/destroy_center.rb +47 -0
- data/app/commands/decidim/centers/admin/update_center.rb +47 -0
- data/app/commands/decidim/centers/create_or_update_center_user.rb +44 -0
- data/app/commands/decidim/centers/create_or_update_scope_user.rb +44 -0
- data/app/controllers/concerns/decidim/centers/admin/needs_select2_snippets.rb +35 -0
- data/app/controllers/concerns/decidim/centers/devise/omniauth_registrations_controller_override.rb +21 -0
- data/app/controllers/concerns/decidim/centers/devise/sessions_controller_override.rb +21 -0
- data/app/controllers/concerns/decidim/centers/with_scopes_helper.rb +15 -0
- data/app/controllers/decidim/centers/admin/application_controller.rb +24 -0
- data/app/controllers/decidim/centers/admin/centers_controller.rb +106 -0
- data/app/controllers/decidim/centers/admin/scopes_controller.rb +40 -0
- data/app/forms/concerns/decidim/centers/account_form_override.rb +36 -0
- data/app/forms/decidim/centers/admin/center_form.rb +18 -0
- data/app/forms/decidim/centers/verifications/center.rb +33 -0
- data/app/helpers/decidim/centers/application_helper.rb +17 -0
- data/app/jobs/decidim/centers/auto_verification_job.rb +46 -0
- data/app/jobs/decidim/centers/sync_center_user_job.rb +29 -0
- data/app/jobs/decidim/centers/sync_scope_user_job.rb +29 -0
- data/app/models/concerns/decidim/centers/unique_by_user.rb +19 -0
- data/app/models/concerns/decidim/centers/user_override.rb +33 -0
- data/app/models/decidim/centers/application_record.rb +10 -0
- data/app/models/decidim/centers/center.rb +25 -0
- data/app/models/decidim/centers/center_user.rb +28 -0
- data/app/models/decidim/centers/scope_user.rb +28 -0
- data/app/overrides/decidim/account/show/centers.html.erb.deface +3 -0
- data/app/overrides/decidim/devise/omniauth_registrations/new/centers.html.erb.deface +3 -0
- data/app/overrides/decidim/devise/registrations/new/centers.html.erb.deface +3 -0
- data/app/packs/entrypoints/decidim_centers_admin_select2.js +2 -0
- data/app/packs/src/decidim/centers/admin/resource_permissions_select2.js +68 -0
- data/app/packs/stylesheets/vendor/select2_foundation_theme.scss +345 -0
- data/app/permissions/decidim/centers/admin/permissions.rb +19 -0
- data/app/presenters/decidim/centers/admin_log/center_presenter.rb +29 -0
- data/app/views/decidim/centers/_profile_form.html.erb +5 -0
- data/app/views/decidim/centers/_registration_form.html.erb +11 -0
- data/app/views/decidim/centers/admin/centers/_form.html.erb +10 -0
- data/app/views/decidim/centers/admin/centers/edit.html.erb +8 -0
- data/app/views/decidim/centers/admin/centers/index.html.erb +45 -0
- data/app/views/decidim/centers/admin/centers/new.html.erb +8 -0
- data/config/assets.rb +8 -0
- data/config/i18n-tasks.yml +11 -0
- data/config/locales/en.yml +51 -0
- data/db/migrate/20231129114029_create_decidim_centers_centers.rb +13 -0
- data/db/migrate/20231130125631_create_decidim_centers_center_users.rb +12 -0
- data/db/migrate/20231205153627_create_decidim_centers_scope_users.rb +12 -0
- data/lib/decidim/centers/admin.rb +10 -0
- data/lib/decidim/centers/admin_engine.rb +40 -0
- data/lib/decidim/centers/engine.rb +79 -0
- data/lib/decidim/centers/test/factories.rb +25 -0
- data/lib/decidim/centers/test/shared_contexts.rb +22 -0
- data/lib/decidim/centers/verifications/center_action_authorizer.rb +49 -0
- data/lib/decidim/centers/verifications.rb +11 -0
- data/lib/decidim/centers/version.rb +10 -0
- data/lib/decidim/centers.rb +19 -0
- metadata +138 -0
@@ -0,0 +1,79 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "rails"
|
4
|
+
require "decidim/core"
|
5
|
+
require "deface"
|
6
|
+
|
7
|
+
module Decidim
|
8
|
+
module Centers
|
9
|
+
# This is the engine that runs on the public interface of centers.
|
10
|
+
class Engine < ::Rails::Engine
|
11
|
+
isolate_namespace Decidim::Centers
|
12
|
+
|
13
|
+
routes do
|
14
|
+
# Add engine routes here
|
15
|
+
# resources :centers
|
16
|
+
# root to: "centers#index"
|
17
|
+
end
|
18
|
+
|
19
|
+
config.to_prepare do
|
20
|
+
# commands
|
21
|
+
Decidim::CreateOmniauthRegistration.prepend(Decidim::Centers::CreateOmniauthRegistrationOverride)
|
22
|
+
Decidim::CreateRegistration.prepend(Decidim::Centers::CreateRegistrationOverride)
|
23
|
+
Decidim::UpdateAccount.prepend(Decidim::Centers::UpdateAccountOverride)
|
24
|
+
# forms
|
25
|
+
Decidim::RegistrationForm.include(Decidim::Centers::AccountFormOverride)
|
26
|
+
Decidim::OmniauthRegistrationForm.include(Decidim::Centers::AccountFormOverride)
|
27
|
+
Decidim::AccountForm.include(Decidim::Centers::AccountFormOverride)
|
28
|
+
# models
|
29
|
+
Decidim::User.include(Decidim::Centers::UserOverride)
|
30
|
+
Decidim::RegistrationForm.include(Centers::AccountFormOverride)
|
31
|
+
Decidim::OmniauthRegistrationForm.include(Centers::AccountFormOverride)
|
32
|
+
Decidim::AccountForm.include(Centers::AccountFormOverride)
|
33
|
+
Decidim::CreateOmniauthRegistration.prepend(Centers::CreateOmniauthRegistrationOverride)
|
34
|
+
Decidim::CreateRegistration.prepend(Centers::CreateRegistrationOverride)
|
35
|
+
Decidim::UpdateAccount.prepend(Centers::UpdateAccountOverride)
|
36
|
+
end
|
37
|
+
|
38
|
+
initializer "decidim_centers.sync" do
|
39
|
+
ActiveSupport::Notifications.subscribe "decidim.centers.user.updated" do |_name, data|
|
40
|
+
Decidim::Centers::SyncCenterUserJob.perform_later(data)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
initializer "decidim_centers.overrides", after: "decidim.action_controller" do
|
45
|
+
config.to_prepare do
|
46
|
+
Decidim::Admin::ResourcePermissionsController.include(Decidim::Centers::Admin::NeedsSelect2Snippets)
|
47
|
+
Decidim::Devise::SessionsController.include(Decidim::Centers::Devise::SessionsControllerOverride)
|
48
|
+
Decidim::Devise::OmniauthRegistrationsController.include(Decidim::Centers::Devise::OmniauthRegistrationsControllerOverride)
|
49
|
+
Decidim::Devise::OmniauthRegistrationsController.include(Decidim::Centers::WithScopesHelper)
|
50
|
+
Decidim::Devise::RegistrationsController.include(Decidim::Centers::WithScopesHelper)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
initializer "decidim_centers.sync" do
|
55
|
+
ActiveSupport::Notifications.subscribe "decidim.centers.user.updated" do |_name, data|
|
56
|
+
Decidim::Centers::SyncCenterUserJob.perform_now(data)
|
57
|
+
Decidim::Centers::SyncScopeUserJob.perform_now(data) if Decidim::Centers.scopes_enabled
|
58
|
+
Decidim::Centers::AutoVerificationJob.perform_later(data[:user_id])
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
initializer "decidim_centers.authorizations" do
|
63
|
+
Decidim::Verifications.register_workflow(:center) do |workflow|
|
64
|
+
workflow.form = "Decidim::Centers::Verifications::Center"
|
65
|
+
workflow.action_authorizer = "Decidim::Centers::Verifications::CenterActionAuthorizer"
|
66
|
+
|
67
|
+
workflow.options do |options|
|
68
|
+
options.attribute :centers, type: :string
|
69
|
+
options.attribute :scopes, type: :string if Decidim::Centers.scopes_enabled
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
initializer "decidim_centers.webpacker.assets_path" do
|
75
|
+
Decidim.register_assets_path File.expand_path("app/packs", root)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "decidim/core/test/factories"
|
4
|
+
|
5
|
+
FactoryBot.define do
|
6
|
+
factory :center, class: "Decidim::Centers::Center" do
|
7
|
+
organization { create :organization }
|
8
|
+
title { generate_localized_title }
|
9
|
+
deleted_at { nil }
|
10
|
+
|
11
|
+
trait :deleted do
|
12
|
+
deleted_at { Time.current }
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
factory :center_user, class: "Decidim::Centers::CenterUser" do
|
17
|
+
user { create :user }
|
18
|
+
center { create :center, organization: user.organization }
|
19
|
+
end
|
20
|
+
|
21
|
+
factory :scope_user, class: "Decidim::Centers::ScopeUser" do
|
22
|
+
user { create :user }
|
23
|
+
scope { create :scope, organization: user.organization }
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
def check_center_authorization(authorization, user, center, scope = nil)
|
4
|
+
expect(authorization.name).to eq("center")
|
5
|
+
expect(authorization.user).to eq(user)
|
6
|
+
expect(authorization.metadata["centers"]).to include(center.id)
|
7
|
+
expect(authorization.metadata["scopes"]).to include(scope.id) if scope
|
8
|
+
end
|
9
|
+
|
10
|
+
shared_examples_for "no authorization is created" do
|
11
|
+
it "does not create an authorization" do
|
12
|
+
expect { subject.perform_now(params) }.not_to change(Decidim::Authorization, :count)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
shared_context "with scopes disabled" do
|
17
|
+
let(:scope) { nil }
|
18
|
+
|
19
|
+
before do
|
20
|
+
allow(Decidim::Centers).to receive(:scopes_enabled).and_return(false)
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Decidim
|
4
|
+
module Centers
|
5
|
+
module Verifications
|
6
|
+
class CenterActionAuthorizer < Decidim::Verifications::DefaultActionAuthorizer
|
7
|
+
def authorize
|
8
|
+
return [:missing, { action: :authorize }] if authorization.blank?
|
9
|
+
|
10
|
+
status_code = :unauthorized
|
11
|
+
return [status_code, { fields: { centers: "..." } }] if authorization_centers.blank?
|
12
|
+
return [:ok, {}] if belongs_to_center? && belongs_to_scope?
|
13
|
+
|
14
|
+
[status_code, {}]
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def options_centers
|
20
|
+
options["centers"]&.split(",") || []
|
21
|
+
end
|
22
|
+
|
23
|
+
def options_scopes
|
24
|
+
return [] unless Decidim::Centers.scopes_enabled
|
25
|
+
|
26
|
+
options["scopes"]&.split(",") || []
|
27
|
+
end
|
28
|
+
|
29
|
+
def authorization_centers
|
30
|
+
authorization.metadata["centers"] || []
|
31
|
+
end
|
32
|
+
|
33
|
+
def authorization_scopes
|
34
|
+
authorization.metadata["scopes"] || []
|
35
|
+
end
|
36
|
+
|
37
|
+
def belongs_to_center?
|
38
|
+
options_centers.empty? || options_centers.detect { |center| authorization_centers.include? center.to_i }
|
39
|
+
end
|
40
|
+
|
41
|
+
def belongs_to_scope?
|
42
|
+
return true unless Decidim::Centers.scopes_enabled
|
43
|
+
|
44
|
+
options_scopes.empty? || options_scopes.detect { |scope| authorization_scopes.include? scope.to_i }
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "decidim/centers/admin"
|
4
|
+
require "decidim/centers/engine"
|
5
|
+
require "decidim/centers/admin_engine"
|
6
|
+
require "decidim/centers/verifications"
|
7
|
+
|
8
|
+
module Decidim
|
9
|
+
# This namespace holds the logic of the `Centers` module. This module
|
10
|
+
# allows users to create centers in a participatory space.
|
11
|
+
module Centers
|
12
|
+
include ActiveSupport::Configurable
|
13
|
+
|
14
|
+
# if false, it won't ask the user for the scope
|
15
|
+
config_accessor :scopes_enabled do
|
16
|
+
Decidim::Env.new("DECIDIM_CENTERS_SCOPES_ENABLED", true).default_or_present_if_exists
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
metadata
ADDED
@@ -0,0 +1,138 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: decidim-centers
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Francisco Bolívar
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2023-12-13 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: decidim-core
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.27.0
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '0.28'
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 0.27.0
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0.28'
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: deface
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - "~>"
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '1.9'
|
40
|
+
type: :runtime
|
41
|
+
prerelease: false
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - "~>"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '1.9'
|
47
|
+
description: Manage your centers and scopes so the users can be authorized over them.
|
48
|
+
email:
|
49
|
+
- francisco.bolivar@nazaries.com
|
50
|
+
executables: []
|
51
|
+
extensions: []
|
52
|
+
extra_rdoc_files: []
|
53
|
+
files:
|
54
|
+
- LICENSE-AGPLv3.txt
|
55
|
+
- README.md
|
56
|
+
- Rakefile
|
57
|
+
- app/commands/concerns/decidim/centers/create_omniauth_registration_override.rb
|
58
|
+
- app/commands/concerns/decidim/centers/create_registration_override.rb
|
59
|
+
- app/commands/concerns/decidim/centers/publish_center_update_event.rb
|
60
|
+
- app/commands/concerns/decidim/centers/update_account_override.rb
|
61
|
+
- app/commands/decidim/centers/admin/create_center.rb
|
62
|
+
- app/commands/decidim/centers/admin/destroy_center.rb
|
63
|
+
- app/commands/decidim/centers/admin/update_center.rb
|
64
|
+
- app/commands/decidim/centers/create_or_update_center_user.rb
|
65
|
+
- app/commands/decidim/centers/create_or_update_scope_user.rb
|
66
|
+
- app/controllers/concerns/decidim/centers/admin/needs_select2_snippets.rb
|
67
|
+
- app/controllers/concerns/decidim/centers/devise/omniauth_registrations_controller_override.rb
|
68
|
+
- app/controllers/concerns/decidim/centers/devise/sessions_controller_override.rb
|
69
|
+
- app/controllers/concerns/decidim/centers/with_scopes_helper.rb
|
70
|
+
- app/controllers/decidim/centers/admin/application_controller.rb
|
71
|
+
- app/controllers/decidim/centers/admin/centers_controller.rb
|
72
|
+
- app/controllers/decidim/centers/admin/scopes_controller.rb
|
73
|
+
- app/forms/concerns/decidim/centers/account_form_override.rb
|
74
|
+
- app/forms/decidim/centers/admin/center_form.rb
|
75
|
+
- app/forms/decidim/centers/verifications/center.rb
|
76
|
+
- app/helpers/decidim/centers/application_helper.rb
|
77
|
+
- app/jobs/decidim/centers/auto_verification_job.rb
|
78
|
+
- app/jobs/decidim/centers/sync_center_user_job.rb
|
79
|
+
- app/jobs/decidim/centers/sync_scope_user_job.rb
|
80
|
+
- app/models/concerns/decidim/centers/unique_by_user.rb
|
81
|
+
- app/models/concerns/decidim/centers/user_override.rb
|
82
|
+
- app/models/decidim/centers/application_record.rb
|
83
|
+
- app/models/decidim/centers/center.rb
|
84
|
+
- app/models/decidim/centers/center_user.rb
|
85
|
+
- app/models/decidim/centers/scope_user.rb
|
86
|
+
- app/overrides/decidim/account/show/centers.html.erb.deface
|
87
|
+
- app/overrides/decidim/devise/omniauth_registrations/new/centers.html.erb.deface
|
88
|
+
- app/overrides/decidim/devise/registrations/new/centers.html.erb.deface
|
89
|
+
- app/packs/entrypoints/decidim_centers_admin_select2.js
|
90
|
+
- app/packs/src/decidim/centers/admin/resource_permissions_select2.js
|
91
|
+
- app/packs/stylesheets/vendor/select2_foundation_theme.scss
|
92
|
+
- app/permissions/decidim/centers/admin/permissions.rb
|
93
|
+
- app/presenters/decidim/centers/admin_log/center_presenter.rb
|
94
|
+
- app/views/decidim/centers/_profile_form.html.erb
|
95
|
+
- app/views/decidim/centers/_registration_form.html.erb
|
96
|
+
- app/views/decidim/centers/admin/centers/_form.html.erb
|
97
|
+
- app/views/decidim/centers/admin/centers/edit.html.erb
|
98
|
+
- app/views/decidim/centers/admin/centers/index.html.erb
|
99
|
+
- app/views/decidim/centers/admin/centers/new.html.erb
|
100
|
+
- config/assets.rb
|
101
|
+
- config/i18n-tasks.yml
|
102
|
+
- config/locales/en.yml
|
103
|
+
- db/migrate/20231129114029_create_decidim_centers_centers.rb
|
104
|
+
- db/migrate/20231130125631_create_decidim_centers_center_users.rb
|
105
|
+
- db/migrate/20231205153627_create_decidim_centers_scope_users.rb
|
106
|
+
- lib/decidim/centers.rb
|
107
|
+
- lib/decidim/centers/admin.rb
|
108
|
+
- lib/decidim/centers/admin_engine.rb
|
109
|
+
- lib/decidim/centers/engine.rb
|
110
|
+
- lib/decidim/centers/test/factories.rb
|
111
|
+
- lib/decidim/centers/test/shared_contexts.rb
|
112
|
+
- lib/decidim/centers/verifications.rb
|
113
|
+
- lib/decidim/centers/verifications/center_action_authorizer.rb
|
114
|
+
- lib/decidim/centers/version.rb
|
115
|
+
homepage: https://github.com/decidim/decidim-module-centers
|
116
|
+
licenses:
|
117
|
+
- AGPL-3.0
|
118
|
+
metadata: {}
|
119
|
+
post_install_message:
|
120
|
+
rdoc_options: []
|
121
|
+
require_paths:
|
122
|
+
- lib
|
123
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
124
|
+
requirements:
|
125
|
+
- - ">="
|
126
|
+
- !ruby/object:Gem::Version
|
127
|
+
version: '3.0'
|
128
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
129
|
+
requirements:
|
130
|
+
- - ">="
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: '0'
|
133
|
+
requirements: []
|
134
|
+
rubygems_version: 3.4.19
|
135
|
+
signing_key:
|
136
|
+
specification_version: 4
|
137
|
+
summary: A decidim module to categorize users with centers and scopes
|
138
|
+
test_files: []
|