def form_valid(self, form): cleaned_data = form.cleaned_data user_model = get_user_model() email = cleaned_data['email'] first_name = cleaned_data['contact_name'] last_name = cleaned_data['contact_last_name'] user = user_model.objects.create_user(username=email, email=email, first_name=first_name, last_name=last_name) user.is_active = False user.save() organization = Organization(contact_email=email, name=cleaned_data['name'], contact_name=first_name, contact_phone=cleaned_data['contact_phone'], contact_last_name=last_name) organization.save() OrganizationUser.objects.create(organization=organization, user=user) signer = signing.TimestampSigner(salt=settings.REGISTRATION_SALT) activation_key = signer.sign( str(getattr(user, user.USERNAME_FIELD)) ) url = settings.SITE_URL + reverse('organization_confirmation', kwargs={'activation_key': activation_key}) content = [ {'name': 'name', 'content': user.get_full_name()}, {'name': 'url', 'content': url} ] send_email_via_mandrill(email, user.get_full_name(), 'Verificación de email', 'confirmation', content) messages.success(self.request, self.MSG_SUCCESS) return super().form_valid(form)
def get_redirect_url(self, *args, **kwargs): activation_key = kwargs.get('activation_key') signer = signing.TimestampSigner(salt=settings.REGISTRATION_SALT) try: username = signer.unsign( activation_key, max_age=settings.ACCOUNT_ACTIVATION_DAYS * 86400 ) if username is not None: user_model = get_user_model() try: kwargs = {user_model.USERNAME_FIELD: username, 'is_active': False} user = user_model.objects.get(**kwargs) try: organization_user = OrganizationUser.objects.get(user=user) password = user_model.objects.make_random_password() user.set_password(password) user.is_active = True user.save() auth_user = authenticate(username=user.email, password=password) login(self.request, auth_user) self.request.session[ORGANIZATION_ID_KEY] = organization_user.organization_id content = [ {'name': 'name', 'content': user.get_full_name()}, {'name': 'password', 'content': password} ] send_email_via_mandrill(user.email, user.get_full_name(), 'Contraseña generada', 'password', content) return reverse('organization_profile') except OrganizationUser.DoesNotExist: pass except user_model.DoesNotExist: pass except signing.BadSignature: pass raise Http404