bmc_hub/test_anydesk.py

46 lines
1.7 KiB
Python
Raw Permalink Normal View History

"""Quick test of AnyDesk HMAC-SHA1 auth + live API call"""
import hashlib, hmac, base64, time, asyncio, aiohttp, json
LICENSE_ID = "1543834064287906"
API_TOKEN = "KQI35S594KAHJS5"
BASE_URL = "https://v1.api.anydesk.com:8081"
def make_auth(resource, method="GET", content=""):
sha1 = hashlib.sha1()
sha1.update(content.encode())
ch = base64.b64encode(sha1.digest()).decode()
ts = str(int(time.time()))
req = f"{method}\n{resource}\n{ts}\n{ch}"
sig = hmac.new(API_TOKEN.encode(), req.encode(), hashlib.sha1).digest()
tok = base64.b64encode(sig).decode()
return f"AD {LICENSE_ID}:{ts}:{tok}"
async def test():
end = int(time.time())
start = end - 30 * 86400 # last 30 days
resource = f"/sessions?from={start}&to={end}&limit=10"
headers = {"Authorization": make_auth(resource)}
print(f"URL: GET {BASE_URL}{resource}")
print(f"Auth: {headers['Authorization'][:70]}...")
async with aiohttp.ClientSession() as s:
async with s.get(
f"{BASE_URL}{resource}",
headers=headers,
timeout=aiohttp.ClientTimeout(total=15),
ssl=True,
) as r:
txt = await r.text()
print(f"\nStatus: {r.status}")
print(f"Response:\n{txt[:800]}")
if r.status == 200:
try:
data = json.loads(txt)
sessions = data.get("list", [])
print(f"\n✅ OK - {len(sessions)} sessions returned")
for s in sessions[:3]:
print(f" sid={s.get('sid')} | from={s.get('from',{}).get('alias','?')} | duration={s.get('duration')}s")
except Exception as e:
print(f"Parse error: {e}")
asyncio.run(test())