Class: TokenDie

Inherits:
Object
  • Object
show all
Defined in:
lib/token-die.rb,
lib/token-die/version.rb

Constant Summary collapse

TIMESTAMP_KEY =
'___timestamp____'.freeze
VERSION =
'0.0.3'.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(secret, ttl = 300, encryptor = Parsel::JSON) ⇒ TokenDie

Returns a new instance of TokenDie.



16
17
18
19
20
# File 'lib/token-die.rb', line 16

def initialize(secret, ttl = 300, encryptor = Parsel::JSON)
  @secret = secret
  @ttl = ttl
  @encryptor = encryptor
end

Instance Attribute Details

#encryptorObject (readonly)

Set the encryptor strategy. Defaults Parsel::JSON



14
15
16
# File 'lib/token-die.rb', line 14

def encryptor
  @encryptor
end

#secretObject (readonly)

Set the encryption secret



6
7
8
# File 'lib/token-die.rb', line 6

def secret
  @secret
end

#ttlObject (readonly)

Set the token TTL Defaults 300 (5 minutes)



10
11
12
# File 'lib/token-die.rb', line 10

def ttl
  @ttl
end

Instance Method Details

#expired?(timestamp) ⇒ Boolean

Returns:

  • (Boolean)


46
47
48
# File 'lib/token-die.rb', line 46

def expired?(timestamp)
  timestamp.to_i < (self.timestamp - ttl)
end

#fresh?(timestamp) ⇒ Boolean

Returns:

  • (Boolean)


50
51
52
# File 'lib/token-die.rb', line 50

def fresh?(timestamp)
  !expired?(timestamp)
end

#generate(data = {}) ⇒ Object



26
27
28
29
30
31
# File 'lib/token-die.rb', line 26

def generate(data = {})
  timestamp = self.timestamp
  data.merge!(TIMESTAMP_KEY => timestamp)

  encryptor.encrypt(secret, data)
end

#recover(token) ⇒ Object



33
34
35
36
37
38
39
40
# File 'lib/token-die.rb', line 33

def recover(token)
  data = encryptor.decrypt(secret, token)
  return unless data
  return unless fresh?(data[TIMESTAMP_KEY])

  data.delete(TIMESTAMP_KEY)
  data
end

#timestampObject



22
23
24
# File 'lib/token-die.rb', line 22

def timestamp
  Time.now.utc.to_i
end

#valid?(token) ⇒ Boolean

Returns:

  • (Boolean)


42
43
44
# File 'lib/token-die.rb', line 42

def valid?(token)
  !recover(token).nil?
end