def activate_ips4(request): logger.debug("activate_ips4 called by user %s" % request.user) character = EveManager.get_main_character(request.user) logger.debug("Adding IPS4 user for user %s with main character %s" % (request.user, character)) result = Ips4Manager.add_user(character.character_name, request.user.email) # if empty we failed if result[0] != "" and not Ips4Tasks.has_account(request.user): ips_user = Ips4User.objects.create(user=request.user, id=result[2], username=result[0]) logger.debug( "Updated authserviceinfo for user %s with IPS4 credentials." % request.user) # update_ips4_groups.delay(request.user.pk) logger.info("Successfully activated IPS4 for user %s" % request.user) messages.success(request, 'Activated IPSuite4 account.') credentials = { 'username': result[0], 'password': result[1], } return render(request, 'registered/service_credentials.html', context={ 'credentials': credentials, 'service': 'IPSuite4' }) else: logger.error("Unsuccessful attempt to activate IPS4 for user %s" % request.user) messages.error( request, 'An error occurred while processing your IPSuite4 account.') return redirect("auth_services")
def activate_teamspeak3(request): logger.debug("activate_teamspeak3 called by user %s" % request.user) authinfo = AuthServicesInfo.objects.get(user=request.user) character = EveManager.get_main_character(request.user) ticker = character.corporation_ticker if authinfo.state == BLUE_STATE: logger.debug("Adding TS3 user for blue user %s with main character %s" % (request.user, character)) # Blue members should have alliance ticker (if in alliance) if EveAllianceInfo.objects.filter(alliance_id=character.alliance_id).exists(): alliance = EveAllianceInfo.objects.filter(alliance_id=character.alliance_id)[0] ticker = alliance.alliance_ticker result = Teamspeak3Manager.add_blue_user(character.character_name, ticker) else: logger.debug("Adding TS3 user for user %s with main character %s" % (request.user, character)) result = Teamspeak3Manager.add_user(character.character_name, ticker) # if its empty we failed if result[0] is not "": Teamspeak3User.objects.update_or_create(user=request.user, defaults={'uid': result[0], 'perm_key': result[1]}) logger.debug("Updated authserviceinfo for user %s with TS3 credentials. Updating groups." % request.user) logger.info("Successfully activated TS3 for user %s" % request.user) messages.success(request, 'Activated TeamSpeak3 account.') return redirect("auth_verify_teamspeak3") logger.error("Unsuccessful attempt to activate TS3 for user %s" % request.user) messages.error(request, 'An error occurred while processing your TeamSpeak3 account.') return redirect("auth_services")
def reset_smf_password(request): logger.debug("reset_smf_password called by user %s" % request.user) character = EveManager.get_main_character(request.user) if SmfTasks.has_account(request.user) and character is not None: result = SmfManager.update_user_password(request.user.smf.username, character.character_id) # false we failed if result != "": logger.info("Successfully reset smf password for user %s" % request.user) messages.success(request, 'Reset SMF password.') credentials = { 'username': request.user.smf.username, 'password': result, } return render(request, 'registered/service_credentials.html', context={ 'credentials': credentials, 'service': 'SMF' }) logger.error("Unsuccessful attempt to reset smf password for user %s" % request.user) messages.error(request, 'An error occurred while processing your SMF account.') return redirect("auth_services")
def activate_jabber(request): logger.debug("activate_jabber called by user %s" % request.user) character = EveManager.get_main_character(request.user) logger.debug("Adding jabber user for user %s with main character %s" % (request.user, character)) info = OpenfireManager.add_user(character.character_name) # If our username is blank means we already had a user if info[0] is not "": OpenfireUser.objects.update_or_create(user=request.user, defaults={'username': info[0]}) logger.debug( "Updated authserviceinfo for user %s with jabber credentials. Updating groups." % request.user) OpenfireTasks.update_groups.delay(request.user.pk) logger.info("Successfully activated jabber for user %s" % request.user) messages.success(request, 'Activated jabber account.') credentials = { 'username': info[0], 'password': info[1], } return render(request, 'registered/service_credentials.html', context={ 'credentials': credentials, 'service': 'Jabber' }) else: logger.error("Unsuccessful attempt to activate jabber for user %s" % request.user) messages.error( request, 'An error occurred while processing your jabber account.') return redirect("auth_services")
def set_smf_password(request): logger.debug("set_smf_password called by user %s" % request.user) if request.method == 'POST': logger.debug("Received POST request with form.") form = ServicePasswordForm(request.POST) logger.debug("Form is valid: %s" % form.is_valid()) character = EveManager.get_main_character(request.user) if form.is_valid() and SmfTasks.has_account(request.user) and character is not None: password = form.cleaned_data['password'] logger.debug("Form contains password of length %s" % len(password)) result = SmfManager.update_user_password(request.user.smf.username, character.character_id, password=password) if result != "": logger.info("Successfully set smf password for user %s" % request.user) messages.success(request, 'Set SMF password.') else: logger.error("Failed to install custom smf password for user %s" % request.user) messages.error(request, 'An error occurred while processing your SMF account.') return redirect("auth_services") else: logger.debug("Request is not type POST - providing empty form.") form = ServicePasswordForm() logger.debug("Rendering form for user %s" % request.user) context = {'form': form, 'service': 'SMF'} return render(request, 'registered/service_password.html', context=context)
def activate_teamspeak3(request): logger.debug("activate_teamspeak3 called by user %s" % request.user) authinfo = AuthServicesInfo.objects.get(user=request.user) character = EveManager.get_main_character(request.user) ticker = character.corporation_ticker with Teamspeak3Manager() as ts3man: if authinfo.state == BLUE_STATE: logger.debug("Adding TS3 user for blue user %s with main character %s" % (request.user, character)) # Blue members should have alliance ticker (if in alliance) if EveAllianceInfo.objects.filter(alliance_id=character.alliance_id).exists(): alliance = EveAllianceInfo.objects.filter(alliance_id=character.alliance_id)[0] ticker = alliance.alliance_ticker result = ts3man.add_blue_user(character.character_name, ticker) else: logger.debug("Adding TS3 user for user %s with main character %s" % (request.user, character)) result = ts3man.add_user(character.character_name, ticker) # if its empty we failed if result[0] is not "": Teamspeak3User.objects.update_or_create(user=request.user, defaults={'uid': result[0], 'perm_key': result[1]}) logger.debug("Updated authserviceinfo for user %s with TS3 credentials. Updating groups." % request.user) logger.info("Successfully activated TS3 for user %s" % request.user) messages.success(request, 'Activated TeamSpeak3 account.') return redirect("auth_verify_teamspeak3") logger.error("Unsuccessful attempt to activate TS3 for user %s" % request.user) messages.error(request, 'An error occurred while processing your TeamSpeak3 account.') return redirect("auth_services")
def reset_forum_password(request): logger.debug("reset_forum_password called by user %s" % request.user) if Phpbb3Tasks.has_account(request.user): character = EveManager.get_main_character(request.user) result = Phpbb3Manager.update_user_password( request.user.phpbb3.username, character.character_id) # false we failed if result != "": logger.info("Successfully reset forum password for user %s" % request.user) messages.success(request, 'Reset forum password.') credentials = { 'username': request.user.phpbb3.username, 'password': result, } return render(request, 'registered/service_credentials.html', context={ 'credentials': credentials, 'service': 'Forum' }) logger.error("Unsuccessful attempt to reset forum password for user %s" % request.user) messages.error(request, 'An error occurred while processing your forum account.') return redirect("auth_services")
def activate_xenforo_forum(request): logger.debug("activate_xenforo_forum called by user %s" % request.user) character = EveManager.get_main_character(request.user) logger.debug("Adding XenForo user for user %s with main character %s" % (request.user, character)) result = XenForoManager.add_user(character.character_name, request.user.email) # Based on XenAPI's response codes if result['response']['status_code'] == 200: XenforoUser.objects.update_or_create( user=request.user, defaults={'username': result['username']}) logger.info( "Updated user %s with XenForo credentials. Updating groups." % request.user) messages.success(request, 'Activated XenForo account.') credentials = { 'username': result['username'], 'password': result['password'], } return render(request, 'registered/service_credentials.html', context={ 'credentials': credentials, 'service': 'XenForo' }) else: logger.error("Unsuccessful attempt to activate xenforo for user %s" % request.user) messages.error( request, 'An error occurred while processing your XenForo account.') return redirect("auth_services")
def reset_teamspeak3_perm(request): logger.debug("reset_teamspeak3_perm called by user %s" % request.user) if not Teamspeak3Tasks.has_account(request.user): return redirect("auth_services") authinfo = AuthServicesInfo.objects.get(user=request.user) character = EveManager.get_main_character(request.user) logger.debug("Deleting TS3 user for user %s" % request.user) with Teamspeak3Manager() as ts3man: ts3man.delete_user(request.user.teamspeak3.uid) if authinfo.state == BLUE_STATE: logger.debug( "Generating new permission key for blue user %s with main character %s" % (request.user, character)) result = ts3man.generate_new_blue_permissionkey(request.user.teamspeak3.uid, character.character_name, character.corporation_ticker) else: logger.debug("Generating new permission key for user %s with main character %s" % (request.user, character)) result = ts3man.generate_new_permissionkey(request.user.teamspeak3.uid, character.character_name, character.corporation_ticker) # if blank we failed if result[0] != "": Teamspeak3User.objects.update_or_create(user=request.user, defaults={'uid': result[0], 'perm_key': result[1]}) logger.debug("Updated authserviceinfo for user %s with TS3 credentials. Updating groups." % request.user) Teamspeak3Tasks.update_groups.delay(request.user.pk) logger.info("Successfully reset TS3 permission key for user %s" % request.user) messages.success(request, 'Reset TeamSpeak3 permission key.') else: logger.error("Unsuccessful attempt to reset TS3 permission key for user %s" % request.user) messages.error(request, 'An error occurred while processing your TeamSpeak3 account.') return redirect("auth_services")
def activate_market(request): logger.debug("activate_market called by user %s" % request.user) character = EveManager.get_main_character(request.user) if character is not None: logger.debug("Adding market user for user %s with main character %s" % (request.user, character)) result = MarketManager.add_user(character.character_name, request.user.email, character.character_id, character.character_name) # if empty we failed if result[0] != "": MarketUser.objects.create(user=request.user, username=result[0]) logger.debug( "Updated authserviceinfo for user %s with market credentials." % request.user) logger.info("Successfully activated market for user %s" % request.user) messages.success(request, 'Activated Alliance Market account.') credentials = { 'username': result[0], 'password': result[1], } return render(request, 'registered/service_credentials.html', context={ 'credentials': credentials, 'service': 'Alliance Market' }) logger.error("Unsuccessful attempt to activate market for user %s" % request.user) messages.error( request, 'An error occurred while processing your Alliance Market account.') return redirect("auth_services")
def set_forum_password(request): logger.debug("set_forum_password called by user %s" % request.user) if request.method == 'POST': logger.debug("Received POST request with form.") form = ServicePasswordForm(request.POST) logger.debug("Form is valid: %s" % form.is_valid()) if form.is_valid() and Phpbb3Tasks.has_account(request.user): password = form.cleaned_data['password'] logger.debug("Form contains password of length %s" % len(password)) character = EveManager.get_main_character(request.user) result = Phpbb3Manager.update_user_password( request.user.phpbb3.username, character.character_id, password=password) if result != "": logger.info("Successfully set forum password for user %s" % request.user) messages.success(request, 'Set forum password.') else: logger.error( "Failed to install custom forum password for user %s" % request.user) messages.error( request, 'An error occurred while processing your forum account.') return redirect("auth_services") else: logger.debug("Request is not type POST - providing empty form.") form = ServicePasswordForm() logger.debug("Rendering form for user %s" % request.user) context = {'form': form, 'service': 'Forum'} return render(request, 'registered/service_password.html', context=context)
def activate_seat(request): logger.debug("activate_seat called by user %s" % request.user) # Valid now we get the main characters character = EveManager.get_main_character(request.user) logger.debug("Checking SeAT for inactive users with the same username") stat = SeatManager.check_user_status(character.character_name) if stat == {}: logger.debug("User not found, adding SeAT user for user %s with main character %s" % (request.user, character)) result = SeatManager.add_user(character.character_name, request.user.email) else: logger.debug("User found, resetting password") username = SeatManager.enable_user(stat["name"]) password = SeatManager.update_user_password(username, request.user.email) result = [username, password] # if empty we failed if result[0] and result[1]: SeatUser.objects.update_or_create(user=request.user, defaults={'username': result[0]}) logger.debug("Updated SeatUser for user %s with SeAT credentials. Adding eve-apis..." % request.user) SeatTasks.update_roles.delay(request.user.pk) logger.info("Successfully activated SeAT for user %s" % request.user) messages.add_message(request, messages.SUCCESS, _('Successfully activated your %(service)s account.') % SERVICE_NAME) SeatManager.synchronize_eveapis(request.user) credentials = { 'username': request.user.seat.username, 'password': result[1], } return render(request, 'registered/service_credentials.html', context={'credentials': credentials, 'service': 'SeAT'}) messages.add_message(request, messages.ERROR, _('Failed to activate your %(service)s account, please contact your administrator.') % SERVICE_NAME) logger.error("Unsuccessful attempt to activate seat for user %s" % request.user) return redirect("auth_services")
def activate_forum(request): logger.debug("activate_forum called by user %s" % request.user) # Valid now we get the main characters character = EveManager.get_main_character(request.user) logger.debug("Adding phpbb user for user %s with main character %s" % (request.user, character)) result = Phpbb3Manager.add_user(character.character_name, request.user.email, ['REGISTERED'], character.character_id) # if empty we failed if result[0] != "": Phpbb3User.objects.update_or_create(user=request.user, defaults={'username': result[0]}) logger.debug( "Updated authserviceinfo for user %s with forum credentials. Updating groups." % request.user) Phpbb3Tasks.update_groups.delay(request.user.pk) logger.info("Successfully activated forum for user %s" % request.user) messages.success(request, 'Activated forum account.') credentials = { 'username': result[0], 'password': result[1], } return render(request, 'registered/service_credentials.html', context={ 'credentials': credentials, 'service': 'Forum' }) else: logger.error("Unsuccessful attempt to activate forum for user %s" % request.user) messages.error( request, 'An error occurred while processing your forum account.') return redirect("auth_services")
def activate_mumble(request): logger.debug("activate_mumble called by user %s" % request.user) authinfo = AuthServicesInfo.objects.get(user=request.user) character = EveManager.get_main_character(request.user) ticker = character.corporation_ticker if authinfo.state == BLUE_STATE: logger.debug("Adding mumble user for blue user %s with main character %s" % (request.user, character)) # Blue members should have alliance ticker (if in alliance) if EveAllianceInfo.objects.filter(alliance_id=character.alliance_id).exists(): alliance = EveAllianceInfo.objects.filter(alliance_id=character.alliance_id)[0] ticker = alliance.alliance_ticker result = MumbleManager.create_user(request.user, ticker, character.character_name, blue=True) else: logger.debug("Adding mumble user for user %s with main character %s" % (request.user, character)) result = MumbleManager.create_user(request.user, ticker, character.character_name) if result: logger.debug("Updated authserviceinfo for user %s with mumble credentials. Updating groups." % request.user) MumbleTasks.update_groups.apply(args=(request.user.pk,)) # Run synchronously to prevent timing issues logger.info("Successfully activated mumble for user %s" % request.user) messages.success(request, 'Activated Mumble account.') credentials = { 'username': result[0], 'password': result[1], } return render(request, 'registered/service_credentials.html', context={'credentials': credentials, 'service': 'Mumble'}) else: logger.error("Unsuccessful attempt to activate mumble for user %s" % request.user) messages.error(request, 'An error occurred while processing your Mumble account.') return redirect("auth_services")
def reset_teamspeak3_perm(request): logger.debug("reset_teamspeak3_perm called by user %s" % request.user) if not Teamspeak3Tasks.has_account(request.user): return redirect("auth_services") authinfo = AuthServicesInfo.objects.get(user=request.user) character = EveManager.get_main_character(request.user) logger.debug("Deleting TS3 user for user %s" % request.user) Teamspeak3Manager.delete_user(request.user.teamspeak3.uid) if authinfo.state == BLUE_STATE: logger.debug( "Generating new permission key for blue user %s with main character %s" % (request.user, character)) result = Teamspeak3Manager.generate_new_blue_permissionkey(request.user.teamspeak3.uid, character.character_name, character.corporation_ticker) else: logger.debug("Generating new permission key for user %s with main character %s" % (request.user, character)) result = Teamspeak3Manager.generate_new_permissionkey(request.user.teamspeak3.uid, character.character_name, character.corporation_ticker) # if blank we failed if result[0] != "": Teamspeak3User.objects.update_or_create(user=request.user, defaults={'uid': result[0], 'perm_key': result[1]}) logger.debug("Updated authserviceinfo for user %s with TS3 credentials. Updating groups." % request.user) Teamspeak3Tasks.update_groups.delay(request.user.pk) logger.info("Successfully reset TS3 permission key for user %s" % request.user) messages.success(request, 'Reset TeamSpeak3 permission key.') else: logger.error("Unsuccessful attempt to reset TS3 permission key for user %s" % request.user) messages.error(request, 'An error occurred while processing your TeamSpeak3 account.') return redirect("auth_services")
def jabber_broadcast_view(request): logger.debug("jabber_broadcast_view called by user %s" % request.user) allchoices = [] if request.user.has_perm('auth.jabber_broadcast_all'): allchoices.append(('all', 'all')) for g in Group.objects.all(): allchoices.append((str(g.name), str(g.name))) else: for g in request.user.groups.all(): allchoices.append((str(g.name), str(g.name))) if request.method == 'POST': form = JabberBroadcastForm(request.POST) form.fields['group'].choices = allchoices logger.debug("Received POST request containing form, valid: %s" % form.is_valid()) if form.is_valid(): main_char = EveManager.get_main_character(request.user) logger.debug( "Processing jabber broadcast for user %s with main character %s" % (request.user, main_char)) if main_char is not None: message_to_send = form.cleaned_data[ 'message'] + "\n##### SENT BY: " + "[" + main_char.corporation_ticker + "]" + \ main_char.character_name + " TO: " + \ form.cleaned_data['group'] + " WHEN: " + datetime.datetime.utcnow().strftime( "%Y-%m-%d %H:%M:%S") + " #####\n##### Replies are NOT monitored #####\n" group_to_send = form.cleaned_data['group'] OpenfireManager.send_broadcast_threaded( group_to_send, message_to_send, ) else: message_to_send = form.cleaned_data[ 'message'] + "\n##### SENT BY: " + "No character but can send pings?" + " TO: " + \ form.cleaned_data['group'] + " WHEN: " + datetime.datetime.utcnow().strftime( "%Y-%m-%d %H:%M:%S") + " #####\n##### Replies are NOT monitored #####\n" group_to_send = form.cleaned_data['group'] OpenfireManager.send_broadcast_threaded( group_to_send, message_to_send, ) messages.success(request, 'Sent jabber broadcast to %s' % group_to_send) logger.info("Sent jabber broadcast on behalf of user %s" % request.user) else: form = JabberBroadcastForm() form.fields['group'].choices = allchoices logger.debug( "Generated broadcast form for user %s containing %s groups" % (request.user, len(form.fields['group'].choices))) context = {'form': form} return render(request, 'registered/jabberbroadcast.html', context=context)
def activate_mumble(request): logger.debug("activate_mumble called by user %s" % request.user) authinfo = AuthServicesInfo.objects.get(user=request.user) character = EveManager.get_main_character(request.user) ticker = character.corporation_ticker if authinfo.state == BLUE_STATE: logger.debug( "Adding mumble user for blue user %s with main character %s" % (request.user, character)) # Blue members should have alliance ticker (if in alliance) if EveAllianceInfo.objects.filter( alliance_id=character.alliance_id).exists(): alliance = EveAllianceInfo.objects.filter( alliance_id=character.alliance_id)[0] ticker = alliance.alliance_ticker result = MumbleManager.create_user(request.user, ticker, character.character_name, blue=True) else: logger.debug("Adding mumble user for user %s with main character %s" % (request.user, character)) result = MumbleManager.create_user(request.user, ticker, character.character_name) if result: logger.debug( "Updated authserviceinfo for user %s with mumble credentials. Updating groups." % request.user) MumbleTasks.update_groups.apply(args=( request.user.pk, )) # Run synchronously to prevent timing issues logger.info("Successfully activated mumble for user %s" % request.user) messages.success(request, 'Activated Mumble account.') credentials = { 'username': result[0], 'password': result[1], } return render(request, 'registered/service_credentials.html', context={ 'credentials': credentials, 'service': 'Mumble' }) else: logger.error("Unsuccessful attempt to activate mumble for user %s" % request.user) messages.error( request, 'An error occurred while processing your Mumble account.') return redirect("auth_services")
def activate_seat(request): logger.debug("activate_seat called by user %s" % request.user) # Valid now we get the main characters character = EveManager.get_main_character(request.user) logger.debug("Checking SeAT for inactive users with the same username") stat = SeatManager.check_user_status(character.character_name) if stat == {}: logger.debug( "User not found, adding SeAT user for user %s with main character %s" % (request.user, character)) result = SeatManager.add_user(character.character_name, request.user.email) else: logger.debug("User found, resetting password") username = SeatManager.enable_user(stat["name"]) password = SeatManager.update_user_password(username, request.user.email) result = [username, password] # if empty we failed if result[0] and result[1]: SeatUser.objects.update_or_create(user=request.user, defaults={'username': result[0]}) logger.debug( "Updated SeatUser for user %s with SeAT credentials. Adding eve-apis..." % request.user) SeatTasks.update_roles.delay(request.user.pk) logger.info("Successfully activated SeAT for user %s" % request.user) messages.add_message( request, messages.SUCCESS, _('Successfully activated your %(service)s account.') % SERVICE_NAME) SeatManager.synchronize_eveapis(request.user) credentials = { 'username': request.user.seat.username, 'password': result[1], } return render(request, 'registered/service_credentials.html', context={ 'credentials': credentials, 'service': 'SeAT' }) messages.add_message( request, messages.ERROR, _('Failed to activate your %(service)s account, please contact your administrator.' ) % SERVICE_NAME) logger.error("Unsuccessful attempt to activate seat for user %s" % request.user) return redirect("auth_services")
def jabber_broadcast_view(request): logger.debug("jabber_broadcast_view called by user %s" % request.user) allchoices = [] if request.user.has_perm('auth.jabber_broadcast_all'): allchoices.append(('all', 'all')) for g in Group.objects.all(): allchoices.append((str(g.name), str(g.name))) else: for g in request.user.groups.all(): allchoices.append((str(g.name), str(g.name))) if request.method == 'POST': form = JabberBroadcastForm(request.POST) form.fields['group'].choices = allchoices logger.debug("Received POST request containing form, valid: %s" % form.is_valid()) if form.is_valid(): main_char = EveManager.get_main_character(request.user) logger.debug("Processing jabber broadcast for user %s with main character %s" % (request.user, main_char)) try: if main_char is not None: message_to_send = form.cleaned_data[ 'message'] + "\n##### SENT BY: " + "[" + main_char.corporation_ticker + "]" + \ main_char.character_name + " TO: " + \ form.cleaned_data['group'] + " WHEN: " + datetime.datetime.utcnow().strftime( "%Y-%m-%d %H:%M:%S") + " #####\n##### Replies are NOT monitored #####\n" group_to_send = form.cleaned_data['group'] else: message_to_send = form.cleaned_data[ 'message'] + "\n##### SENT BY: " + "No character but can send pings?" + " TO: " + \ form.cleaned_data['group'] + " WHEN: " + datetime.datetime.utcnow().strftime( "%Y-%m-%d %H:%M:%S") + " #####\n##### Replies are NOT monitored #####\n" group_to_send = form.cleaned_data['group'] OpenfireManager.send_broadcast_message(group_to_send, message_to_send) messages.success(request, 'Sent jabber broadcast to %s' % group_to_send) logger.info("Sent jabber broadcast on behalf of user %s" % request.user) except PingBotException as e: messages.error(request, e) else: form = JabberBroadcastForm() form.fields['group'].choices = allchoices logger.debug("Generated broadcast form for user %s containing %s groups" % ( request.user, len(form.fields['group'].choices))) context = {'form': form} return render(request, 'registered/jabberbroadcast.html', context=context)
def update_nickname(self, pk): user = User.objects.get(pk=pk) logger.debug("Updating discord nickname for user %s" % user) if DiscordTasks.has_account(user): character = EveManager.get_main_character(user) logger.debug("Updating user %s discord nickname to %s" % (user, character.character_name)) try: DiscordOAuthManager.update_nickname(user.discord.uid, character.character_name) except Exception as e: if self: logger.exception("Discord nickname sync failed for %s, retrying in 10 mins" % user) raise self.retry(countdown=60 * 10) else: # Rethrow raise e logger.debug("Updated user %s discord nickname." % user) else: logger.debug("User %s does not have a discord account" % user)
def reset_smf_password(request): logger.debug("reset_smf_password called by user %s" % request.user) character = EveManager.get_main_character(request.user) if SmfTasks.has_account(request.user) and character is not None: result = SmfManager.update_user_password(request.user.smf.username, character.character_id) # false we failed if result != "": logger.info("Successfully reset smf password for user %s" % request.user) messages.success(request, 'Reset SMF password.') credentials = { 'username': request.user.smf.username, 'password': result, } return render(request, 'registered/service_credentials.html', context={'credentials': credentials, 'service': 'SMF'}) logger.error("Unsuccessful attempt to reset smf password for user %s" % request.user) messages.error(request, 'An error occurred while processing your SMF account.') return redirect("auth_services")
def reset_forum_password(request): logger.debug("reset_forum_password called by user %s" % request.user) if Phpbb3Tasks.has_account(request.user): character = EveManager.get_main_character(request.user) result = Phpbb3Manager.update_user_password(request.user.phpbb3.username, character.character_id) # false we failed if result != "": logger.info("Successfully reset forum password for user %s" % request.user) messages.success(request, 'Reset forum password.') credentials = { 'username': request.user.phpbb3.username, 'password': result, } return render(request, 'registered/service_credentials.html', context={'credentials': credentials, 'service': 'Forum'}) logger.error("Unsuccessful attempt to reset forum password for user %s" % request.user) messages.error(request, 'An error occurred while processing your forum account.') return redirect("auth_services")
def activate_xenforo_forum(request): logger.debug("activate_xenforo_forum called by user %s" % request.user) character = EveManager.get_main_character(request.user) logger.debug("Adding XenForo user for user %s with main character %s" % (request.user, character)) result = XenForoManager.add_user(character.character_name, request.user.email) # Based on XenAPI's response codes if result['response']['status_code'] == 200: XenforoUser.objects.update_or_create(user=request.user, defaults={'username': result['username']}) logger.info("Updated user %s with XenForo credentials. Updating groups." % request.user) messages.success(request, 'Activated XenForo account.') credentials = { 'username': result['username'], 'password': result['password'], } return render(request, 'registered/service_credentials.html', context={'credentials': credentials, 'service': 'XenForo'}) else: logger.error("Unsuccessful attempt to activate xenforo for user %s" % request.user) messages.error(request, 'An error occurred while processing your XenForo account.') return redirect("auth_services")
def activate_jabber(request): logger.debug("activate_jabber called by user %s" % request.user) character = EveManager.get_main_character(request.user) logger.debug("Adding jabber user for user %s with main character %s" % (request.user, character)) info = OpenfireManager.add_user(character.character_name) # If our username is blank means we already had a user if info[0] is not "": OpenfireUser.objects.update_or_create(user=request.user, defaults={'username': info[0]}) logger.debug("Updated authserviceinfo for user %s with jabber credentials. Updating groups." % request.user) OpenfireTasks.update_groups.delay(request.user.pk) logger.info("Successfully activated jabber for user %s" % request.user) messages.success(request, 'Activated jabber account.') credentials = { 'username': info[0], 'password': info[1], } return render(request, 'registered/service_credentials.html', context={'credentials': credentials, 'service': 'Jabber'}) else: logger.error("Unsuccessful attempt to activate jabber for user %s" % request.user) messages.error(request, 'An error occurred while processing your jabber account.') return redirect("auth_services")
def activate_market(request): logger.debug("activate_market called by user %s" % request.user) character = EveManager.get_main_character(request.user) if character is not None: logger.debug("Adding market user for user %s with main character %s" % (request.user, character)) result = MarketManager.add_user(character.character_name, request.user.email, character.character_id, character.character_name) # if empty we failed if result[0] != "": MarketUser.objects.create(user=request.user, username=result[0]) logger.debug("Updated authserviceinfo for user %s with market credentials." % request.user) logger.info("Successfully activated market for user %s" % request.user) messages.success(request, 'Activated Alliance Market account.') credentials = { 'username': result[0], 'password': result[1], } return render(request, 'registered/service_credentials.html', context={'credentials': credentials, 'service': 'Alliance Market'}) logger.error("Unsuccessful attempt to activate market for user %s" % request.user) messages.error(request, 'An error occurred while processing your Alliance Market account.') return redirect("auth_services")
def activate_ips4(request): logger.debug("activate_ips4 called by user %s" % request.user) character = EveManager.get_main_character(request.user) logger.debug("Adding IPS4 user for user %s with main character %s" % (request.user, character)) result = Ips4Manager.add_user(character.character_name, request.user.email) # if empty we failed if result[0] != "" and not Ips4Tasks.has_account(request.user): ips_user = Ips4User.objects.create(user=request.user, id=result[2], username=result[0]) logger.debug("Updated authserviceinfo for user %s with IPS4 credentials." % request.user) # update_ips4_groups.delay(request.user.pk) logger.info("Successfully activated IPS4 for user %s" % request.user) messages.success(request, 'Activated IPSuite4 account.') credentials = { 'username': result[0], 'password': result[1], } return render(request, 'registered/service_credentials.html', context={'credentials': credentials, 'service': 'IPSuite4'}) else: logger.error("Unsuccessful attempt to activate IPS4 for user %s" % request.user) messages.error(request, 'An error occurred while processing your IPSuite4 account.') return redirect("auth_services")
def activate_smf(request): logger.debug("activate_smf called by user %s" % request.user) # Valid now we get the main characters character = EveManager.get_main_character(request.user) logger.debug("Adding smf user for user %s with main character %s" % (request.user, character)) result = SmfManager.add_user(character.character_name, request.user.email, ['Member'], character.character_id) # if empty we failed if result[0] != "": SmfUser.objects.update_or_create(user=request.user, defaults={'username': result[0]}) logger.debug("Updated authserviceinfo for user %s with smf credentials. Updating groups." % request.user) SmfTasks.update_groups.delay(request.user.pk) logger.info("Successfully activated smf for user %s" % request.user) messages.success(request, 'Activated SMF account.') credentials = { 'username': result[0], 'password': result[1], } return render(request, 'registered/service_credentials.html', context={'credentials': credentials, 'service': 'SMF'}) else: logger.error("Unsuccessful attempt to activate smf for user %s" % request.user) messages.error(request, 'An error occurred while processing your SMF account.') return redirect("auth_services")
def activate_ipboard_forum(request): logger.debug("activate_ipboard_forum called by user %s" % request.user) character = EveManager.get_main_character(request.user) logger.debug("Adding ipboard user for user %s with main character %s" % (request.user, character)) result = IPBoardManager.add_user(character.character_name, request.user.email) if result[0] != "": ipboard_user = IpboardUser() ipboard_user.user = request.user ipboard_user.username = result[0] ipboard_user.save() logger.debug( "Updated authserviceinfo for user %s with ipboard credentials. Updating groups." % request.user) IpboardTasks.update_groups.delay(request.user.pk) logger.info("Successfully activated ipboard for user %s" % request.user) messages.success(request, 'Activated IPBoard account.') credentials = { 'username': result[0], 'password': result[1], } return render(request, 'registered/service_credentials.html', context={ 'credentials': credentials, 'service': 'IPBoard' }) else: logger.error("Unsuccessful attempt to activate ipboard for user %s" % request.user) messages.error( request, 'An error occurred while processing your IPBoard account.') return redirect("auth_services")
def render_services_ctrl(self, request): return render_to_string(self.service_ctrl_template, { 'char': EveManager.get_main_character(request.user) }, request=request)
def discourse_sso(request): ## Check if user has access auth = AuthServicesInfo.objects.get(user=request.user) if not request.user.has_perm(ACCESS_PERM): messages.error(request, 'You are not authorized to access Discourse.') return redirect('auth_dashboard') if not auth.main_char_id: messages.error(request, "You must have a main character set to access Discourse.") return redirect('auth_characters') main_char = EveManager.get_main_character(request.user) if main_char is None: messages.error(request, "Your main character is missing a database model. Please select a new one.") return redirect('auth_characters') payload = request.GET.get('sso') signature = request.GET.get('sig') if None in [payload, signature]: messages.error(request, 'No SSO payload or signature. Please contact support if this problem persists.') return redirect('auth_dashboard') ## Validate the payload try: payload = unquote(payload).encode('utf-8') decoded = base64.decodestring(payload).decode('utf-8') assert 'nonce' in decoded assert len(payload) > 0 except AssertionError: messages.error(request, 'Invalid payload. Please contact support if this problem persists.') return redirect('auth_dashboard') key = str(settings.DISCOURSE_SSO_SECRET).encode('utf-8') h = hmac.new(key, payload, digestmod=hashlib.sha256) this_signature = h.hexdigest() if this_signature != signature: messages.error(request, 'Invalid payload. Please contact support if this problem persists.') return redirect('auth_dashboard') ## Build the return payload username = DiscourseManager._sanitize_username(main_char.character_name) qs = parse_qs(decoded) params = { 'nonce': qs['nonce'][0], 'email': request.user.email, 'external_id': request.user.pk, 'username': username, 'name': username, } if auth.main_char_id: params['avatar_url'] = 'https://image.eveonline.com/Character/%s_256.jpg' % auth.main_char_id return_payload = base64.encodestring(urlencode(params).encode('utf-8')) h = hmac.new(key, return_payload, digestmod=hashlib.sha256) query_string = urlencode({'sso': return_payload, 'sig': h.hexdigest()}) ## Record activation and queue group sync if not DiscourseTasks.has_account(request.user): discourse_user = DiscourseUser() discourse_user.user = request.user discourse_user.enabled = True discourse_user.save() DiscourseTasks.update_groups.apply_async(args=[request.user.pk], countdown=30) # wait 30s for new user creation on Discourse ## Redirect back to Discourse url = '%s/session/sso_login' % settings.DISCOURSE_URL return redirect('%s?%s' % (url, query_string))
def discourse_sso(request): ## Check if user has access auth = AuthServicesInfo.objects.get(user=request.user) if not request.user.has_perm(ACCESS_PERM): messages.error(request, 'You are not authorized to access Discourse.') return redirect('auth_dashboard') if not auth.main_char_id: messages.error( request, "You must have a main character set to access Discourse.") return redirect('auth_characters') main_char = EveManager.get_main_character(request.user) if main_char is None: messages.error( request, "Your main character is missing a database model. Please select a new one." ) return redirect('auth_characters') payload = request.GET.get('sso') signature = request.GET.get('sig') if None in [payload, signature]: messages.error( request, 'No SSO payload or signature. Please contact support if this problem persists.' ) return redirect('auth_dashboard') ## Validate the payload try: payload = unquote(payload).encode('utf-8') decoded = base64.decodestring(payload).decode('utf-8') assert 'nonce' in decoded assert len(payload) > 0 except AssertionError: messages.error( request, 'Invalid payload. Please contact support if this problem persists.' ) return redirect('auth_dashboard') key = str(settings.DISCOURSE_SSO_SECRET).encode('utf-8') h = hmac.new(key, payload, digestmod=hashlib.sha256) this_signature = h.hexdigest() if this_signature != signature: messages.error( request, 'Invalid payload. Please contact support if this problem persists.' ) return redirect('auth_dashboard') ## Build the return payload username = DiscourseManager._sanitize_username(main_char.character_name) qs = parse_qs(decoded) params = { 'nonce': qs['nonce'][0], 'email': request.user.email, 'external_id': request.user.pk, 'username': username, 'name': username, } if auth.main_char_id: params[ 'avatar_url'] = 'https://image.eveonline.com/Character/%s_256.jpg' % auth.main_char_id return_payload = base64.encodestring(urlencode(params).encode('utf-8')) h = hmac.new(key, return_payload, digestmod=hashlib.sha256) query_string = urlencode({'sso': return_payload, 'sig': h.hexdigest()}) ## Record activation and queue group sync if not DiscourseTasks.has_account(request.user): discourse_user = DiscourseUser() discourse_user.user = request.user discourse_user.enabled = True discourse_user.save() DiscourseTasks.update_groups.apply_async( args=[request.user.pk], countdown=30) # wait 30s for new user creation on Discourse ## Redirect back to Discourse url = '%s/session/sso_login' % settings.DISCOURSE_URL return redirect('%s?%s' % (url, query_string))