Coverage for website/views/LoginView.py: 82%
50 statements
« prev ^ index » next coverage.py v7.5.0, created at 2025-09-13 15:29 -0300
« prev ^ index » next coverage.py v7.5.0, created at 2025-09-13 15:29 -0300
1from django.contrib import messages
2from django.contrib.auth import authenticate, login
3from django.contrib.auth.hashers import check_password
4from django.shortcuts import redirect, render
6from website.forms.LoginForm import LoginForm
7from website.models import Author, User
10def login_user(request):
11 context = None
12 email_not_found = False
14 remember = request.POST.get("remember", False)
15 user_to_remember = request.POST.get("nome", False)
16 nome = None
18 # Caso o usuário indique um nome para remember
19 if remember and user_to_remember:
20 try:
21 # Tentará encontrar o usuário pelo nome
22 user_to_remember = user_to_remember.strip()
23 nome = Author.objects.filter(nome__contains=user_to_remember)
24 remember = False
25 except Exception:
26 nome = user_to_remember
28 if request.POST:
29 form = LoginForm(request.POST)
30 if form.is_valid():
31 email = request.POST.get("email")
32 password = request.POST.get("password")
33 try:
34 user_login = User.objects.get(email=email)
35 pass_user = check_password(password, user_login.password)
36 user = authenticate(email=email, password=password)
37 if user is not None and pass_user:
38 login(request, user)
39 return redirect("/")
40 else:
41 messages.error(request, "Senha inválida.")
43 except Exception:
44 # Be defensive: if email is malformed or missing '@',
45 # fallback to a simple message
46 try:
47 cut_at_email = email.index("@")
48 email_cutted = email[cut_at_email : cut_at_email + 2]
49 if email.endswith("br"):
50 masked_email = f"email {email[:3]}___{email_cutted}__.com.br"
51 else:
52 masked_email = f"email {email[:3]}___{email_cutted}__.com"
53 masked_email += " não encontrado."
54 except Exception:
55 masked_email = "Email não encontrado."
56 messages.error(request, masked_email)
57 email_not_found = True
59 else:
60 messages.error(request, "Preencha o formulário corretamente.")
61 else:
62 form = LoginForm()
64 context = {
65 "form": form,
66 "usuario": request.GET.get("usuario", None) if nome is None else nome,
67 "remember": remember,
68 "nome": nome,
69 }
71 if email_not_found:
72 context["email_not_found"] = email_not_found
74 return render(request, "login/login.html", context=context, status=200)