File size: 2,307 Bytes
65b4cf0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a98328d
 
 
65b4cf0
a98328d
 
 
 
 
65b4cf0
 
a98328d
65b4cf0
 
 
 
 
a98328d
65b4cf0
a98328d
65b4cf0
 
a98328d
65b4cf0
 
 
a98328d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import json, os, subprocess

SITE = os.environ.get("SITE_NAME", "hisham-cmd-ofoqerp.hf.space")
ADMIN_PASSWORD = os.environ.get("ADMIN_PASSWORD", "admin")
SITES_DIR = "/home/frappe/frappe-bench/sites"

config_path = f"{SITES_DIR}/{SITE}/site_config.json"
if not os.path.exists(config_path):
    print(f"SKIP: no site_config at {config_path}")
    exit(0)

config = json.load(open(config_path))
db_name = config["db_name"]
print(f"DB: {db_name}")

from passlib.hash import pbkdf2_sha256
hash = pbkdf2_sha256.hash(ADMIN_PASSWORD)
print(f"Hash prefix: {hash[:50]}...")

# Verify passlib hash works
assert pbkdf2_sha256.verify(ADMIN_PASSWORD, hash), "Hash verification failed!"
print("Hash self-verify: OK")

# Update __Auth table (Frappe v15 uses passlib pbkdf2_sha256)
r = subprocess.run(
    ["mysql", "-u", "root", "-pmysql_root", db_name,
     "-e", f"UPDATE __Auth SET `password`='{hash}' WHERE doctype='User' AND name='Administrator' AND fieldname='password'"],
    capture_output=True, text=True, timeout=15
)
print(f"mysql stdout: {r.stdout.strip() or '(empty)'}")
print(f"mysql stderr: {r.stderr.strip() or '(empty)'}")
print(f"mysql returncode: {r.returncode}")
print(f"Rows affected: (check output)")

# Verify the update
r2 = subprocess.run(
    ["mysql", "-u", "root", "-pmysql_root", db_name,
     "-e", "SELECT doctype, name, fieldname, LEFT(`password`,40) FROM __Auth WHERE doctype='User' AND name='Administrator'"],
    capture_output=True, text=True, timeout=15
)
print(f"Verify:\n{r2.stdout.strip() or r2.stderr.strip()}")

# Double-check with passlib
r3 = subprocess.run(
    ["mysql", "-u", "root", "-pmysql_root", db_name,
     "-e", "SELECT `password` FROM __Auth WHERE doctype='User' AND name='Administrator' AND fieldname='password'"],
    capture_output=True, text=True, timeout=15
)
if r3.returncode == 0 and r3.stdout:
    lines = [l.strip() for l in r3.stdout.split('\n') if l.strip() and l.strip() != 'password']
    if lines:
        stored = lines[0]
        match = pbkdf2_sha256.verify(ADMIN_PASSWORD, stored)
        print(f"Post-update verify: {match}")
        if not match:
            print("WARNING: Hash update may have failed!")
    else:
        print("WARNING: No rows found in __Auth for Administrator!")
else:
    print(f"Verify query failed: {r3.stderr.strip()}")