Class: Banzai::Filter::AssetProxyFilter
- Inherits:
-
HTML::Pipeline::Filter
- Object
- HTML::Pipeline::Filter
- Banzai::Filter::AssetProxyFilter
show all
- Includes:
- Concerns::PipelineTimingCheck
- Defined in:
- lib/banzai/filter/asset_proxy_filter.rb
Overview
Constant Summary
Concerns::PipelineTimingCheck::MAX_PIPELINE_SECONDS
Class Method Summary
collapse
Instance Method Summary
collapse
#exceeded_pipeline_max?
Constructor Details
#initialize(text, context = nil, result = nil) ⇒ AssetProxyFilter
Returns a new instance of AssetProxyFilter.
14
15
16
|
# File 'lib/banzai/filter/asset_proxy_filter.rb', line 14
def initialize(text, context = nil, result = nil)
super
end
|
Class Method Details
.compile_allowlist(domain_list) ⇒ Object
81
82
83
84
85
86
|
# File 'lib/banzai/filter/asset_proxy_filter.rb', line 81
def self.compile_allowlist(domain_list)
return if domain_list.empty?
escaped = domain_list.map { |domain| Regexp.escape(domain).gsub('\*', '.*?') }
Regexp.new("^(#{escaped.join('|')})$", Regexp::IGNORECASE)
end
|
.determine_allowlist(application_settings) ⇒ Object
88
89
90
91
92
|
# File 'lib/banzai/filter/asset_proxy_filter.rb', line 88
def self.determine_allowlist(application_settings)
application_settings.try(:asset_proxy_allowlist).presence ||
application_settings.try(:asset_proxy_whitelist).presence ||
[Gitlab.config.gitlab.host]
end
|
.initialize_settings ⇒ Object
called during an initializer. Caching the values in Gitlab.config significantly increased performance, rather than querying Gitlab::CurrentSettings.current_application_settings over and over. However, this does mean that the Rails servers need to get restarted whenever the application settings are changed
.transform_context(context) ⇒ Object
49
50
51
52
53
54
55
56
57
58
59
60
|
# File 'lib/banzai/filter/asset_proxy_filter.rb', line 49
def self.transform_context(context)
context[:disable_asset_proxy] = !Gitlab.config.asset_proxy.enabled
unless context[:disable_asset_proxy]
context[:asset_proxy_enabled] = !context[:disable_asset_proxy]
context[:asset_proxy] = Gitlab.config.asset_proxy.url
context[:asset_proxy_secret_key] = Gitlab.config.asset_proxy.secret_key
context[:asset_proxy_domain_regexp] = Gitlab.config.asset_proxy.domain_regexp
end
context
end
|
Instance Method Details
#asset_host_allowed?(host) ⇒ Boolean
45
46
47
|
# File 'lib/banzai/filter/asset_proxy_filter.rb', line 45
def asset_host_allowed?(host)
context[:asset_proxy_domain_regexp] ? context[:asset_proxy_domain_regexp].match?(host) : false
end
|
#call ⇒ Object
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
# File 'lib/banzai/filter/asset_proxy_filter.rb', line 18
def call
return doc unless asset_proxy_enabled?
doc.search('img').each do |element|
original_src = element['src']
next unless original_src
begin
uri = URI.parse(original_src)
next if uri.relative? && uri.host.nil? && original_src.match(%r{\A/*})[0].length < 2
next if asset_host_allowed?(uri.host)
rescue StandardError
end
element['src'] = asset_proxy_url(original_src)
element['data-canonical-src'] = original_src
end
doc
end
|
#validate ⇒ Object
41
42
43
|
# File 'lib/banzai/filter/asset_proxy_filter.rb', line 41
def validate
needs(:asset_proxy, :asset_proxy_secret_key) if asset_proxy_enabled?
end
|