diff --git a/alliance_auth/urls.py b/alliance_auth/urls.py
index f3953611..74dc20f0 100755
--- a/alliance_auth/urls.py
+++ b/alliance_auth/urls.py
@@ -130,6 +130,7 @@ urlpatterns = patterns('',
name='auth_deactivate_teamspeak3'),
url(r'reset_teamspeak3_perm/$', 'services.views.reset_teamspeak3_perm',
name='auth_reset_teamspeak3_perm'),
+ url(r'verify_teamspeak3/$', 'services.views.verify_teamspeak3', name='auth_verify_teamspeak3'),
# Discord Service Control
url(r'^activate_discord/$', 'services.views.activate_discord', name='auth_activate_discord'),
diff --git a/services/forms.py b/services/forms.py
index c613554d..07ca928a 100644
--- a/services/forms.py
+++ b/services/forms.py
@@ -1,4 +1,5 @@
from django import forms
+from services.managers.teamspeak3_manager import Teamspeak3Manager
class JabberBroadcastForm(forms.Form):
group = forms.ChoiceField(widget=forms.Select)
@@ -30,3 +31,11 @@ class ServicePasswordForm(forms.Form):
if not len(password) >= 8:
raise forms.ValidationError("Password must be at least 8 characters long.")
return password
+
+class TeamspeakJoinForm(forms.Form):
+ username = forms.CharField(widget=forms.HiddenInput())
+
+ def clean(self):
+ if Teamspeak3Manager._get_userid(self.cleaned_data['username']):
+ return self.cleaned_data
+ raise forms.ValidationError("Unable to locate user %s on server" % self.cleaned_data['username'])
diff --git a/services/managers/teamspeak3_manager.py b/services/managers/teamspeak3_manager.py
index d4959fe3..75e51e36 100755
--- a/services/managers/teamspeak3_manager.py
+++ b/services/managers/teamspeak3_manager.py
@@ -88,11 +88,9 @@ class Teamspeak3Manager:
if type(groups) == list:
logger.debug("Recieved multiple groups. Iterating.")
for group in groups:
- logger.debug("Assigning name/id dict: %s = %s" % (group['keys']['name'], group['keys']['sgid']))
outlist[group['keys']['name']] = group['keys']['sgid']
elif type(groups) == dict:
logger.debug("Recieved single group.")
- logger.debug("Assigning name/id dict: %s = %s" % (groups['keys']['name'], groups['keys']['sgid']))
outlist[groups['keys']['name']] = groups['keys']['sgid']
logger.debug("Returning name/id pairing: %s" % outlist)
return outlist
diff --git a/services/views.py b/services/views.py
index 75ed298b..debd20c6 100755
--- a/services/views.py
+++ b/services/views.py
@@ -26,6 +26,7 @@ from forms import JabberBroadcastForm
from forms import FleetFormatterForm
from forms import DiscordForm
from forms import ServicePasswordForm
+from forms import TeamspeakJoinForm
from util import check_if_user_has_permission
import threading
@@ -339,12 +340,32 @@ def activate_teamspeak3(request):
if result[0] is not "":
AuthServicesInfoManager.update_user_teamspeak3_info(result[0], result[1], request.user)
logger.debug("Updated authserviceinfo for user %s with TS3 credentials. Updating groups." % request.user)
- update_teamspeak3_groups.delay(request.user.pk)
logger.info("Succesfully activated TS3 for user %s" % request.user)
- return HttpResponseRedirect("/services/")
+ return HttpResponseRedirect("/verify_teamspeak3/")
logger.error("Unsuccessful attempt to activate TS3 for user %s" % request.user)
return HttpResponseRedirect("/dashboard")
+@login_required
+@user_passes_test(service_blue_alliance_test)
+def verify_teamspeak3(request):
+ logger.debug("verify_teamspeak3 called by user %s" % request.user)
+ authinfo = AuthServicesInfoManager.get_auth_service_info(request.user)
+ if not authinfo.teamspeak3_uid:
+ logger.warn("Unable to validate user %s teamspeak: no teamspeak data" % request.user)
+ return HttpResponseRedirect("/services")
+ if request.method == "POST":
+ form = TeamspeakJoinForm(request.POST)
+ if form.is_valid():
+ update_teamspeak3_groups.delay(request.user.pk)
+ logger.debug("Validated user %s joined TS server")
+ return HttpResponseRedirect("/services/")
+ else:
+ form = TeamspeakJoinForm({'username':authinfo.teamspeak3_uid})
+ context = {
+ 'form': form,
+ 'authinfo': authinfo,
+ }
+ return render_to_response('registered/teamspeakjoin.html', context, context_instance=RequestContext(request))
@login_required
@user_passes_test(service_blue_alliance_test)
diff --git a/stock/templates/registered/services.html b/stock/templates/registered/services.html
index 317edc0d..44e6b7a6 100755
--- a/stock/templates/registered/services.html
+++ b/stock/templates/registered/services.html
@@ -181,6 +181,7 @@
class="glyphicon glyphicon-ok">
{% else %}
+
@@ -368,6 +369,7 @@
class="glyphicon glyphicon-ok">
{% else %}
+
diff --git a/stock/templates/registered/teamspeakjoin.html b/stock/templates/registered/teamspeakjoin.html
new file mode 100644
index 00000000..40ab4894
--- /dev/null
+++ b/stock/templates/registered/teamspeakjoin.html
@@ -0,0 +1,26 @@
+{% extends "public/base.html" %}
+{% load bootstrap %}
+{% load staticfiles %}
+
+{% block title %}Alliance Auth{% endblock %}
+
+{% block page_title %}Verify Teamspeak{% endblock page_title %}
+{% block extra_css %}{% endblock extra_css %}
+
+{% block content %}
+
+{% endblock %}