async 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)
async def oauth_callback(request): logger = request.app.logger bot = request.app.bot config = settings.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}) user_data = session.data['user'] first_name = user_data['first_name'] last_name = user_data['last_name'] username = user_data['username'] user = User(id=session.id, name="{0} {1}".format(first_name, last_name), username=username, telegram_chat_id=session.data['chat_id'], mode='multiple_notes', places={}, settings={'evernote_access': 'basic'}) except ModelNotFound as e: logger.error(e, exc_info=1) return web.HTTPForbidden() if session.key != session_key: text = "Session is expired. Please, send /start command to create new session" asyncio.ensure_future(bot.api.sendMessage(user.telegram_chat_id, text)) return web.HTTPFound(bot.url) try: if params.get('oauth_verifier'): future = asyncio.ensure_future( bot.evernote_api.get_access_token( config['key'], config['secret'], session.oauth_data['oauth_token'], session.oauth_data['oauth_token_secret'], params['oauth_verifier'][0])) future.add_done_callback( functools.partial(set_access_token, bot, user)) text = 'Evernote account is connected.\nFrom now you can just send message and note be created.' asyncio.ensure_future( bot.api.sendMessage(user.telegram_chat_id, text)) user.save() else: # User decline access logger.info('User declined access. No access token =(') text = "We are sorry, but you declined authorization 😢" asyncio.ensure_future( bot.api.sendMessage(user.telegram_chat_id, text)) 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" asyncio.ensure_future(bot.api.sendMessage(user.telegram_chat_id, text)) except Exception as e: logger.fatal(e, exc_info=1) text = "Oops. Unknown error. Our best specialist already working to fix it" if user: asyncio.ensure_future( bot.api.sendMessage(user.telegram_chat_id, text)) return web.HTTPFound(bot.url)