decidim-dev 0.31.7 → 0.31.8

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 (77) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/decidim/dev/dummy_resources_controller.rb +2 -0
  3. data/config/locales/eu.yml +6 -6
  4. data/config/locales/gl.yml +15 -1
  5. data/config/rubocop/decidim-linters/configuration.yml +40 -0
  6. data/config/rubocop/rspec/configuration.yml +1 -0
  7. data/lib/decidim/dev/assets/empty_file.png +0 -0
  8. data/lib/decidim/dev/assets/malformed_svg_unclosed_element.svg +7 -0
  9. data/lib/decidim/dev/assets/malicious_svg_animation.svg +1 -0
  10. data/lib/decidim/dev/assets/malicious_svg_animation_attribute_names.svg +1 -0
  11. data/lib/decidim/dev/assets/malicious_svg_animation_fill.svg +1 -0
  12. data/lib/decidim/dev/assets/malicious_svg_animation_style.svg +1 -0
  13. data/lib/decidim/dev/assets/malicious_svg_animation_values.svg +1 -0
  14. data/lib/decidim/dev/assets/malicious_svg_attributename_case.svg +1 -0
  15. data/lib/decidim/dev/assets/malicious_svg_backslash_reference.svg +1 -0
  16. data/lib/decidim/dev/assets/malicious_svg_css_backslash_url.svg +1 -0
  17. data/lib/decidim/dev/assets/malicious_svg_css_comment_in_url.svg +1 -0
  18. data/lib/decidim/dev/assets/malicious_svg_css_image_set.svg +1 -0
  19. data/lib/decidim/dev/assets/malicious_svg_css_image_set_nested_parentheses.svg +1 -0
  20. data/lib/decidim/dev/assets/malicious_svg_cursor.svg +1 -0
  21. data/lib/decidim/dev/assets/malicious_svg_cursor_attribute.svg +1 -0
  22. data/lib/decidim/dev/assets/malicious_svg_data_uri_declared_encoding.svg +1 -0
  23. data/lib/decidim/dev/assets/malicious_svg_data_uri_deep_nested.svg +1 -0
  24. data/lib/decidim/dev/assets/malicious_svg_data_uri_leading_space.svg +1 -0
  25. data/lib/decidim/dev/assets/malicious_svg_data_uri_nested.svg +1 -0
  26. data/lib/decidim/dev/assets/malicious_svg_data_uri_parameter.svg +1 -0
  27. data/lib/decidim/dev/assets/malicious_svg_entity.svg +5 -0
  28. data/lib/decidim/dev/assets/malicious_svg_entity_parameter.svg +7 -0
  29. data/lib/decidim/dev/assets/malicious_svg_external_animation.svg +1 -0
  30. data/lib/decidim/dev/assets/malicious_svg_external_animation_missing_target.svg +1 -0
  31. data/lib/decidim/dev/assets/malicious_svg_external_animation_target.svg +1 -0
  32. data/lib/decidim/dev/assets/malicious_svg_external_feimage.svg +1 -0
  33. data/lib/decidim/dev/assets/malicious_svg_external_image.svg +1 -0
  34. data/lib/decidim/dev/assets/malicious_svg_external_use.svg +1 -0
  35. data/lib/decidim/dev/assets/malicious_svg_fill_external_reference.svg +1 -0
  36. data/lib/decidim/dev/assets/malicious_svg_foreign_object.svg +1 -0
  37. data/lib/decidim/dev/assets/malicious_svg_handler.svg +1 -0
  38. data/lib/decidim/dev/assets/malicious_svg_marker_external_reference.svg +1 -0
  39. data/lib/decidim/dev/assets/malicious_svg_mask_attribute.svg +1 -0
  40. data/lib/decidim/dev/assets/malicious_svg_script.svg +1 -0
  41. data/lib/decidim/dev/assets/malicious_svg_style_comment_string.svg +1 -0
  42. data/lib/decidim/dev/assets/malicious_svg_style_import.svg +1 -0
  43. data/lib/decidim/dev/assets/malicious_svg_style_import_string.svg +1 -0
  44. data/lib/decidim/dev/assets/malicious_svg_style_url_escape.svg +1 -0
  45. data/lib/decidim/dev/assets/malicious_svg_style_url_string.svg +1 -0
  46. data/lib/decidim/dev/assets/malicious_svg_stylesheet_pi.svg +1 -0
  47. data/lib/decidim/dev/assets/malicious_svg_uri.svg +1 -0
  48. data/lib/decidim/dev/assets/spoofed_image.png +0 -0
  49. data/lib/decidim/dev/assets/spoofed_image_binary.png +1 -0
  50. data/lib/decidim/dev/assets/spoofed_image_html.png +5 -0
  51. data/lib/decidim/dev/assets/spoofed_svg_xml.svg +2 -0
  52. data/lib/decidim/dev/assets/test.avif +0 -0
  53. data/lib/decidim/dev/assets/test.gif +0 -0
  54. data/lib/decidim/dev/assets/test.heic +0 -0
  55. data/lib/decidim/dev/assets/test.svg +1 -0
  56. data/lib/decidim/dev/assets/test_animation.svg +1 -0
  57. data/lib/decidim/dev/assets/test_animation_link.svg +7 -0
  58. data/lib/decidim/dev/assets/test_animation_presentation_reference.svg +8 -0
  59. data/lib/decidim/dev/assets/test_complex.svg +12 -0
  60. data/lib/decidim/dev/assets/test_css_references.svg +14 -0
  61. data/lib/decidim/dev/assets/test_data_uri_declared_encoding.svg +5 -0
  62. data/lib/decidim/dev/assets/test_entity_in_comment.svg +8 -0
  63. data/lib/decidim/dev/assets/test_entity_in_processing_instruction.svg +7 -0
  64. data/lib/decidim/dev/assets/test_percent_encoded_fragment.svg +7 -0
  65. data/lib/decidim/dev/assets/test_percent_encoded_multibyte_reference.svg +7 -0
  66. data/lib/decidim/dev/assets/test_percent_encoded_multibyte_reference_mixed.svg +8 -0
  67. data/lib/decidim/dev/assets/test_presentation_attribute_references.svg +13 -0
  68. data/lib/decidim/dev/assets/test_references.svg +12 -0
  69. data/lib/decidim/dev/assets/test_style_text.svg +9 -0
  70. data/lib/decidim/dev/assets/video.mp4 +0 -0
  71. data/lib/decidim/dev/rubocop/cop/decidim/enforce_permission_to.rb +459 -0
  72. data/lib/decidim/dev/rubocop/cop/decidim/organization_scoped_finder.rb +200 -0
  73. data/lib/decidim/dev/test/rspec_support/capybara.rb +54 -0
  74. data/lib/decidim/dev/test/rspec_support/helpers.rb +14 -1
  75. data/lib/decidim/dev/version.rb +1 -1
  76. data/rubocop-decidim.yml +1 -0
  77. metadata +81 -14
@@ -27,6 +27,60 @@ module Decidim
27
27
 
28
28
  "http"
29
29
  end
30
+
31
+ def expire_browser_session(wait: Capybara.default_max_wait_time)
32
+ wait_pending_requests(wait)
33
+
34
+ travel(Decidim.config.expire_session_after + 1.second) do
35
+ yield
36
+ end
37
+ end
38
+
39
+ # Clear the buffers and background connections by taking the browser to
40
+ # offline state for a tiny moment. If a block is given, any further commands
41
+ # can be run during the offline state.
42
+ def force_browser_offline_state
43
+ page.driver.browser.execute_cdp(
44
+ "Network.emulateNetworkConditions",
45
+ offline: true,
46
+ latency: 0,
47
+ downloadThroughput: 0,
48
+ uploadThroughput: 0
49
+ )
50
+ sleep 0.05
51
+
52
+ yield if block_given?
53
+ ensure
54
+ page.driver.browser.execute_cdp(
55
+ "Network.emulateNetworkConditions",
56
+ offline: false,
57
+ latency: 0,
58
+ downloadThroughput: -1,
59
+ uploadThroughput: -1
60
+ )
61
+ end
62
+
63
+ # Waits for any pending requests to finish and clears any active browser
64
+ # background connections after that.
65
+ def wait_pending_requests(max_wait_time = Capybara.default_max_wait_time, idle_time: 1)
66
+ wait_time = 0
67
+ loop do
68
+ time_since_last_asset = page.evaluate_script(
69
+ <<~JS
70
+ performance.now() - Math.max(...window.performance.getEntriesByType("resource").map((r) => r.responseEnd), 0)
71
+ JS
72
+ )
73
+ break if time_since_last_asset > (idle_time * 1000)
74
+
75
+ remaining_wait_time = max_wait_time - wait_time
76
+ raise StandardError, "Requests still pending." if remaining_wait_time <= 0
77
+
78
+ sleep_time = [idle_time, remaining_wait_time].min
79
+ sleep sleep_time
80
+ wait_time += sleep_time
81
+ end
82
+ force_browser_offline_state
83
+ end
30
84
  end
31
85
  end
32
86
 
@@ -68,7 +68,20 @@ module Decidim
68
68
  "User-Agent" => "Ruby"
69
69
  }
70
70
  )
71
- .to_return(status: 200, body: "", headers: { content_type: rs_format })
71
+ .to_return(status: 200, body: stubbed_file_body(rs_format), headers: { content_type: rs_format })
72
+ end
73
+
74
+ # Real content for the stubbed formats. Content validation rejects empty
75
+ # uploads declared as images, so the stubbed downloads must return bytes
76
+ # matching their content type.
77
+ def stubbed_file_body(rs_format)
78
+ asset = {
79
+ "image/jpeg" => "city.jpeg",
80
+ "application/pdf" => "Exampledocument.pdf"
81
+ }[rs_format]
82
+ return "" if asset.nil?
83
+
84
+ File.binread(Decidim::Dev.asset(asset))
72
85
  end
73
86
  end
74
87
 
@@ -4,7 +4,7 @@ module Decidim
4
4
  # This holds the decidim-dev version.
5
5
  module Dev
6
6
  def self.version
7
- "0.31.7"
7
+ "0.31.8"
8
8
  end
9
9
  end
10
10
  end
data/rubocop-decidim.yml CHANGED
@@ -26,3 +26,4 @@ inherit_from:
26
26
  - config/rubocop/factory_bot/configuration.yml
27
27
  - config/rubocop/factory_bot/disabled.yml
28
28
  - config/rubocop/disabled.yml
29
+ - config/rubocop/decidim-linters/configuration.yml
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: decidim-dev
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.31.7
4
+ version: 0.31.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josep Jaume Rey Peroy
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2026-07-30 00:00:00.000000000 Z
13
+ date: 2026-10-22 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: capybara
@@ -32,84 +32,84 @@ dependencies:
32
32
  requirements:
33
33
  - - '='
34
34
  - !ruby/object:Gem::Version
35
- version: 0.31.7
35
+ version: 0.31.8
36
36
  type: :runtime
37
37
  prerelease: false
38
38
  version_requirements: !ruby/object:Gem::Requirement
39
39
  requirements:
40
40
  - - '='
41
41
  - !ruby/object:Gem::Version
42
- version: 0.31.7
42
+ version: 0.31.8
43
43
  - !ruby/object:Gem::Dependency
44
44
  name: decidim-api
45
45
  requirement: !ruby/object:Gem::Requirement
46
46
  requirements:
47
47
  - - '='
48
48
  - !ruby/object:Gem::Version
49
- version: 0.31.7
49
+ version: 0.31.8
50
50
  type: :runtime
51
51
  prerelease: false
52
52
  version_requirements: !ruby/object:Gem::Requirement
53
53
  requirements:
54
54
  - - '='
55
55
  - !ruby/object:Gem::Version
56
- version: 0.31.7
56
+ version: 0.31.8
57
57
  - !ruby/object:Gem::Dependency
58
58
  name: decidim-comments
59
59
  requirement: !ruby/object:Gem::Requirement
60
60
  requirements:
61
61
  - - '='
62
62
  - !ruby/object:Gem::Version
63
- version: 0.31.7
63
+ version: 0.31.8
64
64
  type: :runtime
65
65
  prerelease: false
66
66
  version_requirements: !ruby/object:Gem::Requirement
67
67
  requirements:
68
68
  - - '='
69
69
  - !ruby/object:Gem::Version
70
- version: 0.31.7
70
+ version: 0.31.8
71
71
  - !ruby/object:Gem::Dependency
72
72
  name: decidim-core
73
73
  requirement: !ruby/object:Gem::Requirement
74
74
  requirements:
75
75
  - - '='
76
76
  - !ruby/object:Gem::Version
77
- version: 0.31.7
77
+ version: 0.31.8
78
78
  type: :runtime
79
79
  prerelease: false
80
80
  version_requirements: !ruby/object:Gem::Requirement
81
81
  requirements:
82
82
  - - '='
83
83
  - !ruby/object:Gem::Version
84
- version: 0.31.7
84
+ version: 0.31.8
85
85
  - !ruby/object:Gem::Dependency
86
86
  name: decidim-generators
87
87
  requirement: !ruby/object:Gem::Requirement
88
88
  requirements:
89
89
  - - '='
90
90
  - !ruby/object:Gem::Version
91
- version: 0.31.7
91
+ version: 0.31.8
92
92
  type: :runtime
93
93
  prerelease: false
94
94
  version_requirements: !ruby/object:Gem::Requirement
95
95
  requirements:
96
96
  - - '='
97
97
  - !ruby/object:Gem::Version
98
- version: 0.31.7
98
+ version: 0.31.8
99
99
  - !ruby/object:Gem::Dependency
100
100
  name: decidim-verifications
101
101
  requirement: !ruby/object:Gem::Requirement
102
102
  requirements:
103
103
  - - '='
104
104
  - !ruby/object:Gem::Version
105
- version: 0.31.7
105
+ version: 0.31.8
106
106
  type: :runtime
107
107
  prerelease: false
108
108
  version_requirements: !ruby/object:Gem::Requirement
109
109
  requirements:
110
110
  - - '='
111
111
  - !ruby/object:Gem::Version
112
- version: 0.31.7
112
+ version: 0.31.8
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: factory_bot_rails
115
115
  requirement: !ruby/object:Gem::Requirement
@@ -755,6 +755,7 @@ files:
755
755
  - config/locales/zh-TW.yml
756
756
  - config/rubocop/capybara/configuration.yml
757
757
  - config/rubocop/capybara/disabled.yml
758
+ - config/rubocop/decidim-linters/configuration.yml
758
759
  - config/rubocop/disabled.yml
759
760
  - config/rubocop/factory_bot/configuration.yml
760
761
  - config/rubocop/factory_bot/disabled.yml
@@ -798,6 +799,7 @@ files:
798
799
  - lib/decidim/dev/assets/dummy-dummies-example.xlsx
799
800
  - lib/decidim/dev/assets/dummy-export.zip
800
801
  - lib/decidim/dev/assets/empty_file.csv
802
+ - lib/decidim/dev/assets/empty_file.png
801
803
  - lib/decidim/dev/assets/geocoder_result_here.json
802
804
  - lib/decidim/dev/assets/geocoder_result_osm.json
803
805
  - lib/decidim/dev/assets/icon.ico
@@ -820,7 +822,47 @@ files:
820
822
  - lib/decidim/dev/assets/invalid_extension.log
821
823
  - lib/decidim/dev/assets/iso-8859-15.md
822
824
  - lib/decidim/dev/assets/logo.png
825
+ - lib/decidim/dev/assets/malformed_svg_unclosed_element.svg
823
826
  - lib/decidim/dev/assets/malicious.jpg
827
+ - lib/decidim/dev/assets/malicious_svg_animation.svg
828
+ - lib/decidim/dev/assets/malicious_svg_animation_attribute_names.svg
829
+ - lib/decidim/dev/assets/malicious_svg_animation_fill.svg
830
+ - lib/decidim/dev/assets/malicious_svg_animation_style.svg
831
+ - lib/decidim/dev/assets/malicious_svg_animation_values.svg
832
+ - lib/decidim/dev/assets/malicious_svg_attributename_case.svg
833
+ - lib/decidim/dev/assets/malicious_svg_backslash_reference.svg
834
+ - lib/decidim/dev/assets/malicious_svg_css_backslash_url.svg
835
+ - lib/decidim/dev/assets/malicious_svg_css_comment_in_url.svg
836
+ - lib/decidim/dev/assets/malicious_svg_css_image_set.svg
837
+ - lib/decidim/dev/assets/malicious_svg_css_image_set_nested_parentheses.svg
838
+ - lib/decidim/dev/assets/malicious_svg_cursor.svg
839
+ - lib/decidim/dev/assets/malicious_svg_cursor_attribute.svg
840
+ - lib/decidim/dev/assets/malicious_svg_data_uri_declared_encoding.svg
841
+ - lib/decidim/dev/assets/malicious_svg_data_uri_deep_nested.svg
842
+ - lib/decidim/dev/assets/malicious_svg_data_uri_leading_space.svg
843
+ - lib/decidim/dev/assets/malicious_svg_data_uri_nested.svg
844
+ - lib/decidim/dev/assets/malicious_svg_data_uri_parameter.svg
845
+ - lib/decidim/dev/assets/malicious_svg_entity.svg
846
+ - lib/decidim/dev/assets/malicious_svg_entity_parameter.svg
847
+ - lib/decidim/dev/assets/malicious_svg_external_animation.svg
848
+ - lib/decidim/dev/assets/malicious_svg_external_animation_missing_target.svg
849
+ - lib/decidim/dev/assets/malicious_svg_external_animation_target.svg
850
+ - lib/decidim/dev/assets/malicious_svg_external_feimage.svg
851
+ - lib/decidim/dev/assets/malicious_svg_external_image.svg
852
+ - lib/decidim/dev/assets/malicious_svg_external_use.svg
853
+ - lib/decidim/dev/assets/malicious_svg_fill_external_reference.svg
854
+ - lib/decidim/dev/assets/malicious_svg_foreign_object.svg
855
+ - lib/decidim/dev/assets/malicious_svg_handler.svg
856
+ - lib/decidim/dev/assets/malicious_svg_marker_external_reference.svg
857
+ - lib/decidim/dev/assets/malicious_svg_mask_attribute.svg
858
+ - lib/decidim/dev/assets/malicious_svg_script.svg
859
+ - lib/decidim/dev/assets/malicious_svg_style_comment_string.svg
860
+ - lib/decidim/dev/assets/malicious_svg_style_import.svg
861
+ - lib/decidim/dev/assets/malicious_svg_style_import_string.svg
862
+ - lib/decidim/dev/assets/malicious_svg_style_url_escape.svg
863
+ - lib/decidim/dev/assets/malicious_svg_style_url_string.svg
864
+ - lib/decidim/dev/assets/malicious_svg_stylesheet_pi.svg
865
+ - lib/decidim/dev/assets/malicious_svg_uri.svg
824
866
  - lib/decidim/dev/assets/odt_file_reported_as.pdf
825
867
  - lib/decidim/dev/assets/participatory_processes.json
826
868
  - lib/decidim/dev/assets/participatory_processes_with_null.json
@@ -833,12 +875,35 @@ files:
833
875
  - lib/decidim/dev/assets/public_key.jwk
834
876
  - lib/decidim/dev/assets/public_key2.jwk
835
877
  - lib/decidim/dev/assets/public_key3.jwk
878
+ - lib/decidim/dev/assets/spoofed_image.png
879
+ - lib/decidim/dev/assets/spoofed_image_binary.png
880
+ - lib/decidim/dev/assets/spoofed_image_html.png
881
+ - lib/decidim/dev/assets/spoofed_svg_xml.svg
836
882
  - lib/decidim/dev/assets/ssl-cert.pem
837
883
  - lib/decidim/dev/assets/ssl-key.pem
884
+ - lib/decidim/dev/assets/test.avif
885
+ - lib/decidim/dev/assets/test.gif
886
+ - lib/decidim/dev/assets/test.heic
887
+ - lib/decidim/dev/assets/test.svg
888
+ - lib/decidim/dev/assets/test_animation.svg
889
+ - lib/decidim/dev/assets/test_animation_link.svg
890
+ - lib/decidim/dev/assets/test_animation_presentation_reference.svg
891
+ - lib/decidim/dev/assets/test_complex.svg
892
+ - lib/decidim/dev/assets/test_css_references.svg
893
+ - lib/decidim/dev/assets/test_data_uri_declared_encoding.svg
894
+ - lib/decidim/dev/assets/test_entity_in_comment.svg
895
+ - lib/decidim/dev/assets/test_entity_in_processing_instruction.svg
838
896
  - lib/decidim/dev/assets/test_excel.xlsx
897
+ - lib/decidim/dev/assets/test_percent_encoded_fragment.svg
898
+ - lib/decidim/dev/assets/test_percent_encoded_multibyte_reference.svg
899
+ - lib/decidim/dev/assets/test_percent_encoded_multibyte_reference_mixed.svg
900
+ - lib/decidim/dev/assets/test_presentation_attribute_references.svg
901
+ - lib/decidim/dev/assets/test_references.svg
902
+ - lib/decidim/dev/assets/test_style_text.svg
839
903
  - lib/decidim/dev/assets/valid_election_census.csv
840
904
  - lib/decidim/dev/assets/valid_emails.csv
841
905
  - lib/decidim/dev/assets/verify_user_groups.csv
906
+ - lib/decidim/dev/assets/video.mp4
842
907
  - lib/decidim/dev/auth_engine.rb
843
908
  - lib/decidim/dev/common_rake.rb
844
909
  - lib/decidim/dev/component.rb
@@ -846,6 +911,8 @@ files:
846
911
  - lib/decidim/dev/engine.rb
847
912
  - lib/decidim/dev/needs_development_tools.rb
848
913
  - lib/decidim/dev/railtie.rb
914
+ - lib/decidim/dev/rubocop/cop/decidim/enforce_permission_to.rb
915
+ - lib/decidim/dev/rubocop/cop/decidim/organization_scoped_finder.rb
849
916
  - lib/decidim/dev/test/authorization_shared_examples.rb
850
917
  - lib/decidim/dev/test/base_spec_helper.rb
851
918
  - lib/decidim/dev/test/factories.rb