From 7332862c3a15d97afa1b5b30abd5cbfbf1b2dea7 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Tue, 9 Sep 2025 18:14:13 +0200 Subject: [PATCH 1/2] atomatic sign on for deep water users --- rowers/templates/loadnextweek.html | 4 +++ rowers/views/userviews.py | 48 ++++++++++++++++-------------- 2 files changed, 29 insertions(+), 23 deletions(-) diff --git a/rowers/templates/loadnextweek.html b/rowers/templates/loadnextweek.html index b7eb16bb..99ca14b1 100644 --- a/rowers/templates/loadnextweek.html +++ b/rowers/templates/loadnextweek.html @@ -8,6 +8,7 @@

Load next week

+

{{ form.as_table }} @@ -15,6 +16,9 @@ {% csrf_token %} +

+

+ Link to plan {% endblock %} diff --git a/rowers/views/userviews.py b/rowers/views/userviews.py index 300a8f78..f4801527 100644 --- a/rowers/views/userviews.py +++ b/rowers/views/userviews.py @@ -1,38 +1,40 @@ from rowers.views.statements import * from rowers.rower_rules import user_is_not_basic, user_is_coachee from rowers.tokens import create_token -from rowers.forms import DeepWaterLoginForm +from rowers.forms import DeepWaterLoginForm +from django.contrib.auth import get_user import jwt def deepwatertoken_login(request): - if request.method == 'POST': + # Check if user is already authenticated + if request.user.is_authenticated: + user = request.user + elif request.method == 'POST': username = request.POST.get('username', '') password = request.POST.get('password', '') user = authenticate(request, username=username, password=password) - if user is not None: - login(request, user) - payload = { - 'user_id': user.id, - 'username': user.username, - 'email': user.email, - 'exp': timezone.now() + datetime.timedelta(days=1), # Token valid for 1 day - 'iat': timezone.now(), - } + else: + redirect_url = request.GET.get('redirect', settings.DEEP_WATER_URL) + return render(request, "deepwaterlogin.html") - token = jwt.encode(payload, settings.DEEP_WATER_SECRET_KEY, algorithm='HS256') + if user is None: + messages.error(request, 'Invalid credentials') + return render(request, 'deepwaterlogin.html') - # Debug: Print the token - print(f"Generated token: {token}") - print(f"Token length: {len(token)}") - print(f"Token parts: {token.split('.')}") - - redirect_url = request.GET.get('redirect', settings.DEEP_WATER_URL) - return HttpResponseRedirect(f"{redirect_url}?token={token}") - else: - messages.error(request, 'Invalid credentials') - return render(request, 'deepwaterlogin.html') + # Generate token (same as before) + payload = { + 'user_id': user.id, + 'username': user.username, + 'email': user.email, + 'exp': timezone.now() + datetime.timedelta(days=1), + 'iat': timezone.now(), + } + token = jwt.encode(payload, settings.DEEP_WATER_SECRET_KEY, algorithm='HS256') + + # Redirect with token redirect_url = request.GET.get('redirect', settings.DEEP_WATER_URL) - return render(request, "deepwaterlogin.html") + return HttpResponseRedirect(f"{redirect_url}?token={token}") + @login_required() def get_deepwater_token(request): From 3d9071fee1430d5f3844c40a246ae10dd4baad16 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Sat, 13 Sep 2025 11:58:33 +0200 Subject: [PATCH 2/2] fixing auto export settings --- rowers/tests/testdata/testdata.tcx.gz | Bin 3989 -> 3989 bytes rowers/views/userviews.py | 24 +++--------------------- 2 files changed, 3 insertions(+), 21 deletions(-) diff --git a/rowers/tests/testdata/testdata.tcx.gz b/rowers/tests/testdata/testdata.tcx.gz index 9458f4e24543d6b78acbfb7ec56cd7f54b8a092c..b40a0d1218673194397206775c0ddb9df7b0b9d3 100644 GIT binary patch delta 16 XcmbO#KUJPxzMF$X)8Xhw_C9_9Cj|tp delta 16 XcmbO#KUJPxzMF$1<^H~n?0x(IEI9>$ diff --git a/rowers/views/userviews.py b/rowers/views/userviews.py index f4801527..f1015de2 100644 --- a/rowers/views/userviews.py +++ b/rowers/views/userviews.py @@ -463,7 +463,6 @@ def rower_favoritecharts_view(request, userid=0): @login_required() -@permission_required('rower.is_coach', fn=get_user_by_userid, raise_exception=True) def rower_exportsettings_view(request, userid=0): attrtokens = { 'polar_auto_import': 'polartoken', @@ -512,7 +511,6 @@ def rower_exportsettings_view(request, userid=0): if form.is_valid(): cd = form.cleaned_data for attr, value in cd.items(): - doset = True try: tokenname = attrtokens[attr] if (getattr(r, tokenname) == '' or getattr(r, tokenname) is None) and value: @@ -520,27 +518,11 @@ def rower_exportsettings_view(request, userid=0): request, 'Set '+attr+' but it will not be effective until you create a connection.' ) except KeyError: - doset = True - if not user_is_not_basic(r.user): # pragma: no cover - if not user_is_coachee(r.user): - doset = False - if not doset: # pragma: no cover - before = getattr(r, attr) - if before == value: - doset = True - if doset: - setattr(r, attr, value) - else: # pragma: no cover - if user_is_not_basic(r.user): - messages.error( - request, 'Could not set '+attr+'. You need to create the connection first.') - + pass + setattr(r, attr, value) r.save() - if doset: - messages.info(request, 'Settings saved') - else: # pragma: no cover - messages.error(request, 'Settings not saved: Need a Pro account') + messages.info(request, 'Settings saved') else: form = RowerExportForm(instance=r)