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()