Restructure Alliance Auth package (#867)

* Refactor allianceauth into its own package

* Add setup

* Add missing default_app_config declarations

* Fix timerboard namespacing

* Remove obsolete future imports

* Remove py2 mock support

* Remove six

* Add experimental 3.7 support and multiple Dj versions

* Remove python_2_unicode_compatible

* Add navhelper as local package

* Update requirements
This commit is contained in:
Basraah
2017-09-19 09:46:40 +10:00
committed by GitHub
parent d10580b56b
commit 786859294d
538 changed files with 1197 additions and 1523 deletions

View File

@@ -0,0 +1,7 @@
{% load staticfiles %}
<!-- Bootstrap Core CSS -->
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap-theme.min.css" rel="stylesheet">
<!-- Extra Bootstrap CSS -->
<link href="https://cdnjs.cloudflare.com/ajax/libs/startbootstrap-sb-admin-2/3.3.7+1/css/sb-admin-2.min.css" rel="stylesheet">
<!-- End Bootstrap CSS -->

View File

@@ -0,0 +1,6 @@
{% load static %}
<!-- Start Bootstrap + jQuery js -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
<!-- End Bootstrap + jQuery js -->

View File

@@ -0,0 +1,3 @@
<!-- Start DataTables-css -->
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/datatables/1.10.15/css/dataTables.bootstrap.min.css"/>
<!-- End DataTables-css -->

View File

@@ -0,0 +1,4 @@
<!-- Start DataTables-js -->
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/datatables/1.10.15/js/jquery.dataTables.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/datatables/1.10.15/js/dataTables.bootstrap.min.js"></script>
<!-- End DataTables-js -->

View File

@@ -0,0 +1,4 @@
{% load staticfiles %}
<!-- Font Awesome Bundle -->
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" type="text/css">
<!-- End Font Awesome Bundle -->

View File

@@ -0,0 +1,4 @@
{% load static %}
<!-- Start jQuery datetimepicker CSS -->
<link href="https://cdnjs.cloudflare.com/ajax/libs/jquery-datetimepicker/2.3.7/jquery.datetimepicker.min.css" rel="stylesheet" type="text/css">
<!-- End jQuery datetimepicker CSS -->

View File

@@ -0,0 +1,4 @@
{% load static %}
<!-- Start jQuery datetimepicker js -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-datetimepicker/2.3.7/jquery.datetimepicker.min.js"></script>
<!-- End jQuery datetimepicker js -->

View File

@@ -0,0 +1,4 @@
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js"></script>
{% if locale and LANGUAGE_CODE != 'en' %}
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/locale/{{ LANGUAGE_CODE }}.js"></script>
{% endif %}

View File

@@ -0,0 +1,4 @@
{% load static %}
<!-- Start X-Editablle js -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/x-editable/1.5.1/bootstrap3-editable/js/bootstrap-editable.min.js"></script>
<!-- End X-Editable js -->

View File

@@ -0,0 +1,4 @@
{% load staticfiles %}
<!-- X-Editable Core CSS -->
<link href="https://cdnjs.cloudflare.com/ajax/libs/x-editable/1.5.1/bootstrap3-editable/css/bootstrap-editable.css" rel="stylesheet">
<!-- End Bootstrap CSS -->

View File

@@ -0,0 +1,34 @@
{% extends "registered/base.html" %}
{% load bootstrap %}
{% load staticfiles %}
{% load i18n %}
{% block title %}Alliance Auth{% endblock %}
{% block page_title %}{% trans "Fleet Formatter Tool" %}{% endblock page_title %}
{% block extra_css %}{% endblock extra_css %}
{% block content %}
<div class="col-lg-12">
<h1 class="page-header text-center">{% trans "Fleet Broadcast Formatter Tool" %}</h1>
<div class="container-fluid">
<div class="col-md-6 col-md-offset-3">
<div class="row">
{% if generated != "" %}
<textarea class="form-control" rows="10" cols="60">{{ generated }}
</textarea>
{% endif %}
<form class="form-signin" role="form" action="" method="POST">
{% csrf_token %}
{{ form|bootstrap }}
<br/>
<button class="btn btn-lg btn-primary btn-block" type="submit">{% trans "Format" %}</button>
<br/>
</form>
</div>
</div>
</div>
</div>
{% endblock content %}

View File

@@ -0,0 +1,83 @@
{% extends "registered/base.html" %}
{% load staticfiles %}
{% load i18n %}
{% block title %}Alliance Auth{% endblock %}
{% block page_title %}{% trans "Groups Management" %}{% endblock page_title %}
{% block extra_css %}{% endblock extra_css %}
{% block content %}
<div class="col-lg-12">
<br>
{% include 'registered/groupmanagementmenu.html' %}
<ul class="nav nav-tabs">
<li class="active"><a data-toggle="tab" href="#add">{% trans "Group Add Requests" %}</a></li>
<li><a data-toggle="tab" href="#leave">{% trans "Group Leave Requests" %}</a></li>
</ul>
<div class="tab-content">
<div id="add" class="tab-pane fade in active panel panel-default">
<div class="panel-body">
{% if acceptrequests %}
<table class="table">
<tr>
<th class="text-center">{% trans "RequestID" %}</th>
<th class="text-center">{% trans "CharacterName" %}</th>
<th class="text-center">{% trans "GroupName" %}</th>
<th class="text-center">{% trans "Action" %}</th>
</tr>
{% for acceptrequest in acceptrequests %}
<tr>
<td class="text-center">{{ acceptrequest.id }}</td>
<td class="text-center">{{ acceptrequest.main_char.character_name }}</td>
<td class="text-center">{{ acceptrequest.group.name }}</td>
<td class="text-center">
<a href="{% url 'auth_group_accept_request' acceptrequest.id %}" class="btn btn-success">
{% trans "Accept" %}
</a>
<a href="{% url 'auth_group_reject_request' acceptrequest.id %}" class="btn btn-danger">
{% trans "Reject" %}
</a>
</td>
</tr>
{% endfor %}
</table>
{% else %}
<div class="alert alert-warning text-center">{% trans "No group add requests." %}</div>
{% endif %}
</div>
</div>
<div id="leave" class="tab-pane fade panel panel-default">
<div class="panel-body">
{% if leaverequests %}
<table class="table">
<tr>
<th class="text-center">{% trans "RequestID" %}</th>
<th class="text-center">{% trans "CharacterName" %}</th>
<th class="text-center">{% trans "GroupName" %}</th>
<th class="text-center">{% trans "Action" %}</th>
</tr>
{% for leaverequest in leaverequests %}
<tr>
<td class="text-center">{{ leaverequest.id }}</td>
<td class="text-center">{{ leaverequest.main_char.character_name }}</td>
<td class="text-center">{{ leaverequest.group.name }}</td>
<td class="text-center">
<a href="{% url 'auth_group_leave_accept_request' leaverequest.id %}" class="btn btn-success">
{% trans "Accept" %}
</a>
<a href="{% url 'auth_group_leave_reject_request' leaverequest.id %}" class="btn btn-danger">
{% trans "Reject" %}
</a>
</td>
</tr>
{% endfor %}
</table>
{% else %}
<div class="alert alert-warning text-center">{% trans "No group leave requests." %}</div>
{% endif %}
</div>
</div>
</div>
</div>
{% endblock content %}

View File

@@ -0,0 +1,27 @@
{% load staticfiles %}
{% load i18n %}
{% load navactive %}
<nav class="navbar navbar-default">
<div class="container-fluid">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
<span class="sr-only">{% trans "Toggle navigation" %}</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">{% trans "Group Management" %}</a>
</div>
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav">
<li class="{% navactive request 'auth_group_management' %}">
<a href="{% url 'auth_group_management' %}">{% trans "Group Requests" %}</a>
</li>
<li class="{% navactive request 'auth_group_membership auth_group_membership_list' %}">
<a href="{% url 'auth_group_membership' %}">{% trans "Group Membership" %}</a>
</li>
</ul>
</div>
</div>
</nav>

View File

@@ -0,0 +1,45 @@
{% extends "registered/base.html" %}
{% load staticfiles %}
{% load i18n %}
{% block title %}Alliance Auth{% endblock %}
{% block page_title %}{% trans "Group Members" %}{% endblock page_title %}
{% block extra_css %}{% endblock extra_css %}
{% block content %}
<div class="col-lg-12">
<br>
{% include 'registered/groupmanagementmenu.html' %}
<h3>{{ group.name }} {% trans 'Members' %}</h3>
<div id="list" class="">
{% if group.user_set %}
<table class="table">
<tr>
<th class="text-center">{% trans "User" %}</th>
<th class="text-center">{% trans "Character" %}</th>
<th class="text-center">{% trans "Corp" %}</th>
<th class="text-center">{% trans "Alliance" %}</th>
<th class="text-center">{% trans "Action" %}</th>
</tr>
{% for member in members %}
<tr>
<td class="text-center">{{ member.user.username }}</td>
<td class="text-center">{{ member.main_char.character_name }}</td>
<td class="text-center">{{ member.main_char.corporation_name }}</td>
<td class="text-center">{{ member.main_char.alliance_name }}</td>
<td class="text-center">
<a href="{% url 'auth_group_membership_remove' group.id member.user.id %}" class="btn btn-danger"
title="{% trans "Remove from group" %}">
<i class="glyphicon glyphicon-remove"></i>
</a>
</td>
</tr>
{% endfor %}
</table>
{% else %}
<div class="alert alert-warning text-center">{% trans "No group members to list." %}</div>
{% endif %}
</div>
</div>
{% endblock content %}

View File

@@ -0,0 +1,55 @@
{% extends "registered/base.html" %}
{% load staticfiles %}
{% load i18n %}
{% block title %}Alliance Auth{% endblock %}
{% block page_title %}{% trans "Groups Membership" %}{% endblock page_title %}
{% block extra_css %}{% endblock extra_css %}
{% block content %}
<div class="col-lg-12">
<br>
{% include 'registered/groupmanagementmenu.html' %}
<div>
{% if groups %}
<h3>Groups</h3>
<table class="table">
<tr>
<th class="text-center">{% trans "Name" %}</th>
<th class="text-center">{% trans "Description" %}</th>
<th class="text-center">{% trans "Status" %}</th>
<th class="text-center">{% trans "Member Count" %}</th>
<th class="text-center">{% trans "Action" %}</th>
</tr>
{% for group in groups %}
<tr>
<td class="text-center">{{ group.name }}</td>
<td class="text-center">{{ group.authgroup.description }}</td>
<td class="text-center">
{% if group.authgroup.hidden %}
<span class="label label-info">{% trans "Hidden" %}</span>
{% elif group.authgroup.open %}
<span class="label label-success">{% trans "Open" %}</span>
{% else %}
<span class="label label-default">{% trans "Requestable" %}</span>
{% endif %}
</td>
<td class="text-center">
{{ group.num_members }}
</td>
<td class="text-center">
<a href="{% url 'auth_group_membership_list' group.id %}" class="btn btn-primary"
title="{% trans "View Members" %}">
<i class="glyphicon glyphicon-eye-open"></i>
</a>
</td>
</tr>
{% endfor %}
</table>
{% else %}
<div class="alert alert-warning text-center">{% trans "No groups to list." %}</div>
{% endif %}
</div>
</div>
{% endblock content %}

View File

@@ -0,0 +1,54 @@
{% extends "registered/base.html" %}
{% load staticfiles %}
{% load i18n %}
{% block title %}Alliance Auth{% endblock %}
{% block page_title %}{% trans "Available" %}{% endblock page_title %}
{% block extra_css %}{% endblock extra_css %}
{% block content %}
<div class="col-lg-12">
<h1 class="page-header text-center">{% trans "Available Groups" %}</h1>
{% if groups %}
<table class="table">
<tr>
<th class="text-center">{% trans "Name" %}</th>
<th class="text-center">{% trans "Description" %}</th>
<th class="text-center">{% trans "Action" %}</th>
</tr>
{% for g in groups %}
<tr>
<td class="text-center">{{ g.group.name }}</td>
<td class="text-center">{{ g.group.authgroup.description }}</td>
<td class="text-center">
{% if g.group in user.groups.all %}
{% if not g.request %}
<a href="{% url 'auth_group_request_leave' g.group.id %}" class="btn btn-danger">
{% trans "Leave" %}
</a>
{% else %}
<button type="button" class="btn btn-primary" disabled>
{{ g.request.status }}
</button>
{% endif %}
{% elif not g.request %}
<a href="{% url 'auth_group_request_add' g.group.id %}" class="btn btn-success">
{% trans "Request" %}
</a>
{% else %}
<button type="button" class="btn btn-primary" disabled>
{{ g.request.status }}
</button>
{% endif %}
</td>
</tr>
{% endfor %}
</table>
{% else %}
<div class="alert alert-warning text-center">{% trans "No groups available." %}</div>
{% endif %}
</div>
{% endblock content %}

View File

@@ -0,0 +1,19 @@
{% extends "registered/base.html" %}
{% block title %}Alliance Auth{% endblock %}
{% block page_title %}Something something here{% endblock page_title %}
{% block content %}
<div class="col-lg-12">
<h1 class="page-header text-center">Help</h1>
<div class="container-fluid">
<div class="embed-responsive embed-responsive-16by9">
<iframe class="embed-responsive-item" src="https://allianceauth.readthedocs.io/en/latest/features/"></iframe>
</div>
</div>
</div>
{% endblock content %}

View File

@@ -0,0 +1,34 @@
{% extends "registered/base.html" %}
{% load bootstrap %}
{% load staticfiles %}
{% load i18n %}
{% block title %}Alliance Auth{% endblock %}
{% block page_title %}{% trans "Jabber Broadcast" %}{% endblock page_title %}
{% block extra_css %}{% endblock extra_css %}
{% block content %}
<div class="col-lg-12">
<h1 class="page-header text-center">{% trans "Jabber Broadcast" %}</h1>
<div class="container-fluid">
<div class="col-md-4 col-md-offset-4">
<div class="row">
{% if success %}
<div class="alert alert-success" role="alert">{% trans "Broadcast Sent!!" %}</div>
{% endif %}
<form class="form-signin" role="form" action="" method="POST"
onsubmit="submitbutton.disabled = true; return true;">
{% csrf_token %}
{{ form|bootstrap }}
<br/>
<button class="btn btn-lg btn-primary btn-block" name="submitbutton" type="submit">{% trans "Broadcast" %}
</button>
</form>
</div>
</div>
</div>
</div>
{% endblock content %}

View File

@@ -0,0 +1,101 @@
{% extends "registered/base.html" %}
{% load staticfiles %}
{% load i18n %}
{% block title %}{% trans "Notifications" %}{% endblock %}
{% block content %}
<div class="col-lg-12">
<h1 class="page-header text-center">{% trans "Notifications" %}</h1>
<div class="col-lg-12 container" id="example">
<div class="row">
<div class="col-lg-12">
<div class="panel panel-default">
<div class="panel-heading">
<ul class="nav nav-pills">
<li class="active"><a data-toggle="pill" href="#unread">{% trans "Unread" %}
<b>({{ unread|length }})</b></a></li>
<li><a data-toggle="pill" href="#read">{% trans "Read" %} <b>({{ read|length }})</b></a>
</li>
<div class="pull-right">
<a href="{% url 'auth_mark_all_notifications_read' %}"
class="btn btn-primary">{% trans "Mark All Read" %}</a>
<a href="{% url 'auth_delete_all_read_notifications' %}"
class="btn btn-danger">{% trans "Delete All Read" %}</a>
</div>
</ul>
</div>
<div class="panel-body">
<div class="tab-content">
<div id="unread" class="tab-pane fade in active">
<div class="table-responsive">
{% if unread %}
<table class="table table-condensed table-hover table-striped">
<tr>
<th class="text-center">{% trans "Timestamp" %}</th>
<th class="text-center">{% trans "Title" %}</th>
<th class="text-center">{% trans "Action" %}</th>
</tr>
{% for notif in unread %}
<tr class="{{ notif.level }}">
<td class="text-center">{{ notif.timestamp }}</td>
<td class="text-center">{{ notif.title }}</td>
<td class="text-center">
<a href="{% url 'auth_notification_view' notif.id %}"
class="btn btn-success" title="View">
<span class="glyphicon glyphicon-eye-open"></span>
</a>
<a href="{% url 'auth_remove_notification' notif.id %}"
class="btn btn-danger" title="Remove">
<span class="glyphicon glyphicon-remove"></span>
</a>
</td>
</tr>
{% endfor %}
</table>
{% else %}
<div class="alert alert-warning text-center">{% trans "No unread notifications." %}</div>
{% endif %}
</div>
</div>
<div id="read" class="tab-pane fade">
<div class="panel-body">
<div class="table-responsive">
{% if read %}
<table class="table table-condensed table-hover table-striped">
<tr>
<th class="text-center">{% trans "Timestamp" %}</th>
<th class="text-center">{% trans "Title" %}</th>
<th class="text-center">{% trans "Action" %}</th>
</tr>
{% for notif in read %}
<tr class="{{ notif.level }}">
<td class="text-center">{{ notif.timestamp }}</td>
<td class="text-center">{{ notif.title }}</td>
<td class="text-center">
<a href="{% url 'auth_notification_view' notif.id %}"
class="btn btn-success" title="View">
<span class="glyphicon glyphicon-eye-open"></span>
</a>
<a href="{% url 'auth_remove_notification' notif.id %}"
class="btn btn-danger" title="remove">
<span class="glyphicon glyphicon-remove"></span>
</a>
</td>
</tr>
{% endfor %}
</table>
{% else %}
<div class="alert alert-warning text-center">{% trans "No read notifications." %}</div>
{% endif %}
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
{% endblock %}

View File

@@ -0,0 +1,30 @@
{% extends "registered/base.html" %}
{% load staticfiles %}
{% load i18n %}
{% block title %}View Notification{% endblock title %}
{% block page_title %}{% trans "View Notification" %}{% endblock page_title %}
{% block content %}
<div class="col-lg-12">
<h1 class="page-header text-center">
{% trans "View Notification" %}
<div class="text-right">
<a href="{% url 'auth_notification_list' %}" class="btn btn-primary btn-lg">
<span class="glyphicon glyphicon-arrow-left"></span>
</a>
</div>
</h1>
<div class="col-lg-12 container" id="example">
<div class="row">
<div class="col-lg-12">
<div class="panel panel-{{ notif.level }}">
<div class="panel-heading">{{ notif.timestamp }} {{ notif.title }}</div>
<div class="panel-body"><pre>{{ notif.message }}</pre></div>
</div>
</div>
</div>
</div>
</div>
{% endblock %}

View File

@@ -0,0 +1,24 @@
{% extends "registered/base.html" %}
{% load staticfiles %}
{% load i18n %}
{% block page_title %}Credentials{% endblock page_title %}
{% block title %}{% trans "Credentials" %}{% endblock title%}
{% block content %}
<div class="col-lg-12">
<h1 class="page-header text-center">{% blocktrans %}{{ service }} Credentials{% endblocktrans %}</h1>
<div class="container-fluid">
<div class="col-lg-4 col-lg-offset-4">
<form class="form-signin">
{% for key, value in credentials.items %}
<div class="form-group">
<label class="control-label" for="id_{{ key }}">{{ key|capfirst }}</label>
<input class="form-control" value="{{ value }}" readonly>
</div>
{% endfor %}
</form>
<a href="{% url 'auth_services' %}" class="btn btn-lg btn-block btn-primary" title="Continue">{% trans "Continue" %}</a>
</div>
</div>
</div>
{% endblock %}

View File

@@ -0,0 +1,29 @@
{% extends "registered/base.html" %}
{% load bootstrap %}
{% load staticfiles %}
{% load i18n %}
{% block title %}Alliance Auth{% endblock %}
{% block page_title %}{% trans "Service Password Change" %}{% endblock page_title %}
{% block extra_css %}{% endblock extra_css %}
{% block content %}
<div class="col-lg-12">
<h1 class="page-header text-center">{% blocktrans %}Set {{service}} Password{% endblocktrans %}</h1>
<div class="container-fluid">
<div class="col-md-4 col-md-offset-4">
<div class="row">
<form class="form-signin" role="form" action="" method="POST"
onsubmit="submitbutton.disabled = true; return true;">
{% csrf_token %}
{{ form|bootstrap }}
<br/>
<button class="btn btn-lg btn-primary btn-block" name="submitbutton" type="submit">{% trans "Set Password" %}</button>
</form>
</div>
</div>
</div>
</div>
{% endblock content %}

View File

@@ -0,0 +1,26 @@
{% extends "registered/base.html" %}
{% load staticfiles %}
{% load i18n %}
{% block title %}Alliance Auth{% endblock %}
{% block page_title %}{% trans "Services Management" %}{% endblock page_title %}
{% block extra_css %}{% endblock extra_css %}
{% block content %}
<div class="col-lg-12">
<h1 class="page-header text-center">{% trans "Available Services" %}</h1>
<table class="table table-hover">
<tr>
<th class="text-center">{% trans "Service" %}</th>
<th class="text-center">{% trans "Username" %}</th>
<th class="text-center">{% trans "Domain" %}</th>
<th class="text-center">{% trans "Action" %}</th>
</tr>
{% for svc in service_ctrls %}
{{ svc }}
{% endfor %}
</table>
</div>
{% endblock content %}

View File

@@ -0,0 +1,32 @@
{% load i18n %}
<tr>
<td class="text-center">{{ service_name }}</td>
<td class="text-center">{{ username }}</td>
<td class="text-center"><a href="{{ service_url }}">{{ service_url }}</a></td>
<td class="text-center">
{% ifequal username "" %}
{% if urls.auth_activate %}
<a href="{% url urls.auth_activate %}" title="Activate" class="btn btn-warning">
<span class="glyphicon glyphicon-ok"></span>
</a>
{% endif %}
{% else %}
{% if urls.auth_set_password %}
<a href="{% url urls.auth_set_password %}" title="Set Password" class="btn btn-warning">
<span class="glyphicon glyphicon-pencil"></span>
</a>
{% endif %}
{% if urls.auth_reset_password %}
<a href="{% url urls.auth_reset_password %}" title="Reset Password" class="btn btn-primary">
<span class="glyphicon glyphicon-refresh"></span>
</a>
{% endif %}
{% if urls.auth_deactivate %}
<a href="{% url urls.auth_deactivate %}" title="Deactivate" class="btn btn-danger">
<span class="glyphicon glyphicon-remove"></span>
</a>
{% endif %}
{% endifequal %}
</td>
</tr>

View File

@@ -0,0 +1,27 @@
{% extends "registered/base.html" %}
{% load bootstrap %}
{% load staticfiles %}
{% load i18n %}
{% block title %}Alliance Auth{% endblock %}
{% block page_title %}{% trans "Verify Teamspeak" %}{% endblock page_title %}
{% block extra_css %}{% endblock extra_css %}
{% block content %}
<div class="col-lg-12">
<h1 class="page-header text-center">{% trans "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">{% trans "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">{% trans "Continue" %}</button>
</form>
</div>
</div>
</div>
{% endblock %}