Skip to content

Commit d6268ff

Browse files
authored
🌱 Use url.JoinPath instead of fmt to concat endpoint (#10917)
* use url.JoinPath instead of fmt to concat endpoint Signed-off-by: sivchari <[email protected]> * handle err Signed-off-by: sivchari <[email protected]> * fix: variable Signed-off-by: sivchari <[email protected]> --------- Signed-off-by: sivchari <[email protected]>
1 parent c4d1b8a commit d6268ff

File tree

2 files changed

+60
-1
lines changed

2 files changed

+60
-1
lines changed

util/kubeconfig/kubeconfig.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222
"crypto"
2323
"crypto/x509"
2424
"fmt"
25+
"net/url"
2526
"time"
2627

2728
"github.com/pkg/errors"
@@ -109,7 +110,10 @@ func CreateSecret(ctx context.Context, c client.Client, cluster *clusterv1.Clust
109110

110111
// CreateSecretWithOwner creates the Kubeconfig secret for the given cluster name, namespace, endpoint, and owner reference.
111112
func CreateSecretWithOwner(ctx context.Context, c client.Client, clusterName client.ObjectKey, endpoint string, owner metav1.OwnerReference) error {
112-
server := fmt.Sprintf("https://%s", endpoint)
113+
server, err := url.JoinPath("https://", endpoint)
114+
if err != nil {
115+
return err
116+
}
113117
out, err := generateKubeconfig(ctx, c, clusterName, server)
114118
if err != nil {
115119
return err

util/kubeconfig/kubeconfig_test.go

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -284,6 +284,61 @@ func TestCreateSecretWithOwner(t *testing.T) {
284284
g.Expect(restClient.Host).To(Equal("https://localhost:6443"))
285285
}
286286

287+
func TestCreateSecretWithOwnerHasEndpointPrefixIsSlush(t *testing.T) {
288+
g := NewWithT(t)
289+
290+
caKey, err := certs.NewPrivateKey()
291+
g.Expect(err).ToNot(HaveOccurred())
292+
293+
caCert, err := getTestCACert(caKey)
294+
g.Expect(err).ToNot(HaveOccurred())
295+
296+
caSecret := &corev1.Secret{
297+
ObjectMeta: metav1.ObjectMeta{
298+
Name: "test1-ca",
299+
Namespace: "test",
300+
},
301+
Data: map[string][]byte{
302+
secret.TLSKeyDataName: certs.EncodePrivateKeyPEM(caKey),
303+
secret.TLSCrtDataName: certs.EncodeCertPEM(caCert),
304+
},
305+
}
306+
307+
c := fake.NewClientBuilder().WithObjects(caSecret).Build()
308+
309+
owner := metav1.OwnerReference{
310+
Name: "test1",
311+
Kind: "Cluster",
312+
APIVersion: clusterv1.GroupVersion.String(),
313+
}
314+
315+
err = CreateSecretWithOwner(
316+
ctx,
317+
c,
318+
client.ObjectKey{
319+
Name: "test1",
320+
Namespace: "test",
321+
},
322+
"/localhost:6443",
323+
owner,
324+
)
325+
326+
g.Expect(err).ToNot(HaveOccurred())
327+
328+
s := &corev1.Secret{}
329+
key := client.ObjectKey{Name: "test1-kubeconfig", Namespace: "test"}
330+
g.Expect(c.Get(ctx, key, s)).To(Succeed())
331+
g.Expect(s.OwnerReferences).To(ContainElement(owner))
332+
g.Expect(s.Type).To(Equal(clusterv1.ClusterSecretType))
333+
334+
clientConfig, err := clientcmd.NewClientConfigFromBytes(s.Data[secret.KubeconfigDataName])
335+
g.Expect(err).ToNot(HaveOccurred())
336+
restClient, err := clientConfig.ClientConfig()
337+
g.Expect(err).ToNot(HaveOccurred())
338+
g.Expect(restClient.CAData).To(Equal(certs.EncodeCertPEM(caCert)))
339+
g.Expect(restClient.Host).To(Equal("https://localhost:6443"))
340+
}
341+
287342
func TestCreateSecret(t *testing.T) {
288343
g := NewWithT(t)
289344

0 commit comments

Comments
 (0)