From 71588eccca23438995d548de7a8ef058fc0f85b8 Mon Sep 17 00:00:00 2001 From: Gabriel Radureau Date: Thu, 18 Dec 2025 13:29:02 +0100 Subject: [PATCH] fix timeout --- .gitea/workflows/dockerimage.yaml | 112 ++++++++++++++++++++++++++++-- 1 file changed, 105 insertions(+), 7 deletions(-) diff --git a/.gitea/workflows/dockerimage.yaml b/.gitea/workflows/dockerimage.yaml index e4b96c8..99c49a9 100644 --- a/.gitea/workflows/dockerimage.yaml +++ b/.gitea/workflows/dockerimage.yaml @@ -21,21 +21,119 @@ jobs: steps: - name: Login to Gitea Container Registry - uses: docker/login-action@v3 - with: - registry: gitea.arcodange.duckdns.org - username: ${{ github.actor }} - password: ${{ secrets.PACKAGES_TOKEN }} + run: | + mkdir -p ~/.docker + cat < /root/.docker/config.json + { + "auths": { + "gitea.arcodange.duckdns.org": { + "auth": "$(echo ${{ github.actor }}:${{ secrets.PACKAGES_TOKEN }} | base64)" + } + } + } + EOF + chmod 644 /root/.docker/config.json + chmod 755 /root/.docker/ - name: git checkout uses: actions/checkout@v4 + - name: prepare proxy + run: | + apt update + apt install python3-requests python3-socks -y + cat < /tmp/pyproxy + import socket + import http.server + import socketserver + from urllib.parse import urlparse + import requests + + PIHOLE_IP = "192.168.1.201" # IP de Pi-hole + PROXY_PORT = 8888 + + def resolve_via_pihole(hostname): + """Résout un nom d'hôte via Pi-hole.""" + try: + # Force la résolution DNS via Pi-hole + socket.setdefaulttimeout(5) + return socket.gethostbyname(hostname) + except socket.gaierror: + return None + + class ProxyHandler(http.server.BaseHTTPRequestHandler): + def do_GET(self): + url = urlparse(self.path) + hostname = url.hostname + if not hostname: + self.send_error(400, "Bad Request: No hostname") + return + + # Résolution DNS via Pi-hole + resolved_ip = resolve_via_pihole(hostname) + if not resolved_ip: + self.send_error(404, f"DNS resolution failed for {hostname}") + return + + # Relayer la requête vers la destination + try: + response = requests.get(f"http://{hostname}{url.path}", timeout=10) + self.send_response(response.status_code) + for header, value in response.headers.items(): + self.send_header(header, value) + self.end_headers() + self.wfile.write(response.content) + except Exception as e: + self.send_error(500, f"Proxy error: {str(e)}") + + def do_CONNECT(self): + # Gestion des requêtes HTTPS (tunnel) + hostname = self.path.split(":")[0] + resolved_ip = resolve_via_pihole(hostname) + if not resolved_ip: + self.send_error(404, f"DNS resolution failed for {hostname}") + return + + try: + self.send_response(200) + self.end_headers() + # Établir un tunnel vers la destination + remote_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + remote_socket.connect((resolved_ip, 443)) + self._tunnel(remote_socket) + except Exception as e: + self.send_error(500, f"Tunnel error: {str(e)}") + + def _tunnel(self, remote_socket): + """Relaye les données entre le client et le serveur distant.""" + while True: + data = self.rfile.read(8192) + if not data: + break + remote_socket.sendall(data) + response = remote_socket.recv(8192) + if not response: + break + self.wfile.write(response) + + if __name__ == "__main__": + with socketserver.TCPServer(("", PROXY_PORT), ProxyHandler) as httpd: + print(f"Proxy démarré sur le port {PROXY_PORT}") + httpd.serve_forever() + + EOT + + - name: Build and push image to Gitea Container Registry run: |- + python3 /tmp/pyproxy & TAGS="latest ${{ github.ref_name }}" docker build -t app . for TAG in $TAGS; do docker tag app gitea.arcodange.duckdns.org/${{ github.repository }}:$TAG + + # export HTTPS_PROXY=192.168.1.201:8082 + export HTTPS_PROXY=http://127.0.0.1:8888 docker push gitea.arcodange.duckdns.org/${{ github.repository }}:$TAG - done - \ No newline at end of file + unset HTTPS_PROXY + done \ No newline at end of file