~ knotless Search/
↑↓ move↵ open⇧↵ all results
0
0
main
54 lines · 1.7 KB Raw History
package openbaoctl

import (
	"context"
	"errors"
	"fmt"
	"strings"

	"github.com/johnandersen777/socialweb-computer-kcp/api/v1alpha1"
	"github.com/johnandersen777/socialweb-computer-kcp/internal/vault/openbao"
	"k8s.io/apimachinery/pkg/api/meta"
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

func FileRef(ref string) string { return strings.TrimPrefix(ref, "file:") }

func ClientRefs(st v1alpha1.OpenBaoServerStatus, name string) (v1alpha1.OpenBaoServerClientRefs, error) {
	if st.Address == "" || st.Refs == nil {
		return v1alpha1.OpenBaoServerClientRefs{}, fmt.Errorf("the OpenBaoServer reports no address yet (phase %s)", st.Phase)
	}
	for _, c := range st.Clients {
		if c.Name == name && c.ClientCert != "" {
			return c, nil
		}
	}
	return v1alpha1.OpenBaoServerClientRefs{}, fmt.Errorf("the OpenBaoServer reports no client %s yet", name)
}

func ClientLogin(ctx context.Context, logins *openbao.Logins, st v1alpha1.OpenBaoServerStatus, name string) (*openbao.Client, v1alpha1.OpenBaoServerClientRefs, error) {
	if logins == nil {
		return nil, v1alpha1.OpenBaoServerClientRefs{}, errors.New("openbaoctl: no OpenBao logins are configured")
	}
	c, err := ClientRefs(st, name)
	if err != nil {
		return nil, c, err
	}
	srv, err := openbao.ServerOf(st.Address, "", st, name)
	if err != nil {
		return nil, c, err
	}
	logged, _, err := logins.Open(ctx, srv)
	if err != nil {
		return nil, c, err
	}
	return logged, c, nil
}

func Synced(o *v1alpha1.OpenBaoServer) bool {
	if o == nil || o.Status.ObservedGeneration != o.Generation || o.Status.Phase != v1alpha1.OpenBaoServerPhaseReady {
		return false
	}
	c := meta.FindStatusCondition(o.Status.Conditions, ConditionSynced)
	return c != nil && c.Status == metav1.ConditionTrue && c.ObservedGeneration == o.Generation
}