#!/usr/bin/env python3
"""Lacak sumber skrip suntikan DAS lewat XML-RPC: cari di seluruh jenis konten (termasuk snippet WPCode)."""
import importlib.util, json, re, time
import xmlrpc.client

WS = "/home/mantapman/.hermes/profiles/atun/workspace"
spec = importlib.util.spec_from_file_location("cfg", f"{WS}/cfg_das.py")
m = importlib.util.module_from_spec(spec)
spec.loader.exec_module(m)
CFG = m.CFG
USER, SANDI = CFG["user"], CFG["pass"]
SITUS = "https://dasindonesia.com"
POLA = re.compile(r"livedashboardkit|35862e74a4a697bb6d998c471eade297|_b4a7b|_86b24|_8e635", re.I)

p = xmlrpc.client.ServerProxy(f"{SITUS}/xmlrpc.php", allow_none=True)

print("=== jenis konten yang terdaftar ===")
try:
    types = p.wp.getPostTypes(0, USER, SANDI)
    for nama, info in sorted(types.items()):
        print(f"   {nama:<28} {str((info or {}).get('label'))[:30]}")
except Exception as e:
    print("   gagal:", str(e)[:150])
    raise SystemExit(0)

print("\n=== cari skrip suntikan di tiap jenis konten ===")
for nama in types:
    if nama in ("attachment", "revision", "nav_menu_item"):
        continue
    try:
        posts = p.wp.getPosts(0, USER, SANDI, {"post_type": nama, "number": 100,
                                               "post_status": "any",
                                               "fields": ["post_id", "post_title", "post_name", "post_status"]})
    except Exception as e:
        print(f"   {nama}: tidak bisa dibaca ({str(e)[:50]})")
        continue
    if not posts:
        continue
    print(f"   {nama}: {len(posts)} entri")
    for x in posts:
        try:
            full = p.wp.getPost(0, USER, SANDI, x["post_id"])
            isi = str(full.get("post_content", "")) + json.dumps(full.get("custom_fields", []), ensure_ascii=False)
            if POLA.search(isi):
                print(f"      ⚠ #{x['post_id']} «{str(x.get('post_title'))[:50]}» status {x.get('post_status')}")
                for mm in re.finditer(r".{0,90}(livedashboardkit|_b4a7b).{0,90}", isi, re.S):
                    print("         …" + re.sub(r"\s+", " ", mm.group(0))[:200])
                    break
        except Exception as e:
            print(f"      #{x.get('post_id')} gagal dibaca ({str(e)[:40]})")
        time.sleep(0.2)
