decidim-dev 0.32.0 → 0.32.2

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 (79) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/decidim/dev/dummy_resources_controller.rb +3 -1
  3. data/app/packs/src/decidim/dev/accessibility.js +1 -1
  4. data/config/locales/eu.yml +6 -6
  5. data/config/locales/gl.yml +15 -1
  6. data/config/rubocop/decidim-linters/configuration.yml +36 -0
  7. data/config/rubocop/rspec/configuration.yml +1 -0
  8. data/decidim-dev.gemspec +1 -1
  9. data/lib/decidim/dev/assets/empty_file.png +0 -0
  10. data/lib/decidim/dev/assets/malformed_svg_unclosed_element.svg +7 -0
  11. data/lib/decidim/dev/assets/malicious_svg_animation.svg +1 -0
  12. data/lib/decidim/dev/assets/malicious_svg_animation_attribute_names.svg +1 -0
  13. data/lib/decidim/dev/assets/malicious_svg_animation_fill.svg +1 -0
  14. data/lib/decidim/dev/assets/malicious_svg_animation_style.svg +1 -0
  15. data/lib/decidim/dev/assets/malicious_svg_animation_values.svg +1 -0
  16. data/lib/decidim/dev/assets/malicious_svg_attributename_case.svg +1 -0
  17. data/lib/decidim/dev/assets/malicious_svg_backslash_reference.svg +1 -0
  18. data/lib/decidim/dev/assets/malicious_svg_css_backslash_url.svg +1 -0
  19. data/lib/decidim/dev/assets/malicious_svg_css_comment_in_url.svg +1 -0
  20. data/lib/decidim/dev/assets/malicious_svg_css_image_set.svg +1 -0
  21. data/lib/decidim/dev/assets/malicious_svg_css_image_set_nested_parentheses.svg +1 -0
  22. data/lib/decidim/dev/assets/malicious_svg_cursor.svg +1 -0
  23. data/lib/decidim/dev/assets/malicious_svg_cursor_attribute.svg +1 -0
  24. data/lib/decidim/dev/assets/malicious_svg_data_uri_declared_encoding.svg +1 -0
  25. data/lib/decidim/dev/assets/malicious_svg_data_uri_deep_nested.svg +1 -0
  26. data/lib/decidim/dev/assets/malicious_svg_data_uri_leading_space.svg +1 -0
  27. data/lib/decidim/dev/assets/malicious_svg_data_uri_nested.svg +1 -0
  28. data/lib/decidim/dev/assets/malicious_svg_data_uri_parameter.svg +1 -0
  29. data/lib/decidim/dev/assets/malicious_svg_entity.svg +5 -0
  30. data/lib/decidim/dev/assets/malicious_svg_entity_parameter.svg +7 -0
  31. data/lib/decidim/dev/assets/malicious_svg_external_animation.svg +1 -0
  32. data/lib/decidim/dev/assets/malicious_svg_external_animation_missing_target.svg +1 -0
  33. data/lib/decidim/dev/assets/malicious_svg_external_animation_target.svg +1 -0
  34. data/lib/decidim/dev/assets/malicious_svg_external_feimage.svg +1 -0
  35. data/lib/decidim/dev/assets/malicious_svg_external_image.svg +1 -0
  36. data/lib/decidim/dev/assets/malicious_svg_external_use.svg +1 -0
  37. data/lib/decidim/dev/assets/malicious_svg_fill_external_reference.svg +1 -0
  38. data/lib/decidim/dev/assets/malicious_svg_foreign_object.svg +1 -0
  39. data/lib/decidim/dev/assets/malicious_svg_handler.svg +1 -0
  40. data/lib/decidim/dev/assets/malicious_svg_marker_external_reference.svg +1 -0
  41. data/lib/decidim/dev/assets/malicious_svg_mask_attribute.svg +1 -0
  42. data/lib/decidim/dev/assets/malicious_svg_script.svg +1 -0
  43. data/lib/decidim/dev/assets/malicious_svg_style_comment_string.svg +1 -0
  44. data/lib/decidim/dev/assets/malicious_svg_style_import.svg +1 -0
  45. data/lib/decidim/dev/assets/malicious_svg_style_import_string.svg +1 -0
  46. data/lib/decidim/dev/assets/malicious_svg_style_url_escape.svg +1 -0
  47. data/lib/decidim/dev/assets/malicious_svg_style_url_string.svg +1 -0
  48. data/lib/decidim/dev/assets/malicious_svg_stylesheet_pi.svg +1 -0
  49. data/lib/decidim/dev/assets/malicious_svg_uri.svg +1 -0
  50. data/lib/decidim/dev/assets/spoofed_image.png +0 -0
  51. data/lib/decidim/dev/assets/spoofed_image_binary.png +1 -0
  52. data/lib/decidim/dev/assets/spoofed_image_html.png +5 -0
  53. data/lib/decidim/dev/assets/spoofed_svg_xml.svg +2 -0
  54. data/lib/decidim/dev/assets/test.avif +0 -0
  55. data/lib/decidim/dev/assets/test.gif +0 -0
  56. data/lib/decidim/dev/assets/test.heic +0 -0
  57. data/lib/decidim/dev/assets/test.svg +1 -0
  58. data/lib/decidim/dev/assets/test_animation.svg +1 -0
  59. data/lib/decidim/dev/assets/test_animation_link.svg +7 -0
  60. data/lib/decidim/dev/assets/test_animation_presentation_reference.svg +8 -0
  61. data/lib/decidim/dev/assets/test_complex.svg +12 -0
  62. data/lib/decidim/dev/assets/test_css_references.svg +14 -0
  63. data/lib/decidim/dev/assets/test_data_uri_declared_encoding.svg +5 -0
  64. data/lib/decidim/dev/assets/test_entity_in_comment.svg +8 -0
  65. data/lib/decidim/dev/assets/test_entity_in_processing_instruction.svg +7 -0
  66. data/lib/decidim/dev/assets/test_percent_encoded_fragment.svg +7 -0
  67. data/lib/decidim/dev/assets/test_percent_encoded_multibyte_reference.svg +7 -0
  68. data/lib/decidim/dev/assets/test_percent_encoded_multibyte_reference_mixed.svg +8 -0
  69. data/lib/decidim/dev/assets/test_presentation_attribute_references.svg +13 -0
  70. data/lib/decidim/dev/assets/test_references.svg +12 -0
  71. data/lib/decidim/dev/assets/test_style_text.svg +9 -0
  72. data/lib/decidim/dev/assets/video.mp4 +0 -0
  73. data/lib/decidim/dev/rubocop/cop/decidim/enforce_permission_to.rb +459 -0
  74. data/lib/decidim/dev/rubocop/cop/decidim/organization_scoped_finder.rb +200 -0
  75. data/lib/decidim/dev/test/rspec_support/capybara.rb +54 -0
  76. data/lib/decidim/dev/test/rspec_support/editor_context.rb +1 -1
  77. data/lib/decidim/dev/test/rspec_support/helpers.rb +14 -1
  78. data/lib/decidim/dev/version.rb +1 -1
  79. metadata +79 -13
@@ -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
 
@@ -17,7 +17,7 @@ shared_context "with editor content containing mentions" do
17
17
 
18
18
  def html_mention(mentionable)
19
19
  mention = "@#{mentionable.nickname}"
20
- label = "#{mention} (#{CGI.escapeHTML(mentionable.name)})"
20
+ label = mention
21
21
  %(<span data-type="mention" data-id="#{mention}" data-label="#{label}">#{label}</span>)
22
22
  end
23
23
  end
@@ -74,7 +74,20 @@ module Decidim
74
74
  "User-Agent" => "Ruby"
75
75
  }
76
76
  )
77
- .to_return(status: 200, body: "", headers: { content_type: rs_format })
77
+ .to_return(status: 200, body: stubbed_file_body(rs_format), headers: { content_type: rs_format })
78
+ end
79
+
80
+ # Real content for the stubbed formats. Content validation rejects empty
81
+ # uploads declared as images, so the stubbed downloads must return bytes
82
+ # matching their content type.
83
+ def stubbed_file_body(rs_format)
84
+ asset = {
85
+ "image/jpeg" => "city.jpeg",
86
+ "application/pdf" => "Exampledocument.pdf"
87
+ }[rs_format]
88
+ return "" if asset.nil?
89
+
90
+ File.binread(Decidim::Dev.asset(asset))
78
91
  end
79
92
  end
80
93
 
@@ -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.32.0"
7
+ "0.32.2"
8
8
  end
9
9
  end
10
10
  end
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.32.0
4
+ version: 0.32.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josep Jaume Rey Peroy
@@ -31,84 +31,84 @@ dependencies:
31
31
  requirements:
32
32
  - - '='
33
33
  - !ruby/object:Gem::Version
34
- version: 0.32.0
34
+ version: 0.32.2
35
35
  type: :runtime
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
39
  - - '='
40
40
  - !ruby/object:Gem::Version
41
- version: 0.32.0
41
+ version: 0.32.2
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: decidim-api
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
46
  - - '='
47
47
  - !ruby/object:Gem::Version
48
- version: 0.32.0
48
+ version: 0.32.2
49
49
  type: :runtime
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
53
  - - '='
54
54
  - !ruby/object:Gem::Version
55
- version: 0.32.0
55
+ version: 0.32.2
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: decidim-comments
58
58
  requirement: !ruby/object:Gem::Requirement
59
59
  requirements:
60
60
  - - '='
61
61
  - !ruby/object:Gem::Version
62
- version: 0.32.0
62
+ version: 0.32.2
63
63
  type: :runtime
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
67
  - - '='
68
68
  - !ruby/object:Gem::Version
69
- version: 0.32.0
69
+ version: 0.32.2
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: decidim-core
72
72
  requirement: !ruby/object:Gem::Requirement
73
73
  requirements:
74
74
  - - '='
75
75
  - !ruby/object:Gem::Version
76
- version: 0.32.0
76
+ version: 0.32.2
77
77
  type: :runtime
78
78
  prerelease: false
79
79
  version_requirements: !ruby/object:Gem::Requirement
80
80
  requirements:
81
81
  - - '='
82
82
  - !ruby/object:Gem::Version
83
- version: 0.32.0
83
+ version: 0.32.2
84
84
  - !ruby/object:Gem::Dependency
85
85
  name: decidim-generators
86
86
  requirement: !ruby/object:Gem::Requirement
87
87
  requirements:
88
88
  - - '='
89
89
  - !ruby/object:Gem::Version
90
- version: 0.32.0
90
+ version: 0.32.2
91
91
  type: :runtime
92
92
  prerelease: false
93
93
  version_requirements: !ruby/object:Gem::Requirement
94
94
  requirements:
95
95
  - - '='
96
96
  - !ruby/object:Gem::Version
97
- version: 0.32.0
97
+ version: 0.32.2
98
98
  - !ruby/object:Gem::Dependency
99
99
  name: decidim-verifications
100
100
  requirement: !ruby/object:Gem::Requirement
101
101
  requirements:
102
102
  - - '='
103
103
  - !ruby/object:Gem::Version
104
- version: 0.32.0
104
+ version: 0.32.2
105
105
  type: :runtime
106
106
  prerelease: false
107
107
  version_requirements: !ruby/object:Gem::Requirement
108
108
  requirements:
109
109
  - - '='
110
110
  - !ruby/object:Gem::Version
111
- version: 0.32.0
111
+ version: 0.32.2
112
112
  - !ruby/object:Gem::Dependency
113
113
  name: factory_bot_rails
114
114
  requirement: !ruby/object:Gem::Requirement
@@ -867,6 +867,7 @@ files:
867
867
  - lib/decidim/dev/assets/dummy-dummies-example.xlsx
868
868
  - lib/decidim/dev/assets/dummy-export.zip
869
869
  - lib/decidim/dev/assets/empty_file.csv
870
+ - lib/decidim/dev/assets/empty_file.png
870
871
  - lib/decidim/dev/assets/geocoder_result_here.json
871
872
  - lib/decidim/dev/assets/geocoder_result_osm.json
872
873
  - lib/decidim/dev/assets/icon.ico
@@ -889,7 +890,47 @@ files:
889
890
  - lib/decidim/dev/assets/invalid_extension.log
890
891
  - lib/decidim/dev/assets/iso-8859-15.md
891
892
  - lib/decidim/dev/assets/logo.png
893
+ - lib/decidim/dev/assets/malformed_svg_unclosed_element.svg
892
894
  - lib/decidim/dev/assets/malicious.jpg
895
+ - lib/decidim/dev/assets/malicious_svg_animation.svg
896
+ - lib/decidim/dev/assets/malicious_svg_animation_attribute_names.svg
897
+ - lib/decidim/dev/assets/malicious_svg_animation_fill.svg
898
+ - lib/decidim/dev/assets/malicious_svg_animation_style.svg
899
+ - lib/decidim/dev/assets/malicious_svg_animation_values.svg
900
+ - lib/decidim/dev/assets/malicious_svg_attributename_case.svg
901
+ - lib/decidim/dev/assets/malicious_svg_backslash_reference.svg
902
+ - lib/decidim/dev/assets/malicious_svg_css_backslash_url.svg
903
+ - lib/decidim/dev/assets/malicious_svg_css_comment_in_url.svg
904
+ - lib/decidim/dev/assets/malicious_svg_css_image_set.svg
905
+ - lib/decidim/dev/assets/malicious_svg_css_image_set_nested_parentheses.svg
906
+ - lib/decidim/dev/assets/malicious_svg_cursor.svg
907
+ - lib/decidim/dev/assets/malicious_svg_cursor_attribute.svg
908
+ - lib/decidim/dev/assets/malicious_svg_data_uri_declared_encoding.svg
909
+ - lib/decidim/dev/assets/malicious_svg_data_uri_deep_nested.svg
910
+ - lib/decidim/dev/assets/malicious_svg_data_uri_leading_space.svg
911
+ - lib/decidim/dev/assets/malicious_svg_data_uri_nested.svg
912
+ - lib/decidim/dev/assets/malicious_svg_data_uri_parameter.svg
913
+ - lib/decidim/dev/assets/malicious_svg_entity.svg
914
+ - lib/decidim/dev/assets/malicious_svg_entity_parameter.svg
915
+ - lib/decidim/dev/assets/malicious_svg_external_animation.svg
916
+ - lib/decidim/dev/assets/malicious_svg_external_animation_missing_target.svg
917
+ - lib/decidim/dev/assets/malicious_svg_external_animation_target.svg
918
+ - lib/decidim/dev/assets/malicious_svg_external_feimage.svg
919
+ - lib/decidim/dev/assets/malicious_svg_external_image.svg
920
+ - lib/decidim/dev/assets/malicious_svg_external_use.svg
921
+ - lib/decidim/dev/assets/malicious_svg_fill_external_reference.svg
922
+ - lib/decidim/dev/assets/malicious_svg_foreign_object.svg
923
+ - lib/decidim/dev/assets/malicious_svg_handler.svg
924
+ - lib/decidim/dev/assets/malicious_svg_marker_external_reference.svg
925
+ - lib/decidim/dev/assets/malicious_svg_mask_attribute.svg
926
+ - lib/decidim/dev/assets/malicious_svg_script.svg
927
+ - lib/decidim/dev/assets/malicious_svg_style_comment_string.svg
928
+ - lib/decidim/dev/assets/malicious_svg_style_import.svg
929
+ - lib/decidim/dev/assets/malicious_svg_style_import_string.svg
930
+ - lib/decidim/dev/assets/malicious_svg_style_url_escape.svg
931
+ - lib/decidim/dev/assets/malicious_svg_style_url_string.svg
932
+ - lib/decidim/dev/assets/malicious_svg_stylesheet_pi.svg
933
+ - lib/decidim/dev/assets/malicious_svg_uri.svg
893
934
  - lib/decidim/dev/assets/odt_file_reported_as.pdf
894
935
  - lib/decidim/dev/assets/participatory_processes.json
895
936
  - lib/decidim/dev/assets/participatory_processes_with_null.json
@@ -902,12 +943,35 @@ files:
902
943
  - lib/decidim/dev/assets/public_key.jwk
903
944
  - lib/decidim/dev/assets/public_key2.jwk
904
945
  - lib/decidim/dev/assets/public_key3.jwk
946
+ - lib/decidim/dev/assets/spoofed_image.png
947
+ - lib/decidim/dev/assets/spoofed_image_binary.png
948
+ - lib/decidim/dev/assets/spoofed_image_html.png
949
+ - lib/decidim/dev/assets/spoofed_svg_xml.svg
905
950
  - lib/decidim/dev/assets/ssl-cert.pem
906
951
  - lib/decidim/dev/assets/ssl-key.pem
952
+ - lib/decidim/dev/assets/test.avif
953
+ - lib/decidim/dev/assets/test.gif
954
+ - lib/decidim/dev/assets/test.heic
955
+ - lib/decidim/dev/assets/test.svg
956
+ - lib/decidim/dev/assets/test_animation.svg
957
+ - lib/decidim/dev/assets/test_animation_link.svg
958
+ - lib/decidim/dev/assets/test_animation_presentation_reference.svg
959
+ - lib/decidim/dev/assets/test_complex.svg
960
+ - lib/decidim/dev/assets/test_css_references.svg
961
+ - lib/decidim/dev/assets/test_data_uri_declared_encoding.svg
962
+ - lib/decidim/dev/assets/test_entity_in_comment.svg
963
+ - lib/decidim/dev/assets/test_entity_in_processing_instruction.svg
907
964
  - lib/decidim/dev/assets/test_excel.xlsx
965
+ - lib/decidim/dev/assets/test_percent_encoded_fragment.svg
966
+ - lib/decidim/dev/assets/test_percent_encoded_multibyte_reference.svg
967
+ - lib/decidim/dev/assets/test_percent_encoded_multibyte_reference_mixed.svg
968
+ - lib/decidim/dev/assets/test_presentation_attribute_references.svg
969
+ - lib/decidim/dev/assets/test_references.svg
970
+ - lib/decidim/dev/assets/test_style_text.svg
908
971
  - lib/decidim/dev/assets/valid_election_census.csv
909
972
  - lib/decidim/dev/assets/valid_emails.csv
910
973
  - lib/decidim/dev/assets/verify_user_groups.csv
974
+ - lib/decidim/dev/assets/video.mp4
911
975
  - lib/decidim/dev/auth_engine.rb
912
976
  - lib/decidim/dev/common_rake.rb
913
977
  - lib/decidim/dev/component.rb
@@ -915,7 +979,9 @@ files:
915
979
  - lib/decidim/dev/engine.rb
916
980
  - lib/decidim/dev/needs_development_tools.rb
917
981
  - lib/decidim/dev/railtie.rb
982
+ - lib/decidim/dev/rubocop/cop/decidim/enforce_permission_to.rb
918
983
  - lib/decidim/dev/rubocop/cop/decidim/message_antipattern.rb
984
+ - lib/decidim/dev/rubocop/cop/decidim/organization_scoped_finder.rb
919
985
  - lib/decidim/dev/test/authorization_shared_examples.rb
920
986
  - lib/decidim/dev/test/base_spec_helper.rb
921
987
  - lib/decidim/dev/test/factories.rb