omg-actionview 8.0.0.alpha1
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/CHANGELOG.md +25 -0
- data/MIT-LICENSE +21 -0
- data/README.rdoc +40 -0
- data/app/assets/javascripts/rails-ujs.esm.js +686 -0
- data/app/assets/javascripts/rails-ujs.js +630 -0
- data/lib/action_view/base.rb +316 -0
- data/lib/action_view/buffers.rb +165 -0
- data/lib/action_view/cache_expiry.rb +69 -0
- data/lib/action_view/context.rb +32 -0
- data/lib/action_view/dependency_tracker/erb_tracker.rb +159 -0
- data/lib/action_view/dependency_tracker/ruby_tracker.rb +43 -0
- data/lib/action_view/dependency_tracker/wildcard_resolver.rb +32 -0
- data/lib/action_view/dependency_tracker.rb +41 -0
- data/lib/action_view/deprecator.rb +7 -0
- data/lib/action_view/digestor.rb +130 -0
- data/lib/action_view/flows.rb +75 -0
- data/lib/action_view/gem_version.rb +17 -0
- data/lib/action_view/helpers/active_model_helper.rb +54 -0
- data/lib/action_view/helpers/asset_tag_helper.rb +680 -0
- data/lib/action_view/helpers/asset_url_helper.rb +473 -0
- data/lib/action_view/helpers/atom_feed_helper.rb +205 -0
- data/lib/action_view/helpers/cache_helper.rb +315 -0
- data/lib/action_view/helpers/capture_helper.rb +236 -0
- data/lib/action_view/helpers/content_exfiltration_prevention_helper.rb +70 -0
- data/lib/action_view/helpers/controller_helper.rb +42 -0
- data/lib/action_view/helpers/csp_helper.rb +26 -0
- data/lib/action_view/helpers/csrf_helper.rb +35 -0
- data/lib/action_view/helpers/date_helper.rb +1266 -0
- data/lib/action_view/helpers/debug_helper.rb +38 -0
- data/lib/action_view/helpers/form_helper.rb +2765 -0
- data/lib/action_view/helpers/form_options_helper.rb +927 -0
- data/lib/action_view/helpers/form_tag_helper.rb +1088 -0
- data/lib/action_view/helpers/javascript_helper.rb +96 -0
- data/lib/action_view/helpers/number_helper.rb +165 -0
- data/lib/action_view/helpers/output_safety_helper.rb +70 -0
- data/lib/action_view/helpers/rendering_helper.rb +218 -0
- data/lib/action_view/helpers/sanitize_helper.rb +201 -0
- data/lib/action_view/helpers/tag_helper.rb +621 -0
- data/lib/action_view/helpers/tags/base.rb +138 -0
- data/lib/action_view/helpers/tags/check_box.rb +65 -0
- data/lib/action_view/helpers/tags/checkable.rb +18 -0
- data/lib/action_view/helpers/tags/collection_check_boxes.rb +37 -0
- data/lib/action_view/helpers/tags/collection_helpers.rb +118 -0
- data/lib/action_view/helpers/tags/collection_radio_buttons.rb +31 -0
- data/lib/action_view/helpers/tags/collection_select.rb +33 -0
- data/lib/action_view/helpers/tags/color_field.rb +26 -0
- data/lib/action_view/helpers/tags/date_field.rb +14 -0
- data/lib/action_view/helpers/tags/date_select.rb +75 -0
- data/lib/action_view/helpers/tags/datetime_field.rb +39 -0
- data/lib/action_view/helpers/tags/datetime_local_field.rb +29 -0
- data/lib/action_view/helpers/tags/datetime_select.rb +10 -0
- data/lib/action_view/helpers/tags/email_field.rb +10 -0
- data/lib/action_view/helpers/tags/file_field.rb +26 -0
- data/lib/action_view/helpers/tags/grouped_collection_select.rb +34 -0
- data/lib/action_view/helpers/tags/hidden_field.rb +14 -0
- data/lib/action_view/helpers/tags/label.rb +84 -0
- data/lib/action_view/helpers/tags/month_field.rb +14 -0
- data/lib/action_view/helpers/tags/number_field.rb +20 -0
- data/lib/action_view/helpers/tags/password_field.rb +14 -0
- data/lib/action_view/helpers/tags/placeholderable.rb +24 -0
- data/lib/action_view/helpers/tags/radio_button.rb +32 -0
- data/lib/action_view/helpers/tags/range_field.rb +10 -0
- data/lib/action_view/helpers/tags/search_field.rb +27 -0
- data/lib/action_view/helpers/tags/select.rb +45 -0
- data/lib/action_view/helpers/tags/select_renderer.rb +56 -0
- data/lib/action_view/helpers/tags/tel_field.rb +10 -0
- data/lib/action_view/helpers/tags/text_area.rb +24 -0
- data/lib/action_view/helpers/tags/text_field.rb +33 -0
- data/lib/action_view/helpers/tags/time_field.rb +23 -0
- data/lib/action_view/helpers/tags/time_select.rb +10 -0
- data/lib/action_view/helpers/tags/time_zone_select.rb +25 -0
- data/lib/action_view/helpers/tags/translator.rb +39 -0
- data/lib/action_view/helpers/tags/url_field.rb +10 -0
- data/lib/action_view/helpers/tags/week_field.rb +14 -0
- data/lib/action_view/helpers/tags/weekday_select.rb +31 -0
- data/lib/action_view/helpers/tags.rb +47 -0
- data/lib/action_view/helpers/text_helper.rb +568 -0
- data/lib/action_view/helpers/translation_helper.rb +161 -0
- data/lib/action_view/helpers/url_helper.rb +812 -0
- data/lib/action_view/helpers.rb +68 -0
- data/lib/action_view/layouts.rb +434 -0
- data/lib/action_view/locale/en.yml +56 -0
- data/lib/action_view/log_subscriber.rb +132 -0
- data/lib/action_view/lookup_context.rb +299 -0
- data/lib/action_view/model_naming.rb +14 -0
- data/lib/action_view/path_registry.rb +57 -0
- data/lib/action_view/path_set.rb +84 -0
- data/lib/action_view/railtie.rb +132 -0
- data/lib/action_view/record_identifier.rb +118 -0
- data/lib/action_view/render_parser/prism_render_parser.rb +139 -0
- data/lib/action_view/render_parser/ripper_render_parser.rb +350 -0
- data/lib/action_view/render_parser.rb +40 -0
- data/lib/action_view/renderer/abstract_renderer.rb +186 -0
- data/lib/action_view/renderer/collection_renderer.rb +204 -0
- data/lib/action_view/renderer/object_renderer.rb +34 -0
- data/lib/action_view/renderer/partial_renderer/collection_caching.rb +120 -0
- data/lib/action_view/renderer/partial_renderer.rb +267 -0
- data/lib/action_view/renderer/renderer.rb +107 -0
- data/lib/action_view/renderer/streaming_template_renderer.rb +107 -0
- data/lib/action_view/renderer/template_renderer.rb +115 -0
- data/lib/action_view/rendering.rb +190 -0
- data/lib/action_view/routing_url_for.rb +149 -0
- data/lib/action_view/tasks/cache_digests.rake +25 -0
- data/lib/action_view/template/error.rb +264 -0
- data/lib/action_view/template/handlers/builder.rb +25 -0
- data/lib/action_view/template/handlers/erb/erubi.rb +85 -0
- data/lib/action_view/template/handlers/erb.rb +157 -0
- data/lib/action_view/template/handlers/html.rb +11 -0
- data/lib/action_view/template/handlers/raw.rb +11 -0
- data/lib/action_view/template/handlers.rb +66 -0
- data/lib/action_view/template/html.rb +33 -0
- data/lib/action_view/template/inline.rb +22 -0
- data/lib/action_view/template/raw_file.rb +25 -0
- data/lib/action_view/template/renderable.rb +30 -0
- data/lib/action_view/template/resolver.rb +212 -0
- data/lib/action_view/template/sources/file.rb +17 -0
- data/lib/action_view/template/sources.rb +13 -0
- data/lib/action_view/template/text.rb +32 -0
- data/lib/action_view/template/types.rb +50 -0
- data/lib/action_view/template.rb +580 -0
- data/lib/action_view/template_details.rb +66 -0
- data/lib/action_view/template_path.rb +66 -0
- data/lib/action_view/test_case.rb +449 -0
- data/lib/action_view/testing/resolvers.rb +44 -0
- data/lib/action_view/unbound_template.rb +67 -0
- data/lib/action_view/version.rb +10 -0
- data/lib/action_view/view_paths.rb +117 -0
- data/lib/action_view.rb +104 -0
- metadata +275 -0
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "rails-html-sanitizer"
|
|
4
|
+
|
|
5
|
+
module ActionView
|
|
6
|
+
module Helpers # :nodoc:
|
|
7
|
+
# = Action View Sanitize \Helpers
|
|
8
|
+
#
|
|
9
|
+
# The SanitizeHelper module provides a set of methods for scrubbing text of undesired HTML elements.
|
|
10
|
+
# These helper methods extend Action View making them callable within your template files.
|
|
11
|
+
module SanitizeHelper
|
|
12
|
+
mattr_accessor :sanitizer_vendor, default: Rails::HTML4::Sanitizer
|
|
13
|
+
|
|
14
|
+
extend ActiveSupport::Concern
|
|
15
|
+
|
|
16
|
+
# Sanitizes HTML input, stripping all but known-safe tags and attributes.
|
|
17
|
+
#
|
|
18
|
+
# It also strips +href+ / +src+ attributes with unsafe protocols like +javascript:+, while
|
|
19
|
+
# also protecting against attempts to use Unicode, ASCII, and hex character references to work
|
|
20
|
+
# around these protocol filters.
|
|
21
|
+
#
|
|
22
|
+
# The default sanitizer is +Rails::HTML5::SafeListSanitizer+. See {Rails HTML
|
|
23
|
+
# Sanitizers}[https://github.com/rails/rails-html-sanitizer] for more information.
|
|
24
|
+
#
|
|
25
|
+
# Custom sanitization rules can also be provided.
|
|
26
|
+
#
|
|
27
|
+
# Please note that sanitizing user-provided text does not guarantee that the
|
|
28
|
+
# resulting markup is valid or even well-formed.
|
|
29
|
+
#
|
|
30
|
+
# ==== Options
|
|
31
|
+
#
|
|
32
|
+
# [+:tags+]
|
|
33
|
+
# An array of allowed tags.
|
|
34
|
+
#
|
|
35
|
+
# [+:attributes+]
|
|
36
|
+
# An array of allowed attributes.
|
|
37
|
+
#
|
|
38
|
+
# [+:scrubber+]
|
|
39
|
+
# A {Rails::HTML scrubber}[https://github.com/rails/rails-html-sanitizer]
|
|
40
|
+
# or {Loofah::Scrubber}[https://github.com/flavorjones/loofah] object that
|
|
41
|
+
# defines custom sanitization rules. A custom scrubber takes precedence over
|
|
42
|
+
# custom tags and attributes.
|
|
43
|
+
#
|
|
44
|
+
# ==== Examples
|
|
45
|
+
#
|
|
46
|
+
# ===== Normal use
|
|
47
|
+
#
|
|
48
|
+
# <%= sanitize @comment.body %>
|
|
49
|
+
#
|
|
50
|
+
# ===== Providing custom lists of permitted tags and attributes
|
|
51
|
+
#
|
|
52
|
+
# <%= sanitize @comment.body, tags: %w(strong em a), attributes: %w(href) %>
|
|
53
|
+
#
|
|
54
|
+
# ===== Providing a custom +Rails::HTML+ scrubber
|
|
55
|
+
#
|
|
56
|
+
# class CommentScrubber < Rails::HTML::PermitScrubber
|
|
57
|
+
# def initialize
|
|
58
|
+
# super
|
|
59
|
+
# self.tags = %w( form script comment blockquote )
|
|
60
|
+
# self.attributes = %w( style )
|
|
61
|
+
# end
|
|
62
|
+
#
|
|
63
|
+
# def skip_node?(node)
|
|
64
|
+
# node.text?
|
|
65
|
+
# end
|
|
66
|
+
# end
|
|
67
|
+
#
|
|
68
|
+
# <code></code>
|
|
69
|
+
#
|
|
70
|
+
# <%= sanitize @comment.body, scrubber: CommentScrubber.new %>
|
|
71
|
+
#
|
|
72
|
+
# See {Rails HTML Sanitizer}[https://github.com/rails/rails-html-sanitizer] for
|
|
73
|
+
# documentation about +Rails::HTML+ scrubbers.
|
|
74
|
+
#
|
|
75
|
+
# ===== Providing a custom +Loofah::Scrubber+
|
|
76
|
+
#
|
|
77
|
+
# scrubber = Loofah::Scrubber.new do |node|
|
|
78
|
+
# node.remove if node.name == 'script'
|
|
79
|
+
# end
|
|
80
|
+
#
|
|
81
|
+
# <code></code>
|
|
82
|
+
#
|
|
83
|
+
# <%= sanitize @comment.body, scrubber: scrubber %>
|
|
84
|
+
#
|
|
85
|
+
# See {Loofah's documentation}[https://github.com/flavorjones/loofah] for more
|
|
86
|
+
# information about defining custom +Loofah::Scrubber+ objects.
|
|
87
|
+
#
|
|
88
|
+
# ==== Global Configuration
|
|
89
|
+
#
|
|
90
|
+
# To set the default allowed tags or attributes across your application:
|
|
91
|
+
#
|
|
92
|
+
# # In config/application.rb
|
|
93
|
+
# config.action_view.sanitized_allowed_tags = ['strong', 'em', 'a']
|
|
94
|
+
# config.action_view.sanitized_allowed_attributes = ['href', 'title']
|
|
95
|
+
#
|
|
96
|
+
# The default, starting in \Rails 7.1, is to use an HTML5 parser for sanitization (if it is
|
|
97
|
+
# available, see NOTE below). If you wish to revert back to the previous HTML4 behavior, you
|
|
98
|
+
# can do so by setting the following in your application configuration:
|
|
99
|
+
#
|
|
100
|
+
# # In config/application.rb
|
|
101
|
+
# config.action_view.sanitizer_vendor = Rails::HTML4::Sanitizer
|
|
102
|
+
#
|
|
103
|
+
# Or, if you're upgrading from a previous version of \Rails and wish to opt into the HTML5
|
|
104
|
+
# behavior:
|
|
105
|
+
#
|
|
106
|
+
# # In config/application.rb
|
|
107
|
+
# config.action_view.sanitizer_vendor = Rails::HTML5::Sanitizer
|
|
108
|
+
#
|
|
109
|
+
# NOTE: +Rails::HTML5::Sanitizer+ is not supported on JRuby, so on JRuby platforms \Rails will
|
|
110
|
+
# fall back to using +Rails::HTML4::Sanitizer+.
|
|
111
|
+
def sanitize(html, options = {})
|
|
112
|
+
self.class.safe_list_sanitizer.sanitize(html, options)&.html_safe
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
# Sanitizes a block of CSS code. Used by #sanitize when it comes across a style attribute.
|
|
116
|
+
def sanitize_css(style)
|
|
117
|
+
self.class.safe_list_sanitizer.sanitize_css(style)
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
# Strips all HTML tags from +html+, including comments and special characters.
|
|
121
|
+
#
|
|
122
|
+
# strip_tags("Strip <i>these</i> tags!")
|
|
123
|
+
# # => Strip these tags!
|
|
124
|
+
#
|
|
125
|
+
# strip_tags("<b>Bold</b> no more! <a href='more.html'>See more here</a>...")
|
|
126
|
+
# # => Bold no more! See more here...
|
|
127
|
+
#
|
|
128
|
+
# strip_tags("<div id='top-bar'>Welcome to my website!</div>")
|
|
129
|
+
# # => Welcome to my website!
|
|
130
|
+
#
|
|
131
|
+
# strip_tags("> A quote from Smith & Wesson")
|
|
132
|
+
# # => > A quote from Smith & Wesson
|
|
133
|
+
def strip_tags(html)
|
|
134
|
+
self.class.full_sanitizer.sanitize(html)&.html_safe
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
# Strips all link tags from +html+ leaving just the link text.
|
|
138
|
+
#
|
|
139
|
+
# strip_links('<a href="http://www.rubyonrails.org">Ruby on Rails</a>')
|
|
140
|
+
# # => Ruby on Rails
|
|
141
|
+
#
|
|
142
|
+
# strip_links('Please e-mail me at <a href="mailto:me@email.com">me@email.com</a>.')
|
|
143
|
+
# # => Please e-mail me at me@email.com.
|
|
144
|
+
#
|
|
145
|
+
# strip_links('Blog: <a href="http://www.myblog.com/" class="nav" target=\"_blank\">Visit</a>.')
|
|
146
|
+
# # => Blog: Visit.
|
|
147
|
+
#
|
|
148
|
+
# strip_links('<<a href="https://example.org">malformed & link</a>')
|
|
149
|
+
# # => <malformed & link
|
|
150
|
+
def strip_links(html)
|
|
151
|
+
self.class.link_sanitizer.sanitize(html)
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
module ClassMethods # :nodoc:
|
|
155
|
+
attr_writer :full_sanitizer, :link_sanitizer, :safe_list_sanitizer
|
|
156
|
+
|
|
157
|
+
def sanitizer_vendor
|
|
158
|
+
ActionView::Helpers::SanitizeHelper.sanitizer_vendor
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
def sanitized_allowed_tags
|
|
162
|
+
sanitizer_vendor.safe_list_sanitizer.allowed_tags
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
def sanitized_allowed_attributes
|
|
166
|
+
sanitizer_vendor.safe_list_sanitizer.allowed_attributes
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
# Gets the Rails::HTML::FullSanitizer instance used by +strip_tags+. Replace with
|
|
170
|
+
# any object that responds to +sanitize+.
|
|
171
|
+
#
|
|
172
|
+
# class Application < Rails::Application
|
|
173
|
+
# config.action_view.full_sanitizer = MySpecialSanitizer.new
|
|
174
|
+
# end
|
|
175
|
+
def full_sanitizer
|
|
176
|
+
@full_sanitizer ||= sanitizer_vendor.full_sanitizer.new
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
# Gets the Rails::HTML::LinkSanitizer instance used by +strip_links+.
|
|
180
|
+
# Replace with any object that responds to +sanitize+.
|
|
181
|
+
#
|
|
182
|
+
# class Application < Rails::Application
|
|
183
|
+
# config.action_view.link_sanitizer = MySpecialSanitizer.new
|
|
184
|
+
# end
|
|
185
|
+
def link_sanitizer
|
|
186
|
+
@link_sanitizer ||= sanitizer_vendor.link_sanitizer.new
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
# Gets the Rails::HTML::SafeListSanitizer instance used by sanitize and +sanitize_css+.
|
|
190
|
+
# Replace with any object that responds to +sanitize+.
|
|
191
|
+
#
|
|
192
|
+
# class Application < Rails::Application
|
|
193
|
+
# config.action_view.safe_list_sanitizer = MySpecialSanitizer.new
|
|
194
|
+
# end
|
|
195
|
+
def safe_list_sanitizer
|
|
196
|
+
@safe_list_sanitizer ||= sanitizer_vendor.safe_list_sanitizer.new
|
|
197
|
+
end
|
|
198
|
+
end
|
|
199
|
+
end
|
|
200
|
+
end
|
|
201
|
+
end
|