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:
Basraah
2017-02-12 13:04:47 +10:00
committed by Adarnof
parent 918ecf812c
commit 914c204a40
17 changed files with 878 additions and 1 deletions

View 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()