func()

in pkg/client/jenkins/jenkins.go [207:252]


func (jc JenkinsClient) CreateUser(instance *jenkinsApi.JenkinsServiceAccount) error {
	crumb, err := jc.GetCrumb()
	if err != nil {
		return fmt.Errorf("failed to get crumb: %w", err)
	}

	headers := make(map[string]string)

	if crumb != "" {
		headers[jenkinsCrumbKey] = crumb
		headers["Content-Type"] = "application/x-www-form-urlencoded"
	}

	secretData, err := jc.PlatformService.GetSecretData(instance.Namespace, instance.Spec.Credentials)
	if err != nil || secretData == nil {
		return fmt.Errorf("failed to get info from secret %v", instance.Spec.Credentials)
	}

	credentials, err := helper.NewJenkinsUser(secretData, instance.Spec.Type, instance.Spec.Credentials)
	if err != nil {
		return fmt.Errorf("failed to create new jenkins user: %w", err)
	}

	requestParams := map[string]string{}

	requestParams["json"], err = credentials.ToString()
	if err != nil {
		return fmt.Errorf("failed to parse credentials to string: %w", err)
	}

	resp, err := jc.resty.
		SetRedirectPolicy(resty.FlexibleRedirectPolicy(numOfRedirects)).
		R().
		SetHeaders(headers).
		SetFormData(requestParams).
		Post("/credentials/store/system/domain/_/createCredentials")
	if err != nil {
		return fmt.Errorf("failed to send Jenkins user creation request: %w", err)
	}

	if resp.StatusCode() != http.StatusOK {
		return fmt.Errorf("failed to create user in Jenkins: response code: %v, response body: %s", resp.StatusCode(), resp.Body())
	}

	return nil
}