diff --git a/alliance_auth/settings.py.example b/alliance_auth/settings.py.example index 9268722b..cbcd7b06 100755 --- a/alliance_auth/settings.py.example +++ b/alliance_auth/settings.py.example @@ -186,6 +186,7 @@ ENABLE_ALLIANCE_FORUM = True ENABLE_ALLIANCE_JABBER = True ENABLE_ALLIANCE_MUMBLE = True ENABLE_ALLIANCE_IPBOARD = False +ENABLE_ALLIANCE_TEAMSPEAK3 = False ##################### # Blue service Setup @@ -199,6 +200,7 @@ ENABLE_BLUE_FORUM = False ENABLE_BLUE_JABBER = False ENABLE_BLUE_MUMBLE = True ENABLE_BLUE_IPBOARD = False +ENABLE_BLUE_TEAMSPEAK3 = False ######################### # Alliance Configuration @@ -264,3 +266,20 @@ BROADCAST_USER_PASSWORD = "somepassword" MUMBLE_URL = "someurl.com" MUMBLE_SERVER_ID = 1 +###################################### +# Teamspeak3 Configuration +###################################### +# TEAMSPEAK3_SERVER_IP - Teamspeak3 server ip +# TEAMSPEAK3_SERVER_PORT - Teamspeak3 server port +# TEAMSPEAK3_SERVERQUERY_USER - Teamspeak3 serverquery username +# TEAMSPEAK3_SERVERQUERY_PASSWORD - Teamspeak3 serverquery password +# TEAMSPEAK3_VIRTUAL_SERVER - Virtual server id +# TEAMSPEAK3_AUTHED_GROUP_ID - Default authed group id +# TEAMSPEAK3_PUBLIC_URL - teamspeak3 public url used for link creation +###################################### +TEAMSPEAK3_SERVER_IP = '127.0.0.1' +TEAMSPEAK3_SERVER_PORT = 10011 +TEAMSPEAK3_SERVERQUERY_USER = 'serveradmin' +TEAMSPEAK3_SERVERQUERY_PASSWORD = 'passwordhere' +TEAMSPEAK3_VIRTUAL_SERVER = 1 +TEAMSPEAK3_PUBLIC_URL = 'someaddress.com' \ No newline at end of file diff --git a/alliance_auth/urls.py b/alliance_auth/urls.py index 3ea2bf27..b2663708 100755 --- a/alliance_auth/urls.py +++ b/alliance_auth/urls.py @@ -114,6 +114,14 @@ urlpatterns = patterns('', url(r'^reset_ipboard_password/$', 'services.views.reset_ipboard_password', name='auth_reset_ipboard_password'), + # Teamspeak3 service control + url(r'^activate_teamspeak3/$', 'services.views.activate_teamspeak3', + name='auth_activate_teamspeak3'), + url(r'^deactivate_teamspeak3/$', 'services.views.deactivate_teamspeak3', + name='auth_deactivate_teamspeak3'), + url(r'reset_teamspeak3_perm/$', 'services.views.reset_teamspeak3_perm', + name='auth_reset_teamspeak3_perm'), + # Tools url(r'^tool/fleet_formatter_tool/$', 'services.views.fleet_formatter_view', name='auth_fleet_format_tool_view'), diff --git a/authentication/managers.py b/authentication/managers.py index e4359e81..cee8b1f9 100755 --- a/authentication/managers.py +++ b/authentication/managers.py @@ -65,6 +65,14 @@ class AuthServicesInfoManager: authserviceinfo.ipboard_password = password authserviceinfo.save(update_fields=['ipboard_username', 'ipboard_password']) + @staticmethod + def update_user_teamspeak3_info(uid, perm_key, user): + if User.objects.filter(username=user.username).exists(): + authserviceinfo = AuthServicesInfoManager.__get_or_create(user) + authserviceinfo.teamspeak3_uid = uid + authserviceinfo.teamspeak3_perm_key = perm_key + authserviceinfo.save(update_fields=['teamspeak3_uid', 'teamspeak3_perm_key']) + @staticmethod def update_is_blue(is_blue, user): if User.objects.filter(username=user.username).exists(): diff --git a/authentication/models.py b/authentication/models.py index ab64ea76..2b8cfd2d 100755 --- a/authentication/models.py +++ b/authentication/models.py @@ -11,6 +11,8 @@ class AuthServicesInfo(models.Model): jabber_password = models.CharField(max_length=254, default="") mumble_username = models.CharField(max_length=254, default="") mumble_password = models.CharField(max_length=254, default="") + teamspeak3_uid = models.CharField(max_length=254, default="") + teamspeak3_perm_key = models.CharField(max_length=254, default="") main_char_id = models.CharField(max_length=64, default="") is_blue = models.BooleanField(default=False) user = models.ForeignKey(User) diff --git a/celerytask/tasks.py b/celerytask/tasks.py index 6d77c4a9..15111bb6 100755 --- a/celerytask/tasks.py +++ b/celerytask/tasks.py @@ -8,6 +8,7 @@ from services.managers.openfire_manager import OpenfireManager from services.managers.mumble_manager import MumbleManager from services.managers.phpbb3_manager import Phpbb3Manager from services.managers.ipboard_manager import IPBoardManager +from services.managers.teamspeak3_manager import Teamspeak3Manager from authentication.models import AuthServicesInfo from eveonline.managers import EveManager from services.managers.eve_api_manager import EveApiManager @@ -69,6 +70,19 @@ def update_ipboard_groups(user): IPBoardManager.update_groups(authserviceinfo.ipboard_username, groups) +def update_teamspeak3_groups(user): + syncgroups = SyncGroupCache.objects.filter(user=user) + authserviceinfo = AuthServicesInfo.objects.get(user=user) + groups = [] + for syncgroup in syncgroups: + groups.append(str(syncgroup.groupname)) + + if len(groups) == 0: + groups.append('empty') + + Teamspeak3Manager.update_groups(authserviceinfo.teamspeak3_uid, groups) + + def add_to_databases(user, groups, syncgroups): authserviceinfo = None try: @@ -90,14 +104,16 @@ def add_to_databases(user, groups, syncgroups): update = True if update: - if authserviceinfo.jabber_username != "": + if authserviceinfo.jabber_username and authserviceinfo.jabber_username != "": update_jabber_groups(user) - if authserviceinfo.mumble_username != "": + if authserviceinfo.mumble_username and authserviceinfo.mumble_username != "": update_mumble_groups(user) - if authserviceinfo.forum_username != "": + if authserviceinfo.forum_username and authserviceinfo.forum_username != "": update_forum_groups(user) - if authserviceinfo.ipboard_username != "": + if authserviceinfo.ipboard_username and authserviceinfo.ipboard_username != "": update_ipboard_groups(user) + if authserviceinfo.teamspeak3_uid and authserviceinfo.teamspeak3_uid != "": + update_teamspeak3_groups(user) def remove_from_databases(user, groups, syncgroups): @@ -117,14 +133,16 @@ def remove_from_databases(user, groups, syncgroups): update = True if update: - if authserviceinfo.jabber_username != "": + if authserviceinfo.jabber_username and authserviceinfo.jabber_username != "": update_jabber_groups(user) - if authserviceinfo.mumble_username != "": + if authserviceinfo.mumble_username and authserviceinfo.mumble_username != "": update_mumble_groups(user) - if authserviceinfo.forum_username != "": + if authserviceinfo.forum_username and authserviceinfo.forum_username != "": update_forum_groups(user) - if authserviceinfo.ipboard_username != "": + if authserviceinfo.ipboard_username and authserviceinfo.ipboard_username != "": update_ipboard_groups(user) + if authserviceinfo.teamspeak3_uid and authserviceinfo.teamspeak3_uid != "": + update_teamspeak3_groups(user) # Run every minute diff --git a/portal/views.py b/portal/views.py old mode 100644 new mode 100755 index 1bc092af..5af18fc1 --- a/portal/views.py +++ b/portal/views.py @@ -6,6 +6,8 @@ from eveonline.managers import EveManager from authentication.managers import AuthServicesInfoManager + + # Create your views here. def index_view(request): return render_to_response('public/index.html', None, context_instance=RequestContext(request)) diff --git a/requirements.txt b/requirements.txt index 15cdbb38..72b6116a 100755 --- a/requirements.txt +++ b/requirements.txt @@ -12,3 +12,4 @@ django-evolution django-bootstrap-form django-celery +git+git://github.com/nikdoof/python-ts3.git \ No newline at end of file diff --git a/services/managers/teamspeak3_manager.py b/services/managers/teamspeak3_manager.py new file mode 100755 index 00000000..92429020 --- /dev/null +++ b/services/managers/teamspeak3_manager.py @@ -0,0 +1,221 @@ +from django.conf import settings + +from services.managers.util.ts3 import TS3Server + + +class Teamspeak3Manager: + def __init__(self): + pass + + @staticmethod + def __get_created_server(): + server = TS3Server(settings.TEAMSPEAK3_SERVER_IP, settings.TEAMSPEAK3_SERVER_PORT) + server.login(settings.TEAMSPEAK3_SERVERQUERY_USER, settings.TEAMSPEAK3_SERVERQUERY_PASSWORD) + server.use(settings.TEAMSPEAK3_VIRTUAL_SERVER) + return server + + @staticmethod + def __santatize_username(username): + sanatized = username.replace(" ", "_") + sanatized = sanatized.replace("'", "") + return sanatized.lower() + + @staticmethod + def __generate_username(username, corp_ticker): + return "[" + corp_ticker + "]" + username + + @staticmethod + def __generate_username_blue(username, corp_ticker): + return "[BLUE][" + corp_ticker + "]" + username + + @staticmethod + def _get_userid(uid): + server = Teamspeak3Manager.__get_created_server() + ret = server.send_command('customsearch', {'ident': 'sso_uid', 'pattern': uid}) + if ret and 'keys' in ret and 'cldbid' in ret['keys']: + return ret['keys']['cldbid'] + + @staticmethod + def _group_id_by_name(groupname): + server = Teamspeak3Manager.__get_created_server() + group_cache = server.send_command('servergrouplist') + for group in group_cache: + if group['keys']['name'] == groupname: + return group['keys']['sgid'] + + return None + + @staticmethod + def _create_group(groupname): + server = Teamspeak3Manager.__get_created_server() + sgid = Teamspeak3Manager._group_id_by_name(groupname) + if not sgid: + ret = server.send_command('servergroupadd', {'name': groupname}) + Teamspeak3Manager.__group_cache = None + sgid = ret['keys']['sgid'] + server.send_command('servergroupaddperm', + {'sgid': sgid, 'permsid': 'i_group_needed_modify_power', 'permvalue': 75, + 'permnegated': 0, 'permskip': 0}) + server.send_command('servergroupaddperm', + {'sgid': sgid, 'permsid': 'i_group_needed_member_add_power', 'permvalue': 100, + 'permnegated': 0, 'permskip': 0}) + server.send_command('servergroupaddperm', + {'sgid': sgid, 'permsid': 'i_group_needed_member_remove_power', 'permvalue': 100, + 'permnegated': 0, 'permskip': 0}) + return sgid + + @staticmethod + def _user_group_list(cldbid): + server = Teamspeak3Manager.__get_created_server() + groups = server.send_command('servergroupsbyclientid', {'cldbid': cldbid}) + outlist = {} + + if type(groups) == list: + for group in groups: + outlist[group['keys']['name']] = group['keys']['sgid'] + elif type(groups) == dict: + outlist[groups['keys']['name']] = groups['keys']['sgid'] + + return outlist + + @staticmethod + def _group_list(): + server = Teamspeak3Manager.__get_created_server() + group_cache = server.send_command('servergrouplist') + outlist = {} + for group in group_cache: + outlist[group['keys']['name']] = group['keys']['sgid'] + return outlist + + @staticmethod + def _add_user_to_group(uid, groupname): + server = Teamspeak3Manager.__get_created_server() + server_groups = Teamspeak3Manager._group_list() + user_groups = Teamspeak3Manager._user_group_list(uid) + + if not groupname in server_groups: + Teamspeak3Manager._create_group(groupname) + if not groupname in user_groups: + server.send_command('servergroupaddclient', + {'sgid': Teamspeak3Manager._group_id_by_name(groupname), 'cldbid': uid}) + + @staticmethod + def _remove_user_from_group(uid, groupname): + server = Teamspeak3Manager.__get_created_server() + server_groups = Teamspeak3Manager._group_list() + user_groups = Teamspeak3Manager._user_group_list(uid) + + if groupname in server_groups: + Teamspeak3Manager._create_group(groupname) + if groupname in user_groups: + server.send_command('servergroupdelclient', + {'sgid': Teamspeak3Manager._group_id_by_name(groupname), 'cldbid': uid}) + + @staticmethod + def add_user(username, corp_ticker): + username_clean = Teamspeak3Manager.__generate_username(Teamspeak3Manager.__santatize_username(username), + corp_ticker) + server = Teamspeak3Manager.__get_created_server() + token = "" + + server_groups = Teamspeak3Manager._group_list() + if not settings.DEFAULT_ALLIANCE_GROUP in server_groups: + Teamspeak3Manager._create_group(settings.DEFAULT_ALLIANCE_GROUP) + + alliange_group_id = Teamspeak3Manager._group_id_by_name(settings.DEFAULT_ALLIANCE_GROUP) + + ret = server.send_command('tokenadd', {'tokentype': 0, 'tokenid1': alliange_group_id, 'tokenid2': 0, + 'tokendescription': username_clean, + 'tokencustomset': "ident=sso_uid value=%s" % username_clean}) + + try: + if 'keys' in ret: + if 'token' in ret['keys']: + token = ret['keys']['token'] + except: + pass + + return username_clean, token + + @staticmethod + def add_blue_user(username, corp_ticker): + username_clean = Teamspeak3Manager.__generate_username_blue(Teamspeak3Manager.__santatize_username(username), + corp_ticker) + server = Teamspeak3Manager.__get_created_server() + token = "" + + server_groups = Teamspeak3Manager._group_list() + if not settings.DEFAULT_BLUE_GROUP in server_groups: + Teamspeak3Manager._create_group(settings.DEFAULT_BLUE_GROUP) + + blue_group_id = Teamspeak3Manager._group_id_by_name(settings.DEFAULT_BLUE_GROUP) + + ret = server.send_command('tokenadd', {'tokentype': 0, 'tokenid1': blue_group_id, 'tokenid2': 0, + 'tokendescription': username_clean, + 'tokencustomset': "ident=sso_uid value=%s" % username_clean}) + + try: + if 'keys' in ret: + if 'token' in ret['keys']: + token = ret['keys']['token'] + + except: + pass + + return username_clean, token + + @staticmethod + def delete_user(uid): + server = Teamspeak3Manager.__get_created_server() + user = Teamspeak3Manager._get_userid(uid) + if user: + for client in server.send_command('clientlist'): + if client['keys']['client_database_id'] == user: + server.send_command('clientkick', {'clid': client['keys']['clid'], 'reasonid': 5, + 'reasonmsg': 'Auth service deleted'}) + + ret = server.send_command('clientdbdelete', {'cldbid': user}) + if ret == '0': + return True + else: + return True + + @staticmethod + def check_user_exists(uid): + if Teamspeak3Manager._get_userid(uid): + return True + + return False + + @staticmethod + def generate_new_permissionkey(uid, username, corpticker): + Teamspeak3Manager.delete_user(uid) + return Teamspeak3Manager.add_user(username, corpticker) + + @staticmethod + def generate_new_blue_permissionkey(uid, username, corpticker): + Teamspeak3Manager.delete_user(uid) + return Teamspeak3Manager.add_blue_user(username, corpticker) + + @staticmethod + def update_groups(uid, groups): + userid = Teamspeak3Manager._get_userid(uid) + if userid: + server_groups = Teamspeak3Manager._group_list() + user_groups = set(Teamspeak3Manager._user_group_list(userid)) + act_groups = set([g.replace(' ', '-') for g in groups]) + addgroups = act_groups - user_groups + remgroups = user_groups - act_groups + + print userid + print addgroups + print remgroups + + for g in addgroups: + if not g in server_groups.keys(): + Teamspeak3Manager._create_group(g) + Teamspeak3Manager._add_user_to_group(userid, g) + + for g in remgroups: + Teamspeak3Manager._remove_user_from_group(userid, g) + diff --git a/services/managers/util/__init__.py b/services/managers/util/__init__.py new file mode 100755 index 00000000..8fdaf87a --- /dev/null +++ b/services/managers/util/__init__.py @@ -0,0 +1 @@ +__author__ = 'r4stl1n' diff --git a/services/managers/util/ts3.py b/services/managers/util/ts3.py new file mode 100755 index 00000000..9b1c55fb --- /dev/null +++ b/services/managers/util/ts3.py @@ -0,0 +1,244 @@ +import socket +import logging + + +class ConnectionError(): + def __init__(self, ip, port): + self.ip = ip + self.port = port + + def __str__(self): + return 'Error connecting to host %s port %s' % (self.ip, self.port) + + +ts3_escape = {'/': r"\/", + ' ': r'\s', + '|': r'\p', + "\a": r'\a', + "\b": r'\b', + "\f": r'\f', + "\n": r'\n', + "\r": r'\r', + "\t": r'\t', + "\v": r'\v'} + + +class TS3Proto(): + bytesin = 0 + bytesout = 0 + + _connected = False + + def __init__(self): + self._log = logging.getLogger('%s.%s' % (__name__, self.__class__.__name__)) + pass + + def connect(self, ip, port): + s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + try: + s.connect((ip, port)) + except: + # raise ConnectionError(ip, port) + raise + else: + self._sock = s + self._sockfile = s.makefile('r', 0) + + data = self._sockfile.readline() + if data.strip() == "TS3": + self._sockfile.readline() + self._connected = True + return True + + def disconnect(self): + self.send_command("quit") + self._sock.close() + self._sock = None + self._connected = False + self._log.info('Disconnected') + + def send_command(self, command, keys=None, opts=None): + cmd = self.construct_command(command, keys=keys, opts=opts) + self.send('%s\n' % cmd) + + data = [] + + while True: + resp = self._sockfile.readline() + resp = self.parse_command(resp) + if not 'command' in resp: + data.append(resp) + else: + break + + if resp['command'] == 'error': + if data and resp['keys']['id'] == '0': + if len(data) > 1: + return data + else: + return data[0] + else: + return resp['keys']['id'] + + def construct_command(self, command, keys=None, opts=None): + """ + Constructs a TS3 formatted command string + Keys can have a single nested list to construct a nested parameter + @param command: Command list + @type command: string + @param keys: Key/Value pairs + @type keys: dict + @param opts: Options + @type opts: list + """ + + cstr = [command] + + # Add the keys and values, escape as needed + if keys: + for key in keys: + if isinstance(keys[key], list): + ncstr = [] + for nest in keys[key]: + ncstr.append("%s=%s" % (key, self._escape_str(nest))) + cstr.append("|".join(ncstr)) + else: + cstr.append("%s=%s" % (key, self._escape_str(keys[key]))) + + # Add in options + if opts: + for opt in opts: + cstr.append("-%s" % opt) + + return " ".join(cstr) + + def parse_command(self, commandstr): + """ + Parses a TS3 command string into command/keys/opts tuple + @param commandstr: Command string + @type commandstr: string + """ + + if len(commandstr.split('|')) > 1: + vals = [] + for cmd in commandstr.split('|'): + vals.append(self.parse_command(cmd)) + return vals + + cmdlist = commandstr.strip().split(' ') + command = None + keys = {} + opts = [] + + for key in cmdlist: + v = key.strip().split('=') + if len(v) > 1: + # Key + if len > 2: + # Fix the stupidities in TS3 escaping + v = [v[0], '='.join(v[1:])] + key, value = v + keys[key] = self._unescape_str(value) + elif v[0][0] == '-': + # Option + opts.append(v[0][1:]) + else: + command = v[0] + + d = {'keys': keys, 'opts': opts} + if command: + d['command'] = command + return d + + @staticmethod + def _escape_str(value): + """ + Escape a value into a TS3 compatible string + @param value: Value + @type value: string/int + """ + + if isinstance(value, int): return "%d" % value + value = value.replace("\\", r'\\') + for i, j in ts3_escape.iteritems(): + value = value.replace(i, j) + return value + + @staticmethod + def _unescape_str(value): + """ + Unescape a TS3 compatible string into a normal string + @param value: Value + @type value: string/int + """ + + if isinstance(value, int): return "%d" % value + value = value.replace(r"\\", "\\") + for i, j in ts3_escape.iteritems(): + value = value.replace(j, i) + return value + + + def send(self, payload): + if self._connected: + self._log.debug('Sent: %s' % payload) + self._sockfile.write(payload) + + +class TS3Server(TS3Proto): + def __init__(self, ip, port, id=0, sock=None): + """ + Abstraction class for TS3 Servers + @param ip: IP Address + @type ip: str + @param port: Port Number + @type port: int + """ + TS3Proto.__init__(self) + + if not sock: + if self.connect(ip, port) and id > 0: + self.use(id) + else: + self._sock = sock + self._sockfile = sock.makefile('r', 0) + self._connected = True + + def login(self, username, password): + """ + Login to the TS3 Server + @param username: Username + @type username: str + @param password: Password + @type password: str + """ + d = self.send_command('login', keys={'client_login_name': username, 'client_login_password': password}) + if d == 0: + self._log.info('Login Successful') + return True + return False + + def serverlist(self): + """ + Get a list of all Virtual Servers on the connected TS3 instance + """ + if self._connected: + return self.send_command('serverlist') + + def gm(self, msg): + """ + Send a global message to the current Virtual Server + @param msg: Message + @type ip: str + """ + if self._connected: + return self.send_command('gm', keys={'msg': msg}) + + def use(self, id): + """ + Use a particular Virtual Server instance + @param id: Virtual Server ID + @type id: int + """ + if self._connected and id > 0: + self.send_command('use', keys={'sid': id}) \ No newline at end of file diff --git a/services/views.py b/services/views.py index 64e35eb0..26e1e775 100755 --- a/services/views.py +++ b/services/views.py @@ -3,23 +3,25 @@ from django.shortcuts import HttpResponseRedirect from django.shortcuts import render_to_response from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import permission_required +from django.contrib.auth.decorators import user_passes_test from managers.openfire_manager import OpenfireManager from managers.phpbb3_manager import Phpbb3Manager from managers.mumble_manager import MumbleManager from managers.ipboard_manager import IPBoardManager +from managers.teamspeak3_manager import Teamspeak3Manager from authentication.managers import AuthServicesInfoManager from eveonline.managers import EveManager from celerytask.tasks import update_jabber_groups from celerytask.tasks import update_mumble_groups from celerytask.tasks import update_forum_groups from celerytask.tasks import update_ipboard_groups +from celerytask.tasks import update_teamspeak3_groups from forms import JabberBroadcastForm from forms import FleetFormatterForm -from django.contrib.auth.decorators import user_passes_test - from util import check_if_user_has_permission + @login_required def fleet_formatter_view(request): if request.method == 'POST': @@ -150,7 +152,6 @@ def reset_ipboard_password(request): return HttpResponseRedirect("/dashboard") - @login_required @user_passes_test(service_blue_alliance_test) def activate_jabber(request): @@ -228,3 +229,55 @@ def reset_mumble_password(request): AuthServicesInfoManager.update_user_mumble_info(authinfo.mumble_username, result, request.user) return HttpResponseRedirect("/services/") return HttpResponseRedirect("/") + + +@login_required +@user_passes_test(service_blue_alliance_test) +def activate_teamspeak3(request): + authinfo = AuthServicesInfoManager.get_auth_service_info(request.user) + character = EveManager.get_character_by_id(authinfo.main_char_id) + if check_if_user_has_permission(request.user, "blue_member"): + result = Teamspeak3Manager.add_blue_user(character.character_name, character.corporation_ticker) + else: + result = Teamspeak3Manager.add_user(character.character_name, character.corporation_ticker) + + # if its empty we failed + if result[0] is not "": + AuthServicesInfoManager.update_user_teamspeak3_info(result[0], result[1], request.user) + update_teamspeak3_groups(request.user) + return HttpResponseRedirect("/services/") + return HttpResponseRedirect("/dashboard") + + +@login_required +@user_passes_test(service_blue_alliance_test) +def deactivate_teamspeak3(request): + authinfo = AuthServicesInfoManager.get_auth_service_info(request.user) + result = Teamspeak3Manager.delete_user(authinfo.teamspeak3_uid) + # if false we failed + if result: + AuthServicesInfoManager.update_user_teamspeak3_info("", "", request.user) + return HttpResponseRedirect("/services/") + return HttpResponseRedirect("/") + + +@login_required +@user_passes_test(service_blue_alliance_test) +def reset_teamspeak3_perm(request): + authinfo = AuthServicesInfoManager.get_auth_service_info(request.user) + character = EveManager.get_character_by_id(authinfo.main_char_id) + + Teamspeak3Manager.delete_user(authinfo.teamspeak3_uid) + + if check_if_user_has_permission(request.user, "blue_member"): + result = Teamspeak3Manager.generate_new_blue_permissionkey(authinfo.teamspeak3_uid, character.character_name, + character.corporation_ticker) + else: + result = Teamspeak3Manager.generate_new_permissionkey(authinfo.teamspeak3_uid, character.character_name, + character.corporation_ticker) + + # if blank we failed + if result != "": + AuthServicesInfoManager.update_user_teamspeak3_info(result[0], result[1], request.user) + return HttpResponseRedirect("/services/") + return HttpResponseRedirect("/") \ No newline at end of file diff --git a/templates/registered/services.html b/templates/registered/services.html index 1e784aab..240ef538 100755 --- a/templates/registered/services.html +++ b/templates/registered/services.html @@ -8,171 +8,63 @@ {% block content %}
-

Available Services

- {% if perms.auth.blue_member %} - - - - - - - - - {% if ENABLE_BLUE_FORUM %} - - - - - + + + + + + + + + + + + + + {% endif %} +
ServiceUsernamePasswordDomainAction
Forums{{ authinfo.forum_username }}{{ authinfo.forum_password }}{{ FORUM_URL }} - {% ifequal authinfo.forum_username "" %} - +

Available Services

+ {% if perms.auth.blue_member %} + + + + + + + + + {% if ENABLE_BLUE_FORUM %} + + + + + - {% endif %} - {% if ENABLE_BLUE_IPBOARD %} - - - - - + {% endif %} + {% if ENABLE_BLUE_IPBOARD %} + + + + + - {% endif %} - {% if ENABLE_BLUE_JABBER %} - - - - - - - - {% endif %} - {% if ENABLE_BLUE_MUMBLE %} - - - - - - - - {% endif %} -
ServiceUsernamePasswordDomainAction
Forums{{ authinfo.forum_username }}{{ authinfo.forum_password }}{{ FORUM_URL }} + {% ifequal authinfo.forum_username "" %} + - - {% else %} - + class="glyphicon glyphicon-ok"> + + {% else %} + - - + class="glyphicon glyphicon-refresh"> + + - - {% endifequal %} - IPBoard Forums{{ authinfo.ipboard_username }}{{ authinfo.ipboard_password }}{{ FORUM_URL }} - {% ifequal authinfo.ipboard_username "" %} - + class="glyphicon glyphicon-remove"> + + {% endifequal %} + IPBoard Forums{{ authinfo.ipboard_username }}{{ authinfo.ipboard_password }}{{ FORUM_URL }} + {% ifequal authinfo.ipboard_username "" %} + - - {% else %} - + class="glyphicon glyphicon-ok"> + + {% else %} + - - + class="glyphicon glyphicon-refresh"> + + - - {% endifequal %} -
Jabber{{ authinfo.jabber_username }}{{ authinfo.jabber_password }}{{ JABBER_URL }} - {% ifequal authinfo.jabber_username "" %} - - - - {% else %} - - - - - - - {% endifequal %} -
Mumble{{ authinfo.mumble_username }}{{ authinfo.mumble_password }}{{ MUMBLE_URL }} - {% ifequal authinfo.mumble_username "" %} - - - - {% else %} - - - - - - - {% endifequal %} -
- {% elif perms.auth.alliance_member %} - - - - - - - - - {% if ENABLE_ALLIANCE_FORUM %} - - - - - - - - {% endif %} - {% if ENABLE_ALLIANCE_IPBOARD %} - - - - - - {% endif %} - {% if ENABLE_ALLIANCE_JABBER %} + class="glyphicon glyphicon-remove"> + + {% endifequal %} + + {% endif %} + {% if ENABLE_BLUE_JABBER %} @@ -196,8 +88,8 @@ {% endifequal %} - {% endif %} - {% if ENABLE_ALLIANCE_MUMBLE %} + {% endif %} + {% if ENABLE_BLUE_MUMBLE %} @@ -221,11 +113,195 @@ {% endifequal %} - {% endif %} -
ServiceUsernamePasswordDomainAction
Forums{{ authinfo.forum_username }}{{ authinfo.forum_password }}{{ FORUM_URL }} - {% ifequal authinfo.forum_username "" %} - - - - {% else %} - - - - - - - {% endifequal %} -
IPBoard Forums{{ authinfo.ipboard_username }}{{ authinfo.ipboard_password }}{{ FORUM_URL }} - {% ifequal authinfo.ipboard_username "" %} - - - - {% else %} - - - - - - - {% endifequal %} -
Jabber {{ authinfo.jabber_username }}
Mumble {{ authinfo.mumble_username }}
- {% else %} - - {% endif %} + {% endif %} + {% if ENABLE_BLUE_TEAMSPEAK3 %} +
ServiceUnique IDPermissionKeyQuick LinkAction
Teamspeak 3{{ authinfo.teamspeak3_uid }}{{ authinfo.teamspeak3_perm_key }} + {% ifequal authinfo.teamspeak3_uid "" %} + {% else %} + Teamspeak3 + Link + {% endifequal %} + + {% ifequal authinfo.teamspeak3_uid "" %} + + + + {% else %} + + + + + + + {% endifequal %} +
+ {% elif perms.auth.alliance_member %} + + + + + + + + + {% if ENABLE_ALLIANCE_FORUM %} + + + + + + + + {% endif %} + {% if ENABLE_ALLIANCE_IPBOARD %} + + + + + + {% endif %} + {% if ENABLE_ALLIANCE_JABBER %} + + + + + + + + {% endif %} + {% if ENABLE_ALLIANCE_MUMBLE %} + + + + + + + + {% endif %} + {% if ENABLE_ALLIANCE_TEAMSPEAK3 %} + + + + + + + + + + + + + + + {% endif %} +
ServiceUsernamePasswordDomainAction
Forums{{ authinfo.forum_username }}{{ authinfo.forum_password }}{{ FORUM_URL }} + {% ifequal authinfo.forum_username "" %} + + + + {% else %} + + + + + + + {% endifequal %} +
IPBoard Forums{{ authinfo.ipboard_username }}{{ authinfo.ipboard_password }}{{ FORUM_URL }} + {% ifequal authinfo.ipboard_username "" %} + + + + {% else %} + + + + + + + {% endifequal %} +
Jabber{{ authinfo.jabber_username }}{{ authinfo.jabber_password }}{{ JABBER_URL }} + {% ifequal authinfo.jabber_username "" %} + + + + {% else %} + + + + + + + {% endifequal %} +
Mumble{{ authinfo.mumble_username }}{{ authinfo.mumble_password }}{{ MUMBLE_URL }} + {% ifequal authinfo.mumble_username "" %} + + + + {% else %} + + + + + + + {% endifequal %} +
ServiceUnique IDPermissionKeyQuick LinkAction
Teamspeak 3{{ authinfo.teamspeak3_uid }}{{ authinfo.teamspeak3_perm_key }} + {% ifequal authinfo.teamspeak3_uid "" %} + {% else %} + Teamspeak3 + Link + {% endifequal %} + + {% ifequal authinfo.teamspeak3_uid "" %} + + + + {% else %} + + + + + + + {% endifequal %} +
+ {% else %} + + {% endif %}
{% endblock content %} diff --git a/util/common_task.py b/util/common_task.py index 733c78f2..5c613447 100755 --- a/util/common_task.py +++ b/util/common_task.py @@ -6,6 +6,7 @@ from services.managers.openfire_manager import OpenfireManager from services.managers.phpbb3_manager import Phpbb3Manager from services.managers.mumble_manager import MumbleManager from services.managers.ipboard_manager import IPBoardManager +from services.managers.teamspeak3_manager import Teamspeak3Manager def add_user_to_group(user, groupname): @@ -37,6 +38,9 @@ def deactivate_services(user): if authinfo.ipboard_username and authinfo.ipboard_username != "": IPBoardManager.disable_user(authinfo.ipboard_username) AuthServicesInfoManager.update_user_forum_info("", "", user) + if authinfo.teamspeak3_uid and authinfo.teamspeak3_uid != "": + Teamspeak3Manager.delete_user(authinfo.teamspeak3_uid) + AuthServicesInfoManager.update_user_teamspeak3_info("", "", user) def generate_corp_group_name(corpname): diff --git a/util/context_processors.py b/util/context_processors.py index 1792a233..c3b1689e 100755 --- a/util/context_processors.py +++ b/util/context_processors.py @@ -21,9 +21,12 @@ def domain_url(request): 'ENABLE_ALLIANCE_JABBER': settings.ENABLE_ALLIANCE_JABBER, 'ENABLE_ALLIANCE_MUMBLE': settings.ENABLE_ALLIANCE_MUMBLE, 'ENABLE_ALLIANCE_IPBOARD': settings.ENABLE_ALLIANCE_IPBOARD, + 'ENABLE_ALLIANCE_TEAMSPEAK3': settings.ENABLE_ALLIANCE_TEAMSPEAK3, 'ENABLE_BLUE_JABBER': settings.ENABLE_BLUE_JABBER, 'ENABLE_BLUE_FORUM': settings.ENABLE_BLUE_FORUM, 'ENABLE_BLUE_MUMBLE': settings.ENABLE_BLUE_MUMBLE, 'ENABLE_BLUE_IPBOARD': settings.ENABLE_BLUE_IPBOARD, + 'ENABLE_BLUE_TEAMSPEAK3': settings.ENABLE_BLUE_TEAMSPEAK3, + 'TEAMSPEAK3_PUBLIC_URL': settings.TEAMSPEAK3_PUBLIC_URL, 'JACK_KNIFE_URL': settings.JACK_KNIFE_URL, 'CURRENT_UTC_TIME': timezone.now()} \ No newline at end of file