From b3079834c1bcce10648e1c6d09f9594c9bb80b0e Mon Sep 17 00:00:00 2001 From: jebus Date: Fri, 19 Sep 2025 01:17:03 +1200 Subject: [PATCH] [Fix] Registering Issue (#125) Co-authored-by: Tim Lorsbach Reviewed-on: https://git.envipath.com/enviPath/enviPy/pulls/125 --- envipath/settings.py | 1 + epdb/logic.py | 2 +- epdb/urls.py | 1 + epdb/views.py | 125 ++++++++++++++++++--------------- templates/static/login.html | 23 +++--- templates/static/register.html | 65 +++++++++++++++++ 6 files changed, 152 insertions(+), 65 deletions(-) create mode 100644 templates/static/register.html diff --git a/envipath/settings.py b/envipath/settings.py index af75b626..82adba6f 100644 --- a/envipath/settings.py +++ b/envipath/settings.py @@ -348,6 +348,7 @@ FLAGS = { # path of the URL are checked via "startswith" # -> /password_reset/done is covered as well LOGIN_EXEMPT_URLS = [ + '/register', '/api/legacy/', '/o/token/', '/o/userinfo/', diff --git a/epdb/logic.py b/epdb/logic.py index 2c51637c..e025de23 100644 --- a/epdb/logic.py +++ b/epdb/logic.py @@ -164,7 +164,7 @@ class UserManager(object): if 'uuid' in kwargs: extra_fields['uuid'] = kwargs['uuid'] - u = get_user_model().objects.create_user(username, email, password, **kwargs) + u = get_user_model().objects.create_user(username, email, password, **extra_fields) # Create package package_name = f"{u.username}{'’' if u.username[-1] in 'sxzß' else 's'} Package" diff --git a/epdb/urls.py b/epdb/urls.py index a73779f2..4a2d5ddd 100644 --- a/epdb/urls.py +++ b/epdb/urls.py @@ -12,6 +12,7 @@ urlpatterns = [ # Login re_path(r'^login', v.login, name='login'), re_path(r'^logout', v.logout, name='logout'), + re_path(r'^register', v.register, name='register'), # Built In views path('password_reset/', auth_views.PasswordResetView.as_view( diff --git a/epdb/views.py b/epdb/views.py index 8f56ef39..f56eb769 100644 --- a/epdb/views.py +++ b/epdb/views.py @@ -51,71 +51,44 @@ def login(request): return render(request, 'static/login.html', context) elif request.method == 'POST': - is_login = bool(request.POST.get('login', False)) - is_register = bool(request.POST.get('register', False)) + from django.contrib.auth import authenticate + from django.contrib.auth import login - if is_login: - from django.contrib.auth import authenticate - from django.contrib.auth import login + username = request.POST.get('username') + password = request.POST.get('password') - username = request.POST.get('username') - password = request.POST.get('password') + # Get email for username and check if the account is active + try: + temp_user = get_user_model().objects.get(username=username) - # Get email for username and check if the account is active - try: - temp_user = get_user_model().objects.get(username=username) - - if not temp_user.is_active: - context['message'] = "User account is not activated yet!" - return render(request, 'static/login.html', context) - - email = temp_user.email - except get_user_model().DoesNotExist: - context['message'] = "Login failed!" - return render(request, 'static/login.html', context) - try: - user = authenticate(username=email, password=password) - except Exception as e: - context['message'] = "Login failed!" + if not temp_user.is_active: + context['message'] = "User account is not activated yet!" return render(request, 'static/login.html', context) - if user is not None: - login(request, user) - - if next := request.POST.get('next'): - return redirect(next) - - return redirect(s.SERVER_URL) - else: - context['message'] = "Login failed!" - return render(request, 'static/login.html', context) - - elif is_register: - username = request.POST.get('username') - email = request.POST.get('email') - password = request.POST.get('password', '').strip() - rpassword = request.POST.get('rpassword', '').strip() - - if password != rpassword or password == '': - context['message'] = "Registration failed, provided passwords differ!" - return render(request, 'static/login.html', context) - - try: - u = UserManager.create_user(username, email, password) - except Exception: - context['message'] = "Registration failed! Couldn't create User Account." - return render(request, 'static/login.html', context) - - if s.ADMIN_APPROVAL_REQUIRED: - context['message'] = "Your account has been created! An admin will activate it soon!" - else: - context['message'] = "Account has been created! You'll receive a mail to activate your account shortly." + email = temp_user.email + except get_user_model().DoesNotExist: + context['message'] = "Login failed!" return render(request, 'static/login.html', context) + try: + user = authenticate(username=email, password=password) + except Exception as e: + context['message'] = "Login failed!" + return render(request, 'static/login.html', context) + + if user is not None: + login(request, user) + + if next := request.POST.get('next'): + return redirect(next) + + return redirect(s.SERVER_URL) else: - return HttpResponseBadRequest() + context['message'] = "Login failed!" + return render(request, 'static/login.html', context) else: return HttpResponseNotAllowed(['GET', 'POST']) + def logout(request): if request.method == 'POST': is_logout = bool(request.POST.get('logout', False)) @@ -128,6 +101,48 @@ def logout(request): return HttpResponseBadRequest() +def register(request): + current_user = _anonymous_or_real(request) + context = get_base_context(request) + + if request.method == 'GET': + context['title'] = 'enviPath' + context['next'] = request.GET.get('next', '') + return render(request, 'static/register.html', context) + elif request.method == 'POST': + context['title'] = 'enviPath' + if next := request.POST.get('next'): + context['next'] = next + + username = request.POST.get('username', '').strip() + email = request.POST.get('email', '').strip() + password = request.POST.get('password', '').strip() + rpassword = request.POST.get('rpassword', '').strip() + + if not (username and email and password): + context["message"] = "Invalid username/email/password" + return render(request, 'static/register.html', context) + + if password != rpassword or password == '': + context['message'] = "Registration failed, provided passwords differ!" + return render(request, 'static/register.html', context) + + try: + u = UserManager.create_user(username, email, password) + except Exception: + context['message'] = "Registration failed! Couldn't create User Account." + return render(request, 'static/register.html', context) + + if s.ADMIN_APPROVAL_REQUIRED: + context['success_message'] = "Your account has been created! An admin will activate it soon!" + else: + context['success_message'] = "Account has been created! You'll receive a mail to activate your account shortly." + + return render(request, 'static/login.html', context) + else: + return HttpResponseNotAllowed(['GET', 'POST']) + + def editable(request, user): if user.is_superuser: diff --git a/templates/static/login.html b/templates/static/login.html index 2038c932..2b728306 100644 --- a/templates/static/login.html +++ b/templates/static/login.html @@ -5,6 +5,10 @@ + {% elif success_message %} + {% else %} diff --git a/templates/static/register.html b/templates/static/register.html new file mode 100644 index 00000000..fa2c042d --- /dev/null +++ b/templates/static/register.html @@ -0,0 +1,65 @@ +{% extends "static/static_base.html" %} + +{% block content %} + {% if message %} + + {% else %} + + {% endif %} + +{% endblock %}