From 7b2ffad5ab8117ce428d2c13d2081bcf01b229e9 Mon Sep 17 00:00:00 2001
From: Sander Roosendaal
Date: Sun, 28 Jun 2020 11:47:10 +0200
Subject: [PATCH 01/13] Garmin connect initial auth
---
rowers/garmin_stuff.py | 82 +++++++++++++++++++++++++++++++++++++
rowers/models.py | 4 ++
rowers/urls.py | 1 +
rowers/views/importviews.py | 19 +++++++++
rowers/views/statements.py | 1 +
rowsandall_app/settings.py | 4 ++
rowsandall_app/urls.py | 1 +
7 files changed, 112 insertions(+)
create mode 100644 rowers/garmin_stuff.py
diff --git a/rowers/garmin_stuff.py b/rowers/garmin_stuff.py
new file mode 100644
index 00000000..2aa59cfe
--- /dev/null
+++ b/rowers/garmin_stuff.py
@@ -0,0 +1,82 @@
+from rowers.imports import *
+import datetime
+import requests
+from requests_oauthlib import OAuth1,OAuth1Session
+from requests import Request, Session
+import rowers.mytypes as mytypes
+from rowers.mytypes import otwtypes
+from rowers.rower_rules import is_workout_user,ispromember
+from iso8601 import ParseError
+
+import numpy
+import json
+from json.decoder import JSONDecodeError
+
+from rowsandall_app.settings import (
+ GARMIN_CLIENT_KEY, GARMIN_REDIRECT_URI, GARMIN_CLIENT_SECRET
+ )
+
+from rowers.tasks import handle_c2_import_stroke_data, handle_c2_sync
+import django_rq
+queue = django_rq.get_queue('default')
+queuelow = django_rq.get_queue('low')
+queuehigh = django_rq.get_queue('low')
+from rowers.utils import myqueue
+from rowers.models import C2WorldClassAgePerformance
+
+from django.core.exceptions import PermissionDenied
+
+oauth_data = {
+ 'client_id': GARMIN_CLIENT_KEY,
+ 'client_secret': GARMIN_CLIENT_SECRET,
+ 'redirect_uri': GARMIN_REDIRECT_URI,
+ 'authorization_uri': "https://connectapi.garmin.com/oauth-service/oauth/request_token",
+ 'content_type': 'application/x-www-form-urlencoded',
+ 'tokenname': 'garmintoken',
+ 'refreshtokenname': 'garminrefreshtoken',
+ 'expirydatename': 'garmintokenexpirydate',
+ 'bearer_auth': True,
+ 'base_url': "https://connect.garmin.com/oauthConfirm",
+ 'scope':'write',
+ 'headers': 'Authorization: OAuth oauth_version="1.0"'
+ }
+
+def garmin_authorize():
+ redirect_uri = oauth_data['redirect_uri']
+ client_secret = oauth_data['client_secret']
+ client_id = oauth_data['client_id']
+ base_uri = oauth_data['base_url']
+
+
+ garmin = OAuth1Session(oauth_data['client_id'],
+ client_secret=oauth_data['client_secret'],
+ )
+ fetch_response = garmin.fetch_request_token(oauth_data['authorization_uri'])
+ resource_owner_key = fetch_response.get('oauth_token')
+ resource_owner_secret = fetch_response.get('oauth_token_secret')
+
+ authorization_url = garmin.authorization_url(base_uri)
+ return authorization_url
+
+def garmin_processcallback(redirect_respones):
+ garmin = OAuth1Session(oauth_data['client_id'],
+ client_secret=oauth_data['client_secret'],
+ )
+ oauth_response = garmin.parse_authorization_response(redirect_response)
+
+ verifier = oauth_response.get('oauth_verifier')
+ token = oauth_response.get('oauth_token')
+ access_token_url = 'https://connectapi.garmin.com/oauth-service/oauth/access_token'
+
+ # Using OAuth1Session
+ garmin = OAuth1Session(oauth_data['client_id'],
+ client_secret=oauth_data['client_secret'],
+ resource_owner_key=resource_owner_key,
+ resource_owner_secret=resource_owner_secret,
+ verifier=verifier,)
+ oauth_tokens = garmin.fetch_access_token(access_token_url)
+
+ garmintoken = oauth_tokens.get('oauth_token')
+ garminrefreshtoken = oauth_tokens.get('oauth_token_secret')
+
+ return garmintoken,garminrefreshtoken
diff --git a/rowers/models.py b/rowers/models.py
index a3f0d391..ecdd8cf7 100644
--- a/rowers/models.py
+++ b/rowers/models.py
@@ -834,6 +834,10 @@ class Rower(models.Model):
polaruserid = models.IntegerField(default=0)
polar_auto_import = models.BooleanField(default=False)
+ garmintoken = models.CharField(default='',max_length=200,blank=True,null=True)
+ garminrefreshtoken = models.CharField(default='',max_length=1000,
+ blank=True,null=True)
+
stravatoken = models.CharField(default='',max_length=200,blank=True,null=True)
stravatokenexpirydate = models.DateTimeField(blank=True,null=True)
stravarefreshtoken = models.CharField(default='',max_length=1000,
diff --git a/rowers/urls.py b/rowers/urls.py
index 58829974..067b4448 100644
--- a/rowers/urls.py
+++ b/rowers/urls.py
@@ -532,6 +532,7 @@ urlpatterns = [
re_path(r'^me/polarauthorize/$',views.rower_polar_authorize,name='rower_polar_authorize'),
re_path(r'^me/revokeapp/(?P\d+)/$',views.rower_revokeapp_view,name='rower_revokeapp_view'),
re_path(r'^me/stravaauthorize/$',views.rower_strava_authorize,name='rower_strava_authorize'),
+ re_path(r'^me/garminauthorize/$',views.rower_garmin_authorize,name='rower_garmin_authorize'),
re_path(r'^me/sporttracksauthorize/$',views.rower_sporttracks_authorize,name='rower_sporttracks_authorize'),
re_path(r'^me/underarmourauthorize/$',views.rower_underarmour_authorize,name='rower_underarmour_authorize'),
re_path(r'^me/tpauthorize/$',views.rower_tp_authorize,name='rower_tp_authorize'),
diff --git a/rowers/views/importviews.py b/rowers/views/importviews.py
index dccf2f4a..a75b8db7 100644
--- a/rowers/views/importviews.py
+++ b/rowers/views/importviews.py
@@ -401,6 +401,12 @@ def rower_c2_authorize(request):
url += "&scope="+scope
return HttpResponseRedirect(url)
+# Garmin authorization
+@login_required()
+def rower_garmin_authorize(request):
+ authorization_url = garmin_stuff.garmin_authorize()
+ return HttpResponseRedirect(authorization_url)
+
# Strava Authorization
@login_required()
def rower_strava_authorize(request):
@@ -705,7 +711,20 @@ def rower_process_polarcallback(request):
return HttpResponseRedirect(url)
+# process Garmin callback
+@login_required()
+def rower_process_garmincallback(request):
+ r = getrower(request.user)
+ absoluteurl = request.build_absolute_uri()
+ garmintoken,garminrefreshtoken = garmin_stuff.garmin_processcallback(absoluteurl)
+ r.garmintoken = garmintoken
+ r.garminrefreshtoken = garminrefreshtoken
+ r.save()
+ successmessage = "Tokens stored. Good to go"
+ messages.info(request,successmessage)
+ url = reverse('workouts_view')
+ return HttpResponseRedirect(url)
# Process Strava Callback
@login_required()
diff --git a/rowers/views/statements.py b/rowers/views/statements.py
index 6ce222f9..6003cb4b 100644
--- a/rowers/views/statements.py
+++ b/rowers/views/statements.py
@@ -157,6 +157,7 @@ from rowers.sporttracksstuff import sporttracks_open
from rowers.tpstuff import tp_open
from iso8601 import ParseError
import rowers.stravastuff as stravastuff
+import rowers.garmin_stuff as garmin_stuff
from rowers.stravastuff import strava_open
import rowers.polarstuff as polarstuff
import rowers.sporttracksstuff as sporttracksstuff
diff --git a/rowsandall_app/settings.py b/rowsandall_app/settings.py
index aea004aa..f066df9e 100644
--- a/rowsandall_app/settings.py
+++ b/rowsandall_app/settings.py
@@ -282,6 +282,10 @@ STRAVA_CLIENT_ID = CFG['strava_client_id']
STRAVA_CLIENT_SECRET = CFG['strava_client_secret']
STRAVA_REDIRECT_URI = CFG['strava_callback']
+# Garmin
+GARMIN_CLIENT_KEY = CFG["garmin_client_key"]
+GARMIN_CLIENT_SECRET = CFG['garmin_client_secret']
+GARMIN_REDIRECT_URI = CFG['garmin_callback']
# SportTracks
diff --git a/rowsandall_app/urls.py b/rowsandall_app/urls.py
index 88a2cfd2..f6d3628e 100644
--- a/rowsandall_app/urls.py
+++ b/rowsandall_app/urls.py
@@ -71,6 +71,7 @@ urlpatterns += [
# re_path(r'^admin/rq/',include('django_rq_dashboard.urls')),
re_path(r'^call\_back',rowersviews.rower_process_callback),
re_path(r'^stravacall\_back',rowersviews.rower_process_stravacallback),
+ re_path(r'^garmin\_callback',rowersviews.rower_process_garmincallback),
re_path(r'^sporttracks\_callback',rowersviews.rower_process_sporttrackscallback),
re_path(r'^underarmour\_callback',rowersviews.rower_process_underarmourcallback),
re_path(r'^polarflowcallback',rowersviews.rower_process_polarcallback),
From c53d96d8bbf443c74cc7adb6fb82f5404a3ef755 Mon Sep 17 00:00:00 2001
From: Sander Roosendaal
Date: Sun, 28 Jun 2020 12:26:13 +0200
Subject: [PATCH 02/13] Garmin auth working
---
rowers/garmin_stuff.py | 4 ++--
rowers/templates/rower_exportsettings.html | 2 ++
rowers/views/importviews.py | 9 +++++++--
static/img/Garmin_Connect_app_1024x1024-02.png | Bin 0 -> 268632 bytes
static/img/Garmin_Connect_app_130x130.png | Bin 0 -> 14266 bytes
...in_connect_badge_print_RESOURCE_FILE-01.png | Bin 0 -> 35516 bytes
static/img/garmin_badge_130.png | Bin 0 -> 7642 bytes
static/img/garmin_badge_260.png | Bin 0 -> 12993 bytes
8 files changed, 11 insertions(+), 4 deletions(-)
create mode 100644 static/img/Garmin_Connect_app_1024x1024-02.png
create mode 100644 static/img/Garmin_Connect_app_130x130.png
create mode 100644 static/img/Garmin_connect_badge_print_RESOURCE_FILE-01.png
create mode 100644 static/img/garmin_badge_130.png
create mode 100644 static/img/garmin_badge_260.png
diff --git a/rowers/garmin_stuff.py b/rowers/garmin_stuff.py
index 2aa59cfe..ee7d5ad8 100644
--- a/rowers/garmin_stuff.py
+++ b/rowers/garmin_stuff.py
@@ -56,9 +56,9 @@ def garmin_authorize():
resource_owner_secret = fetch_response.get('oauth_token_secret')
authorization_url = garmin.authorization_url(base_uri)
- return authorization_url
+ return authorization_url,resource_owner_key,resource_owner_secret
-def garmin_processcallback(redirect_respones):
+def garmin_processcallback(redirect_response,resource_owner_key,resource_owner_secret):
garmin = OAuth1Session(oauth_data['client_id'],
client_secret=oauth_data['client_secret'],
)
diff --git a/rowers/templates/rower_exportsettings.html b/rowers/templates/rower_exportsettings.html
index e1eda12b..d6e83040 100644
--- a/rowers/templates/rower_exportsettings.html
+++ b/rowers/templates/rower_exportsettings.html
@@ -34,6 +34,8 @@ The auto import and export settings only work on a
alt="connect with Polar" width="130">

+
diff --git a/rowers/views/importviews.py b/rowers/views/importviews.py
index a75b8db7..d1b09b48 100644
--- a/rowers/views/importviews.py
+++ b/rowers/views/importviews.py
@@ -404,7 +404,9 @@ def rower_c2_authorize(request):
# Garmin authorization
@login_required()
def rower_garmin_authorize(request):
- authorization_url = garmin_stuff.garmin_authorize()
+ authorization_url,token,secret = garmin_stuff.garmin_authorize()
+ request.session['garmin_owner_key'] = token
+ request.session['garmin_owner_secret'] = secret
return HttpResponseRedirect(authorization_url)
# Strava Authorization
@@ -716,7 +718,10 @@ def rower_process_polarcallback(request):
def rower_process_garmincallback(request):
r = getrower(request.user)
absoluteurl = request.build_absolute_uri()
- garmintoken,garminrefreshtoken = garmin_stuff.garmin_processcallback(absoluteurl)
+
+ key = request.session['garmin_owner_key']
+ secret = request.session['garmin_owner_secret']
+ garmintoken,garminrefreshtoken = garmin_stuff.garmin_processcallback(absoluteurl,key,secret)
r.garmintoken = garmintoken
r.garminrefreshtoken = garminrefreshtoken
r.save()
diff --git a/static/img/Garmin_Connect_app_1024x1024-02.png b/static/img/Garmin_Connect_app_1024x1024-02.png
new file mode 100644
index 0000000000000000000000000000000000000000..eefdd46aedcd838c7defbd7168f7de5f3d9416bc
GIT binary patch
literal 268632
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