lib/webhooks/base.rb
module Webhooks
class Base
attr_reader :request, :repository
def initialize(request, repository)
@request = request
@repository = repository
end
# Returns true if and only if the remote addresses in the request and repository match.
def valid_address?
repository.address == webhook_address
end
# Returns true if and only if the branch in the request and repository match.
def valid_branch?
repository.branch == webhook_branch
end
# Returns true if the request parameters, as determined by the particular hook service, are valid
# It will usually check headers, IP ranges, signatures, or any other relevant information.
def valid_request?; raise NotImplementedError; end
# Extracts the remote address from the webhook request.
def webhook_address; raise NotImplementedError; end
# Extracts the branch from the webhook request.
def webhook_branch; raise NotImplementedError; end
protected
# Converts a git ref name to a branch. This is an utility function for webhook formats that only provide the ref
# updated in their information. Returns nil if the passed parameter is not a valid ref.
# The expected format is 'refs/heads/#{branch_name}'. Anything else will be rejected.
def branch_from_ref(ref)
return nil if !ref
ref = ref.split('/')
return nil if ref.size != 3 || ref[0..1] != ['refs', 'heads']
ref.last
end
end
end