def oauth_callback(request):
logger = request.app.logger
bot = request.app.bot
config_data = config['evernote']['basic_access']
params = parse_qs(request.query_string)
callback_key = params.get('key', [''])[0]
session_key = params.get('session_key')[0]
try:
session = StartSession.get({'oauth_data.callback_key': callback_key})
except ModelNotFound as e:
logger.error(e, exc_info=1)
return web.HTTPForbidden()
if not params.get('oauth_verifier'):
logger.info('User declined access. No access token =(')
bot.send_message(session.data['chat_id'],
'We are sorry, but you declined authorization ??')
return web.HTTPFound(bot.url)
if session.key != session_key:
text = 'Session is expired. \
Please, send /start command to create new session'
bot.send_message(session.data['chat_id'], text)
return web.HTTPFound(bot.url)
user_data = session.data['user']
name = '{0} {1}'.format(user_data['first_name'], user_data['last_name'])
user = User(id=session.id,
name=name,
username=user_data['username'],
telegram_chat_id=session.data['chat_id'],
mode='multiple_notes',
places={},
settings={'evernote_access': 'basic'})
try:
future = asyncio.ensure_future(
bot.evernote.get_access_token(config_data, session.oauth_data,
params['oauth_verifier'][0])
)
future.add_done_callback(
functools.partial(set_access_token, bot, user)
)
except TokenRequestDenied as e:
logger.error(e, exc_info=1)
text = 'We are sorry, but we have some problems with Evernote \
connection. Please try again later'
bot.send_message(user.telegram_chat_id, text)
except Exception as e:
logger.fatal(e, exc_info=1)
bot.send_message(user.telegram_chat_id, 'Oops. Unknown error')
text = 'Evernote account is connected.\n\
From now you can just send message and note be created.'
bot.send_message(user.telegram_chat_id, text)
user.save()
return web.HTTPFound(bot.url)
评论列表
文章目录