mirror of
https://gitlab.com/allianceauth/allianceauth.git
synced 2025-07-09 12:30:15 +02:00
Use django-redis-cache backend for locking get_or_set No longer require group-related tasks to be locked to one simultaneous execution. Remove legacy service group cache models. Truncate Discord nicknames to 32 characters Correct Discourse group name extension using only valid leading characters. Prevent name slicing from ending with illegal character Closes #801 Closes #847 Closes #835 Closes #852
61 lines
1.9 KiB
Python
61 lines
1.9 KiB
Python
from __future__ import unicode_literals
|
|
|
|
from alliance_auth.celeryapp import app
|
|
from django.contrib.auth.models import User
|
|
from django.core.exceptions import ObjectDoesNotExist
|
|
from notifications import notify
|
|
|
|
from .manager import DiscourseManager
|
|
from .models import DiscourseUser
|
|
|
|
import logging
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class DiscourseTasks:
|
|
def __init__(self):
|
|
pass
|
|
|
|
@classmethod
|
|
def delete_user(cls, user, notify_user=False):
|
|
if cls.has_account(user) and user.discourse.enabled:
|
|
logger.debug("User %s has a Discourse account. Disabling login." % user)
|
|
if DiscourseManager.disable_user(user):
|
|
user.discourse.delete()
|
|
if notify_user:
|
|
notify(user, 'Discourse Account Disabled', level='danger')
|
|
return True
|
|
return False
|
|
|
|
@staticmethod
|
|
def has_account(user):
|
|
"""
|
|
Check if the user has a discourse account
|
|
:param user: django.contrib.auth.models.User
|
|
:return: bool
|
|
"""
|
|
try:
|
|
return user.discourse.enabled
|
|
except ObjectDoesNotExist:
|
|
return False
|
|
|
|
@staticmethod
|
|
@app.task(bind=True, name='discourse.update_groups')
|
|
def update_groups(self, pk):
|
|
user = User.objects.get(pk=pk)
|
|
logger.debug("Updating discourse groups for user %s" % user)
|
|
try:
|
|
DiscourseManager.update_groups(user)
|
|
except:
|
|
logger.warn("Discourse group sync failed for %s, retrying in 10 mins" % user)
|
|
raise self.retry(countdown=60 * 10)
|
|
logger.debug("Updated user %s discourse groups." % user)
|
|
|
|
@staticmethod
|
|
@app.task(name='discourse.update_all_groups')
|
|
def update_all_groups():
|
|
logger.debug("Updating ALL discourse groups")
|
|
for discourse_user in DiscourseUser.objects.filter(enabled=True):
|
|
DiscourseTasks.update_groups.delay(discourse_user.user.pk)
|