From 3e21fd9175d727b951582b290332a6ae2596def9 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Tue, 25 Apr 2017 17:49:46 +0200 Subject: [PATCH] more sofisticated TP authorization/refresh --- rowers/tpstuff.py | 37 ++++++++++++++++++++----------------- rowers/views.py | 16 +++++++++------- 2 files changed, 29 insertions(+), 24 deletions(-) diff --git a/rowers/tpstuff.py b/rowers/tpstuff.py index 7638f7f2..b61ce004 100644 --- a/rowers/tpstuff.py +++ b/rowers/tpstuff.py @@ -113,14 +113,18 @@ def do_refresh_token(refreshtoken): data=post_data, headers=headers) - token_json = response.json() - thetoken = token_json['access_token'] - expires_in = token_json['expires_in'] - try: - refresh_token = token_json['refresh_token'] - except KeyError: - refresh_token = refreshtoken + if response.status_code == 200: + token_json = response.json() + thetoken = token_json['access_token'] + expires_in = token_json['expires_in'] + try: + refresh_token = token_json['refresh_token'] + except KeyError: + refresh_token = refreshtoken + else: + return [0,0,0] + return [thetoken,expires_in,refresh_token] # Exchange access code for long-lived access token @@ -184,10 +188,6 @@ def createtpworkoutdata(w): row = rowingdata(filename) tcxfilename = filename[:-4]+'.tcx' row.exporttotcx(tcxfilename,notes=w.notes) -# with file(tcxfilename,'rb') as inF: -# s = inF.read() -# with gzip.GzipFile(tcxfilename+'.gz','wb') as outF: -# outF.write(s) return tcxfilename except: tcxfilename = 0 @@ -208,12 +208,14 @@ def tp_check(access_token): def uploadactivity(access_token,filename,description='', name='Rowsandall.com workout'): + data_gz = BytesIO() with file(filename,'rb') as inF: s = inF.read() with gzip.GzipFile(fileobj=data_gz,mode="w") as gzf: gzf.write(s) + headers = { "Content-Type": "application/json", 'Accept': 'application/json', @@ -221,6 +223,7 @@ def uploadactivity(access_token,filename,description='', } + data = { "UploadClient": "rowsandall", "Filename": filename, @@ -235,13 +238,13 @@ def uploadactivity(access_token,filename,description='', data = json.dumps(data), headers=headers) - if resp.status_code != 200: - print resp.status_code - print resp.reason - print "" - print headers - print "" + if settings.DEBUG: + print resp.status_code + print resp.reason + print "" + print headers + print "" return 0 else: return resp.json()[0]["Id"] diff --git a/rowers/views.py b/rowers/views.py index c87b132f..1ed96c8a 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -1088,12 +1088,15 @@ def tp_open(user): else: if (timezone.now()>r.tptokenexpirydate): res = tpstuff.do_refresh_token(r.tprefreshtoken) - r.tptoken = res[0] - r.tprefreshtoken = res[2] - expirydatetime = timezone.now()+datetime.timedelta(seconds=res[1]) - r.tptokenexpirydate = expirydatetime - r.save() - thetoken = r.tptoken + if res[0] != 0: + r.tptoken = res[0] + r.tprefreshtoken = res[2] + expirydatetime = timezone.now()+datetime.timedelta(seconds=res[1]) + r.tptokenexpirydate = expirydatetime + r.save() + thetoken = r.tptoken + else: + raise TPNoTokenError("Refresh token invalid") else: thetoken = r.tptoken @@ -1225,7 +1228,6 @@ def workout_tp_upload_view(request,id=0): except TPNoTokenError: return HttpResponseRedirect("/rowers/me/tpauthorize/") - # ready to upload. Hurray try: w = Workout.objects.get(id=id)