Private
Public Access
1
0

workout list nk import working

This commit is contained in:
Sander Roosendaal
2021-04-01 09:40:01 +02:00
parent a96595d713
commit 5c6ed8ef16
4 changed files with 85 additions and 38 deletions

View File

@@ -1001,6 +1001,7 @@ class Rower(models.Model):
nktokenexpirydate = models.DateTimeField(blank=True,null=True)
nkrefreshtoken = models.TextField(default='',max_length=1000,
blank=True,null=True)
nk_owner_id = models.BigIntegerField(default=0)
trainingpeaks_auto_export = models.BooleanField(default=False)

View File

@@ -53,51 +53,84 @@ oauth_data = {
'scope':'read',
}
import http.client as http_client
http_client.HTTPConnection.debuglevel = 1
from requests.auth import HTTPBasicAuth
def get_token(code,callbackuri):
#client_id = oauth_data['client_id']
#client_secret = oauth_data['client_secret']
#base_uri = oauth_data['base_url']
#nk = OAuth2Session(client_id)
#token = nk.fetch_token(base_uri,client_secret=client_secret,authorization_response=callbackuri)
#print(token)
#return [0,0,0]
def get_token(code):
url = oauth_data['base_url']
headers = {'Accept': 'application/json',
#'Api-Key': oauth_data['client_id'],
#'Content-Type': 'application/x-www-form-urlencoded',
#'Authorization': auth_header,
'Content-Type': 'application/x-www-form-urlencoded',
#'user-agent': 'sanderroosendaal'
}
post_data = {"client_id": oauth_data['client_id'],
"grant_type": "authorization_code",
"redirect_uri": oauth_data['redirect_uri'],
"client_secret": oauth_data['client_secret'],
"code": code,
#"response_type": "code",
# "scope":oauth_data['scope'],
}
response = requests.post(url,auth=HTTPBasicAuth(oauth_data['client_id'],oauth_data['client_secret']),
data=post_data)
if response.status_code != 200:
return [0,response.text,0,0]
token_json = response.json()
access_token = token_json['access_token']
refresh_token = token_json['refresh_token']
expires_in = token_json['expires_in']
nk_owner_id = token_json['user_id']
return [access_token, expires_in, refresh_token,nk_owner_id]
response = requests.post(url,data=json.dumps(post_data),headers=headers)
print('Status Code',response.status_code)
return [0,response.text,0]
#return imports_get_token(code, oauth_data)
def nk_open(user):
t = time.localtime()
timestamp = time.strftime('%b-%d-%Y_%H%M', t)
token = imports_open(user,oauth_data)
return token
r = Rower.objects.get(user=user)
print(r.nktokenexpirydate)
if (r.nktoken == '') or (r.nktoken is None):
s = "Token doesn't exist. Need to authorize"
raise NoTokenError("User has no token")
else:
if (timezone.now()>r.nktokenexpirydate):
thetoken = rower_nk_token_refresh(user)
if thetoken == None:
raise NoTokenError("User has no token")
return thetoken
else:
thetoken = r.nktoken
return thetoken
def do_refresh_token(refreshtoken):
return imports_do_refresh_token(refreshtoken, oauth_data)
post_data = {"grant_type": "refresh_token",
#"client_id":NK_CLIENT_ID,
"refresh_token": refreshtoken,
}
url = oauth_data['base_url']
response = requests.post(url,data=post_data,auth=HTTPBasicAuth(oauth_data['client_id'],oauth_data['client_secret']))
print(response.request.headers)
print(post_data)
print(response.status_code,response.text)
if response.status_code != 200:
return [0,0,0]
token_json = response.json()
access_token = token_json['access_token']
refresh_token = token_json['refresh_token']
expires_in = token_json['expires_in']
return access_token, expires_in, refresh_token
def rower_nk_token_refresh(user):
r = Rower.objects.get(user=user)
@@ -128,16 +161,25 @@ def get_nk_workout_list(user,fake=False):
return custom_exception_handler(401,s)
else:
# ready to fetch. Hurray
endTime = int(arrow.now().timestamp())*1000
endTime = str(endTime)
startTime = arrow.now()-timedelta(days=90)*1000
startTime = str(int(startTime.timestamp()))
authorizationstring = str('Bearer ' + r.nktoken)
headers = {'Authorization': authorizationstring,
'user-agent': 'sanderroosendaal',
'Content-Type': 'application/json'}
'Content-Type': 'application/json',
}
url = NK_API_LOCATION+"api/v1/sessions"
params = {} # start / end time
params = {
'startTime':startTime,
'endTime':endTime,
} # start / end time
s = requests.get(url,headers=headers,params=params)
#print(s.status_code,s.json())
return s

View File

@@ -11,6 +11,9 @@
{% if rower.c2token is not None and rower.c2token != '' %}
Concept2 Logbook,
{% endif %}
{% if rower.nktoken is not None and rower.nktoken != '' %}
NK LiNK,
{% endif %}
{% if rower.sporttrackstoken is not None and rower.sporttrackstoken != '' %}
SportTracks,
{% endif %}

View File

@@ -776,14 +776,10 @@ def rower_process_garmincallback(request):
# Process NK Callback
@login_required()
def rower_process_nkcallback(request):
uri = request.build_absolute_uri()
uri = 'https://dunav.ngrok.io/'+uri[22:]
print(uri)
# do stuff
try:
code = request.GET.get('code',None)
res = nkstuff.get_token(code,uri)
res = nkstuff.get_token(code)
except MultiValueDictKeyError:
message = "The resource owner or authorization server denied the request"
messages.error(request,message)
@@ -791,8 +787,6 @@ def rower_process_nkcallback(request):
url = reverse('rower_exportsettings_view')
return HttpResponseRedirect(url)
uri = request.build_absolute_uri()
access_token = res[0]
if access_token == 0:
message = res[1]
@@ -805,12 +799,14 @@ def rower_process_nkcallback(request):
expires_in = res[1]
refresh_token = res[2]
nk_owner_id = res[3]
expirydatetime = timezone.now()+datetime.timedelta(seconds=expires_in)
r = getrower(request.user)
r.nktoken = access_token
r.nktokenexpirydate = expirydatetime
r.nkrefreshtoken = refresh_token
r.nk_owner_id = nk_owner_id
r.save()
@@ -836,7 +832,7 @@ def workout_nkimport_view(request,userid=0):
if (r.stravatoken == '') or (r.stravatoken is None):
s = "Token doesn't exist. Need to authorize"
return HttpResponseRedirect("/rowers/me/stravaauthorize/")
message = "Something went wrong in workout_stravaimport_view"
message = "Something went wrong in workout_nkimport_view"
messages.error(request,message)
url = reverse('workouts_view')
return HttpResponseRedirect(url)
@@ -846,7 +842,7 @@ def workout_nkimport_view(request,userid=0):
nkdata = [{
'id':int(item['id']),
'elapsed_time':item['elapsedTime'],
'start_date':item['startTime'],
'start_date':arrow.get(item['startTime']),
} for item in res.json()]
workouts = []
@@ -857,12 +853,17 @@ def workout_nkimport_view(request,userid=0):
n = item['name']
nnn = ''
ttot = str(datetime.timedelta(seconds=int(float(item['elapsedTime'])/1000.)))
s = item['startTime']
s = arrow.get(item['startTime'],tzinfo=r.defaulttimezone).format(arrow.FORMAT_W3C)
#s = arrow.get(item['startTime']).to(r.defaulttimezone).isoformat()
keys = ['id','distance','duration','starttime','name','new']
values = [i,d,ttot,s,n,nnn]
res = dict(zip(keys, values))
workouts.append(res)
workouts = workouts[::-1]
print(workouts)
breadcrumbs = [
{
'url':'/rowers/list-workouts/',