Private
Public Access
1
0

Merge branch 'release/v18.2.11'

This commit is contained in:
Sander Roosendaal
2022-01-21 18:04:58 +01:00
2 changed files with 52 additions and 18 deletions

View File

@@ -23,7 +23,6 @@ import os,sys
import gzip import gzip
import base64 import base64
import yaml import yaml
from uuid import uuid4 from uuid import uuid4
from requests import ConnectionError from requests import ConnectionError
from json.decoder import JSONDecodeError from json.decoder import JSONDecodeError
@@ -37,6 +36,7 @@ from django.contrib.auth.decorators import login_required
from django.urls import reverse, reverse_lazy from django.urls import reverse, reverse_lazy
from rowers.utils import myqueue from rowers.utils import myqueue
from rowers.opaque import encoder
import django_rq import django_rq
queue = django_rq.get_queue('default') queue = django_rq.get_queue('default')
queuelow = django_rq.get_queue('low') queuelow = django_rq.get_queue('low')
@@ -76,7 +76,7 @@ def get_token(code):
post_data = {"grant_type": "authorization_code", post_data = {"grant_type": "authorization_code",
"code": code, "code": code,
"redirect_uri": POLAR_REDIRECT_URI, #"redirect_uri": POLAR_REDIRECT_URI,
} }
auth_string = '{id}:{secret}'.format( auth_string = '{id}:{secret}'.format(
@@ -90,6 +90,10 @@ def get_token(code):
headers = { 'Authorization': 'Basic %s' % base64.b64encode( headers = { 'Authorization': 'Basic %s' % base64.b64encode(
bytes(auth_string,'utf-8')).decode('utf-8') } 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", response = requests.post("https://polarremote.com/v2/oauth2/token",
data=post_data, data=post_data,
headers=headers) headers=headers)
@@ -97,6 +101,7 @@ def get_token(code):
if response.status_code != 200: # pragma: no cover if response.status_code != 200: # pragma: no cover
dologging('polar.log','Getting token, got:') dologging('polar.log','Getting token, got:')
dologging('polar.log',response.status_code) dologging('polar.log',response.status_code)
dologging('polar.log',response.reason)
dologging('polar.log',response.text) dologging('polar.log',response.text)
try: try:
@@ -356,27 +361,41 @@ def register_user(user, token):
s = "Token expired. Needs to refresh" s = "Token expired. Needs to refresh"
return custom_exception_handler(401,s) return custom_exception_handler(401,s)
authorizationstring = str('Bearer ' + token) authorizationstring = 'Bearer {token}'.format(token=token)
headers = { headers = {
'Content-Type': 'application/xml', 'Content-Type': 'application/xml',
'Authorization':authorizationstring, 'Authorization':authorizationstring,
'Accept': 'application/json' 'Accept': 'application/json'
} }
params = { payload = {
'member-id': uuid4().hex "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') dologging('polar.log','Registering user')
response = requests.post(url,params=params,headers=headers)
if response.status_code != 200: response = requests.post(
dologging('polar.log',url) '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',headers)
dologging('polar.log',params) dologging('polar.log',payload)
dologging('polar.log',response.status_code) dologging('polar.log',response.status_code)
dologging('polar.log',response.content)
try: try:
dologging('polar.log',response.reason) dologging('polar.log',response.reason)
dologging('polar.log',response.text) dologging('polar.log',response.text)

View File

@@ -206,7 +206,7 @@ def rower_polar_authorize(request): # pragma: no cover
params = {"client_id": POLAR_CLIENT_ID, params = {"client_id": POLAR_CLIENT_ID,
"response_type": "code", "response_type": "code",
"redirect_uri": POLAR_REDIRECT_URI, #"redirect_uri": POLAR_REDIRECT_URI,
"state": state, "state": state,
# "scope":"accesslink.read_all" # "scope":"accesslink.read_all"
} }
@@ -420,6 +420,7 @@ def rower_process_polarcallback(request):
try: try:
code = request.GET['code'] code = request.GET['code']
dologging('polar.log',code)
except MultiValueDictKeyError: # pragma: no cover except MultiValueDictKeyError: # pragma: no cover
try: try:
message = request.GET['error'] message = request.GET['error']
@@ -432,7 +433,21 @@ def rower_process_polarcallback(request):
return HttpResponseRedirect(url) return HttpResponseRedirect(url)
access_token, expires_in, user_id = polarstuff.get_token(code) 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: try:
user_id2 = polar_user_data['polar-user-id'] user_id2 = polar_user_data['polar-user-id']
@@ -442,14 +457,14 @@ def rower_process_polarcallback(request):
if user_id2 != user_id: if user_id2 != user_id:
messages.error(request,'Polar User ID error') 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 = getrower(request.user)
r.polartoken = access_token #r.polartoken = access_token
r.polartokenexpirydate = expirydatetime #r.polartokenexpirydate = expirydatetime
r.polaruserid = user_id #r.polaruserid = user_id
r.save() #r.save()
if user_id2 == user_id: if user_id2 == user_id:
successmessage = "Tokens stored. Good to go. Please check your import/export settings" successmessage = "Tokens stored. Good to go. Please check your import/export settings"