mirror of
https://gitlab.com/allianceauth/allianceauth.git
synced 2025-07-12 22:10:16 +02:00
Changed discord account handling. Now requests email and password and grabs UID via API.
UID is stored in authserviceinfo model and used as required.
This commit is contained in:
parent
ec1b17df25
commit
8442ec1f55
@ -81,9 +81,8 @@ class AuthServicesInfoManager:
|
|||||||
authserviceinfo.save(update_fields=['is_blue'])
|
authserviceinfo.save(update_fields=['is_blue'])
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def update_user_discord_info(username, password, user):
|
def update_user_discord_info(user_id, user):
|
||||||
if User.objects.filter(username=user.username).exists():
|
if User.objects.filter(username=user.username).exists():
|
||||||
authserviceinfo = AuthServicesInfoManager.__get_or_create(user)
|
authserviceinfo = AuthServicesInfoManager.__get_or_create(user)
|
||||||
authserviceinfo.discord_username = username
|
authserviceinfo.discord_uid = user_id
|
||||||
authserviceinfo.discord_password = password
|
authserviceinfo.save(update_fields=['discord_uid'])
|
||||||
authserviceinfo.save(update_fields=['discord_username', 'discord_password'])
|
|
||||||
|
@ -13,8 +13,7 @@ class AuthServicesInfo(models.Model):
|
|||||||
mumble_password = models.CharField(max_length=254, default="")
|
mumble_password = models.CharField(max_length=254, default="")
|
||||||
teamspeak3_uid = models.CharField(max_length=254, default="")
|
teamspeak3_uid = models.CharField(max_length=254, default="")
|
||||||
teamspeak3_perm_key = models.CharField(max_length=254, default="")
|
teamspeak3_perm_key = models.CharField(max_length=254, default="")
|
||||||
discord_username = models.CharField(max_length=254, default="")
|
discord_uid = models.CharField(max_length=254, default="")
|
||||||
discord_password = models.CharField(max_length=254, default="")
|
|
||||||
main_char_id = models.CharField(max_length=64, default="")
|
main_char_id = models.CharField(max_length=64, default="")
|
||||||
is_blue = models.BooleanField(default=False)
|
is_blue = models.BooleanField(default=False)
|
||||||
user = models.ForeignKey(User)
|
user = models.ForeignKey(User)
|
||||||
|
@ -116,7 +116,7 @@ def update_discord_groups(user):
|
|||||||
if len(groups) == 0:
|
if len(groups) == 0:
|
||||||
groups.append('empty')
|
groups.append('empty')
|
||||||
|
|
||||||
DiscordManager.update_groups(authserviceinfo.discord_username, groups)
|
DiscordManager.update_groups(authserviceinfo.discord_uid, groups)
|
||||||
|
|
||||||
def create_syncgroup_for_user(user, groupname, servicename):
|
def create_syncgroup_for_user(user, groupname, servicename):
|
||||||
synccache = SyncGroupCache()
|
synccache = SyncGroupCache()
|
||||||
@ -196,7 +196,7 @@ def remove_from_databases(user, groups, syncgroups):
|
|||||||
update_ipboard_groups(user)
|
update_ipboard_groups(user)
|
||||||
if authserviceinfo.teamspeak3_uid and authserviceinfo.teamspeak3_uid != "":
|
if authserviceinfo.teamspeak3_uid and authserviceinfo.teamspeak3_uid != "":
|
||||||
update_teamspeak3_groups(user)
|
update_teamspeak3_groups(user)
|
||||||
if authserviceinfo.discord_username and authserviceinfo.discord_username != "":
|
if authserviceinfo.discord_uid and authserviceinfo.discord_uid != "":
|
||||||
update_discord_groups(user)
|
update_discord_groups(user)
|
||||||
|
|
||||||
|
|
||||||
|
@ -24,3 +24,7 @@ class FleetFormatterForm(forms.Form):
|
|||||||
reimbursable = forms.ChoiceField(label='Reimbursable?*', choices=[('Yes', 'Yes'), ('No', 'No')], required=True)
|
reimbursable = forms.ChoiceField(label='Reimbursable?*', choices=[('Yes', 'Yes'), ('No', 'No')], required=True)
|
||||||
important = forms.ChoiceField(label='Important?*', choices=[('Yes', 'Yes'), ('No', 'No')], required=True)
|
important = forms.ChoiceField(label='Important?*', choices=[('Yes', 'Yes'), ('No', 'No')], required=True)
|
||||||
comments = forms.CharField(widget=forms.Textarea, required=False)
|
comments = forms.CharField(widget=forms.Textarea, required=False)
|
||||||
|
|
||||||
|
class DiscordForm(forms.Form):
|
||||||
|
email = forms.CharField(label="Email Address", required=True)
|
||||||
|
password = forms.CharField(label="Password", required=True)
|
||||||
|
@ -117,8 +117,8 @@ class DiscordAPIManager:
|
|||||||
return r.json()
|
return r.json()
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def accept_invite(invite_id):
|
def accept_invite(invite_id, token):
|
||||||
custom_headers = {'accept': 'application/json'}
|
custom_headers = {'accept': 'application/json', 'authorization': token}
|
||||||
path = DISCORD_URL + "/invite/" + str(invite_id)
|
path = DISCORD_URL + "/invite/" + str(invite_id)
|
||||||
r = requests.post(path, headers=custom_headers)
|
r = requests.post(path, headers=custom_headers)
|
||||||
r.raise_for_status()
|
r.raise_for_status()
|
||||||
@ -259,6 +259,14 @@ class DiscordAPIManager:
|
|||||||
r.raise_for_status
|
r.raise_for_status
|
||||||
return r.json()
|
return r.json()
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def check_if_user_banned(server_id, user_id):
|
||||||
|
bans = DiscordAPIManager.get_bans(server_id)
|
||||||
|
for b in bans:
|
||||||
|
if b['user']['id'] == str(user_id):
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
class DiscordManager:
|
class DiscordManager:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
pass
|
pass
|
||||||
@ -273,7 +281,7 @@ class DiscordManager:
|
|||||||
return os.urandom(8).encode('hex')
|
return os.urandom(8).encode('hex')
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def add_user(username, email):
|
def old_add_user(username, email):
|
||||||
try:
|
try:
|
||||||
username_clean = DiscordManager.__sanatize_username(username)
|
username_clean = DiscordManager.__sanatize_username(username)
|
||||||
invite_code = DiscordAPIManager.create_invite(settings.DISCORD_SERVER_ID)['code']
|
invite_code = DiscordAPIManager.create_invite(settings.DISCORD_SERVER_ID)['code']
|
||||||
@ -286,7 +294,7 @@ class DiscordManager:
|
|||||||
return "", ""
|
return "", ""
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def delete_user(username, email, password):
|
def old_delete_user(username, email, password):
|
||||||
try:
|
try:
|
||||||
user_id = DiscordAPIManager.get_user_id(settings.DISCORD_SERVER_ID, username)
|
user_id = DiscordAPIManager.get_user_id(settings.DISCORD_SERVER_ID, username)
|
||||||
DiscordAPIManager.kick_user(settings.DISCORD_SERVER_ID, user_id)
|
DiscordAPIManager.kick_user(settings.DISCORD_SERVER_ID, user_id)
|
||||||
@ -298,8 +306,7 @@ class DiscordManager:
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def update_groups(username, groups):
|
def update_groups(user_id, groups):
|
||||||
user_id = DiscordAPIManager.get_user_id(settings.DISCORD_SERVER_ID, username)
|
|
||||||
group_ids = []
|
group_ids = []
|
||||||
for g in groups:
|
for g in groups:
|
||||||
try:
|
try:
|
||||||
@ -317,18 +324,16 @@ class DiscordManager:
|
|||||||
return named_group['id']
|
return named_group['id']
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def lock_user(username):
|
def lock_user(user_id):
|
||||||
try:
|
try:
|
||||||
user_id = DiscordAPIManager.get_user_id(username)
|
|
||||||
DiscordAPIManager.ban_user(settings.DISCORD_SERVER_ID, user_id)
|
DiscordAPIManager.ban_user(settings.DISCORD_SERVER_ID, user_id)
|
||||||
return True
|
return True
|
||||||
except:
|
except:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def unlock_user(username):
|
def unlock_user(user_id):
|
||||||
try:
|
try:
|
||||||
user_id = DiscordAPIManager.get_user_id(username)
|
|
||||||
DiscordAPIManager.unban_user(settings.DISCORD_SERVER_ID, user_id)
|
DiscordAPIManager.unban_user(settings.DISCORD_SERVER_ID, user_id)
|
||||||
return True
|
return True
|
||||||
except:
|
except:
|
||||||
@ -342,3 +347,33 @@ class DiscordManager:
|
|||||||
return new_password
|
return new_password
|
||||||
except:
|
except:
|
||||||
return current_password
|
return current_password
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_user_id(email, password):
|
||||||
|
try:
|
||||||
|
profile = DiscordAPIManager.get_user_profile(email, password)
|
||||||
|
return profile['user']['id']
|
||||||
|
except:
|
||||||
|
return ""
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def add_user(email, password):
|
||||||
|
try:
|
||||||
|
profile = DiscordAPIManager.get_user_profile(email, password)
|
||||||
|
user_id = profile['id']
|
||||||
|
if DiscordAPIManager.check_if_user_banned(settings.DISCORD_SERVER_ID, user_id):
|
||||||
|
DiscordAPIManager.unban_user(settings.DISCORD_SERVER_ID, user_id)
|
||||||
|
invite_code = DiscordAPIManager.create_invite(settings.DISCORD_SERVER_ID)['code']
|
||||||
|
token = DiscordAPIManager.get_token_by_user(email, password)
|
||||||
|
DiscordAPIManager.accept_invite(invite_code, token)
|
||||||
|
return user_id
|
||||||
|
except:
|
||||||
|
return ""
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def delete_user(user_id):
|
||||||
|
try:
|
||||||
|
DiscordAPIManager.ban_user(settings.DISCORD_SERVER_ID, user_id)
|
||||||
|
return True
|
||||||
|
except:
|
||||||
|
return False
|
||||||
|
@ -24,6 +24,7 @@ from celerytask.tasks import update_teamspeak3_groups
|
|||||||
from celerytask.tasks import update_discord_groups
|
from celerytask.tasks import update_discord_groups
|
||||||
from forms import JabberBroadcastForm
|
from forms import JabberBroadcastForm
|
||||||
from forms import FleetFormatterForm
|
from forms import FleetFormatterForm
|
||||||
|
from forms import DiscordForm
|
||||||
from util import check_if_user_has_permission
|
from util import check_if_user_has_permission
|
||||||
|
|
||||||
import threading
|
import threading
|
||||||
@ -322,7 +323,7 @@ context_instance=RequestContext(request))
|
|||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
@user_passes_test(service_blue_alliance_test)
|
@user_passes_test(service_blue_alliance_test)
|
||||||
def activate_discord(request):
|
def old_activate_discord(request):
|
||||||
authinfo = AuthServicesInfoManager.get_auth_service_info(request.user)
|
authinfo = AuthServicesInfoManager.get_auth_service_info(request.user)
|
||||||
character = EveManager.get_character_by_id(authinfo.main_char_id)
|
character = EveManager.get_character_by_id(authinfo.main_char_id)
|
||||||
info = DiscordManager.add_user(character.character_name, request.user.email)
|
info = DiscordManager.add_user(character.character_name, request.user.email)
|
||||||
@ -337,10 +338,10 @@ def activate_discord(request):
|
|||||||
@user_passes_test(service_blue_alliance_test)
|
@user_passes_test(service_blue_alliance_test)
|
||||||
def deactivate_discord(request):
|
def deactivate_discord(request):
|
||||||
authinfo = AuthServicesInfoManager.get_auth_service_info(request.user)
|
authinfo = AuthServicesInfoManager.get_auth_service_info(request.user)
|
||||||
result = DiscordManager.delete_user(authinfo.discord_username, request.user.email, authinfo.discord_password)
|
result = DiscordManager.delete_user(authinfo.discord_uid)
|
||||||
remove_all_syncgroups_for_service(request.user, "discord")
|
remove_all_syncgroups_for_service(request.user, "discord")
|
||||||
if result:
|
if result:
|
||||||
AuthServicesInfoManager.update_user_discord_info("", "", request.user)
|
AuthServicesInfoManager.update_user_discord_info("",request.user)
|
||||||
return HttpResponseRedirect("/services/")
|
return HttpResponseRedirect("/services/")
|
||||||
return HttpResponseRedirect("/dashboard")
|
return HttpResponseRedirect("/dashboard")
|
||||||
|
|
||||||
@ -348,9 +349,31 @@ def deactivate_discord(request):
|
|||||||
@user_passes_test(service_blue_alliance_test)
|
@user_passes_test(service_blue_alliance_test)
|
||||||
def reset_discord(request):
|
def reset_discord(request):
|
||||||
authinfo = AuthServicesInfoManager.get_auth_service_info(request.user)
|
authinfo = AuthServicesInfoManager.get_auth_service_info(request.user)
|
||||||
result = DiscordManager.update_user_password(request.user.email, authinfo.discord_password)
|
result = DiscordManager.delete_user(authinfo.discord_uid)
|
||||||
if result:
|
if result:
|
||||||
AuthServicesInfoManager.update_user_discord_info(authinfo.discord_username, result, request.user)
|
AuthServicesInfoManager.update_user_discord_info("",request.user)
|
||||||
|
return HttpResponseRedirect("/activate_discord/")
|
||||||
|
return HttpResponseRedirect("/services/")
|
||||||
|
|
||||||
|
@login_required
|
||||||
|
@user_passes_test(service_blue_alliance_test)
|
||||||
|
def activate_discord(request):
|
||||||
|
success = False
|
||||||
|
if request.method == 'POST':
|
||||||
|
form = DiscordForm(request.POST)
|
||||||
|
if form.is_valid():
|
||||||
|
email = form.cleaned_data['email']
|
||||||
|
password = form.cleaned_data['password']
|
||||||
|
try:
|
||||||
|
user_id = DiscordManager.add_user(email, password)
|
||||||
|
AuthServicesInfoManager.update_user_discord_info(user_id, request.user)
|
||||||
update_discord_groups(request.user)
|
update_discord_groups(request.user)
|
||||||
|
success = True
|
||||||
return HttpResponseRedirect("/services/")
|
return HttpResponseRedirect("/services/")
|
||||||
return HttpResponseRedirect("/services/")
|
except:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
form = DiscordForm()
|
||||||
|
|
||||||
|
context = {'form': form, 'success': success}
|
||||||
|
return render_to_response('registered/discord.html', context, context_instance=RequestContext(request))
|
||||||
|
33
stock/templates/registered/discord.html
Normal file
33
stock/templates/registered/discord.html
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
{% extends "public/base.html" %}
|
||||||
|
{% load bootstrap %}
|
||||||
|
{% load staticfiles %}
|
||||||
|
|
||||||
|
{% block title %}Alliance Auth{% endblock %}
|
||||||
|
|
||||||
|
{% block page_title %}Jabber Broadcast{% endblock page_title %}
|
||||||
|
{% block extra_css %}{% endblock extra_css %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div class="col-lg-12">
|
||||||
|
<h1 class="page-header text-center">Discord Connection</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">Account Linked</div>
|
||||||
|
{% endif %}
|
||||||
|
<p>Enter your discord account credentials below. These are not stored: they are needed to determine your user ID and make you join the server.</p>
|
||||||
|
<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">Connect</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% endblock content %}
|
@ -117,11 +117,11 @@
|
|||||||
{% if ENABLE_BLUE_DISCORD %}
|
{% if ENABLE_BLUE_DISCORD %}
|
||||||
<tr>
|
<tr>
|
||||||
<td class="text-center">Discord</td>
|
<td class="text-center">Discord</td>
|
||||||
<td class="text-center">{{ authinfo.discord_username }}</td>
|
<td class="text-center">{{ authinfo.discord_uid }}</td>
|
||||||
<td class="text-center">{{ authinfo.discord_password }}</td>
|
<td class="text-center"></td>
|
||||||
<td class="text-center"><a href="https://discordapp.com/channels/{{ DISCORD_SERVER_ID }}/{{ DISCORD_SERVER_ID}}">https://discordapp.com</a></td>
|
<td class="text-center"><a href="https://discordapp.com/channels/{{ DISCORD_SERVER_ID }}/{{ DISCORD_SERVER_ID}}">https://discordapp.com</a></td>
|
||||||
<td class="text-center">
|
<td class="text-center">
|
||||||
{% ifequal authinfo.discord_username "" %}
|
{% ifequal authinfo.discord_uid "" %}
|
||||||
<a href="{% url 'auth_activate_discord' %}">
|
<a href="{% url 'auth_activate_discord' %}">
|
||||||
<button type="button" class="btn btn-warning"><span
|
<button type="button" class="btn btn-warning"><span
|
||||||
class="glyphicon glyphicon-ok"></span></button>
|
class="glyphicon glyphicon-ok"></span></button>
|
||||||
@ -288,11 +288,11 @@
|
|||||||
{% if ENABLE_AUTH_DISCORD %}
|
{% if ENABLE_AUTH_DISCORD %}
|
||||||
<tr>
|
<tr>
|
||||||
<td class="text-center">Discord</td>
|
<td class="text-center">Discord</td>
|
||||||
<td class="text-center">{{ authinfo.discord_username }}</td>
|
<td class="text-center">{{ authinfo.discord_uid }}</td>
|
||||||
<td class="text-center">{{ authinfo.discord_password }}</td>
|
<td class="text-center"></td>
|
||||||
<td class="text-center"><a href="https://discordapp.com/channels/{{ DISCORD_SERVER_ID }}/{{ DISCORD_SERVER_ID}}">https://discordapp.com</a></td>
|
<td class="text-center"><a href="https://discordapp.com/channels/{{ DISCORD_SERVER_ID }}/{{ DISCORD_SERVER_ID}}">https://discordapp.com</a></td>
|
||||||
<td class="text-center">
|
<td class="text-center">
|
||||||
{% ifequal authinfo.discord_username "" %}
|
{% ifequal authinfo.discord_uid "" %}
|
||||||
<a href="{% url 'auth_activate_discord' %}">
|
<a href="{% url 'auth_activate_discord' %}">
|
||||||
<button type="button" class="btn btn-warning"><span
|
<button type="button" class="btn btn-warning"><span
|
||||||
class="glyphicon glyphicon-ok"></span></button>
|
class="glyphicon glyphicon-ok"></span></button>
|
||||||
|
@ -42,9 +42,9 @@ def deactivate_services(user):
|
|||||||
if authinfo.teamspeak3_uid and authinfo.teamspeak3_uid != "":
|
if authinfo.teamspeak3_uid and authinfo.teamspeak3_uid != "":
|
||||||
Teamspeak3Manager.delete_user(authinfo.teamspeak3_uid)
|
Teamspeak3Manager.delete_user(authinfo.teamspeak3_uid)
|
||||||
AuthServicesInfoManager.update_user_teamspeak3_info("", "", user)
|
AuthServicesInfoManager.update_user_teamspeak3_info("", "", user)
|
||||||
if authinfo.discord_username and authinfo.discord_username != "":
|
if authinfo.discord_uid and authinfo.discord_uid != "":
|
||||||
DiscordManager.lock_user(authinfo.discord_username)
|
DiscordManager.delete_user(authinfo.discord_uid)
|
||||||
AuthServicesInfoManager.update_user_discord_info("", "", user)
|
AuthServicesInfoManager.update_user_discord_info("", user)
|
||||||
|
|
||||||
|
|
||||||
def generate_corp_group_name(corpname):
|
def generate_corp_group_name(corpname):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user