mirror of
https://gitlab.com/allianceauth/allianceauth.git
synced 2026-02-08 08:06:20 +01: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:
@@ -24,3 +24,7 @@ class FleetFormatterForm(forms.Form):
|
||||
reimbursable = forms.ChoiceField(label='Reimbursable?*', 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)
|
||||
|
||||
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()
|
||||
|
||||
@staticmethod
|
||||
def accept_invite(invite_id):
|
||||
custom_headers = {'accept': 'application/json'}
|
||||
def accept_invite(invite_id, token):
|
||||
custom_headers = {'accept': 'application/json', 'authorization': token}
|
||||
path = DISCORD_URL + "/invite/" + str(invite_id)
|
||||
r = requests.post(path, headers=custom_headers)
|
||||
r.raise_for_status()
|
||||
@@ -259,6 +259,14 @@ class DiscordAPIManager:
|
||||
r.raise_for_status
|
||||
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:
|
||||
def __init__(self):
|
||||
pass
|
||||
@@ -273,7 +281,7 @@ class DiscordManager:
|
||||
return os.urandom(8).encode('hex')
|
||||
|
||||
@staticmethod
|
||||
def add_user(username, email):
|
||||
def old_add_user(username, email):
|
||||
try:
|
||||
username_clean = DiscordManager.__sanatize_username(username)
|
||||
invite_code = DiscordAPIManager.create_invite(settings.DISCORD_SERVER_ID)['code']
|
||||
@@ -286,7 +294,7 @@ class DiscordManager:
|
||||
return "", ""
|
||||
|
||||
@staticmethod
|
||||
def delete_user(username, email, password):
|
||||
def old_delete_user(username, email, password):
|
||||
try:
|
||||
user_id = DiscordAPIManager.get_user_id(settings.DISCORD_SERVER_ID, username)
|
||||
DiscordAPIManager.kick_user(settings.DISCORD_SERVER_ID, user_id)
|
||||
@@ -298,8 +306,7 @@ class DiscordManager:
|
||||
return False
|
||||
|
||||
@staticmethod
|
||||
def update_groups(username, groups):
|
||||
user_id = DiscordAPIManager.get_user_id(settings.DISCORD_SERVER_ID, username)
|
||||
def update_groups(user_id, groups):
|
||||
group_ids = []
|
||||
for g in groups:
|
||||
try:
|
||||
@@ -317,18 +324,16 @@ class DiscordManager:
|
||||
return named_group['id']
|
||||
|
||||
@staticmethod
|
||||
def lock_user(username):
|
||||
def lock_user(user_id):
|
||||
try:
|
||||
user_id = DiscordAPIManager.get_user_id(username)
|
||||
DiscordAPIManager.ban_user(settings.DISCORD_SERVER_ID, user_id)
|
||||
return True
|
||||
except:
|
||||
return False
|
||||
|
||||
@staticmethod
|
||||
def unlock_user(username):
|
||||
def unlock_user(user_id):
|
||||
try:
|
||||
user_id = DiscordAPIManager.get_user_id(username)
|
||||
DiscordAPIManager.unban_user(settings.DISCORD_SERVER_ID, user_id)
|
||||
return True
|
||||
except:
|
||||
@@ -342,3 +347,33 @@ class DiscordManager:
|
||||
return new_password
|
||||
except:
|
||||
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 forms import JabberBroadcastForm
|
||||
from forms import FleetFormatterForm
|
||||
from forms import DiscordForm
|
||||
from util import check_if_user_has_permission
|
||||
|
||||
import threading
|
||||
@@ -322,7 +323,7 @@ context_instance=RequestContext(request))
|
||||
|
||||
@login_required
|
||||
@user_passes_test(service_blue_alliance_test)
|
||||
def activate_discord(request):
|
||||
def old_activate_discord(request):
|
||||
authinfo = AuthServicesInfoManager.get_auth_service_info(request.user)
|
||||
character = EveManager.get_character_by_id(authinfo.main_char_id)
|
||||
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)
|
||||
def deactivate_discord(request):
|
||||
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")
|
||||
if result:
|
||||
AuthServicesInfoManager.update_user_discord_info("", "", request.user)
|
||||
AuthServicesInfoManager.update_user_discord_info("",request.user)
|
||||
return HttpResponseRedirect("/services/")
|
||||
return HttpResponseRedirect("/dashboard")
|
||||
|
||||
@@ -348,9 +349,31 @@ def deactivate_discord(request):
|
||||
@user_passes_test(service_blue_alliance_test)
|
||||
def reset_discord(request):
|
||||
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:
|
||||
AuthServicesInfoManager.update_user_discord_info(authinfo.discord_username, result, request.user)
|
||||
update_discord_groups(request.user)
|
||||
return HttpResponseRedirect("/services/")
|
||||
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)
|
||||
success = True
|
||||
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))
|
||||
|
||||
Reference in New Issue
Block a user