rp3 auth working
This commit is contained in:
@@ -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()
|
||||||
|
|||||||
@@ -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 %}
|
||||||
|
|||||||
@@ -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'),
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
BIN
static/img/logo-rp3-full-black.png
Normal file
BIN
static/img/logo-rp3-full-black.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 14 KiB |
Reference in New Issue
Block a user