[Fix] Registering Issue (#125)

Co-authored-by: Tim Lorsbach <tim@lorsba.ch>
Reviewed-on: enviPath/enviPy#125
This commit is contained in:
2025-09-19 01:17:03 +12:00
parent f03ade0e94
commit b3079834c1
6 changed files with 152 additions and 65 deletions

View File

@ -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/',

View File

@ -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"

View File

@ -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(

View File

@ -51,10 +51,6 @@ 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))
if is_login:
from django.contrib.auth import authenticate
from django.contrib.auth import login
@ -89,33 +85,10 @@ def login(request):
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."
return render(request, 'static/login.html', context)
else:
return HttpResponseBadRequest()
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:

View File

@ -5,6 +5,10 @@
<div class="alert alert-danger" role="alert">
{{ message }}
</div>
{% elif success_message %}
<div class="alert alert-success" role="alert">
{{ success_message }}
</div>
{% else %}
<div class="alert alert-success" role="alert">
Kia ora! We are running our closed beta tests at the moment. It would be great to get your help as tester,
@ -22,7 +26,6 @@
<form class="form-horizontal" method="post" action="{% url 'login' %}">
{% csrf_token %}
<fieldset>
<input type="hidden" name="login" id="login" value="true"/>
<div class="control-group">
<label class="control-label" for="username">Username</label>
<div class="controls">
@ -38,15 +41,17 @@
<a href="{% url 'password_reset' %}">Forgot your password?</a>
</div>
</div>
</fieldset>
<div class="control-group">
<label class="control-label" for="signin"></label>
<div class="controls">
<button id="signin" name="signin" class="btn btn-success">Sign In
<button id="signin" name="signin" class="btn btn-success pull-right">Sign In
</button>
<a class="btn btn-primary" href="{% url 'register' %}">Create an Account</a>
</div>
</div>
<input type="hidden" name="next" value="{{ next }}"/>
</fieldset>
</form>
</div>
</div>

View File

@ -0,0 +1,65 @@
{% extends "static/static_base.html" %}
{% block content %}
{% if message %}
<div class="alert alert-danger" role="alert">
{{ message }}
</div>
{% else %}
<div class="alert alert-success" role="alert">
Kia ora! We are running our closed beta tests at the moment. It would be great to get your help as tester,
you
can apply to become tester by registering for this page, just hit the button below. More information on the
beta
test is available in our <a href="https://community.envipath.org/t/apply-to-join-our-closed-beta/95">
community
form</a>
</div>
{% endif %}
<div class="modal-dialog" style="margin:30px auto; z-index:9999;">
<div class="modal-content">
<div class="modal-body">
<form class="form-horizontal" method="post" action="{% url 'register' %}">
{% csrf_token %}
<fieldset>
<div class="control-group">
<label class="control-label" for="username">Username</label>
<div class="controls">
<input required id="username" name="username" type="text"
class="form-control" placeholder="username" autocomplete="username">
</div>
<label class="control-label" for="email">Email</label>
<div class="controls">
<input required id="email" name="email" type="text"
class="form-control" placeholder="email" autocomplete="email">
</div>
<label class="control-label" for="passwordinput">Password:</label>
<div class="controls">
<input required id="passwordinput" name="password" class="form-control"
type="password" placeholder="********" autocomplete="current-password">
</div>
<label class="control-label" for="passwordinput2">Password:</label>
<div class="controls">
<input required id="passwordinput2" name="rpassword" class="form-control"
type="password" placeholder="********" autocomplete="current-password">
</div>
<div class="form-group text-center" style="margin-top:15px;">
<a href="{% url 'password_reset' %}">Forgot your password?</a>
</div>
</div>
<div class="control-group">
<label class="control-label" for="signin"></label>
<div class="controls">
<button id="signin" name="signin" class="btn btn-success pull-right">Sign Up
</button>
<a class="btn btn-primary" href="{% url 'login' %}">Already have an Account?</a>
</div>
</div>
<input type="hidden" name="next" value="{{ next }}"/>
</fieldset>
</form>
</div>
</div>
</div>
{% endblock %}