Switch group updates to a trigged task

This commit is contained in:
2010-11-08 17:21:45 +00:00
parent f409567fbe
commit a78ebb2d26
3 changed files with 9 additions and 48 deletions

View File

@@ -1,41 +0,0 @@
import logging
from django.contrib.auth.models import User, Group
from eve_api.models import EVEAccount
from sso.models import ServiceAccount, Service
class UpdateServiceGroups():
"""
Cycles through all service accounts and updates group access.
"""
# run daily
run_every = 84600
@property
def _logger(self):
if not hasattr(self, '__logger'):
self.__logger = logging.getLogger(__name__)
return self.__logger
def job(self, args):
if args and len(args) == 1:
services = Service.objects.filter(active=1, id=args[0])
else:
services = Service.objects.filter(active=1)
for serv in services:
self._logger.info('Updating %s service' % serv)
api = serv.api_class
for servacc in ServiceAccount.objects.filter(active=1, service=serv):
self._logger.info('Processing %s' % servacc)
#try:
ret = api.update_groups(servacc.service_uid, servacc.user.groups.all())
if not ret:
if not api.check_uid(servacc.service_uid):
self._logger.error('%s not setup on %s, deleting ServiceAccount record' % (servacc.service_uid, serv))
servacc.delete()
#except:
# self._logger.error('Error updating %s' % servacc)

View File

@@ -43,19 +43,12 @@ class SSOUser(models.Model):
if created:
profile, created = SSOUser.objects.get_or_create(user=instance)
@staticmethod
def update_service_groups(sender, instance, action, **kwargs):
if action in ['post_add', 'post_remove']:
for acc in instance.serviceaccount_set.all():
acc.service.api_class.update_groups(acc.service_uid, instance.groups.all())
@staticmethod
def eveapi_deleted(sender, instance, **kwargs):
if instance.user:
update_user_access.delay(user=instance.user)
signals.post_save.connect(SSOUser.create_user_profile, sender=User)
signals.m2m_changed.connect(SSOUser.update_service_groups, sender=User.groups.through)
signals.post_delete.connect(SSOUser.eveapi_deleted, sender=EVEAccount)
class SSOUserNote(models.Model):

View File

@@ -1,5 +1,6 @@
from celery.decorators import task
from eve_api.models import *
from sso.models import ServiceAccount
@task()
def update_user_access(user):
@@ -55,3 +56,11 @@ def update_user_access(user):
servacc.active = 1
servacc.save()
pass
update_service_groups.delay(user_id=user.id)
@tasks(ignore_result=True)
def update_service_groups(user_id):
for service in ServiceAccount.objects.filter(user=user_id, active=True):
api = service.api_class
api.update_groups(service.service_uid, service.user.groups.all())