Skip to content

Commit 043d3ac

Browse files
(chore): adds tls config for GitHub App auth
this commit ensures that if ca.crt or caFile is available in the github app secret, a tls config with user provided certs is appended to system cert pool and passed to the underlying http transport Signed-off-by: abhijith-darshan <[email protected]>
1 parent 3bff81a commit 043d3ac

File tree

3 files changed

+40
-17
lines changed

3 files changed

+40
-17
lines changed

go.mod

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,13 @@ require (
1919
github.com/fluxcd/image-reflector-controller/api v0.35.2
2020
github.com/fluxcd/pkg/apis/acl v0.8.0
2121
github.com/fluxcd/pkg/apis/event v0.18.0
22-
github.com/fluxcd/pkg/apis/meta v1.17.0
22+
github.com/fluxcd/pkg/apis/meta v1.18.0
2323
github.com/fluxcd/pkg/auth v0.21.0
2424
github.com/fluxcd/pkg/cache v0.10.0
25-
github.com/fluxcd/pkg/git v0.34.0
26-
github.com/fluxcd/pkg/git/gogit v0.37.0
25+
github.com/fluxcd/pkg/git v0.35.0
26+
github.com/fluxcd/pkg/git/gogit v0.38.0
2727
github.com/fluxcd/pkg/gittestserver v0.18.0
28-
github.com/fluxcd/pkg/runtime v0.69.0
28+
github.com/fluxcd/pkg/runtime v0.79.0
2929
github.com/fluxcd/pkg/ssh v0.20.0
3030
github.com/fluxcd/source-controller/api v1.6.1
3131
github.com/go-git/go-billy/v5 v5.6.2

go.sum

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -132,20 +132,20 @@ github.com/fluxcd/pkg/apis/acl v0.8.0 h1:mZNl4mOQQf5/cdMCYgKcrZTZRndCtMtkI0BDfNO
132132
github.com/fluxcd/pkg/apis/acl v0.8.0/go.mod h1:uv7pXXR/gydiX4MUwlQa7vS8JONEDztynnjTvY3JxKQ=
133133
github.com/fluxcd/pkg/apis/event v0.18.0 h1:PNbWk9gvX8gMIi6VsJapnuDO+giLEeY+6olLVXvXFkk=
134134
github.com/fluxcd/pkg/apis/event v0.18.0/go.mod h1:7S/DGboLolfbZ6stO6dcDhG1SfkPWQ9foCULvbiYpiA=
135-
github.com/fluxcd/pkg/apis/meta v1.17.0 h1:KVMDyJQj1NYCsppsFUkbJGMnKxsqJVpnKBFolHf/q8E=
136-
github.com/fluxcd/pkg/apis/meta v1.17.0/go.mod h1:97l3hTwBpJbXBY+wetNbqrUsvES8B1jGioKcBUxmqd8=
135+
github.com/fluxcd/pkg/apis/meta v1.18.0 h1:ACHrMIjlcioE9GKS7NGk62KX4NshqNewr8sBwMcXABs=
136+
github.com/fluxcd/pkg/apis/meta v1.18.0/go.mod h1:97l3hTwBpJbXBY+wetNbqrUsvES8B1jGioKcBUxmqd8=
137137
github.com/fluxcd/pkg/auth v0.21.0 h1:ckAQqP12wuptXEkMY18SQKWEY09m9e6yI0mEMsDV15M=
138138
github.com/fluxcd/pkg/auth v0.21.0/go.mod h1:MXmpsXT97c874HCw5hnfqFUP7TsG8/Ss1vFrk8JccfM=
139139
github.com/fluxcd/pkg/cache v0.10.0 h1:M+OGDM4da1cnz7q+sZSBtkBJHpiJsLnKVmR9OdMWxEY=
140140
github.com/fluxcd/pkg/cache v0.10.0/go.mod h1:pPXRzQUDQagsCniuOolqVhnAkbNgYOg8d2cTliPs7ME=
141-
github.com/fluxcd/pkg/git v0.34.0 h1:qTViWkfpEDnjzySyKRKliqUeGj/DznqlkmPhaDNIsFY=
142-
github.com/fluxcd/pkg/git v0.34.0/go.mod h1:F9Asm3MlLW4uZx3FF92+bqho+oktdMdnTn/QmXe56NE=
143-
github.com/fluxcd/pkg/git/gogit v0.37.0 h1:JINylFYpwrxS3MCu5Ei+g6XPgxbs5lv9PppIYYr07KY=
144-
github.com/fluxcd/pkg/git/gogit v0.37.0/go.mod h1:X7YzW5mb4srA05h4SpL2OEGEHq02tbXQF5DPJen9hlc=
141+
github.com/fluxcd/pkg/git v0.35.0 h1:mAauhsdfxNW4yQdXviVlvcN/uCGGG0+6p5D1+HFZI9w=
142+
github.com/fluxcd/pkg/git v0.35.0/go.mod h1:F9Asm3MlLW4uZx3FF92+bqho+oktdMdnTn/QmXe56NE=
143+
github.com/fluxcd/pkg/git/gogit v0.38.0 h1:222KmjpKf9pxqi8rAtm1omDcpGTY4JkahLrAwZ3AcwU=
144+
github.com/fluxcd/pkg/git/gogit v0.38.0/go.mod h1:kHStdfd/AtkH5ED0UEWP2tmMGnfxg1GG92D29M+lRJ0=
145145
github.com/fluxcd/pkg/gittestserver v0.18.0 h1:jkuLmzWFfq+v1ziI0LspZrUzc5WzCO98BaWb8OVRPtk=
146146
github.com/fluxcd/pkg/gittestserver v0.18.0/go.mod h1:2wDLqUkPuixk/8pGQdef9ewaGJXf7Z+xHDVq8PIFG4E=
147-
github.com/fluxcd/pkg/runtime v0.69.0 h1:5gPY95NSFI34GlQTj0+NHjOFpirSwviCUb9bM09b5nA=
148-
github.com/fluxcd/pkg/runtime v0.69.0/go.mod h1:ug+pat+I4wfOBuCy2E/pLmBNd3kOOo4cP2jxnxefPwY=
147+
github.com/fluxcd/pkg/runtime v0.79.0 h1:9tv79EiQDx/QJH9mYDd9kZ9WybCVWBUGoiBHij+eKkc=
148+
github.com/fluxcd/pkg/runtime v0.79.0/go.mod h1:iGhdaEq+lMJQTJNAFEPOU4gUJ7kt3yeDcJPZy7O9IUw=
149149
github.com/fluxcd/pkg/ssh v0.20.0 h1:Ak0laIYIc/L8lEfqls/LDWRW8wYPESGaravQsCRGLb8=
150150
github.com/fluxcd/pkg/ssh v0.20.0/go.mod h1:sRfAAkxx1GwCGjYirKPnTKdNkNrJRo9kqzWLVFXKv7E=
151151
github.com/fluxcd/pkg/version v0.9.0 h1:pQBHMt9TbnnTUzj3EoMhRi5JUkNBqrTBSAaoLG1ovUA=

internal/source/git.go

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import (
2525
"time"
2626

2727
"github.com/ProtonMail/go-crypto/openpgp"
28+
"github.com/fluxcd/pkg/runtime/secrets"
2829
"github.com/go-git/go-git/v5/plumbing/transport"
2930
corev1 "k8s.io/api/core/v1"
3031
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -165,13 +166,15 @@ func configurePush(cfg *gitSrcCfg, gitSpec *imagev1.GitSpec, checkoutRef *source
165166

166167
func getAuthOpts(ctx context.Context, c client.Client, repo *sourcev1.GitRepository,
167168
srcOpts SourceOptions, proxyURL *url.URL) (*git.AuthOptions, error) {
169+
var secret *corev1.Secret
168170
var data map[string][]byte
169171
var err error
170172
if repo.Spec.SecretRef != nil {
171-
data, err = getSecretData(ctx, c, repo.Spec.SecretRef.Name, repo.GetNamespace())
173+
secret, err = getSecret(ctx, c, repo.Spec.SecretRef.Name, repo.GetNamespace())
172174
if err != nil {
173175
return nil, fmt.Errorf("failed to get auth secret '%s/%s': %w", repo.GetNamespace(), repo.Spec.SecretRef.Name, err)
174176
}
177+
data = secret.Data
175178
}
176179

177180
u, err := url.Parse(repo.Spec.URL)
@@ -211,12 +214,20 @@ func getAuthOpts(ctx context.Context, c client.Client, repo *sourcev1.GitReposit
211214
if repo.Spec.SecretRef == nil {
212215
return nil, fmt.Errorf("secretRef with github app data must be specified when provider is set to github: %w", ErrInvalidSourceConfiguration)
213216
}
217+
targetURL := fmt.Sprintf("%s://%s", u.Scheme, u.Host)
218+
authMethods, err := secrets.AuthMethodsFromSecret(ctx, secret, secrets.WithTargetURL(targetURL), secrets.WithTLSSystemCertPool())
219+
if err != nil {
220+
return nil, err
221+
}
222+
if !authMethods.HasGitHubAppData() {
223+
return nil, fmt.Errorf("secretRef with github app data must be specified when provider is set to github: %w", ErrInvalidSourceConfiguration)
224+
}
214225

215226
getCreds = func() (*authutils.GitCredentials, error) {
216227
var opts []github.OptFunc
217228

218229
if len(data) > 0 {
219-
opts = append(opts, github.WithAppData(data))
230+
opts = append(opts, github.WithAppData(authMethods.GitHubAppData))
220231
}
221232

222233
if proxyURL != nil {
@@ -228,6 +239,10 @@ func getAuthOpts(ctx context.Context, c client.Client, repo *sourcev1.GitReposit
228239
srcOpts.objName, srcOpts.objNamespace, cache.OperationReconcile))
229240
}
230241

242+
if authMethods.HasTLS() {
243+
opts = append(opts, github.WithTLSConfig(authMethods.TLS))
244+
}
245+
231246
username, password, err := github.GetCredentials(ctx, opts...)
232247
if err != nil {
233248
return nil, err
@@ -330,13 +345,21 @@ func getSigningEntity(ctx context.Context, c client.Client, namespace string, gi
330345
}
331346

332347
func getSecretData(ctx context.Context, c client.Client, name, namespace string) (map[string][]byte, error) {
348+
secret, err := getSecret(ctx, c, name, namespace)
349+
if err != nil {
350+
return nil, err
351+
}
352+
return secret.Data, nil
353+
}
354+
355+
func getSecret(ctx context.Context, c client.Client, name, namespace string) (*corev1.Secret, error) {
333356
key := types.NamespacedName{
334357
Namespace: namespace,
335358
Name: name,
336359
}
337-
var secret corev1.Secret
338-
if err := c.Get(ctx, key, &secret); err != nil {
360+
secret := &corev1.Secret{}
361+
if err := c.Get(ctx, key, secret); err != nil {
339362
return nil, err
340363
}
341-
return secret.Data, nil
364+
return secret, nil
342365
}

0 commit comments

Comments
 (0)