All URIs are relative to http://localhost
Method | HTTP request | Description |
---|---|---|
AddPolicyWaiverByPolicyViolationId | Post /api/v2/policyWaivers/{ownerType}/{ownerId}/{policyViolationId} | |
AddWaiverToTransitivePolicyViolationsByAppScanComponent | Post /api/v2/policyWaivers/transitive/{ownerType}/{ownerId}/{scanId} | |
AddWaiverToTransitivePolicyViolationsByOwnerStageComponent | Post /api/v2/policyWaivers/transitive/{ownerType}/{ownerId}/stages/{stageId} | |
DeletePolicyWaiver | Delete /api/v2/policyWaivers/{ownerType}/{ownerId}/{policyWaiverId} | |
GetPolicyWaiver | Get /api/v2/policyWaivers/{ownerType}/{ownerId}/{policyWaiverId} | |
GetPolicyWaivers | Get /api/v2/policyWaivers/{ownerType}/{ownerId} | |
GetTransitivePolicyWaiversByAppScanComponent | Get /api/v2/policyWaivers/transitive/{ownerType}/{ownerId}/{scanId} | |
RequestPolicyWaiver | Post /api/v2/policyWaivers/waiverRequests/{policyViolationId} |
AddPolicyWaiverByPolicyViolationId(ctx, ownerType, ownerId, policyViolationId).ApiWaiverOptionsDTO(apiWaiverOptionsDTO).Execute()
package main
import (
"context"
"fmt"
"os"
sonatypeiq "github.com/sonatype-nexus-community/nexus-iq-api-client-go"
)
func main() {
ownerType := "ownerType_example" // string | Indicates the scope of the waiver. Possible values are application, organization, repository, repository_manager, repository_container, global.
ownerId := "ownerId_example" // string | Enter the id for the ownerType provided above. E.g. applicationId if the ownerType is application.
policyViolationId := "policyViolationId_example" // string | Enter the policyViolationId for the policy on which you want to create a waiver. Use the Policy Violation REST API or Reports REST API to obtain the policyViolationId.
apiWaiverOptionsDTO := *sonatypeiq.NewApiWaiverOptionsDTO() // ApiWaiverOptionsDTO | The request JSON can include the fields<ol><li>comment (optional, to indicate the reason of the waiver) default value is null</li><li>applyToAllComponents (boolean, default 'false'),deprecated in favor of matcherStrategy. If matcherStrategy is not set, 'true' means this will apply the waiver to all components, 'false' means this will apply to a specific component.</li><li>matcherStrategy (enumeration, required) can have values DEFAULT, EXACT_COMPONENT, ALL_COMPONENTS, ALL_VERSIONS. DEFAULT will match all components if no hash is provided.</li><li>expiryTime (default null) to set the datetime when the waiver expires.</li></ol>
configuration := sonatypeiq.NewConfiguration()
apiClient := sonatypeiq.NewAPIClient(configuration)
r, err := apiClient.PolicyWaiversAPI.AddPolicyWaiverByPolicyViolationId(context.Background(), ownerType, ownerId, policyViolationId).ApiWaiverOptionsDTO(apiWaiverOptionsDTO).Execute()
if err != nil {
fmt.Fprintf(os.Stderr, "Error when calling `PolicyWaiversAPI.AddPolicyWaiverByPolicyViolationId``: %v\n", err)
fmt.Fprintf(os.Stderr, "Full HTTP response: %v\n", r)
}
}
Name | Type | Description | Notes |
---|---|---|---|
ctx | context.Context | context for authentication, logging, cancellation, deadlines, tracing, etc. | |
ownerType | string | Indicates the scope of the waiver. Possible values are application, organization, repository, repository_manager, repository_container, global. | |
ownerId | string | Enter the id for the ownerType provided above. E.g. applicationId if the ownerType is application. | |
policyViolationId | string | Enter the policyViolationId for the policy on which you want to create a waiver. Use the Policy Violation REST API or Reports REST API to obtain the policyViolationId. |
Other parameters are passed through a pointer to a apiAddPolicyWaiverByPolicyViolationIdRequest struct via the builder pattern
Name | Type | Description | Notes |
---|
apiWaiverOptionsDTO | ApiWaiverOptionsDTO | The request JSON can include the fields<ol><li>comment (optional, to indicate the reason of the waiver) default value is null</li><li>applyToAllComponents (boolean, default 'false'),deprecated in favor of matcherStrategy. If matcherStrategy is not set, 'true' means this will apply the waiver to all components, 'false' means this will apply to a specific component.</li><li>matcherStrategy (enumeration, required) can have values DEFAULT, EXACT_COMPONENT, ALL_COMPONENTS, ALL_VERSIONS. DEFAULT will match all components if no hash is provided.</li><li>expiryTime (default null) to set the datetime when the waiver expires.</li></ol> |
(empty response body)
- Content-Type: application/json
- Accept: Not defined
[Back to top] [Back to API list] [Back to Model list] [Back to README]
AddWaiverToTransitivePolicyViolationsByAppScanComponent(ctx, ownerType, ownerId, scanId).ComponentIdentifier(componentIdentifier).PackageUrl(packageUrl).Hash(hash).ApiWaiverOptionsDTO(apiWaiverOptionsDTO).Execute()
package main
import (
"context"
"fmt"
"os"
sonatypeiq "github.com/sonatype-nexus-community/nexus-iq-api-client-go"
)
func main() {
ownerType := "ownerType_example" // string | Indicates the scope of the waiver that will be created.
ownerId := "ownerId_example" // string | Enter the corresponding id for the ownerType specified above.
scanId := "scanId_example" // string | Enter the scanId (reportId) of the evaluation report that shows the transitive component.
componentIdentifier := *sonatypeiq.NewComponentIdentifier() // ComponentIdentifier | Enter the component identifier of the transitive component on which you want to create a policy waiver. (optional)
packageUrl := "packageUrl_example" // string | Enter the package URL of the transitive component on which you want to create a policy waiver. (optional)
hash := "hash_example" // string | Enter the hash of the transitive component on which you want to create a policy waiver. (optional)
apiWaiverOptionsDTO := *sonatypeiq.NewApiWaiverOptionsDTO() // ApiWaiverOptionsDTO | The request JSON can include the fields<ol><li>comment (optional, to indicate the reason of the waiver) default value is null</li><li>applyToAllComponents (boolean, default 'false'),deprecated in favor of matcherStrategy. If matcherStrategy is not set, 'true' means this will apply the waiver to all components, 'false' means this will apply to a specific component.</li><li>matcherStrategy (enumeration, required) can have values DEFAULT, EXACT_COMPONENT, ALL_COMPONENTS, ALL_VERSIONS. DEFAULT will match all components if no hash is provided.</li><li>expiryTime (default null) to set the datetime when the waiver expires.</li></ol> (optional)
configuration := sonatypeiq.NewConfiguration()
apiClient := sonatypeiq.NewAPIClient(configuration)
r, err := apiClient.PolicyWaiversAPI.AddWaiverToTransitivePolicyViolationsByAppScanComponent(context.Background(), ownerType, ownerId, scanId).ComponentIdentifier(componentIdentifier).PackageUrl(packageUrl).Hash(hash).ApiWaiverOptionsDTO(apiWaiverOptionsDTO).Execute()
if err != nil {
fmt.Fprintf(os.Stderr, "Error when calling `PolicyWaiversAPI.AddWaiverToTransitivePolicyViolationsByAppScanComponent``: %v\n", err)
fmt.Fprintf(os.Stderr, "Full HTTP response: %v\n", r)
}
}
Name | Type | Description | Notes |
---|---|---|---|
ctx | context.Context | context for authentication, logging, cancellation, deadlines, tracing, etc. | |
ownerType | string | Indicates the scope of the waiver that will be created. | |
ownerId | string | Enter the corresponding id for the ownerType specified above. | |
scanId | string | Enter the scanId (reportId) of the evaluation report that shows the transitive component. |
Other parameters are passed through a pointer to a apiAddWaiverToTransitivePolicyViolationsByAppScanComponentRequest struct via the builder pattern
Name | Type | Description | Notes |
---|
componentIdentifier | ComponentIdentifier | Enter the component identifier of the transitive component on which you want to create a policy waiver. | packageUrl | string | Enter the package URL of the transitive component on which you want to create a policy waiver. | hash | string | Enter the hash of the transitive component on which you want to create a policy waiver. | apiWaiverOptionsDTO | ApiWaiverOptionsDTO | The request JSON can include the fields<ol><li>comment (optional, to indicate the reason of the waiver) default value is null</li><li>applyToAllComponents (boolean, default 'false'),deprecated in favor of matcherStrategy. If matcherStrategy is not set, 'true' means this will apply the waiver to all components, 'false' means this will apply to a specific component.</li><li>matcherStrategy (enumeration, required) can have values DEFAULT, EXACT_COMPONENT, ALL_COMPONENTS, ALL_VERSIONS. DEFAULT will match all components if no hash is provided.</li><li>expiryTime (default null) to set the datetime when the waiver expires.</li></ol> |
(empty response body)
- Content-Type: application/json
- Accept: Not defined
[Back to top] [Back to API list] [Back to Model list] [Back to README]
AddWaiverToTransitivePolicyViolationsByOwnerStageComponent(ctx, ownerType, ownerId, stageId).ApiWaiverOptionsDTO(apiWaiverOptionsDTO).ComponentIdentifier(componentIdentifier).PackageUrl(packageUrl).Hash(hash).Execute()
package main
import (
"context"
"fmt"
"os"
sonatypeiq "github.com/sonatype-nexus-community/nexus-iq-api-client-go"
)
func main() {
ownerType := "ownerType_example" // string | Indicates the scope of the waiver that will be created.
ownerId := "ownerId_example" // string | Enter the corresponding id for the ownerType specified above. E.g. applicationId for ownerType 'application' or organizationId for ownerType 'organization'.
stageId := "stageId_example" // string | Enter the stageId corresponding to the evaluation stage at which you want to create a waiver. Possible values are 'develop', 'source', 'build', 'stage-release', 'release' and 'operate'.
apiWaiverOptionsDTO := *sonatypeiq.NewApiWaiverOptionsDTO() // ApiWaiverOptionsDTO | <ol><li>comment (optional, to indicate the reason of the waiver) default value is null</li><li>applyToAllComponents (boolean, default 'false'),deprecated in favor of matcherStrategy. If matcherStrategy is not set, 'true' means this will apply the waiver to all components, 'false' means this will apply to a specific component.</li><li>matcherStrategy (enumeration, required) can have values DEFAULT, EXACT_COMPONENT, ALL_COMPONENTS, ALL_VERSIONS. DEFAULT will match all components if no hash is provided.</li><li>expiryTime (default null) to set the datetime when the waiver expires.</li></ol>
componentIdentifier := *sonatypeiq.NewComponentIdentifier() // ComponentIdentifier | Enter the component identifier and coordinates of the component for which you want to waive the transitive violations. (optional)
packageUrl := "packageUrl_example" // string | Enter the package URL of the component for which you want to waive the transitive violations. (optional)
hash := "hash_example" // string | Enter the hash for the component for which you want to waive the transitive violations (optional)
configuration := sonatypeiq.NewConfiguration()
apiClient := sonatypeiq.NewAPIClient(configuration)
r, err := apiClient.PolicyWaiversAPI.AddWaiverToTransitivePolicyViolationsByOwnerStageComponent(context.Background(), ownerType, ownerId, stageId).ApiWaiverOptionsDTO(apiWaiverOptionsDTO).ComponentIdentifier(componentIdentifier).PackageUrl(packageUrl).Hash(hash).Execute()
if err != nil {
fmt.Fprintf(os.Stderr, "Error when calling `PolicyWaiversAPI.AddWaiverToTransitivePolicyViolationsByOwnerStageComponent``: %v\n", err)
fmt.Fprintf(os.Stderr, "Full HTTP response: %v\n", r)
}
}
Name | Type | Description | Notes |
---|---|---|---|
ctx | context.Context | context for authentication, logging, cancellation, deadlines, tracing, etc. | |
ownerType | string | Indicates the scope of the waiver that will be created. | |
ownerId | string | Enter the corresponding id for the ownerType specified above. E.g. applicationId for ownerType 'application' or organizationId for ownerType 'organization'. | |
stageId | string | Enter the stageId corresponding to the evaluation stage at which you want to create a waiver. Possible values are 'develop', 'source', 'build', 'stage-release', 'release' and 'operate'. |
Other parameters are passed through a pointer to a apiAddWaiverToTransitivePolicyViolationsByOwnerStageComponentRequest struct via the builder pattern
Name | Type | Description | Notes |
---|
apiWaiverOptionsDTO | ApiWaiverOptionsDTO | <ol><li>comment (optional, to indicate the reason of the waiver) default value is null</li><li>applyToAllComponents (boolean, default 'false'),deprecated in favor of matcherStrategy. If matcherStrategy is not set, 'true' means this will apply the waiver to all components, 'false' means this will apply to a specific component.</li><li>matcherStrategy (enumeration, required) can have values DEFAULT, EXACT_COMPONENT, ALL_COMPONENTS, ALL_VERSIONS. DEFAULT will match all components if no hash is provided.</li><li>expiryTime (default null) to set the datetime when the waiver expires.</li></ol> | componentIdentifier | ComponentIdentifier | Enter the component identifier and coordinates of the component for which you want to waive the transitive violations. | packageUrl | string | Enter the package URL of the component for which you want to waive the transitive violations. | hash | string | Enter the hash for the component for which you want to waive the transitive violations |
(empty response body)
- Content-Type: application/json
- Accept: Not defined
[Back to top] [Back to API list] [Back to Model list] [Back to README]
DeletePolicyWaiver(ctx, ownerType, ownerId, policyWaiverId).Execute()
package main
import (
"context"
"fmt"
"os"
sonatypeiq "github.com/sonatype-nexus-community/nexus-iq-api-client-go"
)
func main() {
ownerType := "ownerType_example" // string | Enter the ownerType to specify the scope. A waiver corresponding to the policyWaiverId provided and within the scope specified will be deleted.
ownerId := "ownerId_example" // string | Enter the corresponding id for the ownerType specified above.
policyWaiverId := "policyWaiverId_example" // string | Enter the policyWaiverId to be deleted.
configuration := sonatypeiq.NewConfiguration()
apiClient := sonatypeiq.NewAPIClient(configuration)
r, err := apiClient.PolicyWaiversAPI.DeletePolicyWaiver(context.Background(), ownerType, ownerId, policyWaiverId).Execute()
if err != nil {
fmt.Fprintf(os.Stderr, "Error when calling `PolicyWaiversAPI.DeletePolicyWaiver``: %v\n", err)
fmt.Fprintf(os.Stderr, "Full HTTP response: %v\n", r)
}
}
Name | Type | Description | Notes |
---|---|---|---|
ctx | context.Context | context for authentication, logging, cancellation, deadlines, tracing, etc. | |
ownerType | string | Enter the ownerType to specify the scope. A waiver corresponding to the policyWaiverId provided and within the scope specified will be deleted. | |
ownerId | string | Enter the corresponding id for the ownerType specified above. | |
policyWaiverId | string | Enter the policyWaiverId to be deleted. |
Other parameters are passed through a pointer to a apiDeletePolicyWaiverRequest struct via the builder pattern
Name | Type | Description | Notes |
---|
(empty response body)
- Content-Type: Not defined
- Accept: Not defined
[Back to top] [Back to API list] [Back to Model list] [Back to README]
ApiPolicyWaiverDTO GetPolicyWaiver(ctx, ownerType, ownerId, policyWaiverId).Execute()
package main
import (
"context"
"fmt"
"os"
sonatypeiq "github.com/sonatype-nexus-community/nexus-iq-api-client-go"
)
func main() {
ownerType := "ownerType_example" // string | Enter the ownerType to specify the scope. The response will contain the details for waivers within the scope.
ownerId := "ownerId_example" // string | Enter the corresponding id for the ownerType specified above.
policyWaiverId := "policyWaiverId_example" // string | Enter the policyWaiverId for which you want to retrieve the waiver details.
configuration := sonatypeiq.NewConfiguration()
apiClient := sonatypeiq.NewAPIClient(configuration)
resp, r, err := apiClient.PolicyWaiversAPI.GetPolicyWaiver(context.Background(), ownerType, ownerId, policyWaiverId).Execute()
if err != nil {
fmt.Fprintf(os.Stderr, "Error when calling `PolicyWaiversAPI.GetPolicyWaiver``: %v\n", err)
fmt.Fprintf(os.Stderr, "Full HTTP response: %v\n", r)
}
// response from `GetPolicyWaiver`: ApiPolicyWaiverDTO
fmt.Fprintf(os.Stdout, "Response from `PolicyWaiversAPI.GetPolicyWaiver`: %v\n", resp)
}
Name | Type | Description | Notes |
---|---|---|---|
ctx | context.Context | context for authentication, logging, cancellation, deadlines, tracing, etc. | |
ownerType | string | Enter the ownerType to specify the scope. The response will contain the details for waivers within the scope. | |
ownerId | string | Enter the corresponding id for the ownerType specified above. | |
policyWaiverId | string | Enter the policyWaiverId for which you want to retrieve the waiver details. |
Other parameters are passed through a pointer to a apiGetPolicyWaiverRequest struct via the builder pattern
Name | Type | Description | Notes |
---|
- Content-Type: Not defined
- Accept: application/json
[Back to top] [Back to API list] [Back to Model list] [Back to README]
[]ApiPolicyWaiverDTO GetPolicyWaivers(ctx, ownerType, ownerId).Execute()
package main
import (
"context"
"fmt"
"os"
sonatypeiq "github.com/sonatype-nexus-community/nexus-iq-api-client-go"
)
func main() {
ownerType := "ownerType_example" // string | Enter the ownerType to specify the scope. The response will contain waivers that are within the scope specified.
ownerId := "ownerId_example" // string | Enter the corresponding id for the ownerType specified above.
configuration := sonatypeiq.NewConfiguration()
apiClient := sonatypeiq.NewAPIClient(configuration)
resp, r, err := apiClient.PolicyWaiversAPI.GetPolicyWaivers(context.Background(), ownerType, ownerId).Execute()
if err != nil {
fmt.Fprintf(os.Stderr, "Error when calling `PolicyWaiversAPI.GetPolicyWaivers``: %v\n", err)
fmt.Fprintf(os.Stderr, "Full HTTP response: %v\n", r)
}
// response from `GetPolicyWaivers`: []ApiPolicyWaiverDTO
fmt.Fprintf(os.Stdout, "Response from `PolicyWaiversAPI.GetPolicyWaivers`: %v\n", resp)
}
Name | Type | Description | Notes |
---|---|---|---|
ctx | context.Context | context for authentication, logging, cancellation, deadlines, tracing, etc. | |
ownerType | string | Enter the ownerType to specify the scope. The response will contain waivers that are within the scope specified. | |
ownerId | string | Enter the corresponding id for the ownerType specified above. |
Other parameters are passed through a pointer to a apiGetPolicyWaiversRequest struct via the builder pattern
Name | Type | Description | Notes |
---|
- Content-Type: Not defined
- Accept: application/json
[Back to top] [Back to API list] [Back to Model list] [Back to README]
ApiComponentPolicyWaiversDTO GetTransitivePolicyWaiversByAppScanComponent(ctx, ownerType, ownerId, scanId).ComponentIdentifier(componentIdentifier).PackageUrl(packageUrl).Hash(hash).Execute()
package main
import (
"context"
"fmt"
"os"
sonatypeiq "github.com/sonatype-nexus-community/nexus-iq-api-client-go"
)
func main() {
ownerType := "ownerType_example" // string | Enter the ownerType to specify the scope. The response will contain the policy violations that are within the scope specified.
ownerId := "ownerId_example" // string | Enter the corresponding id for the ownerType specified above.
scanId := "scanId_example" // string | Enter the scanId (reportId) of the scan for which you want to retrieve the waivers on transitive policy violations occurring due the dependencies of a component.
componentIdentifier := *sonatypeiq.NewComponentIdentifier() // ComponentIdentifier | Enter the component identifier for the component for which you want to retrieve the waivers on transitive policy violations, for the specified scanId. (optional)
packageUrl := "packageUrl_example" // string | Enter the package URL for the component for which you want to retrieve the waivers on transitive policy violations, for the specified scanId. (optional)
hash := "hash_example" // string | Enter the hash for the component for which you want to retrieve the waivers on transitive policy violations, for the specified scanId. (optional)
configuration := sonatypeiq.NewConfiguration()
apiClient := sonatypeiq.NewAPIClient(configuration)
resp, r, err := apiClient.PolicyWaiversAPI.GetTransitivePolicyWaiversByAppScanComponent(context.Background(), ownerType, ownerId, scanId).ComponentIdentifier(componentIdentifier).PackageUrl(packageUrl).Hash(hash).Execute()
if err != nil {
fmt.Fprintf(os.Stderr, "Error when calling `PolicyWaiversAPI.GetTransitivePolicyWaiversByAppScanComponent``: %v\n", err)
fmt.Fprintf(os.Stderr, "Full HTTP response: %v\n", r)
}
// response from `GetTransitivePolicyWaiversByAppScanComponent`: ApiComponentPolicyWaiversDTO
fmt.Fprintf(os.Stdout, "Response from `PolicyWaiversAPI.GetTransitivePolicyWaiversByAppScanComponent`: %v\n", resp)
}
Name | Type | Description | Notes |
---|---|---|---|
ctx | context.Context | context for authentication, logging, cancellation, deadlines, tracing, etc. | |
ownerType | string | Enter the ownerType to specify the scope. The response will contain the policy violations that are within the scope specified. | |
ownerId | string | Enter the corresponding id for the ownerType specified above. | |
scanId | string | Enter the scanId (reportId) of the scan for which you want to retrieve the waivers on transitive policy violations occurring due the dependencies of a component. |
Other parameters are passed through a pointer to a apiGetTransitivePolicyWaiversByAppScanComponentRequest struct via the builder pattern
Name | Type | Description | Notes |
---|
componentIdentifier | ComponentIdentifier | Enter the component identifier for the component for which you want to retrieve the waivers on transitive policy violations, for the specified scanId. | packageUrl | string | Enter the package URL for the component for which you want to retrieve the waivers on transitive policy violations, for the specified scanId. | hash | string | Enter the hash for the component for which you want to retrieve the waivers on transitive policy violations, for the specified scanId. |
- Content-Type: Not defined
- Accept: application/json
[Back to top] [Back to API list] [Back to Model list] [Back to README]
RequestPolicyWaiver(ctx, policyViolationId).ApiRequestPolicyWaiverDTO(apiRequestPolicyWaiverDTO).Execute()
package main
import (
"context"
"fmt"
"os"
sonatypeiq "github.com/sonatype-nexus-community/nexus-iq-api-client-go"
)
func main() {
policyViolationId := "policyViolationId_example" // string | Enter the policyViolationId for which you want to trigger the waiver request event.
apiRequestPolicyWaiverDTO := *sonatypeiq.NewApiRequestPolicyWaiverDTO() // ApiRequestPolicyWaiverDTO | The request JSON should contain<ol><li>comment (optional, default null) to indicate the waiver request reason</li><li>policyViolationLink (link to the policy violation page in the Lifecycle UI)</li><li>addWaiverLink (link to the Add Waiver page in the Lifecycle UI)</li></ol> (optional)
configuration := sonatypeiq.NewConfiguration()
apiClient := sonatypeiq.NewAPIClient(configuration)
r, err := apiClient.PolicyWaiversAPI.RequestPolicyWaiver(context.Background(), policyViolationId).ApiRequestPolicyWaiverDTO(apiRequestPolicyWaiverDTO).Execute()
if err != nil {
fmt.Fprintf(os.Stderr, "Error when calling `PolicyWaiversAPI.RequestPolicyWaiver``: %v\n", err)
fmt.Fprintf(os.Stderr, "Full HTTP response: %v\n", r)
}
}
Name | Type | Description | Notes |
---|---|---|---|
ctx | context.Context | context for authentication, logging, cancellation, deadlines, tracing, etc. | |
policyViolationId | string | Enter the policyViolationId for which you want to trigger the waiver request event. |
Other parameters are passed through a pointer to a apiRequestPolicyWaiverRequest struct via the builder pattern
Name | Type | Description | Notes |
---|
apiRequestPolicyWaiverDTO | ApiRequestPolicyWaiverDTO | The request JSON should contain<ol><li>comment (optional, default null) to indicate the waiver request reason</li><li>policyViolationLink (link to the policy violation page in the Lifecycle UI)</li><li>addWaiverLink (link to the Add Waiver page in the Lifecycle UI)</li></ol> |
(empty response body)
- Content-Type: application/json
- Accept: Not defined
[Back to top] [Back to API list] [Back to Model list] [Back to README]