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 }