From b941633f0f4a1e9127ca6a614bc8288aedac2287 Mon Sep 17 00:00:00 2001 From: Luan Date: Fri, 22 Nov 2013 16:14:15 -0200 Subject: [PATCH] First signal to sync xmpp - django passwords --- src/accounts/models.py | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+), 0 deletions(-) diff --git a/src/accounts/models.py b/src/accounts/models.py index fe0ae45..e66acd1 100644 --- a/src/accounts/models.py +++ b/src/accounts/models.py @@ -1,10 +1,14 @@ +# -*- coding: utf-8 -*- import urlparse from django.db import models +from django.db.models.signals import pre_save from django.contrib.auth.models import AbstractUser from django.core.urlresolvers import reverse +from conversejs import xmpp + from .utils import mailman @@ -18,6 +22,18 @@ class User(AbstractUser): verification_hash = models.CharField(max_length=32, null=True, blank=True) modified = models.DateTimeField(auto_now=True) + def check_password(raw_password): + """ + Returns a boolean of whether the raw_password was correct. Handles + hashing formats behind the scenes. + """ + if not raw_password or not self.has_usable_password(): + return False + return self.password == raw_password + + def set_password(self, raw_password): + self.password = unicode(raw_password) + def get_absolute_url(self): return reverse('user_profile', kwargs={'username': self.username}) @@ -39,3 +55,27 @@ class User(AbstractUser): # The following workaroud allows to change email field to unique # without having to rewrite all AbstractUser here User._meta.get_field('email')._unique = True + + +def password_change(sender, instance, **kwargs): + from conversejs.models import XMPPAccount + # to register an XMPPAccount for an user, do the following: + # xmpp.register_account('username@domain', 'user_password' + # 'name', 'email') + # the domain can be found at conversejs.conf.CONVERSEJS_AUTO_REGISTER + + try: + user = sender.objects.get(pk=instance.pk) + except sender.DoesNotExist: + return # should I register a xmpp account here? + + try: + xmpp_account = XMPPAccount.objects.get(user=instance.pk) + except XMPPAccount.DoesNotExist: + return # User's XMPP account should be created here? + + if user.password != instance.password: + xmpp.change_password(xmpp_account, instance.password) + + +pre_save.connect(password_change, sender=User) -- libgit2 0.21.2