Delete MSP links on account deletion cron job and also when the DeletedUser object is created

This commit is contained in:
Benjamin Dauvergne 2014-11-21 17:08:43 +01:00
parent 981e7259e9
commit 94607c1e00
1 changed files with 30 additions and 12 deletions

View File

@ -5,27 +5,20 @@ import urlparse
from requests_oauthlib import OAuth2Session
from django.db import models, transaction
from django.db import models
from django.db.models.query import Q
from django.db.models.signals import post_save
from django.contrib.auth import get_user_model
from django.utils.translation import ugettext_lazy as _
from django.dispatch import receiver
from . import app_settings
class MspAccountManager(models.Manager):
def cleanup(self):
logger = logging.getLogger(__name__)
for msp_account in self.filter(Q(user__isnull=True)
|Q(user__deleteduser__isnull=False)):
try:
with transaction.commit_on_success():
if msp_account.refresh_token():
if msp_account.token:
self.api_call('app/rest/agc', method='delete')
msp_account.delete()
except:
logger.exception('unable to delete msp account %s', msp_account)
msp_account.delete()
class MspAccount(models.Model):
@ -39,10 +32,20 @@ class MspAccount(models.Model):
objects = MspAccountManager()
def delete(self, *args, **kwargs):
logger = logging.getLogger(__name__)
try:
self.api_call('app/rest/agc', method='delete')
logger.info('msp link deleted for %r', unicode(self.user))
except requests.RequestException:
logger.warn('msk failed to delete link for %r, deleting locally '
'anyway', unicode(self.user))
super(MspAccount, self).delete(*args, **kwargs)
def api_call(self, api_path, method='get', **kwargs):
url = urlparse.urljoin(app_settings.api_url, api_path)
session = OAuth2Session(app_settings.client_id,
token=self.token)
token=json.loads(self.token))
return getattr(session, method)(url,
verify=app_settings.verify_certificate,
cert=app_settings.client_certificate, **kwargs)
@ -75,3 +78,18 @@ class MspAccount(models.Model):
self.token = json.dumps(new_token)
self.save()
return True
@receiver(post_save)
def delete_msp_account_on_account_deletion(sender, instance, created, *args, **kwargs):
from authentic2.models import DeletedUser
if sender is not DeletedUser:
return
if not created:
return
logger = logging.getLogger(__name__)
for msp_account in MspAccount.objects.filter(user=instance.user):
try:
msp_account.delete()
except:
logger.exception('unable to delete msp accounts')