From 87723493098060bb8aa1318eaccf1dc4f9f9d184 Mon Sep 17 00:00:00 2001 From: Peter Pfeufer Date: Wed, 7 Sep 2022 21:04:23 +0200 Subject: [PATCH] [ADDED] Main character name as displayed name on SMF service activation --- allianceauth/services/modules/smf/manager.py | 66 ++++++++++++++------ allianceauth/services/modules/smf/views.py | 47 ++++++++++---- 2 files changed, 84 insertions(+), 29 deletions(-) diff --git a/allianceauth/services/modules/smf/manager.py b/allianceauth/services/modules/smf/manager.py index 3293c8d3..1d406a79 100644 --- a/allianceauth/services/modules/smf/manager.py +++ b/allianceauth/services/modules/smf/manager.py @@ -5,6 +5,7 @@ from datetime import datetime import hashlib import logging import re +from typing import Tuple from packaging import version @@ -37,6 +38,8 @@ class SmfManager: SQL_DEL_USER = r"DELETE FROM %smembers where member_name = %%s" % TABLE_PREFIX + SQL_UPD_USER = r"UPDATE %smembers SET email_address = %%s, passwd = %%s, real_name = %%s WHERE member_name = %%s" % TABLE_PREFIX + SQL_DIS_USER = r"UPDATE %smembers SET email_address = %%s, passwd = %%s WHERE member_name = %%s" % TABLE_PREFIX SQL_USER_ID_FROM_USERNAME = r"SELECT id_member from %smembers WHERE member_name = %%s" % TABLE_PREFIX @@ -174,50 +177,75 @@ class SmfManager: return out @classmethod - def add_user(cls, username, email_address, groups, characterid): + def add_user(cls, username, email_address, groups, main_character: EveCharacter) -> Tuple: + """ + Add a user to SMF + :param username: + :param email_address: + :param groups: + :param main_character: + :return: + """ + + main_character_id = main_character.character_id + main_character_name = main_character.character_name + logger.debug( - f"Adding smf user with member_name {username}, " - f"email_address {email_address}, " - f"characterid {characterid}" + f"Adding smf user with member_name: {username}, " + f"email_address: {email_address}, " + f"characterid: {main_character_id}, " + f"main character: {main_character_name}" ) + cursor = connections['smf'].cursor() username_clean = cls.santatize_username(username) passwd = cls.generate_random_pass() pwhash = cls.gen_hash(username_clean, passwd) - logger.debug(f"Proceeding to add smf user {username} and pwhash starting with {pwhash[0:5]}") register_date = cls.get_current_utc_date() + + logger.debug(f"Proceeding to add smf user {username} and pwhash starting with {pwhash[0:5]}") + # check if the username was simply revoked if cls.check_user(username) is True: - logger.warning(f"Unable to add smf user with username {username} - already exists. Updating user instead.") - cls.__update_user_info(username_clean, email_address, pwhash) + logger.warning( + f"Unable to add smf user with username {username} - " + f"already exists. Updating user instead." + ) + + cls.__update_user_info( + username_clean, email_address, pwhash, main_character_name + ) else: try: smf_version = cls._get_current_smf_version() + sql_add_user_arguments = [ + username_clean, + pwhash, + email_address, + register_date, + main_character_name, + ] if version.parse(smf_version) < version.parse("2.1"): logger.debug("SMF compatibility: < 2.1") - cursor.execute( - cls.SQL_ADD_USER_SMF_20, - [username_clean, pwhash, email_address, register_date, username_clean] - ) + cursor.execute(cls.SQL_ADD_USER_SMF_20, sql_add_user_arguments) else: logger.debug("SMF compatibility: >= 2.1") - cursor.execute( - cls.SQL_ADD_USER_SMF_21, - [username_clean, pwhash, email_address, register_date, username_clean] - ) - cls.add_avatar(username_clean, characterid) + cursor.execute(cls.SQL_ADD_USER_SMF_21, sql_add_user_arguments) + + cls.add_avatar(username_clean, main_character_id) logger.info(f"Added smf member_name {username_clean}") cls.update_groups(username_clean, groups) except Exception as e: logger.warning(f"Unable to add smf user {username_clean}: {e}") pass + return username_clean, passwd @classmethod - def __update_user_info(cls, username, email_address, passwd): + def __update_user_info(cls, username, email_address, passwd, main_character_name): logger.debug( f"Updating smf user {username} info: " f"username {email_address} " @@ -225,7 +253,9 @@ class SmfManager: ) cursor = connections['smf'].cursor() try: - cursor.execute(cls.SQL_DIS_USER, [email_address, passwd, username]) + cursor.execute( + cls.SQL_UPD_USER, [email_address, passwd, main_character_name, username] + ) logger.info(f"Updated smf user {username} info") except Exception as e: logger.exception(f"Unable to update smf user {username} info. ({e})") diff --git a/allianceauth/services/modules/smf/views.py b/allianceauth/services/modules/smf/views.py index b7d26635..33bd2148 100644 --- a/allianceauth/services/modules/smf/views.py +++ b/allianceauth/services/modules/smf/views.py @@ -19,26 +19,51 @@ ACCESS_PERM = 'smf.access_smf' @login_required @permission_required(ACCESS_PERM) def activate_smf(request): - logger.debug("activate_smf called by user %s" % request.user) + logger.debug(f"activate_smf called by user {request.user}") # Valid now we get the main characters - character = request.user.profile.main_character - logger.debug(f"Adding smf user for user {request.user} with main character {character}") - result = SmfManager.add_user(SmfTasks.get_username(request.user), request.user.email, ['Member'], character.character_id) + main_character = request.user.profile.main_character + + logger.debug( + f"Adding smf user for user {request.user} with main character {main_character}" + ) + + result = SmfManager.add_user( + SmfTasks.get_username(request.user), + request.user.email, + ['Member'], + main_character, + ) + # 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) + SmfUser.objects.update_or_create( + user=request.user, defaults={'username': result[0]} + ) + + logger.debug( + f"Updated authserviceinfo for user {request.user} " + f"with smf credentials. Updating groups." + ) + SmfTasks.update_groups.delay(request.user.pk) - logger.info("Successfully activated smf for user %s" % request.user) + + logger.info(f"Successfully activated smf for user {request.user}") + messages.success(request, _('Activated SMF account.')) credentials = { 'username': result[0], 'password': result[1], } - return render(request, 'services/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 render( + request, + 'services/service_credentials.html', + context={'credentials': credentials, 'service': 'SMF'}, + ) + + logger.error(f"Unsuccessful attempt to activate smf for user {request.user}") + messages.error(request, _('An error occurred while processing your SMF account.')) + return redirect("services:services")