diff --git a/rowers/rp3stuff.py b/rowers/rp3stuff.py index 233e059d..02569b48 100644 --- a/rowers/rp3stuff.py +++ b/rowers/rp3stuff.py @@ -16,8 +16,8 @@ from io import BytesIO from rowsandall_app.settings import ( C2_CLIENT_ID, C2_REDIRECT_URI, C2_CLIENT_SECRET, STRAVA_CLIENT_ID, STRAVA_REDIRECT_URI, STRAVA_CLIENT_SECRET, - rp3_CLIENT_ID, rp3_CLIENT_SECRET, - rp3_REDIRECT_URI,rp3_CLIENT_KEY, + RP3_CLIENT_ID, RP3_CLIENT_SECRET, + RP3_REDIRECT_URI,RP3_CLIENT_KEY, 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 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 = { - "client_id":rp3_CLIENT_KEY, + "client_id":RP3_CLIENT_KEY, "grant_type": "authorization_code", "code": code, - "redirect_uri":rp3_REDIRECT_URI, - "client_secret": rp3_CLIENT_SECRET, + "redirect_uri":RP3_REDIRECT_URI, + "client_secret": RP3_CLIENT_SECRET, } headers = { 'Content-Type': 'application/x-www-form-urlencoded', } response = requests.post( - "https://oauth.trainingpeaks.com/oauth/token", + "https://rp3rowing-app.com/oauth/token", data=post_data,verify=False, ) + print(response.json()) + try: token_json = response.json() diff --git a/rowers/templates/rower_exportsettings.html b/rowers/templates/rower_exportsettings.html index 25bfe659..81179cb4 100644 --- a/rowers/templates/rower_exportsettings.html +++ b/rowers/templates/rower_exportsettings.html @@ -30,7 +30,10 @@ Strava, {% endif %} {% if rower.runkeepertoken is not None and rower.runkeepertoken != '' %} - Runkeeper. + Runkeeper, + {% endif %} + {% if rower.rp3token is not None and rower.rp3token != '' %} + RP3 {% endif %}

@@ -77,7 +80,9 @@ alt="connect with Polar" width="130">

connect with Garmin

+ alt="connect with Garmin" width="130">

+

connect with RP3

{% endblock %} diff --git a/rowers/urls.py b/rowers/urls.py index 3314730a..d33b5393 100644 --- a/rowers/urls.py +++ b/rowers/urls.py @@ -649,6 +649,7 @@ urlpatterns = [ 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/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/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'), diff --git a/rowers/views/importviews.py b/rowers/views/importviews.py index e7fce5cd..de8994f8 100644 --- a/rowers/views/importviews.py +++ b/rowers/views/importviews.py @@ -497,6 +497,21 @@ def rower_underarmour_authorize(request): 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 @login_required() def rower_tp_authorize(request): @@ -874,7 +889,7 @@ def rower_process_rp3callback(request): url = reverse('rower_exportsettings_view') return HttpResponseRedirect(url) - res = tpstuff.get_token(code) + res = rp3stuff.get_token(code) access_token = res[0] expires_in = res[1] @@ -882,12 +897,17 @@ def rower_process_rp3callback(request): expirydatetime = timezone.now()+datetime.timedelta(seconds=expires_in) r = getrower(request.user) - r.tptoken = access_token - r.tptokenexpirydate = expirydatetime - r.tprefreshtoken = refresh_token + r.rp3token = access_token + r.rp3tokenexpirydate = expirydatetime + r.rp3refreshtoken = refresh_token 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 @login_required() def rower_process_tpcallback(request): diff --git a/rowers/views/statements.py b/rowers/views/statements.py index 409dab68..f6eb7cdb 100644 --- a/rowers/views/statements.py +++ b/rowers/views/statements.py @@ -167,6 +167,7 @@ import rowers.underarmourstuff as underarmourstuff from rowers.underarmourstuff import underarmour_open import rowers.tpstuff as tpstuff import rowers.runkeeperstuff as runkeeperstuff +import rowers.rp3stuff as rp3stuff import rowers.ownapistuff as ownapistuff from rowers.ownapistuff import TEST_CLIENT_ID, TEST_CLIENT_SECRET, TEST_REDIRECT_URI from rowsandall_app.settings import ( @@ -179,6 +180,7 @@ from rowsandall_app.settings import ( UNDERARMOUR_CLIENT_SECRET,UNDERARMOUR_CLIENT_KEY, RUNKEEPER_CLIENT_ID,RUNKEEPER_REDIRECT_URI,RUNKEEPER_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, PAYMENT_PROCESSING_ON, RECAPTCHA_SITE_KEY, RECAPTCHA_SITE_SECRET diff --git a/static/img/logo-rp3-full-black.png b/static/img/logo-rp3-full-black.png new file mode 100644 index 00000000..389d083c Binary files /dev/null and b/static/img/logo-rp3-full-black.png differ