Module: TokenChecksum

Defined in:
lib/token_checksum.rb,
lib/token_checksum/base_62.rb,
lib/token_checksum/version.rb

Defined Under Namespace

Modules: Base62

Constant Summary collapse

REGEX =
/([abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]{1,})_([0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]{30})([0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]{6})/
VERSION =
"0.3.0"

Class Method Summary collapse

Class Method Details

.checksum(token) ⇒ Object



47
48
49
# File 'lib/token_checksum.rb', line 47

def checksum(token)
  token[-6..-1]
end

.generate(prefix, secret: "") ⇒ Object



18
19
20
21
22
23
# File 'lib/token_checksum.rb', line 18

def generate(prefix, secret: "")
  suffix = random_token
  first_part = "#{prefix}_#{suffix}"
  checksum = generate_checksum("#{first_part}#{secret}")
  "#{first_part}#{checksum}"
end

.prefix(token) ⇒ Object



43
44
45
# File 'lib/token_checksum.rb', line 43

def prefix(token)
  token[0...token.index("_")]
end

.valid?(token, valid_prefixes: [], secret: "") ⇒ Boolean

Returns:

  • (Boolean)


25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/token_checksum.rb', line 25

def valid?(token, valid_prefixes: [], secret: "")
  return false if token.empty?

  provided_prefix = prefix(token)
  return false if !valid_prefixes.empty? && !valid_prefixes.include?(provided_prefix)

  provided_checksum = checksum(token)
  return false if provided_checksum.empty?

  # This is the token without the final checksum
  checksumless_string = wo_checksum(token)
  return false if checksumless_string.empty?

  calculated_checksum = generate_checksum("#{checksumless_string}#{secret}")

  SecureCompare.compare(calculated_checksum, provided_checksum)
end

.wo_checksum(token) ⇒ Object



51
52
53
# File 'lib/token_checksum.rb', line 51

def wo_checksum(token)
  token[0..-7]
end