144 lines
3.3 KiB
Go
144 lines
3.3 KiB
Go
package v1alpha1
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
corev1 "k8s.io/api/core/v1"
|
|
v1 "k8s.io/api/core/v1"
|
|
"k8s.io/apimachinery/pkg/types"
|
|
"sigs.k8s.io/controller-runtime/pkg/client"
|
|
)
|
|
|
|
// +kubebuilder:object:generate=false
|
|
type RefResolver struct {
|
|
client client.Client
|
|
}
|
|
|
|
func NewRefResolver(client client.Client) *RefResolver {
|
|
return &RefResolver{
|
|
client: client,
|
|
}
|
|
}
|
|
|
|
func (r *RefResolver) OIDCAppRef(ctx context.Context, ref *OIDCAppRef,
|
|
namespace string) (*OIDCApp, error) {
|
|
if ref.Kind != "" && ref.Kind != "OIDCApp" {
|
|
return nil, fmt.Errorf("Unsupported reference kind: '%s'", ref.Kind)
|
|
}
|
|
|
|
key := types.NamespacedName{
|
|
Name: ref.Name,
|
|
Namespace: namespace,
|
|
}
|
|
if ref.Namespace != "" {
|
|
key.Namespace = ref.Namespace
|
|
}
|
|
|
|
var zitadel OIDCApp
|
|
if err := r.client.Get(ctx, key, &zitadel); err != nil {
|
|
return nil, err
|
|
}
|
|
return &zitadel, nil
|
|
}
|
|
|
|
func (r *RefResolver) ActionRef(ctx context.Context, ref *ActionRef,
|
|
namespace string) (*Action, error) {
|
|
if ref.Kind != "" && ref.Kind != "Action" {
|
|
return nil, fmt.Errorf("Unsupported reference kind: '%s'", ref.Kind)
|
|
}
|
|
|
|
key := types.NamespacedName{
|
|
Name: ref.Name,
|
|
Namespace: namespace,
|
|
}
|
|
if ref.Namespace != "" {
|
|
key.Namespace = ref.Namespace
|
|
}
|
|
|
|
var zitadel Action
|
|
if err := r.client.Get(ctx, key, &zitadel); err != nil {
|
|
return nil, err
|
|
}
|
|
return &zitadel, nil
|
|
}
|
|
|
|
func (r *RefResolver) ProjectRef(ctx context.Context, ref *ProjectRef,
|
|
namespace string) (*Project, error) {
|
|
if ref.Kind != "" && ref.Kind != "Project" {
|
|
return nil, fmt.Errorf("Unsupported reference kind: '%s'", ref.Kind)
|
|
}
|
|
|
|
key := types.NamespacedName{
|
|
Name: ref.Name,
|
|
Namespace: namespace,
|
|
}
|
|
if ref.Namespace != "" {
|
|
key.Namespace = ref.Namespace
|
|
}
|
|
|
|
var zitadel Project
|
|
if err := r.client.Get(ctx, key, &zitadel); err != nil {
|
|
return nil, err
|
|
}
|
|
return &zitadel, nil
|
|
}
|
|
|
|
func (r *RefResolver) OrganizationRef(ctx context.Context, ref *OrganizationRef,
|
|
namespace string) (*Organization, error) {
|
|
if ref.Kind != "" && ref.Kind != "Organization" {
|
|
return nil, fmt.Errorf("Unsupported reference kind: '%s'", ref.Kind)
|
|
}
|
|
|
|
key := types.NamespacedName{
|
|
Name: ref.Name,
|
|
Namespace: namespace,
|
|
}
|
|
if ref.Namespace != "" {
|
|
key.Namespace = ref.Namespace
|
|
}
|
|
|
|
var zitadel Organization
|
|
if err := r.client.Get(ctx, key, &zitadel); err != nil {
|
|
return nil, err
|
|
}
|
|
return &zitadel, nil
|
|
}
|
|
|
|
func (r *RefResolver) ConnectionRef(ctx context.Context, ref *ConnectionRef, namespace string) (*Connection, error) {
|
|
if ref.Kind != "" && ref.Kind != "Connection" {
|
|
return nil, fmt.Errorf("Unsupported reference kind: '%s'", ref.Kind)
|
|
}
|
|
key := types.NamespacedName{
|
|
Name: ref.Name,
|
|
Namespace: namespace,
|
|
}
|
|
if ref.Namespace != "" {
|
|
key.Namespace = ref.Namespace
|
|
}
|
|
|
|
var connection Connection
|
|
if err := r.client.Get(ctx, key, &connection); err != nil {
|
|
return nil, err
|
|
}
|
|
return &connection, nil
|
|
}
|
|
|
|
func (r *RefResolver) SecretKeyRef(ctx context.Context, selector corev1.SecretKeySelector,
|
|
namespace string) (string, error) {
|
|
nn := types.NamespacedName{
|
|
Name: selector.Name,
|
|
Namespace: namespace,
|
|
}
|
|
var secret v1.Secret
|
|
if err := r.client.Get(ctx, nn, &secret); err != nil {
|
|
return "", fmt.Errorf("error getting secret: %v", err)
|
|
}
|
|
|
|
data, ok := secret.Data[selector.Key]
|
|
if !ok {
|
|
return "", fmt.Errorf("secret key \"%s\" not found", selector.Key)
|
|
}
|
|
|
|
return string(data), nil
|
|
}
|