Class: Discordrb::TokenCache

Inherits:
Object
  • Object
show all
Defined in:
lib/discordrb/token_cache.rb

Overview

Represents a token file

Instance Method Summary collapse

Constructor Details

#initializeTokenCache

Returns a new instance of TokenCache.



87
88
89
90
91
92
93
94
# File 'lib/discordrb/token_cache.rb', line 87

def initialize
  if File.file? CACHE_PATH
    @data = JSON.parse(File.read(CACHE_PATH))
  else
    LOGGER.debug("Cache file #{CACHE_PATH} not found. Using empty cache")
    @data = {}
  end
end

Instance Method Details

#store_token(email, password, token) ⇒ Object



118
119
120
121
122
123
124
# File 'lib/discordrb/token_cache.rb', line 118

def store_token(email, password, token)
  cached = CachedToken.new
  cached.generate_verify_hash(password)
  cached.encrypt_token(password, token)
  @data[email] = cached.data
  write_cache
end

#token(email, password) ⇒ Object



96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
# File 'lib/discordrb/token_cache.rb', line 96

def token(email, password)
  if @data[email]
    begin
      cached = CachedToken.new(@data[email])
      if cached.verify_password(password)
        token = cached.decrypt_token(password)
        if token
          begin
            cached.test_token(token)
            token
          rescue => e; fail_token('Token cached, verified and decrypted, but rejected by Discord', email, e)
          end
        else; fail_token('Token cached and verified, but decryption failed', email)
        end
      else; fail_token('Token verification failed', email)
      end
    rescue => e; fail_token('Token cached but invalid', email, e)
    end
  else; fail_token('Token not cached at all')
  end
end

#write_cacheObject



126
127
128
# File 'lib/discordrb/token_cache.rb', line 126

def write_cache
  File.write(CACHE_PATH, @data.to_json)
end