File size: 1,454 Bytes
f2de183 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | #!/usr/bin/env python3
"""Run the existing log watcher with its SMTP connection tunneled via HTTP proxy."""
from __future__ import annotations
import os
import runpy
import smtplib
import sys
from pathlib import Path
from urllib.parse import urlsplit
import socks
def main() -> None:
proxy_value = (
os.environ.get("HTTPS_PROXY")
or os.environ.get("https_proxy")
or os.environ.get("HTTP_PROXY")
or os.environ.get("http_proxy")
)
if not proxy_value:
raise SystemExit("HTTP(S) proxy environment variable is required")
proxy = urlsplit(proxy_value)
if not proxy.hostname or not proxy.port:
raise SystemExit("Invalid HTTP proxy URL")
def get_proxy_socket(
_smtp: smtplib.SMTP,
host: str,
port: int,
timeout: float | None,
):
return socks.create_connection(
(host, port),
timeout=timeout,
proxy_type=socks.HTTP,
proxy_addr=proxy.hostname,
proxy_port=proxy.port,
proxy_username=proxy.username,
proxy_password=proxy.password,
proxy_rdns=True,
)
smtplib.SMTP._get_socket = get_proxy_socket
repo_root = Path(__file__).resolve().parents[1]
watcher = repo_root / "log_watcher" / "watch_log_email.py"
sys.argv[0] = str(watcher)
runpy.run_path(str(watcher), run_name="__main__")
if __name__ == "__main__":
main()
|