diff --git a/accounts/forms.py b/accounts/forms.py index 36da7fc9..b3e20fdf 100644 --- a/accounts/forms.py +++ b/accounts/forms.py @@ -1,4 +1,5 @@ # -*- coding: utf-8 -*- +import re import json import ast from django import forms @@ -200,6 +201,8 @@ class EmailAnnouncementForm(forms.Form): announcement = forms.MultipleChoiceField(choices=data, widget=forms.CheckboxSelectMultiple()) + +url_regex = re.compile('^\w*$') class RegistrationCompleteForm(forms.ModelForm): country = forms.ModelChoiceField(label=_(u'Страна'), queryset=Country.objects.all(), widget=forms.Select(attrs={'class': 'select2'})) @@ -239,8 +242,9 @@ class RegistrationCompleteForm(forms.ModelForm): def clean_url(self): url = self.cleaned_data['url'] - if not is_latin(url): - raise forms.ValidationError(_(u'url должен состоять только из латинских букв')) + valid = url_regex.match(url) + if valid is None: + raise forms.ValidationError(_(u'url должен состоять только из латинских букв и цифр')) try: User.objects.get(url=url) @@ -259,6 +263,7 @@ class SocialRegistrationCompleteForm(RegistrationCompleteForm): def save(self, force_insert=False, force_update=False, commit=True): email = self.cleaned_data['email'] + print(email, 'blablabla') if User.objects.filter(email=email).exists(): # pass to the view user, that had account before user = User.objects.get(email=email) diff --git a/accounts/views.py b/accounts/views.py index c3b1249d..1c2dbaea 100644 --- a/accounts/views.py +++ b/accounts/views.py @@ -231,10 +231,10 @@ class UserView(MetadataMixin, TemplateView): url = self.kwargs.get('url') try: - url = int(url) - user = get_object_or_404(User, id=url) - except ValueError: + user = User.objects.get(id=int(url)) + except (ValueError, User.DoesNotExist, ): user = get_object_or_404(User, url=url) + self.kwargs['user_full_name'] = user.get_full_name() return user @@ -496,4 +496,4 @@ def remove_from_calendar(request): return HttpResponse(json.dumps({'success': True}), content_type='application/json') else: - return Http404 \ No newline at end of file + return Http404 diff --git a/fabfile.py b/fabfile.py index 2c65cd11..06e7ee59 100644 --- a/fabfile.py +++ b/fabfile.py @@ -116,3 +116,11 @@ def stage3_release(): run('python manage.py migrate article 0003') chown() call_state('start') + + +def c_fix(): + with cd(REMOTE_HOME_DIR): + call_state('stop', only='apache2') + run('git pull') + run('python manage.py migrate expobanner') + call_state('start', only='apache2') diff --git a/functions/pipeline.py b/functions/pipeline.py index d7260b00..b3cb665b 100644 --- a/functions/pipeline.py +++ b/functions/pipeline.py @@ -1,8 +1,20 @@ +# -*- coding: utf-8 -*- -from accounts.models import User import random import string +from accounts.models import User +from django.conf import settings +from django.contrib.sites.models import RequestSite, Site +from django.core import signing +from django.core.mail import EmailMultiAlternatives +from django.core.urlresolvers import reverse +from django.shortcuts import redirect +from registration import signals +from registration.models import RegistrationProfile +from social.pipeline.partial import partial + + def random_pass(): digits = random.sample(('0', '1', '2', '3', '4', '5', '6', '7', '8', '9'), 4) chars = random.sample(string.lowercase[:], 4) @@ -19,9 +31,6 @@ def load_user(strategy, details, response, uid, *args, **kwargs): return {'user': user, 'is_new': False} -from django.contrib.sites.models import Site, RequestSite -from registration.models import RegistrationProfile - def create_user(strategy, details, response, uid, user=None, *args, **kwargs): if user: @@ -39,33 +48,20 @@ def create_user(strategy, details, response, uid, user=None, *args, **kwargs): return {'user': new_user, 'is_new': True} - -from django.shortcuts import redirect -from social.pipeline.partial import partial -from registration import signals - @partial def require_email(strategy, details, user=None, is_new=False, *args, **kwargs): if user and user.email: return elif is_new and not details.get('email'): email = strategy.request_data().get('email') - if email: + if email and not User.objects.filter(email=email).exists(): details['email'] = email else: strategy.request.session['new_email'] = True + strategy.request.session['new_email_invalid'] = True return redirect('acquire_email') - - - - -from django.core import signing -from django.core.mail import EmailMultiAlternatives -from django.conf import settings -from django.core.urlresolvers import reverse - def SendVerificationEmail(strategy, backend, code): """ Send an email with an embedded verification code and the necessary details to restore the required session @@ -94,4 +90,4 @@ Please click on this link to continue registration. email = EmailMultiAlternatives(**kwargs) email.attach_alternative(emailHTML, "text/html") - email.send() \ No newline at end of file + email.send() diff --git a/registration/backends/default/views.py b/registration/backends/default/views.py index bf4d2e1f..a18622ed 100644 --- a/registration/backends/default/views.py +++ b/registration/backends/default/views.py @@ -3,6 +3,7 @@ from django.conf import settings from django.contrib.sites.models import RequestSite from django.contrib.sites.models import Site from django.utils.translation import ugettext as _ +from django.http import Http404 from registration import signals from registration.models import RegistrationProfile @@ -50,7 +51,7 @@ class RegistrationView(BaseRegistrationView): an instance of ``registration.models.RegistrationProfile``. See that model and its custom manager for full documentation of its fields and supported operations. - + """ def register(self, request, **cleaned_data): """ @@ -100,7 +101,7 @@ class RegistrationView(BaseRegistrationView): * If ``REGISTRATION_OPEN`` is both specified and set to ``False``, registration is not permitted. - + """ return getattr(settings, 'REGISTRATION_OPEN', True) @@ -109,7 +110,7 @@ class RegistrationView(BaseRegistrationView): """ Return the name of the URL to redirect to after successful user registration. - + """ # return json.dumps({'bla': 'ok'}) return ('registration_complete', (), {}) @@ -126,7 +127,7 @@ class ActivationView(BaseActivationView): ``registration.signals.user_activated`` will be sent, with the newly activated ``User`` as the keyword argument ``user`` and the class of this backend as the sender. - + """ activated_user = RegistrationProfile.objects.activate_user(activation_key) if activated_user: @@ -250,8 +251,6 @@ def LoginView(request): HttpResponseRedirect('/') - - def complete_registration(request): if request.is_ajax(): response = {'success': False} @@ -285,9 +284,15 @@ def acquire_email(request, template_name="registration/acquire_email.html"): """ Request email for the create user flow for logins that don't specify their email address. """ - backend = request.session['partial_pipeline']['backend'] - return render(request, template_name, {"backend": backend}) + if 'partial_pipeline' not in request.session: + raise Http404 + ctx = { + "backend": request.session['partial_pipeline']['backend'], + "invalid": request.session.get('new_email_invalid', False), + } + request.session['new_email_invalid'] = False + return render(request, template_name, ctx) def inactive_user_message(request): - return render(request, 'registration/social_registration_complete.html') \ No newline at end of file + return render(request, 'registration/social_registration_complete.html') diff --git a/templates/registration/acquire_email.html b/templates/registration/acquire_email.html index 7ed9c904..5dd6bdbe 100644 --- a/templates/registration/acquire_email.html +++ b/templates/registration/acquire_email.html @@ -16,6 +16,9 @@ {# #} + {% if invalid %} + {% trans "Такой Email уже существует." %} + {% endif %}