From c495fd905d09893a75b0b85015d1394d42c47f28 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Fri, 21 Jan 2022 16:30:36 +0100 Subject: [PATCH 1/2] fix --- rowers/polarstuff.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rowers/polarstuff.py b/rowers/polarstuff.py index 5ee076f6..21335ec0 100644 --- a/rowers/polarstuff.py +++ b/rowers/polarstuff.py @@ -23,7 +23,6 @@ import os,sys import gzip import base64 import yaml - from uuid import uuid4 from requests import ConnectionError from json.decoder import JSONDecodeError @@ -364,7 +363,7 @@ def register_user(user, token): } params = { - 'member-id': uuid4().hex + 'member-id': str(user.id) } url = baseurl+'/users' @@ -377,6 +376,7 @@ def register_user(user, token): dologging('polar.log',headers) dologging('polar.log',params) dologging('polar.log',response.status_code) + dologging('polar.log',reponse.body) try: dologging('polar.log',response.reason) dologging('polar.log',response.text) From a181f6f90d996476e16c530cf9685e9e1c0295c8 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Fri, 21 Jan 2022 17:45:54 +0100 Subject: [PATCH 2/2] fixed polar (hopefully) --- rowers/polarstuff.py | 39 +++++++++++++++++++++++++++---------- rowers/views/importviews.py | 31 +++++++++++++++++++++-------- 2 files changed, 52 insertions(+), 18 deletions(-) diff --git a/rowers/polarstuff.py b/rowers/polarstuff.py index 21335ec0..131e1165 100644 --- a/rowers/polarstuff.py +++ b/rowers/polarstuff.py @@ -36,6 +36,7 @@ from django.contrib.auth.decorators import login_required from django.urls import reverse, reverse_lazy from rowers.utils import myqueue +from rowers.opaque import encoder import django_rq queue = django_rq.get_queue('default') queuelow = django_rq.get_queue('low') @@ -75,7 +76,7 @@ def get_token(code): post_data = {"grant_type": "authorization_code", "code": code, - "redirect_uri": POLAR_REDIRECT_URI, + #"redirect_uri": POLAR_REDIRECT_URI, } auth_string = '{id}:{secret}'.format( @@ -89,6 +90,10 @@ def get_token(code): headers = { 'Authorization': 'Basic %s' % base64.b64encode( bytes(auth_string,'utf-8')).decode('utf-8') } + dologging('polar.log','Getting token') + dologging('polar.log',post_data) + dologging('polar.log',auth_string) + response = requests.post("https://polarremote.com/v2/oauth2/token", data=post_data, headers=headers) @@ -96,6 +101,7 @@ def get_token(code): if response.status_code != 200: # pragma: no cover dologging('polar.log','Getting token, got:') dologging('polar.log',response.status_code) + dologging('polar.log',response.reason) dologging('polar.log',response.text) try: @@ -355,28 +361,41 @@ def register_user(user, token): s = "Token expired. Needs to refresh" return custom_exception_handler(401,s) - authorizationstring = str('Bearer ' + token) + authorizationstring = 'Bearer {token}'.format(token=token) headers = { 'Content-Type': 'application/xml', 'Authorization':authorizationstring, 'Accept': 'application/json' } - params = { - 'member-id': str(user.id) + payload = { + "member-id": encoder.encode_hex(user.id) + } + + headers = { + 'Content-Type': 'application/json', + 'Accept': 'application/json', + 'Authorization': 'Bearer {token}'.format(token=token) } - url = baseurl+'/users' dologging('polar.log','Registering user') - response = requests.post(url,params=params,headers=headers) - if response.status_code != 200: - dologging('polar.log',url) + response = requests.post( + 'https://www.polaraccesslink.com/v3/users', + json = payload, + headers = headers + ) + #url = baseurl+'/users' + + #response = requests.post(url,params=params,headers=headers) + + if response.status_code not in [200,201]: + #dologging('polar.log',url) dologging('polar.log',headers) - dologging('polar.log',params) + dologging('polar.log',payload) dologging('polar.log',response.status_code) - dologging('polar.log',reponse.body) + dologging('polar.log',response.content) try: dologging('polar.log',response.reason) dologging('polar.log',response.text) diff --git a/rowers/views/importviews.py b/rowers/views/importviews.py index 187741a5..8b9fad68 100644 --- a/rowers/views/importviews.py +++ b/rowers/views/importviews.py @@ -206,7 +206,7 @@ def rower_polar_authorize(request): # pragma: no cover params = {"client_id": POLAR_CLIENT_ID, "response_type": "code", - "redirect_uri": POLAR_REDIRECT_URI, + #"redirect_uri": POLAR_REDIRECT_URI, "state": state, # "scope":"accesslink.read_all" } @@ -420,6 +420,7 @@ def rower_process_polarcallback(request): try: code = request.GET['code'] + dologging('polar.log',code) except MultiValueDictKeyError: # pragma: no cover try: message = request.GET['error'] @@ -432,7 +433,21 @@ def rower_process_polarcallback(request): return HttpResponseRedirect(url) access_token, expires_in, user_id = polarstuff.get_token(code) - polar_user_data = polarstuff.register_user(request.user, access_token) + expirydatetime = timezone.now()+datetime.timedelta(seconds=expires_in) + r = getrower(request.user) + r.polartoken = access_token + r.polartokenexpirydate = expirydatetime + r.polaruserid = user_id + + r.save() + + if user_id: + polar_user_data = polarstuff.register_user(request.user, access_token) + else: + messages.error(request,'Polar Flow Authorization Failed') + url = reverse('rower_exportsettings_view') + return HttpResponseRedirect(url) + try: user_id2 = polar_user_data['polar-user-id'] @@ -442,14 +457,14 @@ def rower_process_polarcallback(request): if user_id2 != user_id: messages.error(request,'Polar User ID error') - expirydatetime = timezone.now()+datetime.timedelta(seconds=expires_in) + #expirydatetime = timezone.now()+datetime.timedelta(seconds=expires_in) - r = getrower(request.user) - r.polartoken = access_token - r.polartokenexpirydate = expirydatetime - r.polaruserid = user_id + #r = getrower(request.user) + #r.polartoken = access_token + #r.polartokenexpirydate = expirydatetime + #r.polaruserid = user_id - r.save() + #r.save() if user_id2 == user_id: successmessage = "Tokens stored. Good to go. Please check your import/export settings"