def test_get_oauth_data_when_get_request_token_failed(self, sdk):
     sdk().get_request_token = mock.Mock(
         side_effect=Exception("some error"))
     with self.assertRaises(EvernoteApiError) as ctx:
         evernote_api.get_oauth_data(1, "session_key", self.config)
     self.assertIsInstance(ctx.exception.__cause__, Exception)
     self.assertEqual(str(ctx.exception.__cause__), "some error")
 def test_get_oauth_data(self, sdk):
     data = evernote_api.get_oauth_data(1, "session_key", self.config)
     self.assertEqual(data["oauth_token"], "test_oauth_token")
     self.assertEqual(data["oauth_token_secret"], "test_oauth_secret")
     self.assertEqual(data["oauth_url"], "auth_url")
     sdk.assert_called_once_with(consumer_key="key",
         consumer_secret="secret", sandbox=False)
     callback_url = "http://callback.url?access=basic&key=2191f3da8abf9c31"\
                    "d9b64a887ffc5949ad0a35d4&session_key=session_key"
     sdk().get_request_token.assert_called_once_with(callback_url)
     request_token = {
         'oauth_token': 'test_oauth_token',
         'oauth_token_secret': 'test_oauth_secret'
     }
     sdk().get_authorize_url.assert_called_once_with(request_token)
예제 #3
0
def start_command(bot, message: dict):
    user_id = message['from']['id']
    user_data = bot.users.get(user_id)
    if not user_data:
        current_time = time()
        telegram_user = message['from']
        user_data = {
            'id': user_id,
            'created': current_time,
            'last_request_ts': current_time,
            'bot_mode': 'multiple_notes',
            'telegram': {
                'first_name': telegram_user['first_name'],
                'last_name': telegram_user['last_name'],
                'username': telegram_user['username'],
                'chat_id': message['chat']['id'],
            },
            'evernote': {
                'access': {'permission': 'basic'},
            },
        }
        bot.users.create(user_data)

    user = BotUser(**user_data)
    message_text = '''Welcome! It's bot for saving your notes to Evernote on fly.
Please tap on button below to link your Evernote account with bot.'''

    chat_id = user.telegram.chat_id
    auth_button = {'text': 'Waiting for Evernote...', 'url': bot.url}
    inline_keyboard = json.dumps({'inline_keyboard': [[auth_button]]})
    status_message = bot.api.sendMessage(chat_id, message_text, inline_keyboard)
    key = bot.config['evernote']['access']['basic']['key']
    secret = bot.config['evernote']['access']['basic']['secret']
    oauth_callback = bot.config['oauth_callback']
    oauth_data = evernote.get_oauth_data(user.id, key, secret, oauth_callback, sandbox=bot.config.get('debug'))
    auth_button['text'] = 'Sign in with Evernote'
    auth_button['url'] = oauth_data['oauth_url']
    inline_keyboard = json.dumps({'inline_keyboard': [[auth_button]]})
    bot.api.editMessageReplyMarkup(chat_id, status_message['message_id'], inline_keyboard)
    user.evernote.oauth = EvernoteOauthData(
        token=oauth_data['oauth_token'],
        secret=oauth_data['oauth_token_secret'],
        callback_key=oauth_data['callback_key']
    )
    bot.users.save(user.asdict())