decidim-system 0.31.3 → 0.32.0.rc1

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.
Files changed (60) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -14
  3. data/app/controllers/decidim/system/admins_controller.rb +2 -2
  4. data/app/controllers/decidim/system/api_users_controller.rb +4 -4
  5. data/app/controllers/decidim/system/devise/sessions_controller.rb +1 -1
  6. data/app/controllers/decidim/system/oauth_applications_controller.rb +2 -2
  7. data/app/controllers/decidim/system/organizations_controller.rb +3 -3
  8. data/app/forms/decidim/system/base_organization_form.rb +59 -0
  9. data/app/forms/decidim/system/register_organization_form.rb +1 -0
  10. data/app/views/decidim/system/organizations/new.html.erb +1 -1
  11. data/config/locales/ar.yml +0 -1
  12. data/config/locales/bg.yml +0 -1
  13. data/config/locales/bs-BA.yml +0 -1
  14. data/config/locales/ca-IT.yml +6 -3
  15. data/config/locales/ca.yml +6 -3
  16. data/config/locales/cs.yml +12 -1
  17. data/config/locales/de.yml +0 -1
  18. data/config/locales/el.yml +0 -1
  19. data/config/locales/en.yml +4 -0
  20. data/config/locales/eo.yml +0 -1
  21. data/config/locales/es-MX.yml +4 -1
  22. data/config/locales/es-PY.yml +4 -1
  23. data/config/locales/es.yml +4 -1
  24. data/config/locales/eu.yml +4 -1
  25. data/config/locales/fa-IR.yml +0 -1
  26. data/config/locales/fi-plain.yml +4 -1
  27. data/config/locales/fi.yml +4 -1
  28. data/config/locales/fr-CA.yml +4 -1
  29. data/config/locales/fr.yml +4 -1
  30. data/config/locales/ga-IE.yml +0 -1
  31. data/config/locales/gl.yml +0 -1
  32. data/config/locales/hu.yml +0 -1
  33. data/config/locales/id-ID.yml +0 -1
  34. data/config/locales/is-IS.yml +1 -2
  35. data/config/locales/it.yml +0 -1
  36. data/config/locales/ja.yml +0 -1
  37. data/config/locales/kaa.yml +0 -1
  38. data/config/locales/lb.yml +0 -1
  39. data/config/locales/lt.yml +0 -1
  40. data/config/locales/lv.yml +0 -1
  41. data/config/locales/nl.yml +0 -1
  42. data/config/locales/no.yml +0 -1
  43. data/config/locales/pl.yml +0 -1
  44. data/config/locales/pt-BR.yml +0 -1
  45. data/config/locales/pt.yml +0 -1
  46. data/config/locales/ro-RO.yml +0 -1
  47. data/config/locales/ru.yml +0 -1
  48. data/config/locales/sk.yml +0 -1
  49. data/config/locales/sl.yml +0 -1
  50. data/config/locales/sr-CS.yml +0 -1
  51. data/config/locales/sv.yml +0 -1
  52. data/config/locales/tr-TR.yml +0 -1
  53. data/config/locales/uk.yml +0 -1
  54. data/config/locales/zh-CN.yml +0 -1
  55. data/config/locales/zh-TW.yml +0 -1
  56. data/decidim-system.gemspec +6 -9
  57. data/lib/decidim/system/menu.rb +1 -1
  58. data/lib/decidim/system/version.rb +1 -1
  59. data/lib/decidim/system.rb +8 -4
  60. metadata +16 -13
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f6ededb8553c40e2cd1b418c798ea8d84bb6718ffeb4383079b0ae3b78844fde
4
- data.tar.gz: 7cfaeb907e7403de4ff432cccca19669770eae539c0484ea3e2d4f04d38c94a1
3
+ metadata.gz: da5cdf4aa1b70b51c9dd6ddfc54b3955b4a6ba33bee1ad89346993527de4b11e
4
+ data.tar.gz: 8f88aeda85929d086bd2021704dafce5279b9fdb58e4a5654eafa29bcdc4ea30
5
5
  SHA512:
6
- metadata.gz: 8ca3f2e0d6b3f2afd74b5eeb5013f85c6690eca772c6300122b1cef341ebfb47a33b12bad569e6ce46ce6a820fb41e24d9f3b1f23705b539a0bafddafd4d1b4b
7
- data.tar.gz: 3f40191955185219fd99ac575ffefaf39ca9a7a912559bfab38d57dad42ac29581772d7f67f3ec8afd1b1a3abb33bf0d83cdd4ef1ad1bca719c6258726bcf23c
6
+ metadata.gz: c2cb0273741a8ec3ad00816daf2ceafb913ff062c50ad373d72e7f8668f2570e538fb22d9fdb716efea44c04b9eb5493a91e92ff1cefeb919849ef44059308e8
7
+ data.tar.gz: 0ea01b28e31c1241ee54dbf901311de79dfec8df92e23503421790900f00a136f5be6befa0a2f77049d9dfc4d92fafbdbccb57d560256be5006ab7a3989d405d
data/README.md CHANGED
@@ -1,23 +1,11 @@
1
- # Decidim::System
1
+ # decidim-system
2
2
 
3
3
  This engine adds an administration dashboard so admin can manage a Decidim deploy
4
4
  and its organizations when working in a multi-tenant environment.
5
5
 
6
6
  ## Usage
7
7
 
8
- `decidim-system` is already included in the `decidim` gem, but you can also include it separately:
9
-
10
- Add this line to your application's Gemfile:
11
-
12
- ```ruby
13
- gem 'decidim-system'
14
- ```
15
-
16
- And then execute:
17
-
18
- ```bash
19
- bundle
20
- ```
8
+ This is on the default Decidim installation so you should not change anything to use this feature.
21
9
 
22
10
  ## Multi-tenancy in Decidim
23
11
 
@@ -24,7 +24,7 @@ module Decidim
24
24
 
25
25
  on(:invalid) do
26
26
  flash.now[:alert] = I18n.t("admins.create.error", scope: "decidim.system")
27
- render :new, status: :unprocessable_entity
27
+ render :new, status: :unprocessable_content
28
28
  end
29
29
  end
30
30
  end
@@ -46,7 +46,7 @@ module Decidim
46
46
 
47
47
  on(:invalid) do
48
48
  flash.now[:alert] = I18n.t("admins.update.error", scope: "decidim.system")
49
- render :edit, status: :unprocessable_entity
49
+ render :edit, status: :unprocessable_content
50
50
  end
51
51
  end
52
52
  end
@@ -29,7 +29,7 @@ module Decidim
29
29
  RefreshApiUserSecret.call(api_user, current_admin) do
30
30
  on(:ok) do |secret|
31
31
  flash[:notice] = I18n.t("api_user.refresh.success", scope: "decidim.system", user: api_user.api_key)
32
- session[:api_user] = { id: api_user.id, secret: secret }
32
+ session[:api_user] = { id: api_user.id, secret: }
33
33
  redirect_to action: :index
34
34
  end
35
35
 
@@ -41,17 +41,17 @@ module Decidim
41
41
  end
42
42
 
43
43
  def create
44
- @form = ::Decidim::System::ApiUserForm.from_params(params.merge!(name: params[:admin][:name], organization: organization))
44
+ @form = ::Decidim::System::ApiUserForm.from_params(params.merge!(name: params[:admin][:name], organization:))
45
45
  CreateApiUser.call(@form, current_admin) do
46
46
  on(:ok) do |api_user, secret|
47
47
  flash[:notice] = I18n.t("api_user.create.success", scope: "decidim.system", user: api_user.api_key)
48
- session[:api_user] = { id: api_user.id, secret: secret }
48
+ session[:api_user] = { id: api_user.id, secret: }
49
49
  redirect_to action: :index
50
50
  end
51
51
 
52
52
  on(:invalid) do
53
53
  flash[:error] = I18n.t("api_user.create.error", scope: "decidim.system")
54
- render :new, status: :unprocessable_entity
54
+ render :new, status: :unprocessable_content
55
55
  end
56
56
  end
57
57
  end
@@ -18,7 +18,7 @@ module Decidim
18
18
 
19
19
  def redirect_to_referer_or_path
20
20
  set_flash_message(:alert, "csrf_token", scope: "devise.failure")
21
- redirect_back(fallback_location: root_path)
21
+ redirect_back_or_to(root_path)
22
22
  end
23
23
 
24
24
  def current_organization; end
@@ -30,7 +30,7 @@ module Decidim
30
30
 
31
31
  on(:invalid) do
32
32
  flash.now[:alert] = I18n.t("oauth_applications.create.error", scope: "decidim.system")
33
- render :new, status: :unprocessable_entity
33
+ render :new, status: :unprocessable_content
34
34
  end
35
35
  end
36
36
  end
@@ -55,7 +55,7 @@ module Decidim
55
55
  on(:invalid) do |application|
56
56
  @oauth_application = application
57
57
  flash.now[:error] = I18n.t("oauth_applications.update.error", scope: "decidim.system")
58
- render action: :edit, status: :unprocessable_entity
58
+ render action: :edit, status: :unprocessable_content
59
59
  end
60
60
  end
61
61
  end
@@ -24,12 +24,12 @@ module Decidim
24
24
 
25
25
  on(:invalid_invitation) do
26
26
  flash.now[:alert] = t("organizations.create.error_invitation", scope: "decidim.system")
27
- render :new, status: :unprocessable_entity
27
+ render :new, status: :unprocessable_content
28
28
  end
29
29
 
30
30
  on(:invalid) do
31
31
  flash.now[:alert] = t("organizations.create.error", scope: "decidim.system")
32
- render :new, status: :unprocessable_entity
32
+ render :new, status: :unprocessable_content
33
33
  end
34
34
  end
35
35
  end
@@ -55,7 +55,7 @@ module Decidim
55
55
 
56
56
  on(:invalid) do
57
57
  flash.now[:alert] = I18n.t("organizations.update.error", scope: "decidim.system")
58
- render :edit, status: :unprocessable_entity
58
+ render :edit, status: :unprocessable_content
59
59
  end
60
60
  end
61
61
  end
@@ -65,6 +65,8 @@ module Decidim
65
65
  validate :validate_short_name_uniqueness
66
66
  validate :validate_short_name_format
67
67
  validate :validate_secret_key_base_for_encryption
68
+ validate :validate_host_format
69
+ validate :validate_secondary_hosts_format
68
70
 
69
71
  def map_model(model)
70
72
  self.default_locale = model.default_locale
@@ -134,6 +136,63 @@ module Decidim
134
136
  def validate_short_name_format
135
137
  raise "#{self.class.name} is expected to implement #validate_short_name_format"
136
138
  end
139
+
140
+ # Validates the host format for organization domains.
141
+ #
142
+ # Valid formats:
143
+ # - Fully Qualified Domain Names (FQDN): example.org, sub.example.org, my-site.example.org
144
+ # - Localhost: localhost (common for development)
145
+ # - IPv4 addresses: 127.0.0.1, 192.168.1.1
146
+ # - IPv6 addresses: ::1, 2001:db8::1, [::1]
147
+ #
148
+ # Invalid formats (will be rejected):
149
+ # - Hosts containing spaces
150
+ # - Hosts with invalid characters (!@#$%^&* etc.)
151
+ # - Hosts with leading/trailing hyphens in labels (e.g., -example.com or example-.com)
152
+ # - Labels longer than 63 characters
153
+ # - Total host length exceeding 253 characters
154
+ #
155
+ # @see https://en.wikipedia.org/wiki/Fully_qualified_domain_name
156
+ # @see https://en.wikipedia.org/wiki/IPv4_address
157
+ # @see https://en.wikipedia.org/wiki/IPv6_address
158
+ #
159
+ HOST_FORMAT_REGEX = %r{
160
+ \A
161
+ (?:
162
+ # FQDN: requires at least one dot, labels separated by dots.
163
+ # Each label: alphanumeric start/end, alphanumerics and hyphens inside, max 63 chars.
164
+ (?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z]{2,}
165
+ |
166
+ # Localhost: common development hostname.
167
+ localhost
168
+ |
169
+ # IPv4: four octets (0-255 each).
170
+ (?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)
171
+ |
172
+ # IPv6: bracketed form [::1] or unbracketed (standard and compressed forms).
173
+ (?:\[[\da-fA-F:]+\]|[\da-fA-F:]+\z)
174
+ )
175
+ \z
176
+ }x
177
+
178
+ def validate_host_format
179
+ return if host.blank?
180
+
181
+ return if host.match?(HOST_FORMAT_REGEX)
182
+
183
+ errors.add(:host, :invalid)
184
+ end
185
+
186
+ def validate_secondary_hosts_format
187
+ return if secondary_hosts.blank?
188
+
189
+ clean_secondary_hosts.each do |secondary_host|
190
+ next if secondary_host.match?(HOST_FORMAT_REGEX)
191
+
192
+ errors.add(:secondary_hosts, :invalid)
193
+ break
194
+ end
195
+ end
137
196
  end
138
197
  end
139
198
  end
@@ -8,6 +8,7 @@ module Decidim
8
8
  #
9
9
  class RegisterOrganizationForm < BaseOrganizationForm
10
10
  include JsonbAttributes
11
+
11
12
  mimic :organization
12
13
 
13
14
  attribute :name, String
@@ -33,7 +33,7 @@
33
33
  <tbody>
34
34
  <% localized_locales.each do |locale| %>
35
35
  <tr>
36
- <td><%= locale.name %></td>
36
+ <td><%= locale.name %> (<%= locale.id %>)</td>
37
37
  <td><%= check_box_tag "organization[available_locales][#{locale.id}]", locale.id, @form.available_locales.include?(locale.id), class: "!m-0" %></td>
38
38
  <td><%= radio_button_tag "organization[default_locale]", locale.id, @form.default_locale == locale.id, class: "!m-0" %></td>
39
39
  </tr>
@@ -1,4 +1,3 @@
1
- ---
2
1
  ar:
3
2
  activemodel:
4
3
  attributes:
@@ -1,4 +1,3 @@
1
- ---
2
1
  bg:
3
2
  activemodel:
4
3
  attributes:
@@ -1,4 +1,3 @@
1
- ---
2
1
  bs:
3
2
  activemodel:
4
3
  attributes:
@@ -1,9 +1,8 @@
1
- ---
2
1
  ca-IT:
3
2
  activemodel:
4
3
  attributes:
5
4
  oauth_application:
6
- name: Nom de l'aplicació OAuth
5
+ name: Nom de l'aplicació
7
6
  organization_logo: Logo de l'organització (quadrat)
8
7
  organization_name: Organització
9
8
  organization_url: URL de l'organització
@@ -37,8 +36,12 @@ ca-IT:
37
36
  must_be_ssl: L'URI de redirecció ha de ser una URI SSL
38
37
  organization:
39
38
  attributes:
39
+ host:
40
+ invalid: no és vàlid
40
41
  password:
41
42
  secret_key: Cal que defineixis la variable d'entorn SECRET_KEY_BASE per a poder guardar aquest camp
43
+ secondary_hosts:
44
+ invalid: no és vàlid
42
45
  decidim:
43
46
  system:
44
47
  actions:
@@ -295,7 +298,7 @@ ca-IT:
295
298
  organization_admin_email_hint: T'enviarem un correu electrònic a aquesta adreça perquè puguis confirmar-la i configurar la teva contrasenya.
296
299
  reference_prefix_hint: El prefix de la referència s'utilitza per identificar de forma única els recursos del conjunt de l'organització.
297
300
  secondary_hosts_hint: Introdueix cada un d'ells en una nova línia.
298
- short_name_hint: Nom curt que es farà servir per a l'Aplicació Web Progressiva (PWA). Ha de tenir un màxim de 12 caràcters.
301
+ short_name_hint: Nom curt que es farà servir per a l'Aplicació Web Progressiva. Ha de tenir un màxim de 12 caràcters.
299
302
  title: Nova organització
300
303
  omniauth_settings:
301
304
  decidim:
@@ -1,9 +1,8 @@
1
- ---
2
1
  ca:
3
2
  activemodel:
4
3
  attributes:
5
4
  oauth_application:
6
- name: Nom de l'aplicació OAuth
5
+ name: Nom de l'aplicació
7
6
  organization_logo: Logo de l'organització (quadrat)
8
7
  organization_name: Organització
9
8
  organization_url: URL de l'organització
@@ -37,8 +36,12 @@ ca:
37
36
  must_be_ssl: L'URI de redirecció ha de ser una URI SSL
38
37
  organization:
39
38
  attributes:
39
+ host:
40
+ invalid: no és vàlid
40
41
  password:
41
42
  secret_key: Cal que defineixis la variable d'entorn SECRET_KEY_BASE per a poder guardar aquest camp
43
+ secondary_hosts:
44
+ invalid: no és vàlid
42
45
  decidim:
43
46
  system:
44
47
  actions:
@@ -295,7 +298,7 @@ ca:
295
298
  organization_admin_email_hint: T'enviarem un correu electrònic a aquesta adreça perquè puguis confirmar-la i configurar la teva contrasenya.
296
299
  reference_prefix_hint: El prefix de la referència s'utilitza per identificar de forma única els recursos del conjunt de l'organització.
297
300
  secondary_hosts_hint: Introdueix cada un d'ells en una nova línia.
298
- short_name_hint: Nom curt que es farà servir per a l'Aplicació Web Progressiva (PWA). Ha de tenir un màxim de 12 caràcters.
301
+ short_name_hint: Nom curt que es farà servir per a l'Aplicació Web Progressiva. Ha de tenir un màxim de 12 caràcters.
299
302
  title: Nova organització
300
303
  omniauth_settings:
301
304
  decidim:
@@ -1,4 +1,3 @@
1
- ---
2
1
  cs:
3
2
  activemodel:
4
3
  attributes:
@@ -37,8 +36,12 @@ cs:
37
36
  must_be_ssl: URI přesměrování musí být SSL URI
38
37
  organization:
39
38
  attributes:
39
+ host:
40
+ invalid: je neplatný
40
41
  password:
41
42
  secret_key: Abyste mohli toto pole uložit, musíte definovat proměnnou prostředí SECRET_KEY_BASE.
43
+ secondary_hosts:
44
+ invalid: je neplatný
42
45
  decidim:
43
46
  system:
44
47
  actions:
@@ -53,6 +56,7 @@ cs:
53
56
  remove: Odebrat uživatele
54
57
  confirm_destroy: Opravdu to chcete smazat?
55
58
  confirm_refresh_api_secret: Opravdu chcete obnovit tajný klíč pro tohoto uživatele API? Po obnově bude starý tajný klíč neplatný a již nemůže být použit.
59
+ confirm_remove_api_user: Opravdu chcete odstranit tohoto uživatele API?
56
60
  copied: Zkopírováno
57
61
  copy_secret: Kopírovat tajný klíč
58
62
  copy_secret_clarification: Zkopírovat tajný klíč do schránky
@@ -92,6 +96,10 @@ cs:
92
96
  success: Tajný klíč byl úspěšně obnoven. Tajný klíč pro uživatele je viditelný pouze po vytvoření. Zkopírujte jej a uložte jej bezpečně před opuštěním této stránky!
93
97
  api_users:
94
98
  index:
99
+ explanation_html: |
100
+ <p>Uživatelé API umožňují integračním vývojářům přidávat do systému účty pro administrátorské uživatele. Tito uživatelé mohou působit jako správci na platformě pro provádění aktualizací, které by běžní správci prováděli prostřednictvím administrátorského panelu. Typickým případem použití je vnější platforma řízení, kde by automatizovaný skript prováděl administrativní úkoly s platformou, aniž by se skutečný uživatel musel přihlásit do systému. Například systém automatizace může chtít poslat odpovědi na návrhy, v kterémžto případě potřebujeme, aby integrovaný uživatel provedl tento úkol v rámci této platformy.</p>
101
+ <p>Hlavní rozdíl mezi těmito účty a běžnými účty správce spočívá v tom, že tito uživatelé jsou určeni k používání na strojích, a proto se jejich požadavky na heslo liší. Tito uživatelé nemusí pravidelně aktualizovat své heslo a v případě potřeby může dojít ke změně hesla k účtu řízeným způsobem.</p>
102
+ <p>Tyto přihlašovací údaje jsou určeny pro použití stroji. Účastnické aplikace by měly být integrovány s <a href="%{oauth_link}">OAuth aplikacemi</a>.</p>
95
103
  manage: Správa uživatelů API
96
104
  new:
97
105
  select_organization: Vyberte vaši organizaci
@@ -175,7 +183,9 @@ cs:
175
183
  explanation: Aplikace, které se mohou bezpečně autentizovat s autorizačním serverem, například udržovat registrované klienty zabezpečené. Obvykle aplikace běžící na serveru, kde je uložen tajný kód klienta.
176
184
  name: Důvěrné
177
185
  public:
186
+ explanation: Aplikace, které nemohou používat registrované zákaznické tajemství, jako jsou aplikace běžící v prohlížeči nebo na mobilním zařízení.
178
187
  name: Veřejné
188
+ application_type_help_html: 'Typ OAuth klienta definovaný <a href="%{client_type_link}" target="_blank">RFC 6749 Oddíl 2.1</a>. Veřejní klienti musí realizovat tok PKCE definovaný <a href="%{pkce_link}" target="_blank">RFC 7636</a>. '
179
189
  select_organization: Vybrat organizaci
180
190
  index:
181
191
  confirm_delete: Jste si jisti, že chcete odstranit tuto žádost?
@@ -246,6 +256,7 @@ cs:
246
256
  confirm_resend_invitation: Opravdu chcete znovu odeslat pozvánku?
247
257
  resend_invitation: Znovu odeslat pozvánku
248
258
  secondary_hosts_hint: Zadejte každý z nich do nového řádku
259
+ short_name_hint: Krátký název použitý pro progresivní webovou aplikaci. Musí mít maximálně 12 znaků.
249
260
  title: Upravit organizaci
250
261
  file_upload_settings:
251
262
  content_types:
@@ -1,4 +1,3 @@
1
- ---
2
1
  de:
3
2
  activemodel:
4
3
  attributes:
@@ -1,4 +1,3 @@
1
- ---
2
1
  el:
3
2
  activemodel:
4
3
  attributes:
@@ -37,8 +37,12 @@ en:
37
37
  must_be_ssl: The redirect URI must be a SSL URI
38
38
  organization:
39
39
  attributes:
40
+ host:
41
+ invalid: is invalid
40
42
  password:
41
43
  secret_key: You need to define the SECRET_KEY_BASE environment variable to be able to save this field
44
+ secondary_hosts:
45
+ invalid: is invalid
42
46
  decidim:
43
47
  system:
44
48
  actions:
@@ -1,4 +1,3 @@
1
- ---
2
1
  eo:
3
2
  activemodel:
4
3
  attributes:
@@ -1,4 +1,3 @@
1
- ---
2
1
  es-MX:
3
2
  activemodel:
4
3
  attributes:
@@ -37,8 +36,12 @@ es-MX:
37
36
  must_be_ssl: La URI de redirección debe ser una URI SSL
38
37
  organization:
39
38
  attributes:
39
+ host:
40
+ invalid: no es válido
40
41
  password:
41
42
  secret_key: Necesitas definir la variable de entorno SECRETA_KEY_BASE para poder guardar este campo
43
+ secondary_hosts:
44
+ invalid: no es válido
42
45
  decidim:
43
46
  system:
44
47
  actions:
@@ -1,4 +1,3 @@
1
- ---
2
1
  es-PY:
3
2
  activemodel:
4
3
  attributes:
@@ -37,8 +36,12 @@ es-PY:
37
36
  must_be_ssl: La URI de redirección debe ser una URI SSL
38
37
  organization:
39
38
  attributes:
39
+ host:
40
+ invalid: no es válido
40
41
  password:
41
42
  secret_key: Necesitas definir la variable de entorno SECRETA_KEY_BASE para poder guardar este campo
43
+ secondary_hosts:
44
+ invalid: no es válido
42
45
  decidim:
43
46
  system:
44
47
  actions:
@@ -1,4 +1,3 @@
1
- ---
2
1
  es:
3
2
  activemodel:
4
3
  attributes:
@@ -37,8 +36,12 @@ es:
37
36
  must_be_ssl: La URI de redirección debe ser una URI SSL
38
37
  organization:
39
38
  attributes:
39
+ host:
40
+ invalid: no es válido
40
41
  password:
41
42
  secret_key: Necesitas definir la variable de entorno SECRETA_KEY_BASE para poder guardar este campo
43
+ secondary_hosts:
44
+ invalid: no es válido
42
45
  decidim:
43
46
  system:
44
47
  actions:
@@ -1,4 +1,3 @@
1
- ---
2
1
  eu:
3
2
  activemodel:
4
3
  attributes:
@@ -37,8 +36,12 @@ eu:
37
36
  must_be_ssl: Berbideratzeko URIa URI SSL izan behar da
38
37
  organization:
39
38
  attributes:
39
+ host:
40
+ invalid: baliogabea da
40
41
  password:
41
42
  secret_key: SECRET_KEY_BASE ingurunearen aldagaia definitu behar duzu eremu hau gorde ahal izateko
43
+ secondary_hosts:
44
+ invalid: baliogabea da
42
45
  decidim:
43
46
  system:
44
47
  actions:
@@ -1,4 +1,3 @@
1
- ---
2
1
  fa:
3
2
  activemodel:
4
3
  attributes:
@@ -1,4 +1,3 @@
1
- ---
2
1
  fi-pl:
3
2
  activemodel:
4
3
  attributes:
@@ -37,8 +36,12 @@ fi-pl:
37
36
  must_be_ssl: Uudelleenohjaus osoite (URI) on oltava SSL-muotoinen osoite (URI)
38
37
  organization:
39
38
  attributes:
39
+ host:
40
+ invalid: on virheellinen
40
41
  password:
41
42
  secret_key: Sinun täytyy määritellä SECRET_KEY_BASE ympäristömuuttuja, jotta voit tallentaa tämän kentän.
43
+ secondary_hosts:
44
+ invalid: on virheellinen
42
45
  decidim:
43
46
  system:
44
47
  actions:
@@ -1,4 +1,3 @@
1
- ---
2
1
  fi:
3
2
  activemodel:
4
3
  attributes:
@@ -37,8 +36,12 @@ fi:
37
36
  must_be_ssl: Uudelleenohjaus osoite (URI) on oltava SSL-muotoinen osoite (URI)
38
37
  organization:
39
38
  attributes:
39
+ host:
40
+ invalid: on virheellinen
40
41
  password:
41
42
  secret_key: Sinun täytyy määritellä SECRET_KEY_BASE ympäristömuuttuja, jotta voit tallentaa tämän kentän.
43
+ secondary_hosts:
44
+ invalid: on virheellinen
42
45
  decidim:
43
46
  system:
44
47
  actions:
@@ -1,4 +1,3 @@
1
- ---
2
1
  fr-CA:
3
2
  activemodel:
4
3
  attributes:
@@ -34,8 +33,12 @@ fr-CA:
34
33
  must_be_ssl: L'URI de redirection doit être une URI SSL
35
34
  organization:
36
35
  attributes:
36
+ host:
37
+ invalid: est invalide
37
38
  password:
38
39
  secret_key: Vous devez définir la variable d'environnement SECRET_KEY_BASE pour pouvoir enregistrer ce champ
40
+ secondary_hosts:
41
+ invalid: est invalide
39
42
  decidim:
40
43
  system:
41
44
  actions:
@@ -1,4 +1,3 @@
1
- ---
2
1
  fr:
3
2
  activemodel:
4
3
  attributes:
@@ -34,8 +33,12 @@ fr:
34
33
  must_be_ssl: L'URI de redirection doit être une URI SSL
35
34
  organization:
36
35
  attributes:
36
+ host:
37
+ invalid: est invalide
37
38
  password:
38
39
  secret_key: Vous devez définir la variable d'environnement SECRET_KEY_BASE pour pouvoir enregistrer ce champ
40
+ secondary_hosts:
41
+ invalid: est invalide
39
42
  decidim:
40
43
  system:
41
44
  actions:
@@ -1,4 +1,3 @@
1
- ---
2
1
  ga:
3
2
  activemodel:
4
3
  attributes:
@@ -1,4 +1,3 @@
1
- ---
2
1
  gl:
3
2
  activemodel:
4
3
  attributes:
@@ -1,4 +1,3 @@
1
- ---
2
1
  hu:
3
2
  activemodel:
4
3
  attributes:
@@ -1,4 +1,3 @@
1
- ---
2
1
  id:
3
2
  decidim:
4
3
  system:
@@ -1,5 +1,4 @@
1
- ---
2
- is:
1
+ is-IS:
3
2
  activemodel:
4
3
  attributes:
5
4
  organization:
@@ -1,4 +1,3 @@
1
- ---
2
1
  it:
3
2
  activemodel:
4
3
  attributes:
@@ -1,4 +1,3 @@
1
- ---
2
1
  ja:
3
2
  activemodel:
4
3
  attributes:
@@ -1,4 +1,3 @@
1
- ---
2
1
  kaa:
3
2
  decidim:
4
3
  system:
@@ -1,4 +1,3 @@
1
- ---
2
1
  lb:
3
2
  activemodel:
4
3
  attributes:
@@ -1,4 +1,3 @@
1
- ---
2
1
  lt:
3
2
  activemodel:
4
3
  attributes:
@@ -1,4 +1,3 @@
1
- ---
2
1
  lv:
3
2
  activemodel:
4
3
  attributes:
@@ -1,4 +1,3 @@
1
- ---
2
1
  nl:
3
2
  activemodel:
4
3
  attributes:
@@ -1,4 +1,3 @@
1
- ---
2
1
  "no":
3
2
  activemodel:
4
3
  attributes:
@@ -1,4 +1,3 @@
1
- ---
2
1
  pl:
3
2
  activemodel:
4
3
  attributes:
@@ -1,4 +1,3 @@
1
- ---
2
1
  pt-BR:
3
2
  activemodel:
4
3
  attributes:
@@ -1,4 +1,3 @@
1
- ---
2
1
  pt:
3
2
  activemodel:
4
3
  attributes:
@@ -1,4 +1,3 @@
1
- ---
2
1
  ro:
3
2
  activemodel:
4
3
  attributes:
@@ -1,4 +1,3 @@
1
- ---
2
1
  ru:
3
2
  activemodel:
4
3
  attributes:
@@ -1,4 +1,3 @@
1
- ---
2
1
  sk:
3
2
  activemodel:
4
3
  attributes:
@@ -1,4 +1,3 @@
1
- ---
2
1
  sl:
3
2
  activemodel:
4
3
  attributes:
@@ -1,4 +1,3 @@
1
- ---
2
1
  sr:
3
2
  activemodel:
4
3
  attributes:
@@ -1,4 +1,3 @@
1
- ---
2
1
  sv:
3
2
  activemodel:
4
3
  attributes:
@@ -1,4 +1,3 @@
1
- ---
2
1
  tr:
3
2
  activemodel:
4
3
  attributes:
@@ -1,4 +1,3 @@
1
- ---
2
1
  uk:
3
2
  activemodel:
4
3
  attributes:
@@ -1,4 +1,3 @@
1
- ---
2
1
  zh-CN:
3
2
  activemodel:
4
3
  attributes:
@@ -1,4 +1,3 @@
1
- ---
2
1
  zh-TW:
3
2
  activemodel:
4
3
  attributes:
@@ -2,12 +2,9 @@
2
2
 
3
3
  $LOAD_PATH.push File.expand_path("lib", __dir__)
4
4
 
5
- # Maintain your gem's version:
6
- require "decidim/system/version"
7
-
8
- # Describe your gem and declare its dependencies:
9
5
  Gem::Specification.new do |s|
10
- s.version = Decidim::System.version
6
+ version = "0.32.0.rc1"
7
+ s.version = version
11
8
  s.authors = ["Josep Jaume Rey Peroy", "Marc Riera Casals", "Oriol Gual Oliva"]
12
9
  s.email = ["josepjaume@gmail.com", "mrc2407@gmail.com", "oriolgual@gmail.com"]
13
10
  s.license = "AGPL-3.0-or-later"
@@ -19,7 +16,7 @@ Gem::Specification.new do |s|
19
16
  "homepage_uri" => "https://decidim.org",
20
17
  "source_code_uri" => "https://github.com/decidim/decidim"
21
18
  }
22
- s.required_ruby_version = "~> 3.3.0"
19
+ s.required_ruby_version = "~> 3.4.0"
23
20
 
24
21
  s.name = "decidim-system"
25
22
  s.summary = "Decidim system administration"
@@ -33,10 +30,10 @@ Gem::Specification.new do |s|
33
30
  end
34
31
 
35
32
  s.add_dependency "active_link_to", "~> 1.0"
36
- s.add_dependency "decidim-core", Decidim::System.version
37
- s.add_dependency "devise", "~> 4.7"
33
+ s.add_dependency "decidim-core", version
34
+ s.add_dependency "devise", ">= 4.7", "< 6.0"
38
35
  s.add_dependency "devise-i18n", "~> 1.2"
39
36
  s.add_dependency "devise_invitable", "~> 2.0", ">= 2.0.9"
40
37
 
41
- s.add_development_dependency "decidim-dev", Decidim::System.version
38
+ s.add_development_dependency "decidim-dev", version
42
39
  end
@@ -9,7 +9,7 @@ module Decidim
9
9
  I18n.t("menu.dashboard", scope: "decidim.system"),
10
10
  decidim_system.root_path,
11
11
  position: 1,
12
- active: ["decidim/system/dashboard" => :show]
12
+ active: [{ "decidim/system/dashboard" => :show }]
13
13
  if Decidim.module_installed?(:api)
14
14
  menu.add_item :api_credentials,
15
15
  I18n.t("menu.api_credentials", scope: "decidim.system"),
@@ -4,7 +4,7 @@ module Decidim
4
4
  # This holds the decidim-system version.
5
5
  module System
6
6
  def self.version
7
- "0.31.3"
7
+ "0.32.0.rc1"
8
8
  end
9
9
  end
10
10
  end
@@ -9,11 +9,15 @@ module Decidim
9
9
  # eye view of the whole system.
10
10
  #
11
11
  module System
12
- include ActiveSupport::Configurable
12
+ class << self
13
+ def config = self
13
14
 
14
- # The length of API secrets generated for API users.
15
- config_accessor :api_users_secret_length do
16
- ENV.fetch("DECIDIM_SYSTEM_API_USERS_SECRET_LENGTH", 32)
15
+ def configure
16
+ yield self
17
+ end
17
18
  end
19
+
20
+ # The length of API secrets generated for API users.
21
+ mattr_accessor :api_users_secret_length, default: ENV.fetch("DECIDIM_SYSTEM_API_USERS_SECRET_LENGTH", 32).to_i
18
22
  end
19
23
  end
metadata CHANGED
@@ -1,16 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: decidim-system
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.31.3
4
+ version: 0.32.0.rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josep Jaume Rey Peroy
8
8
  - Marc Riera Casals
9
9
  - Oriol Gual Oliva
10
- autorequire:
11
10
  bindir: bin
12
11
  cert_chain: []
13
- date: 2026-03-26 00:00:00.000000000 Z
12
+ date: 1980-01-02 00:00:00.000000000 Z
14
13
  dependencies:
15
14
  - !ruby/object:Gem::Dependency
16
15
  name: active_link_to
@@ -32,28 +31,34 @@ dependencies:
32
31
  requirements:
33
32
  - - '='
34
33
  - !ruby/object:Gem::Version
35
- version: 0.31.3
34
+ version: 0.32.0.rc1
36
35
  type: :runtime
37
36
  prerelease: false
38
37
  version_requirements: !ruby/object:Gem::Requirement
39
38
  requirements:
40
39
  - - '='
41
40
  - !ruby/object:Gem::Version
42
- version: 0.31.3
41
+ version: 0.32.0.rc1
43
42
  - !ruby/object:Gem::Dependency
44
43
  name: devise
45
44
  requirement: !ruby/object:Gem::Requirement
46
45
  requirements:
47
- - - "~>"
46
+ - - ">="
48
47
  - !ruby/object:Gem::Version
49
48
  version: '4.7'
49
+ - - "<"
50
+ - !ruby/object:Gem::Version
51
+ version: '6.0'
50
52
  type: :runtime
51
53
  prerelease: false
52
54
  version_requirements: !ruby/object:Gem::Requirement
53
55
  requirements:
54
- - - "~>"
56
+ - - ">="
55
57
  - !ruby/object:Gem::Version
56
58
  version: '4.7'
59
+ - - "<"
60
+ - !ruby/object:Gem::Version
61
+ version: '6.0'
57
62
  - !ruby/object:Gem::Dependency
58
63
  name: devise-i18n
59
64
  requirement: !ruby/object:Gem::Requirement
@@ -94,14 +99,14 @@ dependencies:
94
99
  requirements:
95
100
  - - '='
96
101
  - !ruby/object:Gem::Version
97
- version: 0.31.3
102
+ version: 0.32.0.rc1
98
103
  type: :development
99
104
  prerelease: false
100
105
  version_requirements: !ruby/object:Gem::Requirement
101
106
  requirements:
102
107
  - - '='
103
108
  - !ruby/object:Gem::Version
104
- version: 0.31.3
109
+ version: 0.32.0.rc1
105
110
  description: System administration to create new organization in an installation.
106
111
  email:
107
112
  - josepjaume@gmail.com
@@ -294,7 +299,6 @@ metadata:
294
299
  funding_uri: https://opencollective.com/decidim
295
300
  homepage_uri: https://decidim.org
296
301
  source_code_uri: https://github.com/decidim/decidim
297
- post_install_message:
298
302
  rdoc_options: []
299
303
  require_paths:
300
304
  - lib
@@ -302,15 +306,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
302
306
  requirements:
303
307
  - - "~>"
304
308
  - !ruby/object:Gem::Version
305
- version: 3.3.0
309
+ version: 3.4.0
306
310
  required_rubygems_version: !ruby/object:Gem::Requirement
307
311
  requirements:
308
312
  - - ">="
309
313
  - !ruby/object:Gem::Version
310
314
  version: '0'
311
315
  requirements: []
312
- rubygems_version: 3.5.11
313
- signing_key:
316
+ rubygems_version: 3.6.9
314
317
  specification_version: 4
315
318
  summary: Decidim system administration
316
319
  test_files: []