Commit 1fa1cff5df72005fbc81eed701e39cc58fb30eeb

Authored by Jailson Dias
1 parent d3c77ab1

resolvendo bugs do tipo Problema na verificação do formato do e-mail

Showing 2 changed files with 36 additions and 23 deletions   Show diff stats
users/forms.py
1 1 # coding=utf-8
  2 +import re
2 3 from django import forms
3 4 from django.utils.translation import ugettext_lazy as _
4 5 from rolepermissions.shortcuts import assign_role
... ... @@ -19,6 +20,11 @@ class Validation(forms.ModelForm):
19 20  
20 21 try:
21 22 validate_email( email )
  23 + v_email = re.compile('[\w.%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}')
  24 + if v_email.fullmatch(email) is None:
  25 + self._errors['email'] = [_('You must insert an email address')]
  26 +
  27 + return ValueError
22 28 return email
23 29 except ValidationError:
24 30 self._errors['email'] = [_('You must insert an email address')]
... ... @@ -67,7 +73,7 @@ class RegisterUserForm(Validation):
67 73 model = User
68 74 fields = ['email', 'username', 'last_name', 'social_name', 'image', 'show_email', ]
69 75 widgets = {
70   - 'email': forms.TextInput(attrs = {'placeholder': _('Email') + ' *'}),
  76 + 'email': forms.EmailInput(attrs = {'placeholder': _('Email') + ' *'}),
71 77 'username': forms.TextInput(attrs = {'placeholder': _('Name') + ' *'}),
72 78 'last_name': forms.TextInput(attrs = {'placeholder': _('Last Name') + ' *'}),
73 79 'social_name': forms.TextInput(attrs = {'placeholder': _('Social Name')}),
... ... @@ -88,6 +94,7 @@ class ProfileForm(Validation):
88 94 model = User
89 95 fields = ['email', 'username', 'last_name', 'social_name', 'description', 'show_email', 'image']
90 96 widgets = {
  97 + 'email': forms.EmailInput,
91 98 'description': forms.Textarea,
92 99 'username': forms.TextInput(attrs = {'readonly': 'readonly'}),
93 100 'last_name': forms.TextInput(attrs = {'readonly': 'readonly'}),
... ... @@ -122,6 +129,7 @@ class UserForm(Validation):
122 129 model = User
123 130 fields = ['email', 'username', 'last_name', 'social_name', 'description', 'show_email', 'image', 'is_staff', 'is_active',]
124 131 widgets = {
  132 + 'email': forms.EmailInput,
125 133 'description': forms.Textarea,
126 134 'image': ResubmitFileWidget(attrs={'accept':'image/*'}),
127 135 }
... ... @@ -169,13 +177,18 @@ class ChangePassForm(Validation):
169 177 }
170 178  
171 179 class PassResetRequest(forms.Form):
172   - email = forms.EmailField(label = _('Email'), max_length = 254, widget = forms.TextInput(attrs = {'placeholder': _('Email') + ' *'}))
  180 + email = forms.EmailField(label = _('Email'), max_length = 254, widget = forms.EmailInput(attrs = {'placeholder': _('Email') + ' *'}))
173 181  
174 182 def clean_email(self):
175 183 email = self.cleaned_data.get('email', '')
176 184  
177 185 try:
178 186 validate_email( email )
  187 + v_email = re.compile('[\w.%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}')
  188 + if v_email.fullmatch(email) is None:
  189 + self._errors['email'] = [_('You must insert an email address')]
  190 +
  191 + return ValueError
179 192 return email
180 193 except ValidationError:
181 194 self._errors['email'] = [_('You must insert a valid email address')]
... ...
users/views.py
... ... @@ -47,7 +47,7 @@ class UsersListView(braces_mixins.LoginRequiredMixin, braces_mixins.StaffuserReq
47 47  
48 48 def get_queryset(self):
49 49 users = User.objects.all().order_by('social_name','username').exclude(email = self.request.user.email)
50   -
  50 +
51 51 return users
52 52  
53 53 def get_context_data (self, **kwargs):
... ... @@ -70,14 +70,14 @@ class SearchView(braces_mixins.LoginRequiredMixin, braces_mixins.StaffuserRequir
70 70  
71 71 if search == '':
72 72 return redirect(reverse_lazy('users:manage'))
73   -
  73 +
74 74 return super(SearchView, self).dispatch(request, *args, **kwargs)
75 75  
76 76 def get_queryset(self):
77 77 search = self.request.GET.get('search', '')
78 78  
79 79 users = User.objects.filter(Q(username__icontains = search) | Q(last_name__icontains = search) | Q(social_name__icontains = search) | Q(email__icontains = search)).distinct().order_by('social_name','username').exclude(email = self.request.user.email)
80   -
  80 +
81 81 return users
82 82  
83 83 def get_context_data (self, **kwargs):
... ... @@ -143,9 +143,9 @@ class UpdateView(braces_mixins.LoginRequiredMixin, braces_mixins.StaffuserRequir
143 143  
144 144 def get_form_kwargs(self):
145 145 kwargs = super(UpdateView, self).get_form_kwargs()
146   -
  146 +
147 147 kwargs.update({'is_edit': True})
148   -
  148 +
149 149 return kwargs
150 150  
151 151 def form_valid(self, form):
... ... @@ -235,7 +235,7 @@ class DeleteView(braces_mixins.LoginRequiredMixin, LogMixin, generic.DeleteView)
235 235 self.log_context['dependencies'] = False
236 236  
237 237 user.delete()
238   -
  238 +
239 239 messages.success(self.request, success_msg)
240 240  
241 241 redirect_url = redirect(success_url)
... ... @@ -275,10 +275,10 @@ class ChangePassView(LoginRequiredMixin, generic.UpdateView):
275 275  
276 276 def get_form_kwargs(self):
277 277 kwargs = super(ChangePassView, self).get_form_kwargs()
278   -
  278 +
279 279 kwargs.update({'user': self.request.user})
280 280 kwargs.update({'request': self.request})
281   -
  281 +
282 282 return kwargs
283 283  
284 284 def get_object(self):
... ... @@ -297,7 +297,7 @@ class ChangePassView(LoginRequiredMixin, generic.UpdateView):
297 297 context = super(ChangePassView, self).get_context_data(**kwargs)
298 298 context['title'] = _("Change Password")
299 299  
300   - return context
  300 + return context
301 301  
302 302 class Profile(LoginRequiredMixin, generic.DetailView):
303 303 login_url = reverse_lazy("users:login")
... ... @@ -333,7 +333,7 @@ class UpdateProfile(LoginRequiredMixin, generic.edit.UpdateView):
333 333 def get_context_data(self, **kwargs):
334 334 context = super(UpdateProfile, self).get_context_data(**kwargs)
335 335 context['title'] = _('Update Profile')
336   -
  336 +
337 337 return context
338 338  
339 339 def form_valid(self, form):
... ... @@ -406,7 +406,7 @@ class ForgotPassword(generic.FormView):
406 406  
407 407 subject_template_name = 'registration/password_reset_subject.txt'
408 408 email_template_name = 'recover_pass_email_template.html'
409   -
  409 +
410 410 subject = loader.render_to_string(subject_template_name, c)
411 411 # Email subject *must not* contain newlines
412 412 subject = ''.join(subject.splitlines())
... ... @@ -423,7 +423,7 @@ class ForgotPassword(generic.FormView):
423 423 tls = False
424 424  
425 425 backend = EmailBackend(
426   - host = mailsender.hostname, port = mailsender.port, username = mailsender.username,
  426 + host = mailsender.hostname, port = mailsender.port, username = mailsender.username,
427 427 password = mailsender.password, use_tls = tls, fail_silently = False
428 428 )
429 429  
... ... @@ -433,12 +433,12 @@ class ForgotPassword(generic.FormView):
433 433  
434 434 result = self.form_valid(form)
435 435 messages.success(request, _("Soon you'll receive an email with instructions to set your new password. If you don't receive it in 24 hours, please check your spam box."))
436   -
  436 +
437 437 return result
438   -
  438 + messages.error(request, _('No user is associated with this email address'))
  439 +
439 440 result = self.form_invalid(form)
440   - messages.error(request, _('No user is associated with this email address'))
441   -
  441 +
442 442 return result
443 443  
444 444 class PasswordResetConfirmView(generic.FormView):
... ... @@ -456,7 +456,7 @@ class PasswordResetConfirmView(generic.FormView):
456 456 form = self.get_form()
457 457  
458 458 assert uidb64 is not None and token is not None
459   -
  459 +
460 460 try:
461 461 uid = urlsafe_base64_decode(uidb64)
462 462 user = User._default_manager.get(pk=uid)
... ... @@ -466,12 +466,12 @@ class PasswordResetConfirmView(generic.FormView):
466 466 if user is not None and default_token_generator.check_token(user, token):
467 467 if form.is_valid():
468 468 new_password = form.cleaned_data['new_password']
469   -
  469 +
470 470 user.set_password(new_password)
471 471 user.save()
472   -
  472 +
473 473 messages.success(request, _('Password reset successfully.'))
474   -
  474 +
475 475 return self.form_valid(form)
476 476 else:
477 477 messages.error(request, _('We were not able to reset your password.'))
... ... @@ -504,7 +504,7 @@ def login(request):
504 504  
505 505 return redirect(reverse("home"))
506 506 else:
507   - messages.error(request, _('System under maintenance. Try again later'))
  507 + messages.error(request, _('System under maintenance. Try again later'))
508 508 else:
509 509 messages.error(request, _('E-mail or password are incorrect.'))
510 510 context["username"] = username
... ...