コード例 #1
0
ファイル: __init__.py プロジェクト: yyolk/todoist_bot
def auth():
    from app.telegram.handlers import bot
    error = request.args.get('error')
    if error:
        if error in ('access_denied', 'invalid_scope'):
            return redirect(bot().link('error_' + error))
        return error
    code = request.args.get('code')
    state = request.args.get('state')
    if not code:
        return 'code was not passed'
    if not state:
        return 'state was not passed'
    user = User.query.filter(User.state == state,
                             User.is_active == True).one_or_none()
    if not user:
        return 'user was not found'
    data = dict(
        client_id=app.config['TODOIST']['CLIENT_ID'],
        client_secret=app.config['TODOIST']['CLIENT_SECRET'],
        code=code,
    )
    response = requests.post(app.config['TODOIST']['URL'], data=data)
    if response.status_code != 200:
        return response.text
    result = response.json()
    if 'error' in result and result['error']:
        return result['error']
    user.auth = result['access_token']
    user.state = ''
    user.first_init_api()
    db.session.commit()
    return redirect(bot().link())
コード例 #2
0
def webhook(hashsum):
    if hashsum != app.config['BOT_HASHSUM']:
        abort(403)
    from app.telegram.handlers import bot
    update = Update.de_json(request.json, bot())
    bot().dispatcher.process_update(update)
    return 'Ok'
コード例 #3
0
ファイル: __init__.py プロジェクト: yyolk/todoist_bot
def callback(client_id):
    if client_id != app.config['TODOIST']['CLIENT_ID']:
        return 'wrong client_id'
    if 'X-Todoist-Hmac-SHA256' not in request.headers:
        return 'no signature'
    signature = request.headers['X-Todoist-Hmac-SHA256']
    password = request.data
    salt = app.config['TODOIST']['CLIENT_SECRET'].encode()
    my_signature = base64.b64encode(
        hmac.new(salt, request.data, hashlib.sha256).digest()).decode()
    if signature != my_signature:
        logging.warning('Wrong signature my: {} got: {} data: {}'.format(
            my_signature, signature, request.data))
        return 'wrong signature'
    data = request.json
    if not data:
        return 'empty json'
    if data['event_name'] != 'reminder:fired':
        return 'wrong event_name'
    user = User.query.filter(User.todoist_id == data['user_id'],
                             User.is_active == True).one_or_none()
    if not user:
        return 'user was not found'
    user.init_api()
    assert isinstance(user.api, TodoistAPI)
    item = user.api.items.get_by_id(data['event_data']['item_id'])
    if not item:
        return 'item not found'
    from app.telegram.handlers import bot
    result = bot().notification(user, item)
    if not result:
        return 'bot was blocked'
    return 'Ok!'
コード例 #4
0
ファイル: models.py プロジェクト: yyolk/todoist_bot
 def send_message(self, text, **kwargs):
     from app.telegram.handlers import bot
     try:
         return bot().send_message(self.tg_id, text, **kwargs)
     except Unauthorized:
         self.is_active = False
         db.session.commit()
     return False
コード例 #5
0
ファイル: command.py プロジェクト: yyolk/todoist_bot
def get_webhook_info():
    return bot().get_webhook_info()
コード例 #6
0
ファイル: command.py プロジェクト: yyolk/todoist_bot
def delete_webhook():
    return bot().delete_webhook()
コード例 #7
0
ファイル: command.py プロジェクト: yyolk/todoist_bot
def set_webhook():
    url = url_for('telegram.webhook',
                  hashsum=app.config['BOT_HASHSUM'],
                  _external=True,
                  _scheme='https')
    return bot().set_webhook(url, allowed_updates=allowed_updates)
コード例 #8
0
ファイル: command.py プロジェクト: yyolk/todoist_bot
def get_updates():
    updater = Updater(bot=bot(), workers=1)
    for attr in ('handlers', 'groups', 'error_handlers'):
        setattr(updater.dispatcher, attr, getattr(bot().dispatcher, attr))
    updater.start_polling(timeout=60, allowed_updates=allowed_updates)
    updater.idle()
コード例 #9
0
ファイル: models.py プロジェクト: A-K12/todoist_bot
 def first_init_api(self):
     self.init_api()
     if not self.is_authorized():
         return
     from app.telegram.handlers import bot
     bot().base_welcome(self)