mirror of
https://gitverse.ru/kpa39l/icq.git
synced 2026-09-29 01:50:10 +00:00
57 lines
2.6 KiB
Python
57 lines
2.6 KiB
Python
#!/usr/bin/env python3
|
|
"""Тест авторизации на Prosody 13.0 (test.nixg.ru:15222)."""
|
|
import asyncio, sys, logging, ssl
|
|
import slixmpp
|
|
|
|
logging.basicConfig(level=logging.WARNING, format='%(levelname)s %(name)s: %(message)s')
|
|
|
|
async def try_login(jid, password, expect_ok=True):
|
|
class T(slixmpp.ClientXMPP):
|
|
def __init__(self):
|
|
super().__init__(jid, password)
|
|
self.ok = None
|
|
# Отключаем проверку сертификата (тестовый стенд, самоподписанный)
|
|
self.ssl_context = ssl.create_default_context()
|
|
self.ssl_context.check_hostname = False
|
|
self.ssl_context.verify_mode = ssl.CERT_NONE
|
|
self.add_event_handler('session_start', self.on_start)
|
|
self.add_event_handler('failed_auth', self.on_fail)
|
|
self.add_event_handler('disconnected', self.on_disc)
|
|
self.add_event_handler('connected', self.on_conn)
|
|
def on_conn(self, ev): print(f" [connected] {jid}")
|
|
def on_start(self, ev):
|
|
self.ok = True
|
|
print(f" [AUTH OK] {jid} — session_start, full JID={self.boundjid}")
|
|
self.disconnect()
|
|
def on_fail(self, ev):
|
|
self.ok = False
|
|
print(f" [AUTH FAILED] {jid} — incorrect credentials rejected correctly")
|
|
self.disconnect()
|
|
def on_disc(self, ev):
|
|
if self.ok is None:
|
|
print(f" [DISCONNECTED before auth] {jid} reason={ev}")
|
|
x = T()
|
|
# Явно указываем хост/порт тестового сервера (15222 = нестандартный c2s)
|
|
try:
|
|
await x.connect('127.0.0.1', 15222)
|
|
await asyncio.wait_for(x.wait_until('session_start' if expect_ok else 'failed_auth'), 15)
|
|
except asyncio.TimeoutError:
|
|
print(f" [TIMEOUT] {jid} — no auth result in 15s")
|
|
x.disconnect()
|
|
except Exception as e:
|
|
print(f" [ERROR] {jid}: {type(e).__name__}: {e}")
|
|
finally:
|
|
try: x.disconnect()
|
|
except: pass
|
|
|
|
async def main():
|
|
print("=== 1. Верный пароль: testuser1@test.nixg.ru ===")
|
|
await try_login("testuser1@test.nixg.ru", "pass12345", True)
|
|
print("=== 2. Верный пароль: testuser2@test.nixg.ru ===")
|
|
await try_login("testuser2@test.nixg.ru", "pass12345", True)
|
|
print("=== 3. Админ ===")
|
|
await try_login("admin@test.nixg.ru", "adminpass123", True)
|
|
print("=== 4. НЕВЕРНЫЙ пароль (должен отказать) ===")
|
|
await try_login("testuser1@test.nixg.ru", "WRONG", False)
|
|
|
|
asyncio.run(main()) |