Added syncgroup logic to celery tasks.

Wrote request handles for enabling and disabling discord user.
This commit is contained in:
Adarnof 2015-11-30 22:08:17 +00:00
parent 765fcb52de
commit 34a27ba885
4 changed files with 55 additions and 4 deletions

View File

@ -80,3 +80,10 @@ class AuthServicesInfoManager:
authserviceinfo.is_blue = is_blue authserviceinfo.is_blue = is_blue
authserviceinfo.save(update_fields=['is_blue']) authserviceinfo.save(update_fields=['is_blue'])
@staticmethod
def update_user_discord_info(username, user_id, user):
if User.objects.filter(username=user.username).exists():
authserviceinfo = AuthServicesInfoManager.__get_or_create(user)
authserviceinfo.discord_username = username
authserviceinfo.discord_uid = user_id
authserviceinfo.save(update_fields=['discord_username', 'discord_uid'])

View File

@ -9,6 +9,7 @@ from services.managers.mumble_manager import MumbleManager
from services.managers.phpbb3_manager import Phpbb3Manager from services.managers.phpbb3_manager import Phpbb3Manager
from services.managers.ipboard_manager import IPBoardManager from services.managers.ipboard_manager import IPBoardManager
from services.managers.teamspeak3_manager import Teamspeak3Manager from services.managers.teamspeak3_manager import Teamspeak3Manager
from services.managers.discord_manager import DiscordManager
from services.models import AuthTS from services.models import AuthTS
from services.models import TSgroup from services.models import TSgroup
from authentication.models import AuthServicesInfo from authentication.models import AuthServicesInfo
@ -105,6 +106,17 @@ def update_teamspeak3_groups(user):
Teamspeak3Manager.update_groups(authserviceinfo.teamspeak3_uid, groups) Teamspeak3Manager.update_groups(authserviceinfo.teamspeak3_uid, groups)
def update_discord_groups(user):
syncgroups = SyncGroupCache.objects.filter(user=user)
authserviceinfo = AuthServicesInfo.objects.get(user=user)
groups = []
for syncgroup in syncgroups:
groups.append(str(syncgroup.groupname))
if len(groups) == 0:
groups.append('empty')
DiscordManager.update_groups(authserviceinfo.discord_username, groups)
def create_syncgroup_for_user(user, groupname, servicename): def create_syncgroup_for_user(user, groupname, servicename):
synccache = SyncGroupCache() synccache = SyncGroupCache()
@ -151,6 +163,10 @@ def add_to_databases(user, groups, syncgroups):
if syncgroups.filter(groupname=group.name).filter(servicename="ipboard").exists() is not True: if syncgroups.filter(groupname=group.name).filter(servicename="ipboard").exists() is not True:
create_syncgroup_for_user(user, group.name, "ipboard") create_syncgroup_for_user(user, group.name, "ipboard")
update_ipboard_groups(user) update_ipboard_groups(user)
if authserviceinfo.discord_username and authserviceinfo.discord_username != "":
if syncgroups.filter(groupname=group.name).filter(servicename="discord").exists() is not True:
create_syncgroup_for_user(user, group.name, "discord")
update_discord_groups(user)
def remove_from_databases(user, groups, syncgroups): def remove_from_databases(user, groups, syncgroups):
@ -180,6 +196,8 @@ 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 != "":
update_discord_groups(user)
# Run every minute # Run every minute

View File

@ -237,18 +237,17 @@ class DiscordManager:
group_ids = [] group_ids = []
for g in groups: for g in groups:
try: try:
group_id = DiscordAPIManager.get_group_id(settings.DISCORD_SERVER_ID, g.name) group_id = DiscordAPIManager.get_group_id(settings.DISCORD_SERVER_ID, g)
group_ids.append(group_id) group_ids.append(group_id)
except: except:
# need to create role on server for group # need to create role on server for group
group_ids.append(DiscordManager.create_group(g.name)) group_ids.append(DiscordManager.create_group(g))
DiscordAPIManager.set_roles(settings.DISCORD_SERVER_ID, user_id, group_ids) DiscordAPIManager.set_roles(settings.DISCORD_SERVER_ID, user_id, group_ids)
@staticmethod @staticmethod
def create_group(groupname): def create_group(groupname):
safe_groupname = DiscordManager.__sanatize_username(groupname)
new_group = DiscordAPIManager.generate_role(settings.DISCORD_SERVER_ID) new_group = DiscordAPIManager.generate_role(settings.DISCORD_SERVER_ID)
named_group = DiscordAPIManager.edit_role(settings.DISCORD_SERVER_ID, new_group['id'], safe_groupname) named_group = DiscordAPIManager.edit_role(settings.DISCORD_SERVER_ID, new_group['id'], groupname)
return named_group['id'] return named_group['id']
@staticmethod @staticmethod

View File

@ -12,6 +12,7 @@ from managers.phpbb3_manager import Phpbb3Manager
from managers.mumble_manager import MumbleManager from managers.mumble_manager import MumbleManager
from managers.ipboard_manager import IPBoardManager from managers.ipboard_manager import IPBoardManager
from managers.teamspeak3_manager import Teamspeak3Manager from managers.teamspeak3_manager import Teamspeak3Manager
from managers.discord_manager import DiscordManager
from authentication.managers import AuthServicesInfoManager from authentication.managers import AuthServicesInfoManager
from eveonline.managers import EveManager from eveonline.managers import EveManager
from celerytask.tasks import remove_all_syncgroups_for_service from celerytask.tasks import remove_all_syncgroups_for_service
@ -317,3 +318,29 @@ def fleet_fits(request):
context = {} context = {}
return render_to_response('registered/fleetfits.html', context, return render_to_response('registered/fleetfits.html', context,
context_instance=RequestContext(request)) context_instance=RequestContext(request))
@login_required
@user_passes_test(service_blue_alliance_test)
def 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)
# If our username is blank means we already had a user
if info[0] is not "":
AuthServicesInfoManager.update_user_discord_info(info[0], info[1], request.user)
update_discord_groups(request.user)
return HttpResponseRedirect("/services/")
return HttpResponseRedirect("/dashboard")
@login_required
@user_passes_test(service_blue_alliance_test)
def deactivate_discord(request):
authinfo = AuthServicesInfoManager.get_auth_service_info(request.user)
result = DiscordManager.delete_user(authinfo.jabber_username)
remove_all_syncgroups_for_service(request.user, "discord")
# If our username is blank means we failed
if result:
AuthServicesInfoManager.update_user_discord_info("", "", request.user)
return HttpResponseRedirect("/services/")
return HttpResponseRedirect("/dashboard")