Class: Lita::Adapters::Discord::TokenCache

Inherits:
Object
  • Object
show all
Defined in:
lib/lita/adapters/discord/token_cache.rb

Instance Method Summary collapse

Constructor Details

#initializeTokenCache

Returns a new instance of TokenCache.



81
82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/lita/adapters/discord/token_cache.rb', line 81

def initialize
	if File.file? CACHE_PATH
		@data = JSON.parse(File.read(CACHE_PATH))
	else
		Lita.logger.debug("Cache file #{CACHE_PATH} not found. Using empty cache")
		@data = {}
	end
rescue => e
	Lita.logger.debug('Exception occurred while parsing token cache file:')
	# I guess start here if stuff is super broken
	Lita.logger.debug('Continuing with empty cache')
	@data = {}
end

Instance Method Details

#store_token(email, password, token) ⇒ Object



124
125
126
127
128
129
130
# File 'lib/lita/adapters/discord/token_cache.rb', line 124

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



95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# File 'lib/lita/adapters/discord/token_cache.rb', line 95

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
					rescue => e
						fail_token('Token cached, verified and decrypted, but rejected by Discord', email)
						sleep 1
						nil
					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)
		end
	else
		fail_token('Token not cached at all')
	end
end

#write_cacheObject



132
133
134
# File 'lib/lita/adapters/discord/token_cache.rb', line 132

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