Delete MSP links on account deletion cron job and also when the DeletedUser object is created
This commit is contained in:
parent
981e7259e9
commit
94607c1e00
|
@ -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')
|
||||
|
|
Reference in New Issue