Explorer
/tmp/job006_public_test.py
← Zurück ↓ Download
import os, json, urllib.request, http.cookiejar

base = 'https://hermes-workspace.agentsolutions-mallorca.com'
password = os.environ.get('HERMES_PASSWORD') or os.environ.get('CLAUDE_PASSWORD')
if not password:
    raise SystemExit('PASSWORD_MISSING')

jar = http.cookiejar.CookieJar()
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(jar))
def req(path, method='GET', payload=None):
    data = None if payload is None else json.dumps(payload).encode()
    r = urllib.request.Request(base + path, data=data, method=method)
    if data is not None:
        r.add_header('Content-Type', 'application/json')
    try:
        with opener.open(r, timeout=15) as x:
            return x.status, x.read(4096)
    except urllib.error.HTTPError as x:
        return x.code, x.read(4096)

unauth_status, _ = req('/api/terminal-stream', 'POST', {'cwd':'~/.hermes','cols':80,'rows':24})
login_status, _ = req('/api/auth', 'POST', {'password': password})
check_status, check_body = req('/api/auth-check')
auth = False
try:
    auth = bool(json.loads(check_body).get('authenticated'))
except Exception:
    pass
tr = urllib.request.Request(base + '/api/terminal-stream', data=json.dumps({'cwd':'~/.hermes','cols':80,'rows':24}).encode(), method='POST')
tr.add_header('Content-Type', 'application/json')
try:
    with opener.open(tr, timeout=15) as x:
        terminal_status = x.status
        terminal_body = x.read(1024)
except urllib.error.HTTPError as x:
    terminal_status = x.code
    terminal_body = x.read(1024)
except TimeoutError:
    terminal_status = 'TIMEOUT_BEFORE_HEADERS'
    terminal_body = b''
session_id = None
for line in terminal_body.splitlines():
    if b'"sessionId"' in line:
        try: session_id = json.loads(line.decode()).get('sessionId')
        except Exception: pass
if session_id:
    req('/api/terminal-close', 'POST', {'sessionId': session_id})
print(f'unauth_terminal={unauth_status} login={login_status} auth_check={check_status} authenticated={auth} terminal={terminal_status} session_closed={bool(session_id)}')