Module: Hashit

Defined in:
lib/hashit.rb,
lib/hashit/digests.rb,
lib/hashit/prepare.rb,
lib/hashit/verifier.rb

Constant Summary collapse

VERSION =
"0.0.2"

Class Method Summary collapse

Class Method Details

.current_timeObject



23
24
25
26
27
# File 'lib/hashit/digests.rb', line 23

def current_time
  d = DateTime.now
  ts = d.strftime("%s").to_i
  ts - ((d.minute % 30) * 60) - d.second
end

.did_match?(hash, key, text) ⇒ Boolean

Returns:

  • (Boolean)

Raises:

  • (ArgumentError)


12
13
14
15
16
17
# File 'lib/hashit/verifier.rb', line 12

def did_match? hash, key, text
  type = hash.split('|').first.sub("timed", "previous")
  raise ArgumentError, "invalid hash" unless Hashit.respond_to?(type.to_sym)
  new_hash = Hashit.send type.to_sym, key, text
  new_hash == hash
end

.generate_hash(digest, key, text) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/hashit/digests.rb', line 33

def generate_hash digest, key, text
  text = Hashit.prepare text

  if key.is_a? Array
    key.reduce(text) do |text, k|
      k = Hashit.prepare k
      OpenSSL::HMAC.hexdigest(digest, k, text)
    end
  else
    key = Hashit.prepare key
    OpenSSL::HMAC.hexdigest(digest, key, text)
  end
end

.last_timeObject



29
30
31
# File 'lib/hashit/digests.rb', line 29

def last_time
  current_time - (30 * 60)
end

.matches?(hash, key, text) ⇒ Boolean

Returns:

  • (Boolean)

Raises:

  • (ArgumentError)


5
6
7
8
9
10
# File 'lib/hashit/verifier.rb', line 5

def matches? hash, key, text
  type = hash.split('|').first
  raise ArgumentError, "invalid hash" unless Hashit.respond_to?(type.to_sym)
  new_hash = Hashit.send type.to_sym, key, text
  new_hash == hash
end

.prepare(obj) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# File 'lib/hashit/prepare.rb', line 3

def prepare obj
  return obj if obj.is_a? String

  if obj.is_a? Array
    obj = prepare_array obj
  elsif obj.nil?
    raise ArgumentError, "Nil passed in as a text parameter"
  elsif obj.respond_to? :to_s
      obj = obj.to_s
  else
    raise ArgumentError, "Parameter #{obj} cannot be converted to string"
  end

  obj
end

.prepare_array(arr) ⇒ Object



19
20
21
22
23
# File 'lib/hashit/prepare.rb', line 19

def prepare_array arr
  arr.reduce("") do |str, el|
    str += prepare el
  end
end