github.com/ouraigua/jenkins-library@v0.0.0-20231028010029-fbeaf2f3aa9b/pkg/jenkins/credential.go (about)

     1  package jenkins
     2  
     3  import (
     4  	"context"
     5  	"errors"
     6  	"fmt"
     7  	"reflect"
     8  
     9  	"github.com/bndr/gojenkins"
    10  )
    11  
    12  // StringCredentials store only secret text
    13  type StringCredentials = gojenkins.StringCredentials
    14  
    15  // UsernameCredentials struct representing credential for storing username-password pair
    16  type UsernameCredentials = gojenkins.UsernameCredentials
    17  
    18  // SSHCredentials store credentials for ssh keys.
    19  type SSHCredentials = gojenkins.SSHCredentials
    20  
    21  // DockerServerCredentials store credentials for docker keys.
    22  type DockerServerCredentials = gojenkins.DockerServerCredentials
    23  
    24  // CredentialsManager is utility to control credential plugin
    25  // mock generated with: mockery --name CredentialsManager --dir pkg/jenkins --output pkg/jenkins/mocks
    26  type CredentialsManager interface {
    27  	Update(context.Context, string, string, interface{}) error
    28  }
    29  
    30  // NewCredentialsManager returns a new CredentialManager
    31  func NewCredentialsManager(jenkins *gojenkins.Jenkins) CredentialsManager {
    32  	return gojenkins.CredentialsManager{J: jenkins}
    33  }
    34  
    35  // UpdateCredential overwrites an existing credential
    36  func UpdateCredential(ctx context.Context, credentialsManager CredentialsManager, domain string, credential interface{}) error {
    37  	credValue := reflect.ValueOf(credential)
    38  	if credValue.Kind() != reflect.Struct {
    39  		return fmt.Errorf("'credential' parameter is supposed to be a Credentials struct not '%s'", credValue.Type())
    40  	}
    41  
    42  	idField := credValue.FieldByName("ID")
    43  	if !idField.IsValid() || idField.Kind() != reflect.String {
    44  		return fmt.Errorf("'credential' parameter is supposed to be a Credentials struct not '%s'", credValue.Type())
    45  	}
    46  
    47  	secretID := idField.String()
    48  	if secretID == "" {
    49  		return errors.New("secret ID should not be empty")
    50  	}
    51  
    52  	return credentialsManager.Update(ctx, domain, secretID, credential)
    53  }