...

Source file src/edge-infra.dev/pkg/edge/info/secret.go

Documentation: edge-infra.dev/pkg/edge/info

     1  package info
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  
     7  	v1 "k8s.io/api/core/v1"
     8  	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
     9  
    10  	"sigs.k8s.io/controller-runtime/pkg/client"
    11  )
    12  
    13  // BuildBootstrapSecret create edge-info Secret
    14  func BuildBootstrapSecret(token string) *v1.Secret {
    15  	return &v1.Secret{
    16  		TypeMeta: metav1.TypeMeta{
    17  			APIVersion: v1.SchemeGroupVersion.String(),
    18  			Kind:       "Secret",
    19  		},
    20  		ObjectMeta: metav1.ObjectMeta{
    21  			Name:      EdgeConfigMapName,
    22  			Namespace: EdgeBootstrapping,
    23  		},
    24  		Data: map[string][]byte{
    25  			TotpSecret: []byte(token),
    26  		},
    27  	}
    28  }
    29  
    30  // ValidateEdgeInfoSecret validates edge-info Secret
    31  func ValidateEdgeInfoSecret(secret *v1.Secret) error {
    32  	if len(secret.Data[TotpSecret]) == 0 {
    33  		return fmt.Errorf("edge-info secret invalid, totp token not found")
    34  	}
    35  	return nil
    36  }
    37  
    38  // FromSecret retrieves token from secret
    39  func FromSecret(secret *v1.Secret) (string, error) {
    40  	if err := ValidateEdgeInfoSecret(secret); err != nil {
    41  		return "", err
    42  	}
    43  	return string(secret.Data[TotpSecret]), nil
    44  }
    45  
    46  // TokenFromClient grabs the secret from the cluster
    47  func TokenFromClient(ctx context.Context, cl client.Client) (string, error) {
    48  	secret := &v1.Secret{}
    49  	key := client.ObjectKey{Namespace: EdgeBootstrapping, Name: EdgeConfigMapName}
    50  	if err := cl.Get(ctx, key, secret); err != nil {
    51  		return "", err
    52  	}
    53  	return FromSecret(secret)
    54  }
    55  

View as plain text