Dropbox Webhook的Flask应用程序,通知不起作用

时间:2019-03-24 18:21:51

标签: python flask dropbox dropbox-api

我创建了一个Flask应用,其端点可用于Dropbox webhooks。 Dropbox Webhook是一项服务,当我们的Dropbox文件夹中发生某些事件(例如上传文件)时,它将调用我们定义的API端点。我的应用程序的配置如下图所示,清楚地表明已启用了Webhook URI,即Dropbox Webhook的质询URI正常工作(此处隐藏了API_KEY,API_SECRET和app.secret_key)。

Congiguration set up for my Dropbox app

接下来,您可以看到我的flask应用程序的代码。问题是我希望每次将文件上传到我的Dropbox文件夹时都会触发/ webhook POST调用,但从未发生。您知道解决此问题的正确方法吗?谢谢。

# 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 :(得分:0)

要检查您是否没有从Dropbox收到预期的webhook notification请求,需要检查一些事情。确保您拥有:

  • 正确的应用程序:如果您可能已经注册了多个应用程序,请确保已将webhook URI添加到正确的应用程序中
  • 正确的Webhook URI:确保您在webook URI中注册了正确的主机/端口/路径。 (The dropbox_hook project对于轻松模拟Webhook通知请求很有用。)
  • 更改正确的帐户:确保您在更改正确的帐户。仅在当前连接到API应用程序的帐户中发生更改时(例如,由the OAuth app authorization flow授权或在the App Console上生成访问令牌),才会发送Dropbox Webhook通知。
  • 如果使用“应用程序文件夹”权限,则在正确的文件夹中进行更改:对于使用“应用程序文件夹” permission的应用程序(例如您的应用程序),仅在创建的特殊应用程序文件夹内发送有关更改的webhook通知关联用户的帐户中(对于使用英语的帐户,默认为/ Apps / APP_FOLDER_NAME),而不是该帐户中的其他任何地方。