Private
Public Access
1
0

fixed polar (hopefully)

This commit is contained in:
Sander Roosendaal
2022-01-21 17:45:54 +01:00
parent c495fd905d
commit a181f6f90d
2 changed files with 52 additions and 18 deletions

View File

@@ -36,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')
@@ -75,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(
@@ -89,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)
@@ -96,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:
@@ -355,28 +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': str(user.id) "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',reponse.body) 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"