From ec1b17df25549cf0ac6f1c9fa558f95024cb1300 Mon Sep 17 00:00:00 2001 From: Adarnof Date: Tue, 1 Dec 2015 07:56:13 +0000 Subject: [PATCH] Dissociates user account from email address when deleting service. --- services/managers/discord_manager.py | 21 +++++++++++++++++---- services/views.py | 2 +- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/services/managers/discord_manager.py b/services/managers/discord_manager.py index 997c53c0..d246d091 100644 --- a/services/managers/discord_manager.py +++ b/services/managers/discord_manager.py @@ -245,6 +245,20 @@ class DiscordAPIManager: r.raise_for_status() return r.json() + @staticmethod + def destroy_user(email, current_password): + data = { + 'avatar': None, + 'username': os.urandom(8).encode('hex'), + 'password': current_password, + 'email': os.urandom(8).encode('hex') + '@test.com', + } + path = DISCORD_URL + "/users/@me" + custom_headers = {'content-type':'application/json', 'authorization': DiscordAPIManager.get_token_by_user(email, current_password)} + r = requests.patch(path, headers=custom_headers, data=json.dumps(data)) + r.raise_for_status + return r.json() + class DiscordManager: def __init__(self): pass @@ -272,17 +286,16 @@ class DiscordManager: return "", "" @staticmethod - def delete_user(username): + def 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) - return True - except KeyError: - #user does not exist + DiscordAPIManager.destroy_user(email, password) return True except: #something went wrong return False + return False @staticmethod def update_groups(username, groups): diff --git a/services/views.py b/services/views.py index 08658757..9def2d09 100755 --- a/services/views.py +++ b/services/views.py @@ -337,7 +337,7 @@ 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) + result = DiscordManager.delete_user(authinfo.discord_username, request.user.email, authinfo.discord_password) remove_all_syncgroups_for_service(request.user, "discord") if result: AuthServicesInfoManager.update_user_discord_info("", "", request.user)