Merge pull request #71 from Kaezon/master

TS3 Manager Rewrite
This commit is contained in:
Adarnof 2015-11-05 23:18:06 -05:00
commit 740ebb3ad2
8 changed files with 113 additions and 45 deletions

2
.gitignore vendored
View File

@ -55,3 +55,5 @@ target/
.vagrant/ .vagrant/
alliance_auth/settings.py alliance_auth/settings.py
*Thumbs.db
nginx_config.txt

View File

@ -9,6 +9,8 @@ from services.managers.mumble_manager import MumbleManager
from services.managers.phpbb3_manager import Phpbb3Manager from services.managers.phpbb3_manager import Phpbb3Manager
from services.managers.ipboard_manager import IPBoardManager from services.managers.ipboard_manager import IPBoardManager
from services.managers.teamspeak3_manager import Teamspeak3Manager from services.managers.teamspeak3_manager import Teamspeak3Manager
from services.models import AuthTS
from services.models import TSgroup
from authentication.models import AuthServicesInfo from authentication.models import AuthServicesInfo
from eveonline.managers import EveManager from eveonline.managers import EveManager
from services.managers.eve_api_manager import EveApiManager from services.managers.eve_api_manager import EveApiManager
@ -48,8 +50,6 @@ def update_jabber_groups(user):
if len(groups) == 0: if len(groups) == 0:
groups.append('empty') groups.append('empty')
print groups
OpenfireManager.update_user_groups(authserviceinfo.jabber_username, authserviceinfo.jabber_password, groups) OpenfireManager.update_user_groups(authserviceinfo.jabber_username, authserviceinfo.jabber_password, groups)
@ -93,14 +93,15 @@ def update_ipboard_groups(user):
def update_teamspeak3_groups(user): def update_teamspeak3_groups(user):
syncgroups = SyncGroupCache.objects.filter(user=user) usergroups = user.groups.all()
authserviceinfo = AuthServicesInfo.objects.get(user=user) authserviceinfo = AuthServicesInfo.objects.get(user=user)
groups = [] groups = {}
for syncgroup in syncgroups: for usergroup in usergroups:
groups.append(str(syncgroup.groupname)) filtered_groups = AuthTS.objects.filter(auth_group=usergroup)
if filtered_groups:
if len(groups) == 0: for filtered_group in filtered_groups:
groups.append('empty') for ts_group in filtered_group.ts_group.all():
groups[ts_group.ts_group_name] = ts_group.ts_group_id
Teamspeak3Manager.update_groups(authserviceinfo.teamspeak3_uid, groups) Teamspeak3Manager.update_groups(authserviceinfo.teamspeak3_uid, groups)
@ -129,9 +130,11 @@ def add_to_databases(user, groups, syncgroups):
if authserviceinfo: if authserviceinfo:
authserviceinfo = AuthServicesInfo.objects.get(user=user) authserviceinfo = AuthServicesInfo.objects.get(user=user)
if authserviceinfo.teamspeak3_uid and authserviceinfo.teamspeak3_uid != "":
update_teamspeak3_groups(user)
for group in groups: for group in groups:
if authserviceinfo.jabber_username and authserviceinfo.jabber_username != "": if authserviceinfo.jabber_username and authserviceinfo.jabber_username != "":
if syncgroups.filter(groupname=group.name).filter(servicename="openfire").exists() is not True: if syncgroups.filter(groupname=group.name).filter(servicename="openfire").exists() is not True:
create_syncgroup_for_user(user, group.name, "openfire") create_syncgroup_for_user(user, group.name, "openfire")
@ -148,10 +151,6 @@ def add_to_databases(user, groups, syncgroups):
if syncgroups.filter(groupname=group.name).filter(servicename="ipboard").exists() is not True: if syncgroups.filter(groupname=group.name).filter(servicename="ipboard").exists() is not True:
create_syncgroup_for_user(user, group.name, "ipboard") create_syncgroup_for_user(user, group.name, "ipboard")
update_ipboard_groups(user) update_ipboard_groups(user)
if authserviceinfo.teamspeak3_uid and authserviceinfo.teamspeak3_uid != "":
if syncgroups.filter(groupname=group.name).filter(servicename="teamspeak3").exists() is not True:
create_syncgroup_for_user(user, group.name, "teamspeak3")
update_teamspeak3_groups(user)
def remove_from_databases(user, groups, syncgroups): def remove_from_databases(user, groups, syncgroups):
@ -190,6 +189,7 @@ def run_databaseUpdate():
for user in users: for user in users:
groups = user.groups.all() groups = user.groups.all()
syncgroups = SyncGroupCache.objects.filter(user=user) syncgroups = SyncGroupCache.objects.filter(user=user)
Teamspeak3Manager._sync_ts_group_db()
add_to_databases(user, groups, syncgroups) add_to_databases(user, groups, syncgroups)
remove_from_databases(user, groups, syncgroups) remove_from_databases(user, groups, syncgroups)

View File

@ -7,7 +7,7 @@ xmpppy==0.5.0rc1
python-openfire==0.2.3-beta python-openfire==0.2.3-beta
# Django Stuff # # Django Stuff #
django==1.6.1 django==1.6.5
django-evolution django-evolution
django-bootstrap-form django-bootstrap-form
django-celery django-celery

View File

@ -1 +1,18 @@
# Register your models here. from django.contrib import admin
from .models import AuthTS
from .models import TSgroup
from .models import UserTSgroup
class AuthTSgroupAdmin(admin.ModelAdmin):
fields = ['auth_group','ts_group']
filter_horizontal = ('ts_group',)
class TSgroupAdmin(admin.ModelAdmin):
fields = ['ts_group_name']
class UserTSgroupAdmin(admin.ModelAdmin):
fields = ['user','ts_group']
filter_horizontal = ('ts_group',)
admin.site.register(AuthTS, AuthTSgroupAdmin)
admin.site.register(TSgroup, TSgroupAdmin)

View File

@ -1,6 +1,7 @@
from django.conf import settings from django.conf import settings
from services.managers.util.ts3 import TS3Server from services.managers.util.ts3 import TS3Server
from services.models import TSgroup
class Teamspeak3Manager: class Teamspeak3Manager:
@ -93,30 +94,40 @@ class Teamspeak3Manager:
return outlist return outlist
@staticmethod @staticmethod
def _add_user_to_group(uid, groupname): def _add_user_to_group(uid, groupid):
groupname = groupname[:30]
server = Teamspeak3Manager.__get_created_server() server = Teamspeak3Manager.__get_created_server()
server_groups = Teamspeak3Manager._group_list() server_groups = Teamspeak3Manager._group_list()
user_groups = Teamspeak3Manager._user_group_list(uid) user_groups = Teamspeak3Manager._user_group_list(uid)
if not groupname in server_groups: if not groupid in user_groups.values():
Teamspeak3Manager._create_group(groupname)
if not groupname in user_groups:
server.send_command('servergroupaddclient', server.send_command('servergroupaddclient',
{'sgid': Teamspeak3Manager._group_id_by_name(groupname), 'cldbid': uid}) {'sgid': str(groupid), 'cldbid': uid})
@staticmethod @staticmethod
def _remove_user_from_group(uid, groupname): def _remove_user_from_group(uid, groupid):
groupname = groupname[:30]
server = Teamspeak3Manager.__get_created_server() server = Teamspeak3Manager.__get_created_server()
server_groups = Teamspeak3Manager._group_list() server_groups = Teamspeak3Manager._group_list()
user_groups = Teamspeak3Manager._user_group_list(uid) user_groups = Teamspeak3Manager._user_group_list(uid)
if groupname in server_groups: if str(groupid) in user_groups.values():
Teamspeak3Manager._create_group(groupname)
if groupname in user_groups:
server.send_command('servergroupdelclient', server.send_command('servergroupdelclient',
{'sgid': Teamspeak3Manager._group_id_by_name(groupname), 'cldbid': uid}) {'sgid': str(groupid), 'cldbid': uid})
@staticmethod
def _sync_ts_group_db():
remote_groups = Teamspeak3Manager._group_list()
local_groups = TSgroup.objects.all()
for key in remote_groups:
remote_groups[key] = int(remote_groups[key])
for group in local_groups:
if group.ts_group_id not in remote_groups.values():
TSgroup.objects.filter(ts_group_id=group.ts_group_id).delete()
for key in remote_groups:
g = TSgroup(ts_group_id=remote_groups[key],ts_group_name=key)
q = TSgroup.objects.filter(ts_group_id=g.ts_group_id)
if not q:
g.save()
@staticmethod @staticmethod
def add_user(username, corp_ticker): def add_user(username, corp_ticker):
@ -206,28 +217,26 @@ class Teamspeak3Manager:
return Teamspeak3Manager.add_blue_user(username, corpticker) return Teamspeak3Manager.add_blue_user(username, corpticker)
@staticmethod @staticmethod
def update_groups(uid, l_groups): def update_groups(uid, ts_groups):
print uid
print l_groups
userid = Teamspeak3Manager._get_userid(uid) userid = Teamspeak3Manager._get_userid(uid)
addgroups = []
remgroups = []
if userid is not None: if userid is not None:
server_groups = Teamspeak3Manager._group_list() user_ts_groups = Teamspeak3Manager._user_group_list(userid)
user_groups = set(Teamspeak3Manager._user_group_list(userid)) for key in user_ts_groups:
groups = [] user_ts_groups[key] = int(user_ts_groups[key])
for l_group in l_groups: for ts_group_key in ts_groups:
groups.append(l_group[:30]) if ts_groups[ts_group_key] not in user_ts_groups.values():
addgroups.append(ts_groups[ts_group_key])
act_groups = set([g.replace(' ', '-') for g in groups]) for user_ts_group_key in user_ts_groups:
addgroups = act_groups - user_groups if user_ts_groups[user_ts_group_key] not in ts_groups.values():
remgroups = user_groups - act_groups remgroups.append(user_ts_groups[user_ts_group_key])
print userid print userid
print addgroups print addgroups
print remgroups print remgroups
for g in addgroups: for g in addgroups:
if not g in server_groups.keys():
Teamspeak3Manager._create_group(g)
Teamspeak3Manager._add_user_to_group(userid, g) Teamspeak3Manager._add_user_to_group(userid, g)
for g in remgroups: for g in remgroups:

View File

@ -1 +1,32 @@
# Create your models here. from django.db import models
from django.contrib.auth.models import Group
class TSgroup(models.Model):
ts_group_id = models.IntegerField(primary_key=True)
ts_group_name = models.CharField(max_length=30)
class Meta:
verbose_name='TS Group'
def __str__(self):
return self.ts_group_name
class AuthTS(models.Model):
auth_group = models.ForeignKey('auth.Group')
ts_group = models.ManyToManyField(TSgroup)
class Meta:
verbose_name='Auth / TS Group'
def __str__(self):
return self.auth_group.name
class UserTSgroup(models.Model):
user = models.ForeignKey('auth.User')
ts_group = models.ManyToManyField(TSgroup)
class Meta:
verbose_name='User TS Group'
def __str__(self):
return self.user.name

Binary file not shown.

View File

@ -12,6 +12,15 @@ sudo apt-get -y install python-dev libyaml-dev libffi-dev
sudo apt-get -y install python-pip sudo apt-get -y install python-pip
sudo apt-get -y install mysql-server mysql-client sudo apt-get -y install mysql-server mysql-client
#Python 3 stuff
sudo apt-get -y install python-software-properties
sudo add-apt-repository ppa:fkrull/deadsnakes
sudo apt-get -y update
sudo apt-get -y install python3.3
#virtualenv stuff
sudo apt-get -y install python-virtualenv
cd /vagrant/ cd /vagrant/
sudo pip install --upgrade pip sudo pip install --upgrade pip