Source code for cslbot.helpers.tokens

# -*- coding: utf-8 -*-
# -*- coding: utf-8 -*-
# Copyright (C) 2013-2015 Samuel Damashek, Peter Foley, James Forcier, Srijay Kasturi, Reed Koser, Christopher Reffett, and Fox Wilson
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
# USA.

from datetime import datetime, timedelta

from requests import post


[docs]class Token(): def __init__(self): self.time = datetime.min self.key = 'invalid' def __str__(self): return self.key
[docs]class TranslateToken(Token):
[docs] def update(self, config): client_id, secret = config['api']['translateid'], config['api']['translatesecret'] # Don't die if we didn't setup the translate api. if not client_id: self.key = 'invalid' return postdata = {'grant_type': 'client_credentials', 'client_id': client_id, 'client_secret': secret, 'scope': 'http://api.microsofttranslator.com'} data = post('https://datamarket.accesscontrol.windows.net/v2/OAuth2-13', data=postdata).json() self.key = data['access_token'] self.time = datetime.now()
token_cache = {'translate': TranslateToken()}
[docs]def update_all_tokens(config): for token in token_cache.values(): # The cache is valid for 10 minutes, refresh it only if it will expire in 1 minute or less. if datetime.now() - token.time > timedelta(minutes=9): token.update(config)