diff --git a/sso/cron.py b/sso/cron.py deleted file mode 100644 index c2bd718..0000000 --- a/sso/cron.py +++ /dev/null @@ -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) - diff --git a/sso/models.py b/sso/models.py index 39eff82..de4ccc1 100644 --- a/sso/models.py +++ b/sso/models.py @@ -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): diff --git a/sso/tasks.py b/sso/tasks.py index 8f1a855..1864a6a 100644 --- a/sso/tasks.py +++ b/sso/tasks.py @@ -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())