mirror of
https://gitlab.com/allianceauth/allianceauth.git
synced 2025-07-12 05:50:16 +02:00
Allow mapping of states to Teamspeak3 groups.
Addresses #950 Happy now, @colcrunch ?
This commit is contained in:
parent
8dd3a25b52
commit
f5abf82b95
@ -1,5 +1,5 @@
|
||||
from django.contrib import admin
|
||||
from .models import AuthTS, Teamspeak3User
|
||||
from .models import AuthTS, Teamspeak3User, StateGroup
|
||||
|
||||
|
||||
class Teamspeak3UserAdmin(admin.ModelAdmin):
|
||||
@ -12,5 +12,11 @@ class AuthTSgroupAdmin(admin.ModelAdmin):
|
||||
filter_horizontal = ('ts_group',)
|
||||
|
||||
|
||||
@admin.register(StateGroup)
|
||||
class StateGroupAdmin(admin.ModelAdmin):
|
||||
list_display = ('state', 'ts_group')
|
||||
search_fields = ('state__name', 'ts_group__ts_group_name')
|
||||
|
||||
|
||||
admin.site.register(AuthTS, AuthTSgroupAdmin)
|
||||
admin.site.register(Teamspeak3User, Teamspeak3UserAdmin)
|
||||
|
@ -0,0 +1,25 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.11.10 on 2018-02-23 06:13
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('authentication', '0016_auto_20180223_0613'),
|
||||
('teamspeak3', '0004_service_permissions'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='StateGroup',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('state', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='authentication.State')),
|
||||
('ts_group', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='teamspeak3.TSgroup')),
|
||||
],
|
||||
),
|
||||
]
|
@ -1,5 +1,6 @@
|
||||
from django.db import models
|
||||
from django.contrib.auth.models import User, Group
|
||||
from allianceauth.authentication.models import State
|
||||
|
||||
|
||||
class Teamspeak3User(models.Model):
|
||||
@ -50,3 +51,8 @@ class UserTSgroup(models.Model):
|
||||
|
||||
def __str__(self):
|
||||
return self.user.name
|
||||
|
||||
|
||||
class StateGroup(models.Model):
|
||||
state = models.ForeignKey(State, on_delete=models.CASCADE)
|
||||
ts_group = models.ForeignKey(TSgroup, on_delete=models.CASCADE)
|
||||
|
@ -7,7 +7,7 @@ from django.db.models.signals import post_save
|
||||
from django.dispatch import receiver
|
||||
|
||||
from .tasks import Teamspeak3Tasks
|
||||
from .models import AuthTS
|
||||
from .models import AuthTS, StateGroup
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@ -34,3 +34,8 @@ def post_save_authts(sender, instance, *args, **kwargs):
|
||||
def post_delete_authts(sender, instance, *args, **kwargs):
|
||||
logger.debug("Received post_delete signal from %s" % instance)
|
||||
transaction.on_commit(trigger_all_ts_update)
|
||||
|
||||
|
||||
# it's literally the same logic so just recycle the receiver
|
||||
post_save.connect(post_save_authts, sender=StateGroup)
|
||||
post_delete.connect(post_delete_authts, sender=StateGroup)
|
||||
|
@ -69,6 +69,8 @@ class Teamspeak3Tasks:
|
||||
for filtered_group in filtered_groups:
|
||||
for ts_group in filtered_group.ts_group.all():
|
||||
groups[ts_group.ts_group_name] = ts_group.ts_group_id
|
||||
for stategroup in user.profile.state.stategroup_set.all():
|
||||
groups[stategroup.ts_group.ts_group_name] = stategroup.ts_group.ts_group_id
|
||||
logger.debug("Updating user %s teamspeak3 groups to %s" % (user, groups))
|
||||
try:
|
||||
with Teamspeak3Manager() as ts3man:
|
||||
|
@ -7,9 +7,8 @@ from django.core.exceptions import ObjectDoesNotExist
|
||||
from django.db.models import signals
|
||||
|
||||
from allianceauth.tests.auth_utils import AuthUtils
|
||||
|
||||
from .auth_hooks import Teamspeak3Service
|
||||
from .models import Teamspeak3User, AuthTS, TSgroup
|
||||
from .models import Teamspeak3User, AuthTS, TSgroup, StateGroup
|
||||
from .tasks import Teamspeak3Tasks
|
||||
from .signals import m2m_changed_authts_group, post_save_authts, post_delete_authts
|
||||
|
||||
@ -31,13 +30,14 @@ class Teamspeak3HooksTestCase(TestCase):
|
||||
member = AuthUtils.create_member(self.member)
|
||||
Teamspeak3User.objects.create(user=member, uid=self.member, perm_key='123ABC')
|
||||
self.none_user = 'none_user'
|
||||
none_user = AuthUtils.create_user(self.none_user)
|
||||
|
||||
AuthUtils.create_user(self.none_user)
|
||||
state = member.profile.state
|
||||
ts_member_group = TSgroup.objects.create(ts_group_id=1, ts_group_name='Member')
|
||||
ts_blue_group = TSgroup.objects.create(ts_group_id=2, ts_group_name='Blue')
|
||||
ts_state_group = TSgroup.objects.create(ts_group_id=2, ts_group_name='State')
|
||||
m2m_member_group = AuthTS.objects.create(auth_group=member.groups.all()[0])
|
||||
m2m_member_group.ts_group.add(ts_member_group)
|
||||
m2m_member_group.save()
|
||||
StateGroup.objects.create(state=state, ts_group=ts_state_group)
|
||||
self.service = Teamspeak3Service
|
||||
add_permissions()
|
||||
|
||||
@ -60,7 +60,7 @@ class Teamspeak3HooksTestCase(TestCase):
|
||||
instance = manager.return_value.__enter__.return_value
|
||||
service = self.service()
|
||||
service.update_all_groups()
|
||||
# Check member and blue user have groups updated
|
||||
# Check user has groups updated
|
||||
self.assertTrue(instance.update_groups.called)
|
||||
self.assertEqual(instance.update_groups.call_count, 1)
|
||||
|
||||
@ -74,7 +74,7 @@ class Teamspeak3HooksTestCase(TestCase):
|
||||
self.assertTrue(instance.update_groups.called)
|
||||
args, kwargs = instance.update_groups.call_args
|
||||
# update_groups(user.teamspeak3.uid, groups)
|
||||
self.assertEqual({'Member': 1}, args[1]) # Check groups
|
||||
self.assertEqual({'Member': 1, 'State': 2}, args[1]) # Check groups
|
||||
self.assertEqual(self.member, args[0]) # Check uid
|
||||
|
||||
# Check none user does not have groups updated
|
||||
|
Loading…
x
Reference in New Issue
Block a user