Esempio n. 1
0
 def save(self, domain_override=None, use_https=False, request=None,
          **kwargs):
     """
     Generates a one-use only link for resetting password and sends to the
     user.
     """
     site = get_current_site(request)
     if domain_override is not None:
         site.domain = site.name = domain_override
     email = self.cleaned_data['email']
     active_users = User._default_manager.filter(
         email__iexact=email, is_active=True)
     for user in active_users:
         # Build reset url
         reset_url = "%s://%s%s" % (
             'https' if use_https else 'http',
             site.domain,
             get_password_reset_url(user))
         ctx = {
             'user': user,
             'site': site,
             'reset_url': reset_url}
         messages = CommunicationEventType.objects.get_and_render(
             code=self.communication_type_code, context=ctx)
         Dispatcher().dispatch_user_messages(user, messages)
Esempio n. 2
0
    def form_valid(self, form):
        # Grab current user instance before we save form.  We may need this to
        # send a warning email if the email address is changed.
        try:
            old_user = User.objects.get(id=self.request.user.id)
        except User.DoesNotExist:
            old_user = None

        form.save()

        # We have to look up the email address from the form's
        # cleaned data because the object created by form.save() can
        # either be a user or profile instance depending whether a profile
        # class has been specified by the AUTH_PROFILE_MODULE setting.
        new_email = form.cleaned_data['email']
        if old_user and new_email != old_user.email:
            # Email address has changed - send a confirmation email to the old
            # address including a password reset link in case this is a
            # suspicious change.
            ctx = {
                'user': self.request.user,
                'site': get_current_site(self.request),
                'reset_url': get_password_reset_url(old_user),
                'new_email': new_email,
            }
            msgs = CommunicationEventType.objects.get_and_render(
                code=self.communication_type_code, context=ctx)
            Dispatcher().dispatch_user_messages(old_user, msgs)

        messages.success(self.request, _("Profile updated"))
        return redirect(self.get_success_url())
Esempio n. 3
0
    def form_valid(self, form):
        # Grab current user instance before we save form.  We may need this to
        # send a warning email if the email address is changed.
        try:
            old_user = User.objects.get(id=self.request.user.id)
        except User.DoesNotExist:
            old_user = None

        form.save()

        # We have to look up the email address from the form's
        # cleaned data because the object created by form.save() can
        # either be a user or profile depending on AUTH_PROFILE_MODULE
        new_email = form.cleaned_data['email']
        if old_user and new_email != old_user.email:
            # Email address has changed - send a confirmation email to the old
            # address including a password reset link in case this is a
            # suspicious change.
            ctx = {
                'user': self.request.user,
                'site': get_current_site(self.request),
                'reset_url': get_password_reset_url(old_user),
                'new_email': new_email,
            }
            msgs = CommunicationEventType.objects.get_and_render(
                code=self.communication_type_code, context=ctx)
            Dispatcher().dispatch_user_messages(old_user, msgs)

        messages.success(self.request, _("Profile updated"))
        return HttpResponseRedirect(self.get_success_url())
Esempio n. 4
0
 def save(self, domain_override=None,
          subject_template_name='registration/password_reset_subject.txt',
          email_template_name='registration/password_reset_email.html',
          use_https=False, token_generator=default_token_generator,
          from_email=None, request=None, **kwargs):
     """
     Generates a one-use only link for resetting password and sends to the
     user.
     """
     site = get_current_site(request)
     if domain_override is not None:
         site.domain = site.name = domain_override
     for user in self.users_cache:
         # Build reset url
         reset_url = "%s://%s%s" % (
             'https' if use_https else 'http',
             site.domain,
             get_password_reset_url(user))
         ctx = {
             'user': user,
             'site': site,
             'reset_url': reset_url}
         messages = CommunicationEventType.objects.get_and_render(
             code=self.communication_type_code, context=ctx)
         Dispatcher().dispatch_user_messages(user, messages)
Esempio n. 5
0
    def get_reset_url(self, site, request, user, use_https):
        # the request argument isn't used currently, but implementors might
        # need it to determine the correct subdomain
        reset_url = "%s://%s%s" % ('https' if use_https else 'http',
                                   site.domain, get_password_reset_url(user))

        return reset_url
Esempio n. 6
0
 def send_password_changed_email(self):
     user = self.request.user
     extra_context = {
         'user': user,
         'reset_url': get_password_reset_url(self.request.user),
     }
     CustomerDispatcher().send_password_changed_email_for_user(user, extra_context)
Esempio n. 7
0
 def save(self, domain_override=None,
          subject_template_name='registration/password_reset_subject.txt',
          email_template_name='registration/password_reset_email.html',
          use_https=False, token_generator=default_token_generator,
          from_email=None, request=None, **kwargs):
     """
     Generates a one-use only link for resetting password and sends to the
     user.
     """
     site = get_current_site(request)
     if domain_override is not None:
         site.domain = site.name = domain_override
     for user in self.users_cache:
         # Build reset url
         reset_url = "%s://%s%s" % (
             'https' if use_https else 'http',
             site.domain,
             get_password_reset_url(user))
         ctx = {
             'user': user,
             'site': site,
             'reset_url': reset_url}
         messages = CommunicationEventType.objects.get_and_render(
             code=self.communication_type_code, context=ctx)
         Dispatcher().dispatch_user_messages(user, messages)
Esempio n. 8
0
 def send_password_reset_email(self, site, user):
     extra_context = {
         'user': user,
         'site': site,
         'reset_url': get_password_reset_url(user),
     }
     CustomerDispatcher().send_password_reset_email_for_user(
         user, extra_context)
Esempio n. 9
0
 def send_email_changed_email(self, old_user, new_email):
     user = self.request.user
     extra_context = {
         'user': user,
         'reset_url': get_password_reset_url(old_user),
         'new_email': new_email,
     }
     CustomerDispatcher().send_email_changed_email_for_user(old_user, extra_context)
Esempio n. 10
0
    def get_reset_url(self, site, request, user, use_https):
        # the request argument isn't used currently, but implementors might
        # need it to determine the correct subdomain
        reset_url = "%s://%s%s" % (
            'https' if use_https else 'http',
            site.domain,
            get_password_reset_url(user))

        return reset_url
Esempio n. 11
0
    def form_valid(self, form):
        form.save()
        messages.success(self.request, _("Password updated"))

        ctx = {
            'site': get_current_site(self.request),
            'reset_url': get_password_reset_url(self.request.user),
        }
        msgs = CommunicationEventType.objects.get_and_render(
            code=self.communication_type_code, context=ctx)
        Dispatcher().dispatch_user_messages(self.request.user, msgs)

        return HttpResponseRedirect(self.get_success_url())
Esempio n. 12
0
    def form_valid(self, form):
        form.save()
        messages.success(self.request, _("Password updated"))

        ctx = {
            'site': get_current_site(self.request),
            'reset_url': get_password_reset_url(self.request.user),
        }
        msgs = CommunicationEventType.objects.get_and_render(
            code=self.communication_type_code, context=ctx)
        Dispatcher().dispatch_user_messages(self.request.user, msgs)

        return HttpResponseRedirect(self.get_success_url())
Esempio n. 13
0
 def test_dispatch_email_changed_user_message(self):
     user = User.objects.create_user('testuser', '*****@*****.**', 'somesimplepassword')
     CommunicationEventType.objects.create(code='EMAIL_CHANGED',
                                           name='Email Changed',
                                           category=CommunicationEventType.USER_RELATED)
     ctx = {
         'user': user,
         'site': SiteFactory(name='Test Site'),
         'reset_url': get_password_reset_url(user),
         'new_email': '*****@*****.**',
     }
     self._dispatch_user_messages(
         user, 'EMAIL_CHANGED', ctx, 'Your email address has changed at Test Site.'
     )
Esempio n. 14
0
    def form_valid(self, form):
        form.save()
        update_session_auth_hash(self.request, self.request.user)
        messages.success(self.request, _("密码更改成功"))

        ctx = {
            'user': self.request.user,
            'site': get_current_site(self.request),
            'reset_url': get_password_reset_url(self.request.user),
        }
        msgs = CommunicationEventType.objects.get_and_render(
            code=self.communication_type_code, context=ctx)
        Dispatcher().dispatch_user_messages(self.request.user, msgs)

        return redirect(self.get_success_url())
Esempio n. 15
0
 def test_dispatch_email_changed_user_message(self):
     user = User.objects.create_user('testuser', '*****@*****.**',
                                     'somesimplepassword')
     event_code = CustomerDispatcher.EMAIL_CHANGED_EVENT_CODE
     CommunicationEventType.objects.create(
         code=event_code,
         name='Email Changed',
         category=CommunicationEventType.USER_RELATED,
     )
     ctx = {
         'user': user,
         'site': {
             'name': 'test',
             'domain': 'test.com'
         },
         'reset_url': get_password_reset_url(user),
         'new_email': '*****@*****.**',
     }
     self._dispatch_user_messages(
         user, event_code, ctx,
         'Your email address has changed at Test Site.')
Esempio n. 16
0
    def form_valid(self, form):
        # Grab current user instance before we save form.  We may need this to
        # send a warning email if the email address is changed.
        # 在保存表单之前抓取当前用户实例。 如果更改了电子邮件地址,我们
        # 可能需要此信息才能发送警告电子邮件。
        try:
            old_user = User.objects.get(id=self.request.user.id)
        except User.DoesNotExist:
            old_user = None

        form.save()

        # We have to look up the email address from the form's
        # cleaned data because the object created by form.save() can
        # either be a user or profile instance depending whether a profile
        # class has been specified by the AUTH_PROFILE_MODULE setting.
        # 我们必须从表单的清理数据中查找电子邮件地址,因为form.save()
        # 创建的对象可以是用户或配置文件实例,具体取决于AUTH_PROFILE_MODULE设置
        # 是否指定了配置文件类。
        new_email = form.cleaned_data.get('email')
        if new_email and old_user and new_email != old_user.email:
            # Email address has changed - send a confirmation email to the old
            # address including a password reset link in case this is a
            # suspicious change.
            # 电子邮件地址已更改 - 如果这是可疑更改,请向旧地址发送确认电子
            # 邮件,包括密码重置链接。
            ctx = {
                'user': self.request.user,
                'site': get_current_site(self.request),
                'reset_url': get_password_reset_url(old_user),
                'new_email': new_email,
            }
            msgs = CommunicationEventType.objects.get_and_render(
                code=self.communication_type_code, context=ctx)
            Dispatcher().dispatch_user_messages(old_user, msgs)

        messages.success(self.request, _("Profile updated"))
        return redirect(self.get_success_url())
Esempio n. 17
0
 def save(self,
          domain_override=None,
          use_https=False,
          request=None,
          **kwargs):
     """
     Generates a one-use only link for resetting password and sends to the
     user.
     """
     site = get_current_site(request)
     if domain_override is not None:
         site.domain = site.name = domain_override
     email = self.cleaned_data['email']
     users = User._default_manager.filter(email__iexact=email)
     for user in users:
         # Build reset url
         reset_url = "%s://%s%s" % ('https' if use_https else 'http',
                                    site.domain,
                                    get_password_reset_url(user))
         ctx = {'user': user, 'site': site, 'reset_url': reset_url}
         messages = CommunicationEventType.objects.get_and_render(
             code=self.communication_type_code, context=ctx)
         Dispatcher().dispatch_user_messages(user, messages)
Esempio n. 18
0
 def test_sending_user_related_message(self):
     email = '*****@*****.**'
     user = User.objects.create_user('testuser', email,
                                     'somesimplepassword')
     CommunicationEventType.objects.create(
         code='EMAIL_CHANGED',
         name='Email Changed',
         category=CommunicationEventType.USER_RELATED)
     ctx = {
         'user': user,
         'site': SiteFactory(name='Test Site'),
         'reset_url': get_password_reset_url(user),
         'new_email': '*****@*****.**',
     }
     msgs = CommunicationEventType.objects.get_and_render(
         code='EMAIL_CHANGED', context=ctx)
     Dispatcher().dispatch_user_messages(user, msgs)
     self.assertEqual(len(mail.outbox), 1)
     self.assertEquals(mail.outbox[0].subject,
                       'Your email address has changed at Test Site.')
     self.assertEquals(Email.objects.count(), 1)
     email = Email.objects.last()
     self.assertEquals(email.user.id, user.id)
     self.assertEquals(email.email, '*****@*****.**')
Esempio n. 19
0
 def test_dispatcher_password_reset_url(self):
     user = User.objects.create_user('testuser', '*****@*****.**', 'dummypassword')
     url = get_password_reset_url(user)
     self.assertTrue(url.startswith('/password-reset/confirm/'))
Esempio n. 20
0
 def get_reset_url(self, user, request):
     relative_url = get_password_reset_url(user)
     return request.build_absolute_uri(relative_url)
Esempio n. 21
0
 def test_dispatcher_password_reset_url(self):
     user = User.objects.create_user('testuser', '*****@*****.**',
                                     'dummypassword')
     url = get_password_reset_url(user)
     self.assertTrue(url.startswith('/password-reset/confirm/'))