Class: Hooksmith::Verifiers::BearerToken

Inherits:
Base
  • Object
show all
Defined in:
lib/hooksmith/verifiers/bearer_token.rb

Overview

Bearer token webhook verifier.

This verifier validates webhook requests using a simple bearer token in the Authorization header or a custom header.

Examples:

Basic bearer token verification

verifier = Hooksmith::Verifiers::BearerToken.new(
  token: ENV['WEBHOOK_TOKEN']
)

Custom header

verifier = Hooksmith::Verifiers::BearerToken.new(
  token: ENV['WEBHOOK_TOKEN'],
  header: 'X-Webhook-Token'
)

Constant Summary collapse

DEFAULT_HEADER =

Default header for bearer tokens

'Authorization'

Instance Attribute Summary

Attributes inherited from Base

#options

Instance Method Summary collapse

Constructor Details

#initialize(token:, header: DEFAULT_HEADER, strip_bearer_prefix: true, **options) ⇒ BearerToken

Initializes the bearer token verifier.

Parameters:

  • token (String)

    the expected token value

  • header (String) (defaults to: DEFAULT_HEADER)

    the header containing the token (default: Authorization)

  • strip_bearer_prefix (Boolean) (defaults to: true)

    whether to strip ‘Bearer ’ prefix (default: true)



32
33
34
35
36
37
# File 'lib/hooksmith/verifiers/bearer_token.rb', line 32

def initialize(token:, header: DEFAULT_HEADER, strip_bearer_prefix: true, **options)
  super(**options)
  @token = token
  @header = header
  @strip_bearer_prefix = strip_bearer_prefix
end

Instance Method Details

#enabled?Boolean

Returns whether the verifier is properly configured.

Returns:

  • (Boolean)

    true if token is present



59
60
61
# File 'lib/hooksmith/verifiers/bearer_token.rb', line 59

def enabled?
  !@token.nil? && !@token.empty?
end

#verify!(request) ⇒ void

This method returns an undefined value.

Verifies the bearer token in the request.

Parameters:

Raises:



44
45
46
47
48
49
50
51
52
53
54
# File 'lib/hooksmith/verifiers/bearer_token.rb', line 44

def verify!(request)
  provided_token = extract_token(request)

  if provided_token.nil? || provided_token.empty?
    raise VerificationError.new('Missing authentication token', reason: 'missing_token')
  end

  return if secure_compare(@token, provided_token)

  raise VerificationError.new('Invalid authentication token', reason: 'invalid_token')
end