Sha256: a57760960c04b442012ab26f06567cff13fce7ee7b4a9af524b37b9fe11d2f81

Contents?: true

Size: 1.02 KB

Versions: 7

Compression:

Stored size: 1.02 KB

Contents

include All::Permissions::Accounts

DURATIONS = 'second|minute|hour|day|week|month|year'.freeze

card_accessor :expiration

view :raw do
  'Private data'
end

def validate! token
  error =
    case
    when !real?           then [:token_not_found, 'no token found']
    when expired?         then [:token_expired, 'expired token']
    when content != token then [:incorrect_token, 'token mismatch']
    end
  errors.add *error if error
end

def expired?
  !permanent? && updated_at <= term.ago
end

def permanent?
  term == 'permanent'
end

def used!
  Auth.as_bot { delete! } unless permanent?
end

def term
  @term ||=
    if expiration.present?
      term_from_string expiration
    else
      Card.config.token_expiry
    end
end

def term_from_string string
  string.strip!
  return 'permanent' if string == 'none'
  re_match = /^(\d+)[\.\s]*(#{DURATIONS})s?$/.match(string)
  number, unit = re_match.captures if re_match
  if unit
    number.to_i.send unit
  else
    raise Card::Oops, "illegal expiration value (eg '2 days')"
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
card-1.18.6 mod/05_standard/set/right/token.rb
card-1.18.5 mod/05_standard/set/right/token.rb
card-1.18.4 mod/05_standard/set/right/token.rb
card-1.18.3 mod/05_standard/set/right/token.rb
card-1.18.2 mod/05_standard/set/right/token.rb
card-1.18.1 mod/05_standard/set/right/token.rb
card-1.18.0 mod/05_standard/set/right/token.rb