diff --git a/CHANGES.md b/CHANGES.md index 71ce530c..df309b96 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -292,7 +292,7 @@ of uptime. Previous cloudflared versions will soon be unable to run legacy tempo ### Bug Fixes - Tunnel create and delete commands no longer use path to credentials from the configuration file. - If you need ot place tunnel credentials file at a specific location, you must use `--credentials-file` flag. + If you need to place tunnel credentials file at a specific location, you must use `--credentials-file` flag. - Access ssh-gen creates properly named keys for SSH short lived certs. diff --git a/README.md b/README.md index 4edda958..a7eb0a32 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ You can also use `cloudflared` to access Tunnel origins (that are protected with at Layer 4 (i.e., not HTTP/websocket), which is relevant for use cases such as SSH, RDP, etc. Such usages are available under `cloudflared access help`. -You can instead use [WARP client](https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/warp/) +You can instead use [WARP client](https://developers.cloudflare.com/warp-client/) to access private origins behind Tunnels for Layer 4 traffic without requiring `cloudflared access` commands on the client side. @@ -40,7 +40,7 @@ User documentation for Cloudflare Tunnel can be found at https://developers.clou Once installed, you can authenticate `cloudflared` into your Cloudflare account and begin creating Tunnels to serve traffic to your origins. -* Create a Tunnel with [these instructions](https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/get-started/) +* Create a Tunnel with [these instructions](https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/get-started/create-remote-tunnel/) * Route traffic to that Tunnel: * Via public [DNS records in Cloudflare](https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/routing-to-tunnel/dns/) * Or via a public hostname guided by a [Cloudflare Load Balancer](https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/routing-to-tunnel/public-load-balancers/) diff --git a/cfapi/base_client.go b/cfapi/base_client.go index aa139779..05e32a83 100644 --- a/cfapi/base_client.go +++ b/cfapi/base_client.go @@ -45,9 +45,7 @@ type baseEndpoints struct { var _ Client = (*RESTClient)(nil) func NewRESTClient(baseURL, accountTag, zoneTag, authToken, userAgent string, log *zerolog.Logger) (*RESTClient, error) { - if strings.HasSuffix(baseURL, "/") { - baseURL = baseURL[:len(baseURL)-1] - } + baseURL = strings.TrimSuffix(baseURL, "/") accountLevelEndpoint, err := url.Parse(fmt.Sprintf("%s/accounts/%s/cfd_tunnel", baseURL, accountTag)) if err != nil { return nil, errors.Wrap(err, "failed to create account level endpoint") @@ -68,7 +66,7 @@ func NewRESTClient(baseURL, accountTag, zoneTag, authToken, userAgent string, lo TLSHandshakeTimeout: defaultTimeout, ResponseHeaderTimeout: defaultTimeout, } - http2.ConfigureTransport(&httpTransport) + _ = http2.ConfigureTransport(&httpTransport) return &RESTClient{ baseEndpoints: &baseEndpoints{ accountLevel: *accountLevelEndpoint, @@ -161,7 +159,6 @@ func fetchExhaustively[T any](requestFn func(int) (*http.Response, error)) ([]*T if envelope.Pagination.Count < envelope.Pagination.PerPage || len(fullResponse) >= envelope.Pagination.TotalCount { break } - } return fullResponse, nil } @@ -179,14 +176,13 @@ func fetchPage[T any](requestFn func(int) (*http.Response, error), page int) (*r } var parsedRspBody []*T return envelope, parsedRspBody, parseResponseBody(envelope, &parsedRspBody) - } return nil, nil, errors.New(fmt.Sprintf("Failed to fetch page. Server returned: %d", pageResp.StatusCode)) } type response struct { Success bool `json:"success,omitempty"` - Errors []apiErr `json:"errors,omitempty"` + Errors []apiError `json:"errors,omitempty"` Messages []string `json:"messages,omitempty"` Result json.RawMessage `json:"result,omitempty"` Pagination Pagination `json:"result_info,omitempty"` @@ -206,19 +202,19 @@ func (r *response) checkErrors() error { if len(r.Errors) == 1 { return r.Errors[0] } - var messages string + var messagesBuilder strings.Builder for _, e := range r.Errors { - messages += fmt.Sprintf("%s; ", e) + messagesBuilder.WriteString(fmt.Sprintf("%s; ", e)) } - return fmt.Errorf("API errors: %s", messages) + return fmt.Errorf("API errors: %s", messagesBuilder.String()) } -type apiErr struct { +type apiError struct { Code json.Number `json:"code,omitempty"` Message string `json:"message,omitempty"` } -func (e apiErr) Error() string { +func (e apiError) Error() string { return fmt.Sprintf("code: %v, reason: %s", e.Code, e.Message) } diff --git a/connection/quic_connection_test.go b/connection/quic_connection_test.go index fc831532..7e444404 100644 --- a/connection/quic_connection_test.go +++ b/connection/quic_connection_test.go @@ -149,7 +149,6 @@ func TestQUICServer(t *testing.T) { } for i, test := range tests { - test := test // capture range variable t.Run(test.desc, func(t *testing.T) { ctx, cancel := context.WithCancel(t.Context()) // Start a UDP Listener for QUIC. @@ -499,7 +498,6 @@ func TestBuildHTTPRequest(t *testing.T) { log := zerolog.Nop() for _, test := range tests { - test := test // capture range variable t.Run(test.name, func(t *testing.T) { req, err := buildHTTPRequest(t.Context(), test.connectRequest, test.body, 0, &log) require.NoError(t, err) diff --git a/packet/decoder.go b/packet/decoder.go index 2737b18e..34587e28 100644 --- a/packet/decoder.go +++ b/packet/decoder.go @@ -28,7 +28,7 @@ func FindProtocol(p []byte) (layers.IPProtocol, error) { // Next header is in the 7th byte of IPv6 header return layers.IPProtocol(p[6]), nil default: - return 0, fmt.Errorf("unknow ip version %d", version) + return 0, fmt.Errorf("unknown ip version %d", version) } } @@ -105,7 +105,7 @@ func (pd *IPDecoder) decodeByVersion(packet []byte) ([]gopacket.LayerType, error case 6: err = pd.v6parser.DecodeLayers(packet, &decoded) default: - err = fmt.Errorf("unknow ip version %d", version) + err = fmt.Errorf("unknown ip version %d", version) } if err != nil { return nil, err