AzerothCore-website/scripts/createAccount.py
2026-05-26 13:29:32 -06: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):
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()