Merge pull request #42 from dj-oyu/fix/launcher-tls-health-check

fix: launcher health check fails when gateway serves TLS
This commit is contained in:
dj-oyu 2026-03-15 17:52:46 +09:00 committed by GitHub
commit 9d1b89fd97

View file

@ -2,6 +2,7 @@ package api
import ( import (
"bufio" "bufio"
"crypto/tls"
"encoding/json" "encoding/json"
"fmt" "fmt"
"io" "io"
@ -44,10 +45,24 @@ var (
) )
var gatewayHealthGet = func(url string, timeout time.Duration) (*http.Response, error) { var gatewayHealthGet = func(url string, timeout time.Duration) (*http.Response, error) {
client := http.Client{Timeout: timeout} transport := http.DefaultTransport
if strings.HasPrefix(url, "https://") {
transport = &http.Transport{
TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, //nolint:gosec // localhost self-signed
}
}
client := http.Client{Timeout: timeout, Transport: transport}
return client.Get(url) return client.Get(url)
} }
// gatewayHealthScheme returns "https" if the gateway is serving TLS, "http" otherwise.
func gatewayHealthScheme(cfg *config.Config) string {
if cfg != nil && strings.HasPrefix(cfg.Channels.Telegram.WebAppURL, "https://") {
return "https"
}
return "http"
}
// registerGatewayRoutes binds gateway lifecycle endpoints to the ServeMux. // registerGatewayRoutes binds gateway lifecycle endpoints to the ServeMux.
func (h *Handler) registerGatewayRoutes(mux *http.ServeMux) { func (h *Handler) registerGatewayRoutes(mux *http.ServeMux) {
mux.HandleFunc("GET /api/gateway/status", h.handleGatewayStatus) mux.HandleFunc("GET /api/gateway/status", h.handleGatewayStatus)
@ -356,7 +371,9 @@ func (h *Handler) startGatewayLocked(initialStatus string) (int, error) {
if healthPort == 0 { if healthPort == 0 {
healthPort = 18790 healthPort = 18790
} }
healthURL := fmt.Sprintf("http://%s/health", net.JoinHostPort(healthHost, strconv.Itoa(healthPort))) scheme := gatewayHealthScheme(cfg)
hostPort := net.JoinHostPort(healthHost, strconv.Itoa(healthPort))
healthURL := fmt.Sprintf("%s://%s/health", scheme, hostPort)
resp, err := gatewayHealthGet(healthURL, 1*time.Second) resp, err := gatewayHealthGet(healthURL, 1*time.Second)
if err == nil { if err == nil {
resp.Body.Close() resp.Body.Close()
@ -609,7 +626,7 @@ func (h *Handler) gatewayStatusData() map[string]any {
} }
} }
url := fmt.Sprintf("http://%s/health", net.JoinHostPort(host, strconv.Itoa(port))) url := fmt.Sprintf("%s://%s/health", gatewayHealthScheme(cfg), net.JoinHostPort(host, strconv.Itoa(port)))
resp, err := gatewayHealthGet(url, 2*time.Second) resp, err := gatewayHealthGet(url, 2*time.Second)
if err != nil { if err != nil {