Class: DynamicImage::DigestVerifier

Inherits:
Object
  • Object
show all
Defined in:
lib/dynamic_image/digest_verifier.rb

Overview

DynamicImage Digest Verifier

Signs and verifies the digests embedded in image URLs. The engine sets up the instance the application uses and exposes it as DynamicImage.digest_verifier. The helpers sign with it and the controller verifies with it, so there is rarely a reason to use this directly.

Adapted from ActiveSupport::MessageVerifier, without the handling for arbitrary data structures and without shipping the serialized data to the client.

Examples:

verifier = DynamicImage::DigestVerifier.new("super secret!")
digest = verifier.generate("foo")

verifier.verify("foo", digest)
# => true
verifier.verify("bar", digest)
# => raises DynamicImage::Errors::InvalidSignature

Instance Method Summary collapse

Constructor Details

#initialize(secret, options = {}) ⇒ DigestVerifier

Returns a new instance of DigestVerifier.

Parameters:

  • secret (String)

    the secret to sign with

  • options (Hash) (defaults to: {})

Options Hash (options):

  • :digest (String)

    the OpenSSL digest to use, defaults to "SHA1"



25
26
27
28
# File 'lib/dynamic_image/digest_verifier.rb', line 25

def initialize(secret, options = {})
  @secret = secret
  @digest = options[:digest] || "SHA1"
end

Instance Method Details

#generate(data) ⇒ String

Generates a digest for a string.

Parameters:

  • data (String)

    the string to sign

Returns:

  • (String)

    the hex digest



34
35
36
# File 'lib/dynamic_image/digest_verifier.rb', line 34

def generate(data)
  generate_digest(data)
end

#verify(data, digest) ⇒ true

Verifies that digest is valid for data.

Parameters:

  • data (String)

    the signed string

  • digest (String)

    the digest to check against

Returns:

  • (true)

    if the digest is valid

Raises:



44
45
46
47
48
# File 'lib/dynamic_image/digest_verifier.rb', line 44

def verify(data, digest)
  return true if valid_digest?(data, digest)

  raise DynamicImage::Errors::InvalidSignature
end