Class: CC::Service::SafeWebhook

Inherits:
Object
  • Object
show all
Defined in:
lib/cc/service/safe_webhook.rb

Constant Summary collapse

InternalWebhookError =
Class.new(StandardError)
PRIVATE_ADDRESS_SUBNETS =
[
  IPAddr.new("10.0.0.0/8"),
  IPAddr.new("172.16.0.0/12"),
  IPAddr.new("192.168.0.0/16"),
  IPAddr.new("fd00::/8"),
  IPAddr.new("127.0.0.1"),
  IPAddr.new("0:0:0:0:0:0:0:1"),
].freeze

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(url) ⇒ SafeWebhook

Returns a new instance of SafeWebhook.



23
24
25
# File 'lib/cc/service/safe_webhook.rb', line 23

def initialize(url)
  @url = url
end

Class Method Details

.ensure_safe!(url) ⇒ Object



18
19
20
21
# File 'lib/cc/service/safe_webhook.rb', line 18

def self.ensure_safe!(url)
  instance = new(url)
  instance.ensure_safe!
end

Instance Method Details

#ensure_safe!Object



27
28
29
30
31
32
33
# File 'lib/cc/service/safe_webhook.rb', line 27

def ensure_safe!
  uri = URI.parse(url)

  if !allow_internal_webhooks? && internal?(uri.host)
    raise InternalWebhookError, "#{url.inspect} maps to an internal address"
  end
end