Private
Public Access
1
0

using imports.py on all external APIs

This commit is contained in:
Sander Roosendaal
2018-07-04 16:29:01 +02:00
parent 45a6300c76
commit 6723194a30
9 changed files with 76 additions and 293 deletions

View File

@@ -8,109 +8,35 @@ from rowsandall_app.settings import (
SPORTTRACKS_CLIENT_SECRET, SPORTTRACKS_CLIENT_ID, SPORTTRACKS_REDIRECT_URI
)
oauth_data = {
'client_id': SPORTTRACKS_CLIENT_ID,
'client_secret': SPORTTRACKS_CLIENT_SECRET,
'redirect_uri': SPORTTRACKS_REDIRECT_URI,
'autorization_uri': "https://api.sporttracks.mobi/oauth2/authorize",
'content_type': 'application/json',
'tokenname': 'sporttrackstoken',
'refreshtokenname': 'sporttracksrefreshtoken',
'expirydatename': 'sporttrackstokenexpirydate',
'bearer_auth': False,
'base_url': "https://api.sporttracks.mobi/oauth2/token",
}
# Checks if user has SportTracks token, renews them if they are expired
def sporttracks_open(user):
r = Rower.objects.get(user=user)
if (r.sporttrackstoken == '') or (r.sporttrackstoken is None):
s = "Token doesn't exist. Need to authorize"
raise NoTokenError("User has no token")
else:
if (timezone.now()>r.sporttrackstokenexpirydate):
thetoken = rower_sporttracks_token_refresh(user)
else:
thetoken = r.sporttrackstoken
return thetoken
return imports_open(user, oauth_data)
# Refresh ST token using refresh token
def do_refresh_token(refreshtoken):
client_auth = requests.auth.HTTPBasicAuth(SPORTTRACKS_CLIENT_ID, SPORTTRACKS_CLIENT_SECRET)
post_data = {"grant_type": "refresh_token",
"client_secret": SPORTTRACKS_CLIENT_SECRET,
"client_id":SPORTTRACKS_CLIENT_ID,
"refresh_token": refreshtoken,
}
headers = {'user-agent': 'sanderroosendaal',
'Accept': 'application/json',
'Content-Type': 'application/json'}
url = "https://api.sporttracks.mobi/oauth2/token"
response = requests.post(url,
data=json.dumps(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
try:
expires_in = int(expires_in)
except (TypeError,ValueError):
expires_in = 0
return [thetoken,expires_in,refresh_token]
return imports_do_refresh_token(refreshtoken, oauth_data)
# Exchange ST access code for long-lived ST access token
def get_token(code):
client_auth = requests.auth.HTTPBasicAuth(SPORTTRACKS_CLIENT_ID, SPORTTRACKS_CLIENT_SECRET)
post_data = {"grant_type": "authorization_code",
"code": code,
"redirect_uri": SPORTTRACKS_REDIRECT_URI,
"client_secret": SPORTTRACKS_CLIENT_SECRET,
"client_id":SPORTTRACKS_CLIENT_ID,
}
headers = {'Accept': 'application/json',
'Content-Type': 'application/json'}
url = "https://api.sporttracks.mobi/oauth2/token"
response = requests.post(url,
data=json.dumps(post_data),
headers=headers)
if response.status_code == 200 or response.status_code == 201:
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
try:
expires_in = int(expires_in)
except (ValueError,TypeError):
expires_in = 0
else:
return [0,0,0]
return [thetoken,expires_in,refresh_token]
return imports_get_token(code,oauth_data)
# Make authorization URL including random string
def make_authorization_url(request):
# Generate a random string for the state parameter
# Save it for use later to prevent xsrf attacks
state = str(uuid4())
params = {"client_id": SPORTTRACKS_CLIENT_ID,
"response_type": "code",
"redirect_uri": SPORTTRACKS_REDIRECT_URI,
"scope":"write",
"state":state}
import urllib
url = "https://api.sporttracks.mobi/oauth2/authorize" +urllib.urlencode(params)
return HttpResponseRedirect(url)
return imports_make_authorization_url(oauth_data)
# This is token refresh. Looks for tokens in our database, then refreshes
def rower_sporttracks_token_refresh(user):
@@ -306,7 +232,8 @@ def workout_sporttracks_upload(user,w):
# ready to upload. Hurray
r = w.user
thetoken = sporttracks_open(user)
res = sporttracks_open(user)
thetoken = res[0]
if (checkworkoutuser(user,w)):
data = createsporttracksworkoutdata(w)