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/tests/testdata/testdata.tcx.gz b/rowers/tests/testdata/testdata.tcx.gz index 9458f4e2..b40a0d12 100644 Binary files a/rowers/tests/testdata/testdata.tcx.gz and b/rowers/tests/testdata/testdata.tcx.gz differ diff --git a/rowers/views/userviews.py b/rowers/views/userviews.py index 300a8f78..f1015de2 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): @@ -461,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', @@ -510,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: @@ -518,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)