SQL queries need to be different depending on SMF version

It's not a work of art, but it does the job. If anyone has a better idea, hit the comments ...
This commit is contained in:
Peter Pfeufer 2022-06-24 22:39:27 +02:00
parent 53ce4d2453
commit a0d14eb1d3
No known key found for this signature in database
GPG Key ID: 6051D2C6AD4EBC27

View File

@ -6,6 +6,8 @@ import hashlib
import logging import logging
import re import re
from packaging import version
from django.db import connections from django.db import connections
from django.conf import settings from django.conf import settings
from allianceauth.eveonline.models import EveCharacter from allianceauth.eveonline.models import EveCharacter
@ -20,9 +22,18 @@ class SmfManager:
def __init__(self): def __init__(self):
pass pass
SQL_ADD_USER = r"INSERT INTO %smembers (member_name, passwd, email_address, date_registered, real_name," \ # For SMF < 2.1
r" buddy_list, signature, ignore_boards) " \ SQL_ADD_USER_SMF_20 = r"INSERT INTO %smembers (member_name, passwd, email_address, date_registered, real_name," \
r"VALUES (%%s, %%s, %%s, %%s, %%s, 0, 0, 0)" % TABLE_PREFIX r" buddy_list, message_labels, openid_uri, signature, ignore_boards) " \
r"VALUES (%%s, %%s, %%s, %%s, %%s, 0, 0, 0, 0, 0)" % TABLE_PREFIX
# For SMF >= 2.1
SQL_ADD_USER_SMF_21 = r"INSERT INTO %smembers (member_name, passwd, email_address, date_registered, real_name," \
r" buddy_list, signature, ignore_boards) " \
r"VALUES (%%s, %%s, %%s, %%s, %%s, 0, 0, 0)" % TABLE_PREFIX
# returns something like »window.smfVersion = "SMF 2.0.19";«
SQL_GET_CURRENT_SMF_VERSION = r"SELECT data FROM %sadmin_info_files WHERE filename = %%s" % TABLE_PREFIX
SQL_DEL_USER = r"DELETE FROM %smembers where member_name = %%s" % TABLE_PREFIX SQL_DEL_USER = r"DELETE FROM %smembers where member_name = %%s" % TABLE_PREFIX
@ -46,6 +57,23 @@ class SmfManager:
SQL_ADD_USER_AVATAR = r"UPDATE %smembers SET avatar = %%s WHERE id_member = %%s" % TABLE_PREFIX SQL_ADD_USER_AVATAR = r"UPDATE %smembers SET avatar = %%s WHERE id_member = %%s" % TABLE_PREFIX
@classmethod
def _get_current_smf_version(cls) -> str:
"""
Get the current SMF version from the DB
:return:
"""
cursor = connections['smf'].cursor()
cursor.execute(cls.SQL_GET_CURRENT_SMF_VERSION, ['current-version.js'])
row = cursor.fetchone()
smf_version_string = row[0]
smf_version = smf_version_string.replace('window.smfVersion = "SMF ', '').replace('";', '')
return smf_version
@staticmethod @staticmethod
def _sanitize_groupname(name): def _sanitize_groupname(name):
name = name.strip(' _') name = name.strip(' _')
@ -161,8 +189,22 @@ class SmfManager:
cls.__update_user_info(username_clean, email_address, pwhash) cls.__update_user_info(username_clean, email_address, pwhash)
else: else:
try: try:
cursor.execute(cls.SQL_ADD_USER, smf_version = cls._get_current_smf_version()
[username_clean, pwhash, email_address, register_date, username_clean])
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]
)
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) cls.add_avatar(username_clean, characterid)
logger.info(f"Added smf member_name {username_clean}") logger.info(f"Added smf member_name {username_clean}")
cls.update_groups(username_clean, groups) cls.update_groups(username_clean, groups)