Files
cloud-ip-validator/internal/checkrunner/https.go
T
2026-08-21 07:34:45 +03:00

37 lines
1.0 KiB
Go

package checkrunner
import (
"context"
"fmt"
"net/http"
"time"
)
// HTTPS performs a GET against target (expected to be a full URL, e.g.
// https://github.com) and reports success for any response with status
// < 400. It never follows the check to a different host on a check-type
// boundary — redirects within the same request are followed by the
// standard http.Client default policy, which is what we want for
// reachability checks.
func HTTPS(target string, timeout time.Duration) func(ctx context.Context) Result {
return run("https", target, func(ctx context.Context) error {
ctx, cancel := context.WithTimeout(ctx, timeout)
defer cancel()
req, err := http.NewRequestWithContext(ctx, http.MethodGet, target, nil)
if err != nil {
return fmt.Errorf("build request: %w", err)
}
client := &http.Client{Timeout: timeout}
resp, err := client.Do(req)
if err != nil {
return err
}
defer resp.Body.Close()
if resp.StatusCode >= 400 {
return fmt.Errorf("unexpected status %d", resp.StatusCode)
}
return nil
})
}