1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
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
}