use auth sub package methods
Signed-off-by: Sanskar Jaiswal <jaiswalsanskar078@gmail.com>
This commit is contained in:
parent
f511dc5d26
commit
a3afeb301f
|
@ -47,6 +47,7 @@ import (
|
||||||
|
|
||||||
eventv1 "github.com/fluxcd/pkg/apis/event/v1beta1"
|
eventv1 "github.com/fluxcd/pkg/apis/event/v1beta1"
|
||||||
"github.com/fluxcd/pkg/apis/meta"
|
"github.com/fluxcd/pkg/apis/meta"
|
||||||
|
gitauth "github.com/fluxcd/pkg/auth/git"
|
||||||
"github.com/fluxcd/pkg/git"
|
"github.com/fluxcd/pkg/git"
|
||||||
"github.com/fluxcd/pkg/git/gogit"
|
"github.com/fluxcd/pkg/git/gogit"
|
||||||
"github.com/fluxcd/pkg/git/repository"
|
"github.com/fluxcd/pkg/git/repository"
|
||||||
|
@ -637,29 +638,29 @@ func (r *GitRepositoryReconciler) getProxyOpts(ctx context.Context, proxySecretN
|
||||||
func (r *GitRepositoryReconciler) getAuthOpts(ctx context.Context, obj *sourcev1.GitRepository, u url.URL,
|
func (r *GitRepositoryReconciler) getAuthOpts(ctx context.Context, obj *sourcev1.GitRepository, u url.URL,
|
||||||
proxyOpts *transport.ProxyOptions) (*git.AuthOptions, error) {
|
proxyOpts *transport.ProxyOptions) (*git.AuthOptions, error) {
|
||||||
var authSecret *corev1.Secret
|
var authSecret *corev1.Secret
|
||||||
|
var err error
|
||||||
|
|
||||||
|
// Fetch the secret, if specified
|
||||||
if obj.Spec.SecretRef != nil {
|
if obj.Spec.SecretRef != nil {
|
||||||
var err error
|
|
||||||
authSecret, err = r.getSecretData(ctx, obj.Spec.SecretRef.Name, obj.GetNamespace())
|
authSecret, err = r.getSecretData(ctx, obj.Spec.SecretRef.Name, obj.GetNamespace())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("failed to get secret '%s/%s': %w", obj.GetNamespace(), obj.Spec.SecretRef.Name, err)
|
return nil, fmt.Errorf("failed to get secret '%s/%s': %w", obj.GetNamespace(), obj.Spec.SecretRef.Name, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if obj.Spec.Provider != "" {
|
|
||||||
authOpts, err := r.getAuthOptsForProvider(ctx, u, obj, authSecret, proxyOpts)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
if authOpts != nil {
|
|
||||||
return authOpts, nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Configure authentication strategy to access the source
|
|
||||||
var data map[string][]byte
|
var data map[string][]byte
|
||||||
if authSecret != nil {
|
if authSecret != nil {
|
||||||
data = authSecret.Data
|
data = authSecret.Data
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If a auth provider is specified, then get the auth data from the provider.
|
||||||
|
if obj.Spec.Provider != "" {
|
||||||
|
data, err = r.getAuthDataFromProvider(ctx, obj, authSecret, proxyOpts)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
authOpts, err := git.NewAuthOptions(u, data)
|
authOpts, err := git.NewAuthOptions(u, data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -667,14 +668,14 @@ func (r *GitRepositoryReconciler) getAuthOpts(ctx context.Context, obj *sourcev1
|
||||||
return authOpts, nil
|
return authOpts, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *GitRepositoryReconciler) getAuthOptsForProvider(ctx context.Context, u url.URL, obj *sourcev1.GitRepository,
|
func (r *GitRepositoryReconciler) getAuthDataFromProvider(ctx context.Context, obj *sourcev1.GitRepository,
|
||||||
authSecret *corev1.Secret, proxyOpts *transport.ProxyOptions) (*git.AuthOptions, error) {
|
authSecret *corev1.Secret, proxyOpts *transport.ProxyOptions) (map[string][]byte, error) {
|
||||||
authenticator := &auth.Authenticator{}
|
var providerOpts *auth.ProviderOptions
|
||||||
|
|
||||||
if obj.Spec.Provider == auth.GitHubProvider {
|
if obj.Spec.Provider == auth.GitHubProvider {
|
||||||
if authSecret == nil {
|
if authSecret == nil {
|
||||||
return nil, fmt.Errorf("secret ref is required for %s", obj.Spec.Provider)
|
return nil, fmt.Errorf("secret ref is required for %s", obj.Spec.Provider)
|
||||||
}
|
}
|
||||||
authenticator.GitHubOpts = []github.ProviderOptFunc{github.WithSecret(*authSecret)}
|
|
||||||
if proxyOpts != nil {
|
if proxyOpts != nil {
|
||||||
tr := http.DefaultTransport.(*http.Transport).Clone()
|
tr := http.DefaultTransport.(*http.Transport).Clone()
|
||||||
proxyUrl, err := proxyOpts.FullURL()
|
proxyUrl, err := proxyOpts.FullURL()
|
||||||
|
@ -682,10 +683,21 @@ func (r *GitRepositoryReconciler) getAuthOptsForProvider(ctx context.Context, u
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
tr.Proxy = http.ProxyURL(proxyUrl)
|
tr.Proxy = http.ProxyURL(proxyUrl)
|
||||||
authenticator.GitHubOpts = append(authenticator.GitHubOpts, github.WithTransport(tr))
|
providerOpts = &auth.ProviderOptions{
|
||||||
|
GitHubOpts: []github.ProviderOptFunc{github.WithTransport(tr)},
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return authenticator.GetGitAuthOptions(ctx, u, obj.Spec.Provider, string(obj.UID))
|
authOpts := &auth.AuthOptions{
|
||||||
|
CacheKey: string(obj.UID),
|
||||||
|
Secret: authSecret,
|
||||||
|
}
|
||||||
|
|
||||||
|
creds, err := gitauth.GetCredentials(ctx, obj.Spec.Provider, authOpts, providerOpts)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return creds.ToSecretData(), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *GitRepositoryReconciler) getSecretData(ctx context.Context, name, namespace string) (*corev1.Secret, error) {
|
func (r *GitRepositoryReconciler) getSecretData(ctx context.Context, name, namespace string) (*corev1.Secret, error) {
|
||||||
|
|
|
@ -54,6 +54,7 @@ import (
|
||||||
eventv1 "github.com/fluxcd/pkg/apis/event/v1beta1"
|
eventv1 "github.com/fluxcd/pkg/apis/event/v1beta1"
|
||||||
"github.com/fluxcd/pkg/apis/meta"
|
"github.com/fluxcd/pkg/apis/meta"
|
||||||
authpkg "github.com/fluxcd/pkg/auth"
|
authpkg "github.com/fluxcd/pkg/auth"
|
||||||
|
"github.com/fluxcd/pkg/auth/registry"
|
||||||
"github.com/fluxcd/pkg/oci"
|
"github.com/fluxcd/pkg/oci"
|
||||||
"github.com/fluxcd/pkg/runtime/conditions"
|
"github.com/fluxcd/pkg/runtime/conditions"
|
||||||
helper "github.com/fluxcd/pkg/runtime/controller"
|
helper "github.com/fluxcd/pkg/runtime/controller"
|
||||||
|
@ -348,8 +349,10 @@ func (r *OCIRepositoryReconciler) reconcileSource(ctx context.Context, sp *patch
|
||||||
}
|
}
|
||||||
|
|
||||||
if _, ok := keychain.(soci.Anonymous); obj.Spec.Provider != ociv1.GenericOCIProvider && ok {
|
if _, ok := keychain.(soci.Anonymous); obj.Spec.Provider != ociv1.GenericOCIProvider && ok {
|
||||||
authenticator := authpkg.Authenticator{}
|
authOpts := &authpkg.AuthOptions{
|
||||||
auth, err = authenticator.GetRegistryAuthenticator(ctxTimeout, obj.Spec.URL, obj.Spec.Provider, string(obj.UID))
|
CacheKey: string(obj.UID),
|
||||||
|
}
|
||||||
|
auth, err = registry.GetAuthenticator(ctxTimeout, obj.Spec.URL, obj.Spec.Provider, authOpts, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
e := serror.NewGeneric(
|
e := serror.NewGeneric(
|
||||||
fmt.Errorf("failed to get credential from %s: %w", obj.Spec.Provider, err),
|
fmt.Errorf("failed to get credential from %s: %w", obj.Spec.Provider, err),
|
||||||
|
|
|
@ -25,6 +25,7 @@ import (
|
||||||
"path"
|
"path"
|
||||||
|
|
||||||
"github.com/fluxcd/pkg/auth"
|
"github.com/fluxcd/pkg/auth"
|
||||||
|
regauth "github.com/fluxcd/pkg/auth/registry"
|
||||||
"github.com/google/go-containerregistry/pkg/authn"
|
"github.com/google/go-containerregistry/pkg/authn"
|
||||||
helmgetter "helm.sh/helm/v3/pkg/getter"
|
helmgetter "helm.sh/helm/v3/pkg/getter"
|
||||||
helmreg "helm.sh/helm/v3/pkg/registry"
|
helmreg "helm.sh/helm/v3/pkg/registry"
|
||||||
|
@ -134,12 +135,13 @@ func GetClientOpts(ctx context.Context, c client.Client, obj *helmv1.HelmReposit
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if obj.Spec.Provider != helmv1.GenericOCIProvider && obj.Spec.Type == helmv1.HelmRepositoryTypeOCI && ociRepo {
|
} else if obj.Spec.Provider != helmv1.GenericOCIProvider && obj.Spec.Type == helmv1.HelmRepositoryTypeOCI && ociRepo {
|
||||||
authenticator := auth.Authenticator{}
|
authOpts := &auth.AuthOptions{
|
||||||
regAuthenticator, err := authenticator.GetRegistryAuthenticator(ctx, obj.Spec.URL, obj.Spec.Provider, string(obj.UID))
|
CacheKey: string(obj.UID),
|
||||||
|
}
|
||||||
|
hrOpts.Authenticator, err = regauth.GetAuthenticator(ctx, obj.Spec.URL, obj.Spec.Provider, authOpts, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, "", fmt.Errorf("failed to get credential from '%s': %w", obj.Spec.Provider, err)
|
return nil, "", fmt.Errorf("failed to get credential from '%s': %w", obj.Spec.Provider, err)
|
||||||
}
|
}
|
||||||
hrOpts.Authenticator = regAuthenticator
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ociRepo {
|
if ociRepo {
|
||||||
|
|
Loading…
Reference in New Issue