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
This commit is contained in:
Adarnof 2016-03-26 03:08:28 +00:00
parent ad7ace872f
commit 361e4a6409
6 changed files with 61 additions and 4 deletions

View File

@ -130,6 +130,7 @@ urlpatterns = patterns('',
name='auth_deactivate_teamspeak3'), name='auth_deactivate_teamspeak3'),
url(r'reset_teamspeak3_perm/$', 'services.views.reset_teamspeak3_perm', url(r'reset_teamspeak3_perm/$', 'services.views.reset_teamspeak3_perm',
name='auth_reset_teamspeak3_perm'), name='auth_reset_teamspeak3_perm'),
url(r'verify_teamspeak3/$', 'services.views.verify_teamspeak3', name='auth_verify_teamspeak3'),
# Discord Service Control # Discord Service Control
url(r'^activate_discord/$', 'services.views.activate_discord', name='auth_activate_discord'), url(r'^activate_discord/$', 'services.views.activate_discord', name='auth_activate_discord'),

View File

@ -1,4 +1,5 @@
from django import forms from django import forms
from services.managers.teamspeak3_manager import Teamspeak3Manager
class JabberBroadcastForm(forms.Form): class JabberBroadcastForm(forms.Form):
group = forms.ChoiceField(widget=forms.Select) group = forms.ChoiceField(widget=forms.Select)
@ -30,3 +31,11 @@ class ServicePasswordForm(forms.Form):
if not len(password) >= 8: if not len(password) >= 8:
raise forms.ValidationError("Password must be at least 8 characters long.") raise forms.ValidationError("Password must be at least 8 characters long.")
return password 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'])

View File

@ -88,11 +88,9 @@ class Teamspeak3Manager:
if type(groups) == list: if type(groups) == list:
logger.debug("Recieved multiple groups. Iterating.") logger.debug("Recieved multiple groups. Iterating.")
for group in groups: 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'] outlist[group['keys']['name']] = group['keys']['sgid']
elif type(groups) == dict: elif type(groups) == dict:
logger.debug("Recieved single group.") 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'] outlist[groups['keys']['name']] = groups['keys']['sgid']
logger.debug("Returning name/id pairing: %s" % outlist) logger.debug("Returning name/id pairing: %s" % outlist)
return outlist return outlist

View File

@ -26,6 +26,7 @@ from forms import JabberBroadcastForm
from forms import FleetFormatterForm from forms import FleetFormatterForm
from forms import DiscordForm from forms import DiscordForm
from forms import ServicePasswordForm from forms import ServicePasswordForm
from forms import TeamspeakJoinForm
from util import check_if_user_has_permission from util import check_if_user_has_permission
import threading import threading
@ -339,12 +340,32 @@ def activate_teamspeak3(request):
if result[0] is not "": if result[0] is not "":
AuthServicesInfoManager.update_user_teamspeak3_info(result[0], result[1], request.user) 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) 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) 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) logger.error("Unsuccessful attempt to activate TS3 for user %s" % request.user)
return HttpResponseRedirect("/dashboard") 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 @login_required
@user_passes_test(service_blue_alliance_test) @user_passes_test(service_blue_alliance_test)

View File

@ -181,6 +181,7 @@
class="glyphicon glyphicon-ok"></span></button> class="glyphicon glyphicon-ok"></span></button>
</a> </a>
{% else %} {% else %}
<a href="{% url 'auth_verify_teamspeak3' %}" class="btn btn-success" title="Verify"><span class="glyphicon glyphicon-user"></a>
<a href="{% url 'auth_reset_teamspeak3_perm' %}"> <a href="{% url 'auth_reset_teamspeak3_perm' %}">
<button type="button" class="btn btn-primary"><span <button type="button" class="btn btn-primary"><span
class="glyphicon glyphicon-refresh"></span></button> class="glyphicon glyphicon-refresh"></span></button>
@ -368,6 +369,7 @@
class="glyphicon glyphicon-ok"></span></button> class="glyphicon glyphicon-ok"></span></button>
</a> </a>
{% else %} {% else %}
<a href="{% url 'auth_verify_teamspeak3' %}" class="btn btn-success" title="Verify"><span class="glyphicon glyphicon-user"></a>
<a href="{% url 'auth_reset_teamspeak3_perm' %}"> <a href="{% url 'auth_reset_teamspeak3_perm' %}">
<button type="button" class="btn btn-primary"><span <button type="button" class="btn btn-primary"><span
class="glyphicon glyphicon-refresh"></span></button> class="glyphicon glyphicon-refresh"></span></button>

View File

@ -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 %}
<div class="col-lg-12">
<h1 class="page-header text-center">Verify Teamspeak Identity</h1>
<div class="container-fluid">
<div class="col-md-4 col-md-offset-4">
<a href="ts3server://{{ TEAMSPEAK3_PUBLIC_URL }}?token={{ authinfo.teamspeak3_perm_key }}&nickname={{ authinfo.teamspeak3_uid }}" class="btn btn-primary btn-block btn-lg" title="Join">Join Server</a>
<br/>
<form class="form-signin" role="form" action="{% url 'auth_verify_teamspeak3' %}" method="POST">
{% csrf_token %}
{{ form|bootstrap }}
<br/>
<button class="btn btn-lg btn-primary btn-block" type="submit">Continue</button>
</form>
</div>
</div>
</div>
{% endblock %}