37 lines
1.8 KiB
Python
37 lines
1.8 KiB
Python
"""Use only release OpenSSL binaries for an anonymous HTTPS connectivity probe."""
|
|
import ctypes
|
|
import os
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
bundle = Path(__file__).resolve().parents[1] / "dist/ZhenAI-WeCom-Assistant-v1.4.4/_internal"
|
|
if "_ssl" in sys.modules:
|
|
raise RuntimeError("Run with -S before SSL is imported")
|
|
handle = os.add_dll_directory(str(bundle))
|
|
sys.path.insert(0, str(bundle))
|
|
import ssl
|
|
import _ssl
|
|
import urllib.request
|
|
import urllib.error
|
|
if Path(_ssl.__file__).resolve().parent != bundle.resolve():
|
|
raise RuntimeError("SSL extension did not load from the release bundle")
|
|
api = ctypes.WinDLL("kernel32", use_last_error=True)
|
|
api.GetModuleHandleW.argtypes = [ctypes.c_wchar_p]
|
|
api.GetModuleHandleW.restype = ctypes.c_void_p
|
|
api.GetModuleFileNameW.argtypes = [ctypes.c_void_p, ctypes.c_wchar_p, ctypes.c_uint]
|
|
api.GetModuleFileNameW.restype = ctypes.c_uint
|
|
for name in ("libssl-3-x64.dll", "libcrypto-3-x64.dll"):
|
|
module = api.GetModuleHandleW(name)
|
|
filename = ctypes.create_unicode_buffer(32768)
|
|
if not module or not api.GetModuleFileNameW(module, filename, len(filename)):
|
|
raise RuntimeError("Required OpenSSL library did not load")
|
|
if Path(filename.value).resolve().parent != bundle.resolve():
|
|
raise RuntimeError("OpenSSL library was loaded from outside release bundle")
|
|
print("Release SSL extension and OpenSSL libraries loaded from bundle", flush=True)
|
|
request = urllib.request.Request("https://admin.zhenyangtang.com.cn/", method="HEAD")
|
|
try:
|
|
with urllib.request.urlopen(request, timeout=15) as response:
|
|
print("Anonymous identity-service HTTPS request returned HTTP", response.status, flush=True)
|
|
except urllib.error.HTTPError as exc:
|
|
print("Anonymous identity-service HTTPS request returned HTTP", exc.code, flush=True)
|