class Nexmo::Rack::VerifySignature

Public Class Methods

new(app) click to toggle source
# File lib/nexmo_rack/verify_signature.rb, line 5
def initialize(app)
  @app = app
  @nexmo = Nexmo::Client.new(
    signature_secret: signature_secret,
    signature_method: signature_method
  )
end

Public Instance Methods

call(env) click to toggle source
# File lib/nexmo_rack/verify_signature.rb, line 13
def call(env)
  req = ::Rack::Request.new(env)

  # Duplicate the request params in case nexmo_client.check() modifies them
  params = req.params.dup

  # If there is no `sig` field, ignore this middleware unless we explicitly
  # require it to be present
  unless ENV['NEXMO_SIGNATURE_REQUIRED']
    return @app.call(env) unless req.params['sig']
  end

  # Otherwise calculate the signature and check that it matches
  if req.params['sig'] && @nexmo.signature.check(params)
    @app.call(env)
  else
    [403, {}, ['']]
  end
end

Private Instance Methods

signature_method() click to toggle source
# File lib/nexmo_rack/verify_signature.rb, line 45
def signature_method
  if ENV['NEXMO_SIGNATURE_METHOD']
    ENV['NEXMO_SIGNATURE_METHOD']
  elsif defined?(Rails) && Rails.application.credentials.nexmo
    Rails.application.credentials.nexmo[:signature_method]
  else
    raise "No signature method found for Nexmo::Rack::VerifySignature"
  end
end
signature_secret() click to toggle source
# File lib/nexmo_rack/verify_signature.rb, line 35
def signature_secret
  if ENV['NEXMO_SIGNATURE_SECRET']
    ENV['NEXMO_SIGNATURE_SECRET']
  elsif defined?(Rails) && Rails.application.credentials.nexmo
    Rails.application.credentials.nexmo[:signature_secret]
  else
    raise "No signature credentials found for Nexmo::Rack::VerifySignature"
  end
end