Приложение Flask для Dropbox webhook, уведомления не работают - PullRequest
0 голосов
/ 24 марта 2019

Я создал приложение Flask с конечными точками, готовыми к веб-заездам Dropbox. Веб-крючок Dropbox - это служба, которая вызывает нашу определенную конечную точку API, когда в нашей папке Dropbox происходит какое-то событие (например, загрузка файла). Конфигурация для моего приложения, как показано на следующем рисунке, ясно показывает, что URI webhook включен, то есть URI вызова для Drophok работает правильно (API_KEY, API_SECRET и app.secret_key скрыты здесь).

Congiguration set up for my Dropbox app

Далее вы можете увидеть код моего приложения фляги. Проблема в том, что я ожидаю, что вызов / webhook POST будет запускаться каждый раз, когда я загружаю файл в папку Dropbox, но этого не происходит. Знаете ли вы правильный способ исправить это? Спасибо.

# App key and secret from the App console (dropbox.com/developers/apps)
    APP_KEY = "XXXXXXXXXXXXX"
    APP_SECRET = "YYYYYYYYYYYYY"

    app = Flask(__name__)
    app.debug = True

    # A random secret used by Flask to encrypt session data cookies
    app.secret_key = "zzzzzzzzzzzzz"


    def process_user(account):

        print("Yeahhhhh")


    @app.route('/webhook', methods=['GET'])
    def challenge():
        '''Respond to the webhook challenge (GET request) by echoing back the challenge parameter.'''

        resp = Response(request.args.get('challenge'))
        resp.headers['Content-Type'] = 'text/plain'
        resp.headers['X-Content-Type-Options'] = 'nosniff'

        return resp

    @app.route('/webhook', methods=['POST'])
    def webhook():
        '''Receive a list of changed user IDs from Dropbox and process each.'''

        # Make sure this is a valid request from Dropbox
        signature = request.headers.get('X-Dropbox-Signature').encode("utf-8")
        if not hmac.compare_digest(signature, hmac.new(APP_SECRET, request.data, sha256).hexdigest()):
            abort(403)

        for account in json.loads(request.data)['list_folder']['accounts']:
            threading.Thread(target=process_user, args=(account,)).start()
        return ''

    if __name__=='__main__':
        app.run(host='0.0.0.0')

1 Ответ

0 голосов
/ 25 марта 2019

Есть несколько вещей, которые нужно проверить, если вы не получаете ожидаемое уведомление от webhook запросов от Dropbox. Убедитесь, что у вас есть:

  • правильное приложение: если вы, возможно, зарегистрировали несколько приложений, убедитесь, что вы добавили URI webhook к правильному
  • правильный URI webhook: убедитесь, что вы указали правильный хост / порт / путь в URI webook. ( Проект dropbox_hook может быть полезен для простого моделирования запросов уведомлений веб-крюка.)
  • изменения в правильной учетной записи: убедитесь, что вы вносите изменения в правильную учетную запись. Уведомления о подключении через веб-сайт Dropbox будут отправляться только для изменений в учетной записи, которая в настоящий момент подключена к приложению API (например, авторизована потоком авторизации приложения OAuth или сгенерирована токен доступа на консоли приложения ).
  • изменения в правильной папке, если используется разрешение «папка приложения»: для приложений, использующих «папку приложения» разрешение , таких как ваше, уведомления веб-крючка будут отправляться только для изменений внутри специального приложения папка, созданная в учетных записях подключенных пользователей (по умолчанию в / Apps / APP_FOLDER_NAME для учетных записей на английском языке), но не в других местах учетных записей.
...