mirror of
https://gitlab.com/allianceauth/allianceauth.git
synced 2026-02-10 00:56:19 +01:00
SeAT Manager (#704)
* SeAT service in modular service app format * Replace string concatenation with formatters * Fix incorrect references to user * Fix exception when user doesn't have seat active * Prevent deletion of seat API keys by default * Improve api response error handling * Corrected notification message * Added missing view returns * Update SeAT to use permissions based access * Update password generator to new style * Correct logging message * Fix seat role update tasks * Correct validate user logic * Add seat test settings * Added basic seat unit tests * Added add permissions function from other branch * Remove obsolete settings references
This commit is contained in:
76
services/modules/seat/tasks.py
Normal file
76
services/modules/seat/tasks.py
Normal file
@@ -0,0 +1,76 @@
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.contrib.auth.models import User
|
||||
from django.core.exceptions import ObjectDoesNotExist
|
||||
from django.conf import settings
|
||||
from notifications import notify
|
||||
|
||||
from alliance_auth.celeryapp import app
|
||||
|
||||
from .models import SeatUser
|
||||
from .manager import SeatManager
|
||||
|
||||
import logging
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class SeatTasks:
|
||||
def __init__(self):
|
||||
pass
|
||||
|
||||
@staticmethod
|
||||
def has_account(user):
|
||||
try:
|
||||
return user.seat.username != ''
|
||||
except ObjectDoesNotExist:
|
||||
return False
|
||||
|
||||
@classmethod
|
||||
def delete_user(cls, user, notify_user=False):
|
||||
if cls.has_account(user) and SeatManager.disable_user(user.seat.username):
|
||||
user.seat.delete()
|
||||
logger.info("Successfully deactivated SeAT for user %s" % user)
|
||||
if notify_user:
|
||||
notify(user, 'SeAT Account Disabled', level='danger')
|
||||
return True
|
||||
return False
|
||||
|
||||
@staticmethod
|
||||
@app.task(bind=True)
|
||||
def update_roles(self, pk):
|
||||
user = User.objects.get(pk=pk)
|
||||
logger.debug("Updating SeAT roles for user %s" % user)
|
||||
groups = []
|
||||
if SeatTasks.has_account(user):
|
||||
for group in user.groups.all():
|
||||
groups.append(str(group.name))
|
||||
if len(groups) == 0:
|
||||
logger.debug("No syncgroups found for user. Adding empty group.")
|
||||
groups.append('empty')
|
||||
logger.debug("Updating user %s SeAT roles to %s" % (user, groups))
|
||||
try:
|
||||
SeatManager.update_roles(user.seat.username, groups)
|
||||
except:
|
||||
logger.warn("SeAT group sync failed for %s, retrying in 10 mins" % user, exc_info=True)
|
||||
raise self.retry(countdown=60 * 10)
|
||||
logger.debug("Updated user %s SeAT roles." % user)
|
||||
else:
|
||||
logger.debug("User %s does not have a SeAT account")
|
||||
|
||||
@staticmethod
|
||||
@app.task
|
||||
def update_all_roles():
|
||||
logger.debug("Updating ALL SeAT roles")
|
||||
for user in SeatUser.objects.all():
|
||||
SeatTasks.update_roles.delay(user.user_id)
|
||||
|
||||
@staticmethod
|
||||
def deactivate():
|
||||
SeatUser.objects.all().delete()
|
||||
|
||||
@staticmethod
|
||||
@app.task
|
||||
def run_api_sync():
|
||||
logger.debug("Running EVE API synchronization with SeAT")
|
||||
SeatManager.synchronize_eveapis()
|
||||
Reference in New Issue
Block a user