Private
Public Access
1
0

rp3 auth working

This commit is contained in:
Sander Roosendaal
2021-01-26 20:26:51 +01:00
parent 4992405e5e
commit 6cedb7b5db
6 changed files with 43 additions and 13 deletions

View File

@@ -16,8 +16,8 @@ from io import BytesIO
from rowsandall_app.settings import ( from rowsandall_app.settings import (
C2_CLIENT_ID, C2_REDIRECT_URI, C2_CLIENT_SECRET, C2_CLIENT_ID, C2_REDIRECT_URI, C2_CLIENT_SECRET,
STRAVA_CLIENT_ID, STRAVA_REDIRECT_URI, STRAVA_CLIENT_SECRET, STRAVA_CLIENT_ID, STRAVA_REDIRECT_URI, STRAVA_CLIENT_SECRET,
rp3_CLIENT_ID, rp3_CLIENT_SECRET, RP3_CLIENT_ID, RP3_CLIENT_SECRET,
rp3_REDIRECT_URI,rp3_CLIENT_KEY, RP3_REDIRECT_URI,RP3_CLIENT_KEY,
RP3_CLIENT_ID, RP3_CLIENT_KEY, RP3_REDIRECT_URI, RP3_CLIENT_SECRET RP3_CLIENT_ID, RP3_CLIENT_KEY, RP3_REDIRECT_URI, RP3_CLIENT_SECRET
) )
@@ -56,23 +56,25 @@ def do_refresh_token(refreshtoken):
# Exchange access code for long-lived access token # Exchange access code for long-lived access token
def get_token(code): def get_token(code):
client_auth = requests.auth.HTTPBasicAuth(rp3_CLIENT_KEY, rp3_CLIENT_SECRET) client_auth = requests.auth.HTTPBasicAuth(RP3_CLIENT_KEY, RP3_CLIENT_SECRET)
post_data = { post_data = {
"client_id":rp3_CLIENT_KEY, "client_id":RP3_CLIENT_KEY,
"grant_type": "authorization_code", "grant_type": "authorization_code",
"code": code, "code": code,
"redirect_uri":rp3_REDIRECT_URI, "redirect_uri":RP3_REDIRECT_URI,
"client_secret": rp3_CLIENT_SECRET, "client_secret": RP3_CLIENT_SECRET,
} }
headers = { headers = {
'Content-Type': 'application/x-www-form-urlencoded', 'Content-Type': 'application/x-www-form-urlencoded',
} }
response = requests.post( response = requests.post(
"https://oauth.trainingpeaks.com/oauth/token", "https://rp3rowing-app.com/oauth/token",
data=post_data,verify=False, data=post_data,verify=False,
) )
print(response.json())
try: try:
token_json = response.json() token_json = response.json()

View File

@@ -30,7 +30,10 @@
Strava, Strava,
{% endif %} {% endif %}
{% if rower.runkeepertoken is not None and rower.runkeepertoken != '' %} {% if rower.runkeepertoken is not None and rower.runkeepertoken != '' %}
Runkeeper. Runkeeper,
{% endif %}
{% if rower.rp3token is not None and rower.rp3token != '' %}
RP3
{% endif %} {% endif %}
</p> </p>
@@ -77,7 +80,9 @@
alt="connect with Polar" width="130"></a></p> alt="connect with Polar" width="130"></a></p>
<p><a href="/rowers/me/garminauthorize"><img src="/static/img/garmin_badge_130.png" <p><a href="/rowers/me/garminauthorize"><img src="/static/img/garmin_badge_130.png"
alt="connect with Garmin" with="130"></a></p> alt="connect with Garmin" width="130"></a></p>
<p><a href="/rowers/me/rp3authorize"><img src="/static/img/logo-rp3-full-black.png"
alt="connect with RP3" width="130"></a></p>
{% endblock %} {% endblock %}

View File

@@ -649,6 +649,7 @@ urlpatterns = [
re_path(r'^me/sporttracksauthorize/$',views.rower_sporttracks_authorize,name='rower_sporttracks_authorize'), re_path(r'^me/sporttracksauthorize/$',views.rower_sporttracks_authorize,name='rower_sporttracks_authorize'),
re_path(r'^me/underarmourauthorize/$',views.rower_underarmour_authorize,name='rower_underarmour_authorize'), re_path(r'^me/underarmourauthorize/$',views.rower_underarmour_authorize,name='rower_underarmour_authorize'),
re_path(r'^me/tpauthorize/$',views.rower_tp_authorize,name='rower_tp_authorize'), re_path(r'^me/tpauthorize/$',views.rower_tp_authorize,name='rower_tp_authorize'),
re_path(r'^me/rp3authorize/$',views.rower_rp3_authorize,name='rower_rp3_authorize'),
re_path(r'^me/runkeeperauthorize/$',views.rower_runkeeper_authorize,name='rower_runkeeper_authorize'), re_path(r'^me/runkeeperauthorize/$',views.rower_runkeeper_authorize,name='rower_runkeeper_authorize'),
re_path(r'^me/sporttracksrefresh/$',views.rower_sporttracks_token_refresh,name='rower_sporttracks_token_refresh'), re_path(r'^me/sporttracksrefresh/$',views.rower_sporttracks_token_refresh,name='rower_sporttracks_token_refresh'),
re_path(r'^me/underarmourrefresh/$',views.rower_underarmour_token_refresh,name='rower_underarmoud_token_refresh'), re_path(r'^me/underarmourrefresh/$',views.rower_underarmour_token_refresh,name='rower_underarmoud_token_refresh'),

View File

@@ -497,6 +497,21 @@ def rower_underarmour_authorize(request):
return HttpResponseRedirect(url) return HttpResponseRedirect(url)
# Underarmour Authorization
@login_required()
def rower_rp3_authorize(request):
# Generate a random string for the state parameter
# Save it for use later to prevent xsrf attacks
state = str(uuid4())
params = {"client_id": RP3_CLIENT_KEY,
"response_type": "code",
"redirect_uri": RP3_REDIRECT_URI,
}
url = "https://rp3rowing-app.com/oauth/authorize/?" +urllib.parse.urlencode(params)
return HttpResponseRedirect(url)
# Underarmour Authorization # Underarmour Authorization
@login_required() @login_required()
def rower_tp_authorize(request): def rower_tp_authorize(request):
@@ -874,7 +889,7 @@ def rower_process_rp3callback(request):
url = reverse('rower_exportsettings_view') url = reverse('rower_exportsettings_view')
return HttpResponseRedirect(url) return HttpResponseRedirect(url)
res = tpstuff.get_token(code) res = rp3stuff.get_token(code)
access_token = res[0] access_token = res[0]
expires_in = res[1] expires_in = res[1]
@@ -882,12 +897,17 @@ def rower_process_rp3callback(request):
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.tptoken = access_token r.rp3token = access_token
r.tptokenexpirydate = expirydatetime r.rp3tokenexpirydate = expirydatetime
r.tprefreshtoken = refresh_token r.rp3refreshtoken = refresh_token
r.save() r.save()
successmessage = "Tokens stored. Good to go. Please check your import/export settings"
messages.info(request,successmessage)
url = reverse('rower_exportsettings_view')
return HttpResponseRedirect(url)
# Process TrainingPeaks callback # Process TrainingPeaks callback
@login_required() @login_required()
def rower_process_tpcallback(request): def rower_process_tpcallback(request):

View File

@@ -167,6 +167,7 @@ import rowers.underarmourstuff as underarmourstuff
from rowers.underarmourstuff import underarmour_open from rowers.underarmourstuff import underarmour_open
import rowers.tpstuff as tpstuff import rowers.tpstuff as tpstuff
import rowers.runkeeperstuff as runkeeperstuff import rowers.runkeeperstuff as runkeeperstuff
import rowers.rp3stuff as rp3stuff
import rowers.ownapistuff as ownapistuff import rowers.ownapistuff as ownapistuff
from rowers.ownapistuff import TEST_CLIENT_ID, TEST_CLIENT_SECRET, TEST_REDIRECT_URI from rowers.ownapistuff import TEST_CLIENT_ID, TEST_CLIENT_SECRET, TEST_REDIRECT_URI
from rowsandall_app.settings import ( from rowsandall_app.settings import (
@@ -179,6 +180,7 @@ from rowsandall_app.settings import (
UNDERARMOUR_CLIENT_SECRET,UNDERARMOUR_CLIENT_KEY, UNDERARMOUR_CLIENT_SECRET,UNDERARMOUR_CLIENT_KEY,
RUNKEEPER_CLIENT_ID,RUNKEEPER_REDIRECT_URI,RUNKEEPER_CLIENT_SECRET, RUNKEEPER_CLIENT_ID,RUNKEEPER_REDIRECT_URI,RUNKEEPER_CLIENT_SECRET,
TP_CLIENT_ID,TP_REDIRECT_URI,TP_CLIENT_KEY,TP_CLIENT_SECRET, TP_CLIENT_ID,TP_REDIRECT_URI,TP_CLIENT_KEY,TP_CLIENT_SECRET,
RP3_CLIENT_ID,RP3_REDIRECT_URI,RP3_CLIENT_KEY,RP3_CLIENT_SECRET,
BRAINTREE_MERCHANT_ID,BRAINTREE_PUBLIC_KEY,BRAINTREE_PRIVATE_KEY, BRAINTREE_MERCHANT_ID,BRAINTREE_PUBLIC_KEY,BRAINTREE_PRIVATE_KEY,
PAYMENT_PROCESSING_ON, PAYMENT_PROCESSING_ON,
RECAPTCHA_SITE_KEY, RECAPTCHA_SITE_SECRET RECAPTCHA_SITE_KEY, RECAPTCHA_SITE_SECRET

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB