From 361e4a64093c547f4e49a9635644a7d047bff48f Mon Sep 17 00:00:00 2001 From: Adarnof Date: Sat, 26 Mar 2016 03:08:28 +0000 Subject: [PATCH] Prompt users to join TS when creating account - will allow groups to sync - add button to get back to this prompt - do not sync groups until joined server Closes #331 --- alliance_auth/urls.py | 1 + services/forms.py | 9 +++++++ services/managers/teamspeak3_manager.py | 2 -- services/views.py | 25 ++++++++++++++++-- stock/templates/registered/services.html | 2 ++ stock/templates/registered/teamspeakjoin.html | 26 +++++++++++++++++++ 6 files changed, 61 insertions(+), 4 deletions(-) create mode 100644 stock/templates/registered/teamspeakjoin.html 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 %} +
+

Verify Teamspeak Identity

+
+
+ Join Server +
+ +
+
+
+{% endblock %}