| import logging |
| import ssl |
| import threading |
|
|
| import aiohttp |
|
|
| from astrbot.utils.http_ssl_common import ( |
| build_ssl_context_with_certifi as _build_ssl_context, |
| ) |
|
|
| logger = logging.getLogger("astrbot") |
|
|
| _SHARED_TLS_CONTEXT: ssl.SSLContext | None = None |
| _SHARED_TLS_CONTEXT_LOCK = threading.Lock() |
|
|
|
|
| def build_ssl_context_with_certifi() -> ssl.SSLContext: |
| """Build an SSL context from system trust store and add certifi CAs.""" |
| global _SHARED_TLS_CONTEXT |
|
|
| if _SHARED_TLS_CONTEXT is not None: |
| return _SHARED_TLS_CONTEXT |
|
|
| with _SHARED_TLS_CONTEXT_LOCK: |
| if _SHARED_TLS_CONTEXT is not None: |
| return _SHARED_TLS_CONTEXT |
|
|
| _SHARED_TLS_CONTEXT = _build_ssl_context(log_obj=logger) |
| return _SHARED_TLS_CONTEXT |
|
|
|
|
| def build_tls_connector() -> aiohttp.TCPConnector: |
| return aiohttp.TCPConnector(ssl=build_ssl_context_with_certifi()) |
|
|