class CC::Service::SafeWebhook

Constants

InternalWebhookError
PRIVATE_ADDRESS_SUBNETS

Attributes

url[R]

Public Class Methods

ensure_safe!(url) click to toggle source
# File lib/cc/service/safe_webhook.rb, line 18
def self.ensure_safe!(url)
  instance = new(url)
  instance.ensure_safe!
end
new(url) click to toggle source
# File lib/cc/service/safe_webhook.rb, line 23
def initialize(url)
  @url = url
end

Public Instance Methods

ensure_safe!() click to toggle source
# 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

Private Instance Methods

allow_internal_webhooks?() click to toggle source
# File lib/cc/service/safe_webhook.rb, line 49
def allow_internal_webhooks?
  var = ENV["CODECLIMATE_ALLOW_INTERNAL_WEBHOOKS"] || ""
  var == "1" || var == "true"
end
internal?(host) click to toggle source
# File lib/cc/service/safe_webhook.rb, line 39
def internal?(host)
  address = ::Resolv.getaddress(host)

  PRIVATE_ADDRESS_SUBNETS.any? do |subnet|
    subnet === IPAddr.new(address.to_s)
  end
rescue ::Resolv::ResolvError
  true # localhost
end