46 lines
1.7 KiB
Python
46 lines
1.7 KiB
Python
|
|
"""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())
|