forked from enviPath/enviPy
[Fix] Login via email, prevent Usernames with certain chars
This commit is contained in:
@ -6,7 +6,9 @@ from typing import Any, Dict, List
|
|||||||
import nh3
|
import nh3
|
||||||
from django.conf import settings as s
|
from django.conf import settings as s
|
||||||
from django.contrib.auth import get_user_model
|
from django.contrib.auth import get_user_model
|
||||||
from django.core.exceptions import BadRequest, PermissionDenied
|
from django.contrib.auth.validators import UnicodeUsernameValidator
|
||||||
|
from django.core.exceptions import BadRequest, PermissionDenied, ValidationError
|
||||||
|
from django.core.validators import validate_email
|
||||||
from django.http import HttpResponse, HttpResponseBadRequest, HttpResponseNotAllowed, JsonResponse
|
from django.http import HttpResponse, HttpResponseBadRequest, HttpResponseNotAllowed, JsonResponse
|
||||||
from django.shortcuts import get_object_or_404, redirect, render
|
from django.shortcuts import get_object_or_404, redirect, render
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
@ -160,14 +162,27 @@ def login(request):
|
|||||||
|
|
||||||
# Get email for username and check if the account is active
|
# Get email for username and check if the account is active
|
||||||
try:
|
try:
|
||||||
temp_user = get_user_model().objects.get(username=username)
|
# Try username and if it fails check if username is a valid email adress and we'll find a user
|
||||||
|
try:
|
||||||
|
temp_user = get_user_model().objects.get(username=username)
|
||||||
|
except get_user_model().DoesNotExist as e:
|
||||||
|
# validate_email returns None if input is valid -> check for None
|
||||||
|
# Otherwise a ValidationError is raised
|
||||||
|
if validate_email(username) is None:
|
||||||
|
temp_user = get_user_model().objects.get(email=username)
|
||||||
|
else:
|
||||||
|
raise e
|
||||||
|
|
||||||
if not temp_user.is_active:
|
if not temp_user.is_active:
|
||||||
context["message"] = "User account is not activated yet!"
|
context["message"] = "User account is not activated yet!"
|
||||||
return render(request, "static/login.html", context)
|
return render(request, "static/login.html", context)
|
||||||
|
|
||||||
email = temp_user.email
|
email = temp_user.email
|
||||||
except get_user_model().DoesNotExist:
|
except (get_user_model().DoesNotExist, ValidationError):
|
||||||
|
context["message"] = "Login failed!"
|
||||||
|
return render(request, "static/login.html", context)
|
||||||
|
except Exception as e:
|
||||||
|
logger.info(f"Uncaught exception while trying to login: {e}")
|
||||||
context["message"] = "Login failed!"
|
context["message"] = "Login failed!"
|
||||||
return render(request, "static/login.html", context)
|
return render(request, "static/login.html", context)
|
||||||
|
|
||||||
@ -230,6 +245,13 @@ def register(request):
|
|||||||
context["message"] = "Invalid username/email/password"
|
context["message"] = "Invalid username/email/password"
|
||||||
return render(request, "static/login.html", context)
|
return render(request, "static/login.html", context)
|
||||||
|
|
||||||
|
if UnicodeUsernameValidator(username) is not None:
|
||||||
|
context["message"] = (
|
||||||
|
"Enter a valid username. This value may contain only letters, "
|
||||||
|
"numbers, and @/./+/-/_ characters."
|
||||||
|
)
|
||||||
|
return render(request, "static/login.html", context)
|
||||||
|
|
||||||
if password != rpassword or password == "":
|
if password != rpassword or password == "":
|
||||||
context["message"] = "Registration failed, provided passwords differ!"
|
context["message"] = "Registration failed, provided passwords differ!"
|
||||||
return render(request, "static/login.html", context)
|
return render(request, "static/login.html", context)
|
||||||
|
|||||||
@ -82,13 +82,13 @@
|
|||||||
|
|
||||||
<div class="form-control">
|
<div class="form-control">
|
||||||
<label class="label" for="username">
|
<label class="label" for="username">
|
||||||
<span class="label-text">Username</span>
|
<span class="label-text">Account</span>
|
||||||
</label>
|
</label>
|
||||||
<input
|
<input
|
||||||
type="text"
|
type="text"
|
||||||
id="username"
|
id="username"
|
||||||
name="username"
|
name="username"
|
||||||
placeholder="username"
|
placeholder="Username or Email"
|
||||||
class="input input-bordered w-full"
|
class="input input-bordered w-full"
|
||||||
required
|
required
|
||||||
autocomplete="username"
|
autocomplete="username"
|
||||||
@ -164,6 +164,8 @@
|
|||||||
name="username"
|
name="username"
|
||||||
placeholder="username"
|
placeholder="username"
|
||||||
class="input input-bordered w-full"
|
class="input input-bordered w-full"
|
||||||
|
pattern="^[A-Za-z0-9@.+_\-]{3,150}$"
|
||||||
|
title="Only letters, numbers, and @ . + - _ are allowed"
|
||||||
required
|
required
|
||||||
autocomplete="username"
|
autocomplete="username"
|
||||||
/>
|
/>
|
||||||
|
|||||||
Reference in New Issue
Block a user