mirror of
https://github.com/discourse/discourse.git
synced 2024-12-01 00:43:43 +08:00
24 lines
576 B
Ruby
24 lines
576 B
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
class FinalDestination::FastImage < ::FastImage
|
||
|
def initialize(url, options = {})
|
||
|
uri = URI(normalized_url(url))
|
||
|
options.merge!(http_header: { "Host" => uri.hostname })
|
||
|
uri.hostname = resolved_ip(uri)
|
||
|
|
||
|
super(uri.to_s, options)
|
||
|
rescue FinalDestination::SSRFDetector::DisallowedIpError, SocketError, Timeout::Error
|
||
|
super("")
|
||
|
end
|
||
|
|
||
|
private
|
||
|
|
||
|
def resolved_ip(uri)
|
||
|
FinalDestination::SSRFDetector.lookup_and_filter_ips(uri.hostname).first
|
||
|
end
|
||
|
|
||
|
def normalized_url(uri)
|
||
|
UrlHelper.normalized_encode(uri)
|
||
|
end
|
||
|
end
|