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

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 

5 

6from website.forms.LoginForm import LoginForm 

7from website.models import Author, User 

8 

9 

10def login_user(request): 

11 context = None 

12 email_not_found = False 

13 

14 remember = request.POST.get("remember", False) 

15 user_to_remember = request.POST.get("nome", False) 

16 nome = None 

17 

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 

27 

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.") 

42 

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 

58 

59 else: 

60 messages.error(request, "Preencha o formulário corretamente.") 

61 else: 

62 form = LoginForm() 

63 

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 } 

70 

71 if email_not_found: 

72 context["email_not_found"] = email_not_found 

73 

74 return render(request, "login/login.html", context=context, status=200)