mirror of
https://github.com/nikdoof/test-auth.git
synced 2025-12-14 14:52:15 +00:00
Switch group updates to a trigged task
This commit is contained in:
41
sso/cron.py
41
sso/cron.py
@@ -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)
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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())
|
||||
|
||||
Reference in New Issue
Block a user