[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

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