AzerothCore-website/scripts/createAccount.py
Aaron Barbas 9bbeb35c08 Added support link to download game client, link for addons.
Fixed an issue that prevented the password reset tokens from working.
Added email templates for password reset success and new account creation.
Added more dynamic email template support.
2024-10-03 22:00:40 -05:00

85 lines
2.4 KiB
Python

import mysql.connector
import hashlib
import os
import json
from pathlib import Path
def sha1(data):
return hashlib.sha1(data).digest()
def generate_salt():
return os.urandom(32)
def calculate_verifier(username, password, salt):
g = 7
N = int("894B645E89E1535BBDAD5B8B290650530801B18EBFBF5E8FAB3C82872A3E9BB7", 16)
username = username.upper()
password = password.upper()
h1 = sha1(f"{username}:{password}".encode())
h2 = sha1(salt + h1)
h2_int = int.from_bytes(h2, 'little')
verifier_int = pow(g, h2_int, N)
verifier = verifier_int.to_bytes((verifier_int.bit_length() + 7) // 8, 'little')
return verifier
def create_account(account_name, email, passwd1, passwd2, expansion):
if passwd1 != passwd2:
return "Passwords do not match."
script_dir = Path(__file__).resolve().parent
config_path = script_dir / "../config.json"
with open(config_path) as config_file:
config = json.load(config_file)
USERNAME = config["USERNAME"]
PASSWORD = config["PASSWORD"]
SERVER_IP = config["SERVER_IP"]
PORT = config["MYSQL_PORT"]
DATABASE = config["DATABASE"]
conn = None
cursor = None
try:
conn = mysql.connector.connect(
host=SERVER_IP,
user=USERNAME,
password=PASSWORD,
database=DATABASE,
port=PORT
)
cursor = conn.cursor()
# Check if the username already exists
cursor.execute("SELECT id FROM account WHERE username = %s", (account_name,))
if cursor.fetchone():
return "Username already taken."
cursor.execute("SELECT MAX(id) FROM account")
max_id = cursor.fetchone()[0]
new_id = max_id + 1 if max_id else 1
salt = generate_salt()
verifier = calculate_verifier(account_name, passwd1, salt)
cursor.execute(
"INSERT INTO account (id, username, salt, verifier, email) VALUES (%s, %s, %s, %s, %s)",
(new_id, account_name, salt, verifier, email)
)
conn.commit()
return "Account created successfully!"
except mysql.connector.Error as err:
return f"Error: {err}"
finally:
if cursor is not None:
cursor.close()
if conn is not None:
conn.close()