From c4c1a02794a69799365626bc7b08b35b2abb6a5a Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Sun, 12 Jul 2020 10:45:40 +0200 Subject: [PATCH] adding webhook processing for strava - does not do anything useful yet --- rowers/stravastuff.py | 21 +++++++++++++++++++++ rowers/urls.py | 1 + rowers/views/importviews.py | 13 +++++++++++++ 3 files changed, 35 insertions(+) diff --git a/rowers/stravastuff.py b/rowers/stravastuff.py index 36097d9c..587d7c3a 100644 --- a/rowers/stravastuff.py +++ b/rowers/stravastuff.py @@ -43,6 +43,8 @@ except ImportError: from rowers.imports import * +webhookverification = "kudos_to_rowing" + headers = {'Accept': 'application/json', 'Api-Key': STRAVA_CLIENT_ID, 'Content-Type': 'application/json', @@ -97,6 +99,25 @@ def rower_strava_token_refresh(user): def make_authorization_url(request): return imports_make_authorization_url(oauth_data) +def strava_establish_push(): + url = "https://www.strava.com/api/v3/push_subscriptions" + post_data = { + 'client_id': STRAVA_CLIENT_ID, + 'client_secret': STRAVA_CLIENT_SECRET, + 'callback_url': 'http://localhost:8000/rowers/strava/webhooks/', + 'verify_token': webhookverification, + } + headers = {'user-agent': 'sanderroosendaal', + 'Accept': 'application/json', + 'Content-Type': oauth_data['content_type']} + + response = requests.post(url,data=post_data) + + print(response.json()) + + return response.status_code + + def set_strava_athlete_id(user): r = Rower.objects.get(user=user) if (r.stravatoken == '') or (r.stravatoken is None): diff --git a/rowers/urls.py b/rowers/urls.py index 6e74b0df..5e53e52f 100644 --- a/rowers/urls.py +++ b/rowers/urls.py @@ -417,6 +417,7 @@ urlpatterns = [ re_path(r'^workout/(?P\b[0-9A-Fa-f]+\b)/delete/$',login_required( views.WorkoutDelete.as_view()), name='workout_delete'), + re_path(r'^strava/webhooks/',views.strava_webhook_view,name='strava_webhook_view'), re_path(r'^garmin/summaries/',views.garmin_summaries_view,name='garmin_summaries_view'), re_path(r'^garmin/files/',views.garmin_newfiles_ping,name='garmin_newfiles_ping'), re_path(r'^garmin/activities/',views.garmin_details_view,name='garmin_details_view'), diff --git a/rowers/views/importviews.py b/rowers/views/importviews.py index d1981dc9..a0149a41 100644 --- a/rowers/views/importviews.py +++ b/rowers/views/importviews.py @@ -1008,6 +1008,19 @@ def workout_stravaimport_view(request,message="",userid=0): return HttpResponse(res) +# for Strava webhook request validation +def strava_webhook_view(request): + if request.method == 'GET': + challenge = request.GET.get('hub.challenge') + verificationtoken = request.GET.get('hub.verify_token') + if verificationtoken != stravastuff.webhookverification: + return HttpResponse(status=403) + data = {"hub.challenge":challenge} + return JSONResponse(data) + + # POST - does nothing so far + return HttpResponse(status=200) + # For push notifications from Garmin @csrf_exempt def garmin_summaries_view(request):