diff --git a/.generator/schemas/v2/openapi.yaml b/.generator/schemas/v2/openapi.yaml index e301432aca..fb53a3c529 100644 --- a/.generator/schemas/v2/openapi.yaml +++ b/.generator/schemas/v2/openapi.yaml @@ -31072,6 +31072,84 @@ components: type: string type: array type: object + IntegrationAssignmentDataAttributesRequest: + properties: + action: + $ref: '#/components/schemas/IntegrationAssignmentDataAttributesRequestAction' + assignment: + $ref: '#/components/schemas/IntegrationAssignmentDataAttributesRequestAssignment' + type: + $ref: '#/components/schemas/IntegrationAssignmentDataAttributesRequestType' + required: + - action + - type + - assignment + type: object + IntegrationAssignmentDataAttributesRequestAction: + description: Action to perform on the assignment. Can be "assign" or "un_assign". + enum: + - assign + - un_assign + example: assign + type: string + x-enum-varnames: + - ASSIGN + - UN_ASSIGN + IntegrationAssignmentDataAttributesRequestAssignment: + properties: + jira: + additionalProperties: + items: + type: string + type: array + description: Map of Jira issue URLs to lists of finding IDs. + example: + https://jira.example.com/browse/SEC-123: + - MDBjMzdhYzgyNGZkZGJiZmY0OGNmYjNiMWQ2ODY0YmR-OTc0YjMzNjM1Y2UyODA2YTEyNWQxYmNkZjhmODllNzg= + type: object + required: + - jira + type: object + IntegrationAssignmentDataAttributesRequestType: + description: Type of the security issues. Can be "findings" or "vulnerabilities". + enum: + - findings + - vulnerabilities + example: findings + type: string + x-enum-varnames: + - FINDINGS + - VULNERABILITIES + IntegrationAssignmentDataRequest: + properties: + attributes: + $ref: '#/components/schemas/IntegrationAssignmentDataAttributesRequest' + id: + description: Unique identifier of the integration assignment. + example: some_id + type: string + type: + $ref: '#/components/schemas/IntegrationAssignmentType' + required: + - id + - type + - attributes + type: object + IntegrationAssignmentRequest: + properties: + data: + $ref: '#/components/schemas/IntegrationAssignmentDataRequest' + required: + - data + type: object + IntegrationAssignmentType: + description: Integration assignment resource type. + enum: + - issue_assignment + example: issue_assignment + type: string + x-enum-varnames: + - ISSUE_ASSIGNMENT IntegrationIncident: description: Incident integration settings properties: @@ -32389,6 +32467,158 @@ components: $ref: '#/components/schemas/Case3rdPartyTicketStatus' readOnly: true type: object + JiraIssueCustomFields: + additionalProperties: {} + description: Custom fields for the Jira issue. + example: null + nullable: true + type: object + JiraIssueDataAttributesRequest: + properties: + account_id: + description: Jira account identifier. + example: f7ccdf99-0e22-4378-bdf9-03fde5379fea + type: string + fields: + $ref: '#/components/schemas/JiraIssueCustomFields' + issue_type: + description: Jira issue type name. + example: story + type: string + issuetype_id: + description: Jira issue type identifier. + example: '1235' + type: string + mode: + $ref: '#/components/schemas/JiraIssueDataAttributesRequestMode' + project_id: + description: Jira project identifier. + example: '1234' + type: string + project_key: + description: Jira project key. + example: SEC + type: string + required: + - account_id + - project_id + - issuetype_id + - project_key + - issue_type + type: object + JiraIssueDataAttributesRequestMode: + description: Mode for creating the Jira issue. Can be "single" or "multiple". + enum: + - single + - multiple + example: single + type: string + x-enum-varnames: + - SINGLE + - MULTIPLE + JiraIssueDataMeta: + properties: + findings: + items: + $ref: '#/components/schemas/JiraIssueFinding' + type: array + vulnerabilities: + items: + $ref: '#/components/schemas/JiraIssueFinding' + type: array + type: object + JiraIssueDataRequest: + properties: + attributes: + $ref: '#/components/schemas/JiraIssueDataAttributesRequest' + id: + description: Unique identifier of the Jira issue request. + example: ID + type: string + meta: + $ref: '#/components/schemas/JiraIssueDataMeta' + type: + $ref: '#/components/schemas/JiraIssueType' + required: + - id + - type + - attributes + - meta + type: object + JiraIssueFinding: + properties: + description: + description: Description of the finding. + example: Description + type: string + ids: + items: + $ref: '#/components/schemas/JiraIssueFindingId' + type: array + impacted: + description: Number of impacted resources. + example: 1 + format: int64 + type: integer + references: + description: References for the finding. + example: '' + type: string + remediation: + description: Remediation instructions for the finding. + example: Remediation + type: string + severity: + $ref: '#/components/schemas/FindingStatus' + title: + description: Title of the finding. + example: Title + type: string + type: + description: Type of the finding. + example: ciem + type: string + required: + - title + - description + - remediation + - references + - severity + - type + - ids + type: object + JiraIssueFindingId: + properties: + discovered: + description: Timestamp when the finding was discovered. + example: 123213123 + format: int64 + type: integer + id: + description: Identifier of the finding. + example: afa-afa-hze + type: string + resource: + description: Resource associated with the finding. + example: Resource + type: string + tags: + description: Tags associated with the finding. + example: akjasd:asdsad + type: string + required: + - id + - resource + - discovered + - tags + type: object + JiraIssueRequest: + properties: + data: + $ref: '#/components/schemas/JiraIssueDataRequest' + required: + - data + type: object JiraIssueResult: description: Jira issue information properties: @@ -32580,6 +32810,14 @@ components: required: - data type: object + JiraIssueType: + description: Jira issue resource type. + enum: + - jira_issue + example: jira_issue + type: string + x-enum-varnames: + - JIRA_ISSUE JiraIssuesDataType: default: jira_issues description: Jira issues resource type. @@ -32589,6 +32827,55 @@ components: type: string x-enum-varnames: - JIRA_ISSUES + JiraIssuesMetadataDataAttributesResponse: + properties: + account_id: + description: Jira account identifier. + example: jira-account-1234 + type: string + issue_type_id: + description: Jira issue type identifier. + example: '12356' + type: string + project_id: + description: Jira project identifier. + example: jira-project-1234 + type: string + required: + - account_id + - issue_type_id + - project_id + type: object + JiraIssuesMetadataDataResponse: + properties: + attributes: + $ref: '#/components/schemas/JiraIssuesMetadataDataAttributesResponse' + id: + description: Jira issue URL. + example: https://datadoghq-sandbox-538.atlassian.net/browse/CSMSEC-103394 + type: string + type: + $ref: '#/components/schemas/JiraIssuesMetadataType' + required: + - id + - type + - attributes + type: object + JiraIssuesMetadataResponse: + properties: + data: + $ref: '#/components/schemas/JiraIssuesMetadataDataResponse' + required: + - data + type: object + JiraIssuesMetadataType: + description: Jira issues metadata resource type. + enum: + - jira_issues + example: jira_issues + type: string + x-enum-varnames: + - JIRA_ISSUES JobCreateResponse: description: Run a threat hunting job response. properties: @@ -73555,6 +73842,105 @@ paths: permissions: - security_monitoring_rules_read - security_monitoring_rules_write + /api/v2/cloud_security_management/integrations/assign: + post: + description: 'Assign or un-assign Jira issues to security findings or vulnerabilities. + + This endpoint allows you to associate existing Jira issues with security findings + or vulnerabilities, or remove such associations.' + operationId: AssignIntegrationIssues + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/IntegrationAssignmentRequest' + required: true + responses: + '202': + description: Accepted + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/JSONAPIErrorResponse' + description: Bad Request + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/JSONAPIErrorResponse' + description: Not Found + '429': + $ref: '#/components/responses/TooManyRequestsResponse' + '500': + content: + application/json: + schema: + $ref: '#/components/schemas/JSONAPIErrorResponse' + description: Internal Server Error + security: + - apiKeyAuth: [] + appKeyAuth: [] + - AuthZ: [] + summary: Assign or un-assign Jira issues to security findings + tags: + - Security Monitoring + x-codegen-request-body-name: body + x-permission: + operator: OR + permissions: + - security_monitoring_findings_write + - appsec_vm_write + x-unstable: '**Note**: This endpoint is in preview and is subject to change. + + If you have any feedback, contact [Datadog support](https://docs.datadoghq.com/help/).' + /api/v2/cloud_security_management/jira_issues: + post: + description: 'Create Jira issues for security findings or vulnerabilities. + + This endpoint creates new Jira issues based on the provided security findings + or vulnerability information. The operation is asynchronous and returns immediately + with a 202 Accepted status.' + operationId: CreateJiraIssue + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/JiraIssueRequest' + required: true + responses: + '202': + description: Accepted + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/JSONAPIErrorResponse' + description: Bad Request + '429': + $ref: '#/components/responses/TooManyRequestsResponse' + '500': + content: + application/json: + schema: + $ref: '#/components/schemas/JSONAPIErrorResponse' + description: Internal Server Error + security: + - apiKeyAuth: [] + appKeyAuth: [] + - AuthZ: [] + summary: Create Jira issues for security findings + tags: + - Security Monitoring + x-codegen-request-body-name: body + x-permission: + operator: OR + permissions: + - security_monitoring_findings_write + - appsec_vm_write + x-unstable: '**Note**: This endpoint is in preview and is subject to change. + + If you have any feedback, contact [Datadog support](https://docs.datadoghq.com/help/).' /api/v2/cloud_security_management/resource_filters: get: description: List resource filters. @@ -92609,6 +92995,57 @@ paths: permissions: - security_monitoring_findings_write - appsec_vm_write + /api/v2/security/findings/jira_issues/metadata: + get: + description: 'Retrieve metadata for a Jira issue. + + This endpoint returns metadata about a Jira issue, including account ID, issue + type ID, and project ID, based on the provided Jira issue URL.' + operationId: GetJiraIssueMetadata + parameters: + - description: The Jira issue URL. + example: https://datadoghq-sandbox-538.atlassian.net/browse/CSMSEC-103394 + in: query + name: url + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/JiraIssuesMetadataResponse' + description: OK + '400': + content: + application/json: + schema: + $ref: '#/components/schemas/JSONAPIErrorResponse' + description: Bad Request + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/JSONAPIErrorResponse' + description: Not Found + '429': + $ref: '#/components/responses/TooManyRequestsResponse' + security: + - apiKeyAuth: [] + appKeyAuth: [] + - AuthZ: [] + summary: Get Jira issue metadata + tags: + - Security Monitoring + x-permission: + operator: OR + permissions: + - security_monitoring_findings_read + - appsec_vm_read + x-unstable: '**Note**: This endpoint is in preview and is subject to change. + + If you have any feedback, contact [Datadog support](https://docs.datadoghq.com/help/).' /api/v2/security/findings/search: post: description: 'Get a list of security findings that match a search query. [See diff --git a/docs/datadog_api_client.v2.model.rst b/docs/datadog_api_client.v2.model.rst index ca47cf72a1..63ff6b9c04 100644 --- a/docs/datadog_api_client.v2.model.rst +++ b/docs/datadog_api_client.v2.model.rst @@ -13129,6 +13129,55 @@ datadog\_api\_client.v2.model.intake\_payload\_accepted module :members: :show-inheritance: +datadog\_api\_client.v2.model.integration\_assignment\_data\_attributes\_request module +--------------------------------------------------------------------------------------- + +.. automodule:: datadog_api_client.v2.model.integration_assignment_data_attributes_request + :members: + :show-inheritance: + +datadog\_api\_client.v2.model.integration\_assignment\_data\_attributes\_request\_action module +----------------------------------------------------------------------------------------------- + +.. automodule:: datadog_api_client.v2.model.integration_assignment_data_attributes_request_action + :members: + :show-inheritance: + +datadog\_api\_client.v2.model.integration\_assignment\_data\_attributes\_request\_assignment module +--------------------------------------------------------------------------------------------------- + +.. automodule:: datadog_api_client.v2.model.integration_assignment_data_attributes_request_assignment + :members: + :show-inheritance: + +datadog\_api\_client.v2.model.integration\_assignment\_data\_attributes\_request\_type module +--------------------------------------------------------------------------------------------- + +.. automodule:: datadog_api_client.v2.model.integration_assignment_data_attributes_request_type + :members: + :show-inheritance: + +datadog\_api\_client.v2.model.integration\_assignment\_data\_request module +--------------------------------------------------------------------------- + +.. automodule:: datadog_api_client.v2.model.integration_assignment_data_request + :members: + :show-inheritance: + +datadog\_api\_client.v2.model.integration\_assignment\_request module +--------------------------------------------------------------------- + +.. automodule:: datadog_api_client.v2.model.integration_assignment_request + :members: + :show-inheritance: + +datadog\_api\_client.v2.model.integration\_assignment\_type module +------------------------------------------------------------------ + +.. automodule:: datadog_api_client.v2.model.integration_assignment_type + :members: + :show-inheritance: + datadog\_api\_client.v2.model.integration\_incident module ---------------------------------------------------------- @@ -13815,6 +13864,62 @@ datadog\_api\_client.v2.model.jira\_issue module :members: :show-inheritance: +datadog\_api\_client.v2.model.jira\_issue\_custom\_fields module +---------------------------------------------------------------- + +.. automodule:: datadog_api_client.v2.model.jira_issue_custom_fields + :members: + :show-inheritance: + +datadog\_api\_client.v2.model.jira\_issue\_data\_attributes\_request module +--------------------------------------------------------------------------- + +.. automodule:: datadog_api_client.v2.model.jira_issue_data_attributes_request + :members: + :show-inheritance: + +datadog\_api\_client.v2.model.jira\_issue\_data\_attributes\_request\_mode module +--------------------------------------------------------------------------------- + +.. automodule:: datadog_api_client.v2.model.jira_issue_data_attributes_request_mode + :members: + :show-inheritance: + +datadog\_api\_client.v2.model.jira\_issue\_data\_meta module +------------------------------------------------------------ + +.. automodule:: datadog_api_client.v2.model.jira_issue_data_meta + :members: + :show-inheritance: + +datadog\_api\_client.v2.model.jira\_issue\_data\_request module +--------------------------------------------------------------- + +.. automodule:: datadog_api_client.v2.model.jira_issue_data_request + :members: + :show-inheritance: + +datadog\_api\_client.v2.model.jira\_issue\_finding module +--------------------------------------------------------- + +.. automodule:: datadog_api_client.v2.model.jira_issue_finding + :members: + :show-inheritance: + +datadog\_api\_client.v2.model.jira\_issue\_finding\_id module +------------------------------------------------------------- + +.. automodule:: datadog_api_client.v2.model.jira_issue_finding_id + :members: + :show-inheritance: + +datadog\_api\_client.v2.model.jira\_issue\_request module +--------------------------------------------------------- + +.. automodule:: datadog_api_client.v2.model.jira_issue_request + :members: + :show-inheritance: + datadog\_api\_client.v2.model.jira\_issue\_result module -------------------------------------------------------- @@ -13913,6 +14018,13 @@ datadog\_api\_client.v2.model.jira\_issue\_templates\_response module :members: :show-inheritance: +datadog\_api\_client.v2.model.jira\_issue\_type module +------------------------------------------------------ + +.. automodule:: datadog_api_client.v2.model.jira_issue_type + :members: + :show-inheritance: + datadog\_api\_client.v2.model.jira\_issues\_data\_type module ------------------------------------------------------------- @@ -13920,6 +14032,34 @@ datadog\_api\_client.v2.model.jira\_issues\_data\_type module :members: :show-inheritance: +datadog\_api\_client.v2.model.jira\_issues\_metadata\_data\_attributes\_response module +--------------------------------------------------------------------------------------- + +.. automodule:: datadog_api_client.v2.model.jira_issues_metadata_data_attributes_response + :members: + :show-inheritance: + +datadog\_api\_client.v2.model.jira\_issues\_metadata\_data\_response module +--------------------------------------------------------------------------- + +.. automodule:: datadog_api_client.v2.model.jira_issues_metadata_data_response + :members: + :show-inheritance: + +datadog\_api\_client.v2.model.jira\_issues\_metadata\_response module +--------------------------------------------------------------------- + +.. automodule:: datadog_api_client.v2.model.jira_issues_metadata_response + :members: + :show-inheritance: + +datadog\_api\_client.v2.model.jira\_issues\_metadata\_type module +----------------------------------------------------------------- + +.. automodule:: datadog_api_client.v2.model.jira_issues_metadata_type + :members: + :show-inheritance: + datadog\_api\_client.v2.model.job\_create\_response module ---------------------------------------------------------- diff --git a/examples/v2/security-monitoring/AssignIntegrationIssues.py b/examples/v2/security-monitoring/AssignIntegrationIssues.py new file mode 100644 index 0000000000..12af733d2b --- /dev/null +++ b/examples/v2/security-monitoring/AssignIntegrationIssues.py @@ -0,0 +1,45 @@ +""" +Assign or un-assign Jira issues to security findings returns "Accepted" response +""" + +from datadog_api_client import ApiClient, Configuration +from datadog_api_client.v2.api.security_monitoring_api import SecurityMonitoringApi +from datadog_api_client.v2.model.integration_assignment_data_attributes_request import ( + IntegrationAssignmentDataAttributesRequest, +) +from datadog_api_client.v2.model.integration_assignment_data_attributes_request_action import ( + IntegrationAssignmentDataAttributesRequestAction, +) +from datadog_api_client.v2.model.integration_assignment_data_attributes_request_assignment import ( + IntegrationAssignmentDataAttributesRequestAssignment, +) +from datadog_api_client.v2.model.integration_assignment_data_attributes_request_type import ( + IntegrationAssignmentDataAttributesRequestType, +) +from datadog_api_client.v2.model.integration_assignment_data_request import IntegrationAssignmentDataRequest +from datadog_api_client.v2.model.integration_assignment_request import IntegrationAssignmentRequest +from datadog_api_client.v2.model.integration_assignment_type import IntegrationAssignmentType + +body = IntegrationAssignmentRequest( + data=IntegrationAssignmentDataRequest( + attributes=IntegrationAssignmentDataAttributesRequest( + action=IntegrationAssignmentDataAttributesRequestAction.ASSIGN, + assignment=IntegrationAssignmentDataAttributesRequestAssignment( + jira={ + "https://jira.example.com/browse/SEC-123": [ + "MDBjMzdhYzgyNGZkZGJiZmY0OGNmYjNiMWQ2ODY0YmR-OTc0YjMzNjM1Y2UyODA2YTEyNWQxYmNkZjhmODllNzg=", + ], + }, + ), + type=IntegrationAssignmentDataAttributesRequestType.FINDINGS, + ), + id="some_id", + type=IntegrationAssignmentType.ISSUE_ASSIGNMENT, + ), +) + +configuration = Configuration() +configuration.unstable_operations["assign_integration_issues"] = True +with ApiClient(configuration) as api_client: + api_instance = SecurityMonitoringApi(api_client) + api_instance.assign_integration_issues(body=body) diff --git a/examples/v2/security-monitoring/CreateJiraIssue.py b/examples/v2/security-monitoring/CreateJiraIssue.py new file mode 100644 index 0000000000..d5438276be --- /dev/null +++ b/examples/v2/security-monitoring/CreateJiraIssue.py @@ -0,0 +1,77 @@ +""" +Create Jira issues for security findings returns "Accepted" response +""" + +from datadog_api_client import ApiClient, Configuration +from datadog_api_client.v2.api.security_monitoring_api import SecurityMonitoringApi +from datadog_api_client.v2.model.finding_status import FindingStatus +from datadog_api_client.v2.model.jira_issue_data_attributes_request import JiraIssueDataAttributesRequest +from datadog_api_client.v2.model.jira_issue_data_attributes_request_mode import JiraIssueDataAttributesRequestMode +from datadog_api_client.v2.model.jira_issue_data_meta import JiraIssueDataMeta +from datadog_api_client.v2.model.jira_issue_data_request import JiraIssueDataRequest +from datadog_api_client.v2.model.jira_issue_finding import JiraIssueFinding +from datadog_api_client.v2.model.jira_issue_finding_id import JiraIssueFindingId +from datadog_api_client.v2.model.jira_issue_request import JiraIssueRequest +from datadog_api_client.v2.model.jira_issue_type import JiraIssueType + +body = JiraIssueRequest( + data=JiraIssueDataRequest( + attributes=JiraIssueDataAttributesRequest( + account_id="f7ccdf99-0e22-4378-bdf9-03fde5379fea", + fields=None, + issue_type="story", + issuetype_id="1235", + mode=JiraIssueDataAttributesRequestMode.SINGLE, + project_id="1234", + project_key="SEC", + ), + id="ID", + meta=JiraIssueDataMeta( + findings=[ + JiraIssueFinding( + description="Description", + ids=[ + JiraIssueFindingId( + discovered=123213123, + id="afa-afa-hze", + resource="Resource", + tags="akjasd:asdsad", + ), + ], + impacted=1, + references="", + remediation="Remediation", + severity=FindingStatus.CRITICAL, + title="Title", + type="ciem", + ), + ], + vulnerabilities=[ + JiraIssueFinding( + description="Description", + ids=[ + JiraIssueFindingId( + discovered=123213123, + id="afa-afa-hze", + resource="Resource", + tags="akjasd:asdsad", + ), + ], + impacted=1, + references="", + remediation="Remediation", + severity=FindingStatus.CRITICAL, + title="Title", + type="ciem", + ), + ], + ), + type=JiraIssueType.JIRA_ISSUE, + ), +) + +configuration = Configuration() +configuration.unstable_operations["create_jira_issue"] = True +with ApiClient(configuration) as api_client: + api_instance = SecurityMonitoringApi(api_client) + api_instance.create_jira_issue(body=body) diff --git a/examples/v2/security-monitoring/GetJiraIssueMetadata.py b/examples/v2/security-monitoring/GetJiraIssueMetadata.py new file mode 100644 index 0000000000..6d34e7915d --- /dev/null +++ b/examples/v2/security-monitoring/GetJiraIssueMetadata.py @@ -0,0 +1,16 @@ +""" +Get Jira issue metadata returns "OK" response +""" + +from datadog_api_client import ApiClient, Configuration +from datadog_api_client.v2.api.security_monitoring_api import SecurityMonitoringApi + +configuration = Configuration() +configuration.unstable_operations["get_jira_issue_metadata"] = True +with ApiClient(configuration) as api_client: + api_instance = SecurityMonitoringApi(api_client) + response = api_instance.get_jira_issue_metadata( + url="url", + ) + + print(response) diff --git a/src/datadog_api_client/configuration.py b/src/datadog_api_client/configuration.py index f715f758fc..69da957177 100644 --- a/src/datadog_api_client/configuration.py +++ b/src/datadog_api_client/configuration.py @@ -267,12 +267,15 @@ def __init__( "v2.list_apis": False, "v2.update_open_api": False, "v2.activate_content_pack": False, + "v2.assign_integration_issues": False, "v2.cancel_threat_hunting_job": False, "v2.convert_job_result_to_signal": False, + "v2.create_jira_issue": False, "v2.deactivate_content_pack": False, "v2.delete_threat_hunting_job": False, "v2.get_content_packs_states": False, "v2.get_finding": False, + "v2.get_jira_issue_metadata": False, "v2.get_rule_version_history": False, "v2.get_secrets_rules": False, "v2.get_security_monitoring_histsignal": False, diff --git a/src/datadog_api_client/v2/api/security_monitoring_api.py b/src/datadog_api_client/v2/api/security_monitoring_api.py index a60c987ce6..9d51d8b5b1 100644 --- a/src/datadog_api_client/v2/api/security_monitoring_api.py +++ b/src/datadog_api_client/v2/api/security_monitoring_api.py @@ -22,6 +22,8 @@ from datadog_api_client.v2.model.get_custom_framework_response import GetCustomFrameworkResponse from datadog_api_client.v2.model.update_custom_framework_response import UpdateCustomFrameworkResponse from datadog_api_client.v2.model.update_custom_framework_request import UpdateCustomFrameworkRequest +from datadog_api_client.v2.model.integration_assignment_request import IntegrationAssignmentRequest +from datadog_api_client.v2.model.jira_issue_request import JiraIssueRequest from datadog_api_client.v2.model.get_resource_evaluation_filters_response import GetResourceEvaluationFiltersResponse from datadog_api_client.v2.model.update_resource_evaluation_filters_response import ( UpdateResourceEvaluationFiltersResponse, @@ -47,6 +49,7 @@ from datadog_api_client.v2.model.attach_case_request import AttachCaseRequest from datadog_api_client.v2.model.attach_jira_issue_request import AttachJiraIssueRequest from datadog_api_client.v2.model.create_jira_issue_request_array import CreateJiraIssueRequestArray +from datadog_api_client.v2.model.jira_issues_metadata_response import JiraIssuesMetadataResponse from datadog_api_client.v2.model.security_findings_search_request import SecurityFindingsSearchRequest from datadog_api_client.v2.model.list_assets_sbo_ms_response import ListAssetsSBOMsResponse from datadog_api_client.v2.model.asset_type import AssetType @@ -180,6 +183,26 @@ def __init__(self, api_client=None): api_client=api_client, ) + self._assign_integration_issues_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cloud_security_management/integrations/assign", + "operation_id": "assign_integration_issues", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (IntegrationAssignmentRequest,), + "location": "body", + }, + }, + headers_map={"accept": ["*/*"], "content_type": ["application/json"]}, + api_client=api_client, + ) + self._attach_case_endpoint = _Endpoint( settings={ "response_type": (FindingCaseResponse,), @@ -372,6 +395,26 @@ def __init__(self, api_client=None): api_client=api_client, ) + self._create_jira_issue_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cloud_security_management/jira_issues", + "operation_id": "create_jira_issue", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (JiraIssueRequest,), + "location": "body", + }, + }, + headers_map={"accept": ["*/*"], "content_type": ["application/json"]}, + api_client=api_client, + ) + self._create_jira_issues_endpoint = _Endpoint( settings={ "response_type": (FindingCaseResponseArray,), @@ -922,6 +965,29 @@ def __init__(self, api_client=None): api_client=api_client, ) + self._get_jira_issue_metadata_endpoint = _Endpoint( + settings={ + "response_type": (JiraIssuesMetadataResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security/findings/jira_issues/metadata", + "operation_id": "get_jira_issue_metadata", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "url": { + "required": True, + "openapi_types": (str,), + "attribute": "url", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + self._get_resource_evaluation_filters_endpoint = _Endpoint( settings={ "response_type": (GetResourceEvaluationFiltersResponse,), @@ -2691,6 +2757,23 @@ def activate_content_pack( return self._activate_content_pack_endpoint.call_with_http_info(**kwargs) + def assign_integration_issues( + self, + body: IntegrationAssignmentRequest, + ) -> None: + """Assign or un-assign Jira issues to security findings. + + Assign or un-assign Jira issues to security findings or vulnerabilities. + This endpoint allows you to associate existing Jira issues with security findings or vulnerabilities, or remove such associations. + + :type body: IntegrationAssignmentRequest + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._assign_integration_issues_endpoint.call_with_http_info(**kwargs) + def attach_case( self, case_id: str, @@ -2865,6 +2948,23 @@ def create_custom_framework( return self._create_custom_framework_endpoint.call_with_http_info(**kwargs) + def create_jira_issue( + self, + body: JiraIssueRequest, + ) -> None: + """Create Jira issues for security findings. + + Create Jira issues for security findings or vulnerabilities. + This endpoint creates new Jira issues based on the provided security findings or vulnerability information. The operation is asynchronous and returns immediately with a 202 Accepted status. + + :type body: JiraIssueRequest + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_jira_issue_endpoint.call_with_http_info(**kwargs) + def create_jira_issues( self, body: CreateJiraIssueRequestArray, @@ -3312,6 +3412,24 @@ def get_finding( return self._get_finding_endpoint.call_with_http_info(**kwargs) + def get_jira_issue_metadata( + self, + url: str, + ) -> JiraIssuesMetadataResponse: + """Get Jira issue metadata. + + Retrieve metadata for a Jira issue. + This endpoint returns metadata about a Jira issue, including account ID, issue type ID, and project ID, based on the provided Jira issue URL. + + :param url: The Jira issue URL. + :type url: str + :rtype: JiraIssuesMetadataResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["url"] = url + + return self._get_jira_issue_metadata_endpoint.call_with_http_info(**kwargs) + def get_resource_evaluation_filters( self, *, diff --git a/src/datadog_api_client/v2/model/integration_assignment_data_attributes_request.py b/src/datadog_api_client/v2/model/integration_assignment_data_attributes_request.py new file mode 100644 index 0000000000..118453f1d4 --- /dev/null +++ b/src/datadog_api_client/v2/model/integration_assignment_data_attributes_request.py @@ -0,0 +1,74 @@ +# Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. +# This product includes software developed at Datadog (https://www.datadoghq.com/). +# Copyright 2019-Present Datadog, Inc. +from __future__ import annotations + +from typing import TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ModelNormal, + cached_property, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.integration_assignment_data_attributes_request_action import ( + IntegrationAssignmentDataAttributesRequestAction, + ) + from datadog_api_client.v2.model.integration_assignment_data_attributes_request_assignment import ( + IntegrationAssignmentDataAttributesRequestAssignment, + ) + from datadog_api_client.v2.model.integration_assignment_data_attributes_request_type import ( + IntegrationAssignmentDataAttributesRequestType, + ) + + +class IntegrationAssignmentDataAttributesRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.integration_assignment_data_attributes_request_action import ( + IntegrationAssignmentDataAttributesRequestAction, + ) + from datadog_api_client.v2.model.integration_assignment_data_attributes_request_assignment import ( + IntegrationAssignmentDataAttributesRequestAssignment, + ) + from datadog_api_client.v2.model.integration_assignment_data_attributes_request_type import ( + IntegrationAssignmentDataAttributesRequestType, + ) + + return { + "action": (IntegrationAssignmentDataAttributesRequestAction,), + "assignment": (IntegrationAssignmentDataAttributesRequestAssignment,), + "type": (IntegrationAssignmentDataAttributesRequestType,), + } + + attribute_map = { + "action": "action", + "assignment": "assignment", + "type": "type", + } + + def __init__( + self_, + action: IntegrationAssignmentDataAttributesRequestAction, + assignment: IntegrationAssignmentDataAttributesRequestAssignment, + type: IntegrationAssignmentDataAttributesRequestType, + **kwargs, + ): + """ + + + :param action: Action to perform on the assignment. Can be "assign" or "un_assign". + :type action: IntegrationAssignmentDataAttributesRequestAction + + :param assignment: + :type assignment: IntegrationAssignmentDataAttributesRequestAssignment + + :param type: Type of the security issues. Can be "findings" or "vulnerabilities". + :type type: IntegrationAssignmentDataAttributesRequestType + """ + super().__init__(kwargs) + + self_.action = action + self_.assignment = assignment + self_.type = type diff --git a/src/datadog_api_client/v2/model/integration_assignment_data_attributes_request_action.py b/src/datadog_api_client/v2/model/integration_assignment_data_attributes_request_action.py new file mode 100644 index 0000000000..73544ae1b3 --- /dev/null +++ b/src/datadog_api_client/v2/model/integration_assignment_data_attributes_request_action.py @@ -0,0 +1,40 @@ +# Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. +# This product includes software developed at Datadog (https://www.datadoghq.com/). +# Copyright 2019-Present Datadog, Inc. +from __future__ import annotations + + +from datadog_api_client.model_utils import ( + ModelSimple, + cached_property, +) + +from typing import ClassVar + + +class IntegrationAssignmentDataAttributesRequestAction(ModelSimple): + """ + Action to perform on the assignment. Can be "assign" or "un_assign". + + :param value: Must be one of ["assign", "un_assign"]. + :type value: str + """ + + allowed_values = { + "assign", + "un_assign", + } + ASSIGN: ClassVar["IntegrationAssignmentDataAttributesRequestAction"] + UN_ASSIGN: ClassVar["IntegrationAssignmentDataAttributesRequestAction"] + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } + + +IntegrationAssignmentDataAttributesRequestAction.ASSIGN = IntegrationAssignmentDataAttributesRequestAction("assign") +IntegrationAssignmentDataAttributesRequestAction.UN_ASSIGN = IntegrationAssignmentDataAttributesRequestAction( + "un_assign" +) diff --git a/src/datadog_api_client/v2/model/integration_assignment_data_attributes_request_assignment.py b/src/datadog_api_client/v2/model/integration_assignment_data_attributes_request_assignment.py new file mode 100644 index 0000000000..e2a693accc --- /dev/null +++ b/src/datadog_api_client/v2/model/integration_assignment_data_attributes_request_assignment.py @@ -0,0 +1,34 @@ +# Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. +# This product includes software developed at Datadog (https://www.datadoghq.com/). +# Copyright 2019-Present Datadog, Inc. +from __future__ import annotations + +from typing import Dict, List + +from datadog_api_client.model_utils import ( + ModelNormal, + cached_property, +) + + +class IntegrationAssignmentDataAttributesRequestAssignment(ModelNormal): + @cached_property + def openapi_types(_): + return { + "jira": ({str: ([str],)},), + } + + attribute_map = { + "jira": "jira", + } + + def __init__(self_, jira: Dict[str, List[str]], **kwargs): + """ + + + :param jira: Map of Jira issue URLs to lists of finding IDs. + :type jira: {str: ([str],)} + """ + super().__init__(kwargs) + + self_.jira = jira diff --git a/src/datadog_api_client/v2/model/integration_assignment_data_attributes_request_type.py b/src/datadog_api_client/v2/model/integration_assignment_data_attributes_request_type.py new file mode 100644 index 0000000000..08535587e9 --- /dev/null +++ b/src/datadog_api_client/v2/model/integration_assignment_data_attributes_request_type.py @@ -0,0 +1,40 @@ +# Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. +# This product includes software developed at Datadog (https://www.datadoghq.com/). +# Copyright 2019-Present Datadog, Inc. +from __future__ import annotations + + +from datadog_api_client.model_utils import ( + ModelSimple, + cached_property, +) + +from typing import ClassVar + + +class IntegrationAssignmentDataAttributesRequestType(ModelSimple): + """ + Type of the security issues. Can be "findings" or "vulnerabilities". + + :param value: Must be one of ["findings", "vulnerabilities"]. + :type value: str + """ + + allowed_values = { + "findings", + "vulnerabilities", + } + FINDINGS: ClassVar["IntegrationAssignmentDataAttributesRequestType"] + VULNERABILITIES: ClassVar["IntegrationAssignmentDataAttributesRequestType"] + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } + + +IntegrationAssignmentDataAttributesRequestType.FINDINGS = IntegrationAssignmentDataAttributesRequestType("findings") +IntegrationAssignmentDataAttributesRequestType.VULNERABILITIES = IntegrationAssignmentDataAttributesRequestType( + "vulnerabilities" +) diff --git a/src/datadog_api_client/v2/model/integration_assignment_data_request.py b/src/datadog_api_client/v2/model/integration_assignment_data_request.py new file mode 100644 index 0000000000..a4e2e624b1 --- /dev/null +++ b/src/datadog_api_client/v2/model/integration_assignment_data_request.py @@ -0,0 +1,64 @@ +# Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. +# This product includes software developed at Datadog (https://www.datadoghq.com/). +# Copyright 2019-Present Datadog, Inc. +from __future__ import annotations + +from typing import TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ModelNormal, + cached_property, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.integration_assignment_data_attributes_request import ( + IntegrationAssignmentDataAttributesRequest, + ) + from datadog_api_client.v2.model.integration_assignment_type import IntegrationAssignmentType + + +class IntegrationAssignmentDataRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.integration_assignment_data_attributes_request import ( + IntegrationAssignmentDataAttributesRequest, + ) + from datadog_api_client.v2.model.integration_assignment_type import IntegrationAssignmentType + + return { + "attributes": (IntegrationAssignmentDataAttributesRequest,), + "id": (str,), + "type": (IntegrationAssignmentType,), + } + + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__( + self_, + attributes: IntegrationAssignmentDataAttributesRequest, + id: str, + type: IntegrationAssignmentType, + **kwargs, + ): + """ + + + :param attributes: + :type attributes: IntegrationAssignmentDataAttributesRequest + + :param id: Unique identifier of the integration assignment. + :type id: str + + :param type: Integration assignment resource type. + :type type: IntegrationAssignmentType + """ + super().__init__(kwargs) + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/src/datadog_api_client/v2/model/integration_assignment_request.py b/src/datadog_api_client/v2/model/integration_assignment_request.py new file mode 100644 index 0000000000..f89049d89a --- /dev/null +++ b/src/datadog_api_client/v2/model/integration_assignment_request.py @@ -0,0 +1,40 @@ +# Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. +# This product includes software developed at Datadog (https://www.datadoghq.com/). +# Copyright 2019-Present Datadog, Inc. +from __future__ import annotations + +from typing import TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ModelNormal, + cached_property, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.integration_assignment_data_request import IntegrationAssignmentDataRequest + + +class IntegrationAssignmentRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.integration_assignment_data_request import IntegrationAssignmentDataRequest + + return { + "data": (IntegrationAssignmentDataRequest,), + } + + attribute_map = { + "data": "data", + } + + def __init__(self_, data: IntegrationAssignmentDataRequest, **kwargs): + """ + + + :param data: + :type data: IntegrationAssignmentDataRequest + """ + super().__init__(kwargs) + + self_.data = data diff --git a/src/datadog_api_client/v2/model/integration_assignment_type.py b/src/datadog_api_client/v2/model/integration_assignment_type.py new file mode 100644 index 0000000000..614e518af2 --- /dev/null +++ b/src/datadog_api_client/v2/model/integration_assignment_type.py @@ -0,0 +1,35 @@ +# Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. +# This product includes software developed at Datadog (https://www.datadoghq.com/). +# Copyright 2019-Present Datadog, Inc. +from __future__ import annotations + + +from datadog_api_client.model_utils import ( + ModelSimple, + cached_property, +) + +from typing import ClassVar + + +class IntegrationAssignmentType(ModelSimple): + """ + Integration assignment resource type. + + :param value: If omitted defaults to "issue_assignment". Must be one of ["issue_assignment"]. + :type value: str + """ + + allowed_values = { + "issue_assignment", + } + ISSUE_ASSIGNMENT: ClassVar["IntegrationAssignmentType"] + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } + + +IntegrationAssignmentType.ISSUE_ASSIGNMENT = IntegrationAssignmentType("issue_assignment") diff --git a/src/datadog_api_client/v2/model/jira_issue_custom_fields.py b/src/datadog_api_client/v2/model/jira_issue_custom_fields.py new file mode 100644 index 0000000000..aaf9632145 --- /dev/null +++ b/src/datadog_api_client/v2/model/jira_issue_custom_fields.py @@ -0,0 +1,19 @@ +# Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. +# This product includes software developed at Datadog (https://www.datadoghq.com/). +# Copyright 2019-Present Datadog, Inc. +from __future__ import annotations + + +from datadog_api_client.model_utils import ( + ModelNormal, +) + + +class JiraIssueCustomFields(ModelNormal): + _nullable = True + + def __init__(self_, **kwargs): + """ + Custom fields for the Jira issue. + """ + super().__init__(kwargs) diff --git a/src/datadog_api_client/v2/model/jira_issue_data_attributes_request.py b/src/datadog_api_client/v2/model/jira_issue_data_attributes_request.py new file mode 100644 index 0000000000..9d3d37f0f0 --- /dev/null +++ b/src/datadog_api_client/v2/model/jira_issue_data_attributes_request.py @@ -0,0 +1,95 @@ +# Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. +# This product includes software developed at Datadog (https://www.datadoghq.com/). +# Copyright 2019-Present Datadog, Inc. +from __future__ import annotations + +from typing import Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ModelNormal, + cached_property, + none_type, + unset, + UnsetType, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.jira_issue_custom_fields import JiraIssueCustomFields + from datadog_api_client.v2.model.jira_issue_data_attributes_request_mode import JiraIssueDataAttributesRequestMode + + +class JiraIssueDataAttributesRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.jira_issue_custom_fields import JiraIssueCustomFields + from datadog_api_client.v2.model.jira_issue_data_attributes_request_mode import ( + JiraIssueDataAttributesRequestMode, + ) + + return { + "account_id": (str,), + "fields": (JiraIssueCustomFields,), + "issue_type": (str,), + "issuetype_id": (str,), + "mode": (JiraIssueDataAttributesRequestMode,), + "project_id": (str,), + "project_key": (str,), + } + + attribute_map = { + "account_id": "account_id", + "fields": "fields", + "issue_type": "issue_type", + "issuetype_id": "issuetype_id", + "mode": "mode", + "project_id": "project_id", + "project_key": "project_key", + } + + def __init__( + self_, + account_id: str, + issue_type: str, + issuetype_id: str, + project_id: str, + project_key: str, + fields: Union[JiraIssueCustomFields, none_type, UnsetType] = unset, + mode: Union[JiraIssueDataAttributesRequestMode, UnsetType] = unset, + **kwargs, + ): + """ + + + :param account_id: Jira account identifier. + :type account_id: str + + :param fields: Custom fields for the Jira issue. + :type fields: JiraIssueCustomFields, none_type, optional + + :param issue_type: Jira issue type name. + :type issue_type: str + + :param issuetype_id: Jira issue type identifier. + :type issuetype_id: str + + :param mode: Mode for creating the Jira issue. Can be "single" or "multiple". + :type mode: JiraIssueDataAttributesRequestMode, optional + + :param project_id: Jira project identifier. + :type project_id: str + + :param project_key: Jira project key. + :type project_key: str + """ + if fields is not unset: + kwargs["fields"] = fields + if mode is not unset: + kwargs["mode"] = mode + super().__init__(kwargs) + + self_.account_id = account_id + self_.issue_type = issue_type + self_.issuetype_id = issuetype_id + self_.project_id = project_id + self_.project_key = project_key diff --git a/src/datadog_api_client/v2/model/jira_issue_data_attributes_request_mode.py b/src/datadog_api_client/v2/model/jira_issue_data_attributes_request_mode.py new file mode 100644 index 0000000000..e9916efc8a --- /dev/null +++ b/src/datadog_api_client/v2/model/jira_issue_data_attributes_request_mode.py @@ -0,0 +1,38 @@ +# Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. +# This product includes software developed at Datadog (https://www.datadoghq.com/). +# Copyright 2019-Present Datadog, Inc. +from __future__ import annotations + + +from datadog_api_client.model_utils import ( + ModelSimple, + cached_property, +) + +from typing import ClassVar + + +class JiraIssueDataAttributesRequestMode(ModelSimple): + """ + Mode for creating the Jira issue. Can be "single" or "multiple". + + :param value: Must be one of ["single", "multiple"]. + :type value: str + """ + + allowed_values = { + "single", + "multiple", + } + SINGLE: ClassVar["JiraIssueDataAttributesRequestMode"] + MULTIPLE: ClassVar["JiraIssueDataAttributesRequestMode"] + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } + + +JiraIssueDataAttributesRequestMode.SINGLE = JiraIssueDataAttributesRequestMode("single") +JiraIssueDataAttributesRequestMode.MULTIPLE = JiraIssueDataAttributesRequestMode("multiple") diff --git a/src/datadog_api_client/v2/model/jira_issue_data_meta.py b/src/datadog_api_client/v2/model/jira_issue_data_meta.py new file mode 100644 index 0000000000..1c8b38bf66 --- /dev/null +++ b/src/datadog_api_client/v2/model/jira_issue_data_meta.py @@ -0,0 +1,54 @@ +# Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. +# This product includes software developed at Datadog (https://www.datadoghq.com/). +# Copyright 2019-Present Datadog, Inc. +from __future__ import annotations + +from typing import List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ModelNormal, + cached_property, + unset, + UnsetType, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.jira_issue_finding import JiraIssueFinding + + +class JiraIssueDataMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.jira_issue_finding import JiraIssueFinding + + return { + "findings": ([JiraIssueFinding],), + "vulnerabilities": ([JiraIssueFinding],), + } + + attribute_map = { + "findings": "findings", + "vulnerabilities": "vulnerabilities", + } + + def __init__( + self_, + findings: Union[List[JiraIssueFinding], UnsetType] = unset, + vulnerabilities: Union[List[JiraIssueFinding], UnsetType] = unset, + **kwargs, + ): + """ + + + :param findings: + :type findings: [JiraIssueFinding], optional + + :param vulnerabilities: + :type vulnerabilities: [JiraIssueFinding], optional + """ + if findings is not unset: + kwargs["findings"] = findings + if vulnerabilities is not unset: + kwargs["vulnerabilities"] = vulnerabilities + super().__init__(kwargs) diff --git a/src/datadog_api_client/v2/model/jira_issue_data_request.py b/src/datadog_api_client/v2/model/jira_issue_data_request.py new file mode 100644 index 0000000000..fb690343af --- /dev/null +++ b/src/datadog_api_client/v2/model/jira_issue_data_request.py @@ -0,0 +1,69 @@ +# Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. +# This product includes software developed at Datadog (https://www.datadoghq.com/). +# Copyright 2019-Present Datadog, Inc. +from __future__ import annotations + +from typing import TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ModelNormal, + cached_property, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.jira_issue_data_attributes_request import JiraIssueDataAttributesRequest + from datadog_api_client.v2.model.jira_issue_data_meta import JiraIssueDataMeta + from datadog_api_client.v2.model.jira_issue_type import JiraIssueType + + +class JiraIssueDataRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.jira_issue_data_attributes_request import JiraIssueDataAttributesRequest + from datadog_api_client.v2.model.jira_issue_data_meta import JiraIssueDataMeta + from datadog_api_client.v2.model.jira_issue_type import JiraIssueType + + return { + "attributes": (JiraIssueDataAttributesRequest,), + "id": (str,), + "meta": (JiraIssueDataMeta,), + "type": (JiraIssueType,), + } + + attribute_map = { + "attributes": "attributes", + "id": "id", + "meta": "meta", + "type": "type", + } + + def __init__( + self_, + attributes: JiraIssueDataAttributesRequest, + id: str, + meta: JiraIssueDataMeta, + type: JiraIssueType, + **kwargs, + ): + """ + + + :param attributes: + :type attributes: JiraIssueDataAttributesRequest + + :param id: Unique identifier of the Jira issue request. + :type id: str + + :param meta: + :type meta: JiraIssueDataMeta + + :param type: Jira issue resource type. + :type type: JiraIssueType + """ + super().__init__(kwargs) + + self_.attributes = attributes + self_.id = id + self_.meta = meta + self_.type = type diff --git a/src/datadog_api_client/v2/model/jira_issue_finding.py b/src/datadog_api_client/v2/model/jira_issue_finding.py new file mode 100644 index 0000000000..3b0514324d --- /dev/null +++ b/src/datadog_api_client/v2/model/jira_issue_finding.py @@ -0,0 +1,98 @@ +# Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. +# This product includes software developed at Datadog (https://www.datadoghq.com/). +# Copyright 2019-Present Datadog, Inc. +from __future__ import annotations + +from typing import List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ModelNormal, + cached_property, + unset, + UnsetType, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.jira_issue_finding_id import JiraIssueFindingId + from datadog_api_client.v2.model.finding_status import FindingStatus + + +class JiraIssueFinding(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.jira_issue_finding_id import JiraIssueFindingId + from datadog_api_client.v2.model.finding_status import FindingStatus + + return { + "description": (str,), + "ids": ([JiraIssueFindingId],), + "impacted": (int,), + "references": (str,), + "remediation": (str,), + "severity": (FindingStatus,), + "title": (str,), + "type": (str,), + } + + attribute_map = { + "description": "description", + "ids": "ids", + "impacted": "impacted", + "references": "references", + "remediation": "remediation", + "severity": "severity", + "title": "title", + "type": "type", + } + + def __init__( + self_, + description: str, + ids: List[JiraIssueFindingId], + references: str, + remediation: str, + severity: FindingStatus, + title: str, + type: str, + impacted: Union[int, UnsetType] = unset, + **kwargs, + ): + """ + + + :param description: Description of the finding. + :type description: str + + :param ids: + :type ids: [JiraIssueFindingId] + + :param impacted: Number of impacted resources. + :type impacted: int, optional + + :param references: References for the finding. + :type references: str + + :param remediation: Remediation instructions for the finding. + :type remediation: str + + :param severity: The status of the finding. + :type severity: FindingStatus + + :param title: Title of the finding. + :type title: str + + :param type: Type of the finding. + :type type: str + """ + if impacted is not unset: + kwargs["impacted"] = impacted + super().__init__(kwargs) + + self_.description = description + self_.ids = ids + self_.references = references + self_.remediation = remediation + self_.severity = severity + self_.title = title + self_.type = type diff --git a/src/datadog_api_client/v2/model/jira_issue_finding_id.py b/src/datadog_api_client/v2/model/jira_issue_finding_id.py new file mode 100644 index 0000000000..848d61e94f --- /dev/null +++ b/src/datadog_api_client/v2/model/jira_issue_finding_id.py @@ -0,0 +1,51 @@ +# Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. +# This product includes software developed at Datadog (https://www.datadoghq.com/). +# Copyright 2019-Present Datadog, Inc. +from __future__ import annotations + + +from datadog_api_client.model_utils import ( + ModelNormal, + cached_property, +) + + +class JiraIssueFindingId(ModelNormal): + @cached_property + def openapi_types(_): + return { + "discovered": (int,), + "id": (str,), + "resource": (str,), + "tags": (str,), + } + + attribute_map = { + "discovered": "discovered", + "id": "id", + "resource": "resource", + "tags": "tags", + } + + def __init__(self_, discovered: int, id: str, resource: str, tags: str, **kwargs): + """ + + + :param discovered: Timestamp when the finding was discovered. + :type discovered: int + + :param id: Identifier of the finding. + :type id: str + + :param resource: Resource associated with the finding. + :type resource: str + + :param tags: Tags associated with the finding. + :type tags: str + """ + super().__init__(kwargs) + + self_.discovered = discovered + self_.id = id + self_.resource = resource + self_.tags = tags diff --git a/src/datadog_api_client/v2/model/jira_issue_request.py b/src/datadog_api_client/v2/model/jira_issue_request.py new file mode 100644 index 0000000000..8e3bb422fa --- /dev/null +++ b/src/datadog_api_client/v2/model/jira_issue_request.py @@ -0,0 +1,40 @@ +# Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. +# This product includes software developed at Datadog (https://www.datadoghq.com/). +# Copyright 2019-Present Datadog, Inc. +from __future__ import annotations + +from typing import TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ModelNormal, + cached_property, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.jira_issue_data_request import JiraIssueDataRequest + + +class JiraIssueRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.jira_issue_data_request import JiraIssueDataRequest + + return { + "data": (JiraIssueDataRequest,), + } + + attribute_map = { + "data": "data", + } + + def __init__(self_, data: JiraIssueDataRequest, **kwargs): + """ + + + :param data: + :type data: JiraIssueDataRequest + """ + super().__init__(kwargs) + + self_.data = data diff --git a/src/datadog_api_client/v2/model/jira_issue_type.py b/src/datadog_api_client/v2/model/jira_issue_type.py new file mode 100644 index 0000000000..898e21bf3f --- /dev/null +++ b/src/datadog_api_client/v2/model/jira_issue_type.py @@ -0,0 +1,35 @@ +# Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. +# This product includes software developed at Datadog (https://www.datadoghq.com/). +# Copyright 2019-Present Datadog, Inc. +from __future__ import annotations + + +from datadog_api_client.model_utils import ( + ModelSimple, + cached_property, +) + +from typing import ClassVar + + +class JiraIssueType(ModelSimple): + """ + Jira issue resource type. + + :param value: If omitted defaults to "jira_issue". Must be one of ["jira_issue"]. + :type value: str + """ + + allowed_values = { + "jira_issue", + } + JIRA_ISSUE: ClassVar["JiraIssueType"] + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } + + +JiraIssueType.JIRA_ISSUE = JiraIssueType("jira_issue") diff --git a/src/datadog_api_client/v2/model/jira_issues_metadata_data_attributes_response.py b/src/datadog_api_client/v2/model/jira_issues_metadata_data_attributes_response.py new file mode 100644 index 0000000000..3bbd150e70 --- /dev/null +++ b/src/datadog_api_client/v2/model/jira_issues_metadata_data_attributes_response.py @@ -0,0 +1,45 @@ +# Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. +# This product includes software developed at Datadog (https://www.datadoghq.com/). +# Copyright 2019-Present Datadog, Inc. +from __future__ import annotations + + +from datadog_api_client.model_utils import ( + ModelNormal, + cached_property, +) + + +class JiraIssuesMetadataDataAttributesResponse(ModelNormal): + @cached_property + def openapi_types(_): + return { + "account_id": (str,), + "issue_type_id": (str,), + "project_id": (str,), + } + + attribute_map = { + "account_id": "account_id", + "issue_type_id": "issue_type_id", + "project_id": "project_id", + } + + def __init__(self_, account_id: str, issue_type_id: str, project_id: str, **kwargs): + """ + + + :param account_id: Jira account identifier. + :type account_id: str + + :param issue_type_id: Jira issue type identifier. + :type issue_type_id: str + + :param project_id: Jira project identifier. + :type project_id: str + """ + super().__init__(kwargs) + + self_.account_id = account_id + self_.issue_type_id = issue_type_id + self_.project_id = project_id diff --git a/src/datadog_api_client/v2/model/jira_issues_metadata_data_response.py b/src/datadog_api_client/v2/model/jira_issues_metadata_data_response.py new file mode 100644 index 0000000000..b9e3b722b9 --- /dev/null +++ b/src/datadog_api_client/v2/model/jira_issues_metadata_data_response.py @@ -0,0 +1,60 @@ +# Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. +# This product includes software developed at Datadog (https://www.datadoghq.com/). +# Copyright 2019-Present Datadog, Inc. +from __future__ import annotations + +from typing import TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ModelNormal, + cached_property, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.jira_issues_metadata_data_attributes_response import ( + JiraIssuesMetadataDataAttributesResponse, + ) + from datadog_api_client.v2.model.jira_issues_metadata_type import JiraIssuesMetadataType + + +class JiraIssuesMetadataDataResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.jira_issues_metadata_data_attributes_response import ( + JiraIssuesMetadataDataAttributesResponse, + ) + from datadog_api_client.v2.model.jira_issues_metadata_type import JiraIssuesMetadataType + + return { + "attributes": (JiraIssuesMetadataDataAttributesResponse,), + "id": (str,), + "type": (JiraIssuesMetadataType,), + } + + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__( + self_, attributes: JiraIssuesMetadataDataAttributesResponse, id: str, type: JiraIssuesMetadataType, **kwargs + ): + """ + + + :param attributes: + :type attributes: JiraIssuesMetadataDataAttributesResponse + + :param id: Jira issue URL. + :type id: str + + :param type: Jira issues metadata resource type. + :type type: JiraIssuesMetadataType + """ + super().__init__(kwargs) + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/src/datadog_api_client/v2/model/jira_issues_metadata_response.py b/src/datadog_api_client/v2/model/jira_issues_metadata_response.py new file mode 100644 index 0000000000..ef7a6dc6d2 --- /dev/null +++ b/src/datadog_api_client/v2/model/jira_issues_metadata_response.py @@ -0,0 +1,40 @@ +# Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. +# This product includes software developed at Datadog (https://www.datadoghq.com/). +# Copyright 2019-Present Datadog, Inc. +from __future__ import annotations + +from typing import TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ModelNormal, + cached_property, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.jira_issues_metadata_data_response import JiraIssuesMetadataDataResponse + + +class JiraIssuesMetadataResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.jira_issues_metadata_data_response import JiraIssuesMetadataDataResponse + + return { + "data": (JiraIssuesMetadataDataResponse,), + } + + attribute_map = { + "data": "data", + } + + def __init__(self_, data: JiraIssuesMetadataDataResponse, **kwargs): + """ + + + :param data: + :type data: JiraIssuesMetadataDataResponse + """ + super().__init__(kwargs) + + self_.data = data diff --git a/src/datadog_api_client/v2/model/jira_issues_metadata_type.py b/src/datadog_api_client/v2/model/jira_issues_metadata_type.py new file mode 100644 index 0000000000..70c83fe261 --- /dev/null +++ b/src/datadog_api_client/v2/model/jira_issues_metadata_type.py @@ -0,0 +1,35 @@ +# Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. +# This product includes software developed at Datadog (https://www.datadoghq.com/). +# Copyright 2019-Present Datadog, Inc. +from __future__ import annotations + + +from datadog_api_client.model_utils import ( + ModelSimple, + cached_property, +) + +from typing import ClassVar + + +class JiraIssuesMetadataType(ModelSimple): + """ + Jira issues metadata resource type. + + :param value: If omitted defaults to "jira_issues". Must be one of ["jira_issues"]. + :type value: str + """ + + allowed_values = { + "jira_issues", + } + JIRA_ISSUES: ClassVar["JiraIssuesMetadataType"] + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } + + +JiraIssuesMetadataType.JIRA_ISSUES = JiraIssuesMetadataType("jira_issues") diff --git a/src/datadog_api_client/v2/models/__init__.py b/src/datadog_api_client/v2/models/__init__.py index a84dbb2a08..51c0e29549 100644 --- a/src/datadog_api_client/v2/models/__init__.py +++ b/src/datadog_api_client/v2/models/__init__.py @@ -2513,6 +2513,21 @@ from datadog_api_client.v2.model.input_schema_parameters import InputSchemaParameters from datadog_api_client.v2.model.input_schema_parameters_type import InputSchemaParametersType from datadog_api_client.v2.model.intake_payload_accepted import IntakePayloadAccepted +from datadog_api_client.v2.model.integration_assignment_data_attributes_request import ( + IntegrationAssignmentDataAttributesRequest, +) +from datadog_api_client.v2.model.integration_assignment_data_attributes_request_action import ( + IntegrationAssignmentDataAttributesRequestAction, +) +from datadog_api_client.v2.model.integration_assignment_data_attributes_request_assignment import ( + IntegrationAssignmentDataAttributesRequestAssignment, +) +from datadog_api_client.v2.model.integration_assignment_data_attributes_request_type import ( + IntegrationAssignmentDataAttributesRequestType, +) +from datadog_api_client.v2.model.integration_assignment_data_request import IntegrationAssignmentDataRequest +from datadog_api_client.v2.model.integration_assignment_request import IntegrationAssignmentRequest +from datadog_api_client.v2.model.integration_assignment_type import IntegrationAssignmentType from datadog_api_client.v2.model.integration_incident import IntegrationIncident from datadog_api_client.v2.model.integration_incident_field_mappings_items import IntegrationIncidentFieldMappingsItems from datadog_api_client.v2.model.integration_incident_severity_config import IntegrationIncidentSeverityConfig @@ -2621,6 +2636,14 @@ from datadog_api_client.v2.model.jira_integration_metadata import JiraIntegrationMetadata from datadog_api_client.v2.model.jira_integration_metadata_issues_item import JiraIntegrationMetadataIssuesItem from datadog_api_client.v2.model.jira_issue import JiraIssue +from datadog_api_client.v2.model.jira_issue_custom_fields import JiraIssueCustomFields +from datadog_api_client.v2.model.jira_issue_data_attributes_request import JiraIssueDataAttributesRequest +from datadog_api_client.v2.model.jira_issue_data_attributes_request_mode import JiraIssueDataAttributesRequestMode +from datadog_api_client.v2.model.jira_issue_data_meta import JiraIssueDataMeta +from datadog_api_client.v2.model.jira_issue_data_request import JiraIssueDataRequest +from datadog_api_client.v2.model.jira_issue_finding import JiraIssueFinding +from datadog_api_client.v2.model.jira_issue_finding_id import JiraIssueFindingId +from datadog_api_client.v2.model.jira_issue_request import JiraIssueRequest from datadog_api_client.v2.model.jira_issue_result import JiraIssueResult from datadog_api_client.v2.model.jira_issue_template_create_request import JiraIssueTemplateCreateRequest from datadog_api_client.v2.model.jira_issue_template_create_request_attributes import ( @@ -2641,7 +2664,14 @@ ) from datadog_api_client.v2.model.jira_issue_template_update_request_data import JiraIssueTemplateUpdateRequestData from datadog_api_client.v2.model.jira_issue_templates_response import JiraIssueTemplatesResponse +from datadog_api_client.v2.model.jira_issue_type import JiraIssueType from datadog_api_client.v2.model.jira_issues_data_type import JiraIssuesDataType +from datadog_api_client.v2.model.jira_issues_metadata_data_attributes_response import ( + JiraIssuesMetadataDataAttributesResponse, +) +from datadog_api_client.v2.model.jira_issues_metadata_data_response import JiraIssuesMetadataDataResponse +from datadog_api_client.v2.model.jira_issues_metadata_response import JiraIssuesMetadataResponse +from datadog_api_client.v2.model.jira_issues_metadata_type import JiraIssuesMetadataType from datadog_api_client.v2.model.job_create_response import JobCreateResponse from datadog_api_client.v2.model.job_create_response_data import JobCreateResponseData from datadog_api_client.v2.model.job_definition import JobDefinition @@ -7882,6 +7912,13 @@ "InputSchemaParameters", "InputSchemaParametersType", "IntakePayloadAccepted", + "IntegrationAssignmentDataAttributesRequest", + "IntegrationAssignmentDataAttributesRequestAction", + "IntegrationAssignmentDataAttributesRequestAssignment", + "IntegrationAssignmentDataAttributesRequestType", + "IntegrationAssignmentDataRequest", + "IntegrationAssignmentRequest", + "IntegrationAssignmentType", "IntegrationIncident", "IntegrationIncidentFieldMappingsItems", "IntegrationIncidentSeverityConfig", @@ -7974,6 +8011,14 @@ "JiraIntegrationMetadata", "JiraIntegrationMetadataIssuesItem", "JiraIssue", + "JiraIssueCustomFields", + "JiraIssueDataAttributesRequest", + "JiraIssueDataAttributesRequestMode", + "JiraIssueDataMeta", + "JiraIssueDataRequest", + "JiraIssueFinding", + "JiraIssueFindingId", + "JiraIssueRequest", "JiraIssueResult", "JiraIssueTemplateCreateRequest", "JiraIssueTemplateCreateRequestAttributes", @@ -7988,7 +8033,12 @@ "JiraIssueTemplateUpdateRequestAttributes", "JiraIssueTemplateUpdateRequestData", "JiraIssueTemplatesResponse", + "JiraIssueType", "JiraIssuesDataType", + "JiraIssuesMetadataDataAttributesResponse", + "JiraIssuesMetadataDataResponse", + "JiraIssuesMetadataResponse", + "JiraIssuesMetadataType", "JobCreateResponse", "JobCreateResponseData", "JobDefinition", diff --git a/tests/v2/features/security_monitoring.feature b/tests/v2/features/security_monitoring.feature index df5e32bcc4..1924cbc024 100644 --- a/tests/v2/features/security_monitoring.feature +++ b/tests/v2/features/security_monitoring.feature @@ -25,6 +25,30 @@ Feature: Security Monitoring When the request is sent Then the response status is 404 Not Found + @generated @skip @team:DataDog/k9-investigation + Scenario: Assign or un-assign Jira issues to security findings returns "Accepted" response + Given operation "AssignIntegrationIssues" enabled + And new "AssignIntegrationIssues" request + And body with value {"data": {"attributes": {"action": "assign", "assignment": {"jira": {"https://jira.example.com/browse/SEC-123": ["MDBjMzdhYzgyNGZkZGJiZmY0OGNmYjNiMWQ2ODY0YmR-OTc0YjMzNjM1Y2UyODA2YTEyNWQxYmNkZjhmODllNzg="]}}, "type": "findings"}, "id": "some_id", "type": "issue_assignment"}} + When the request is sent + Then the response status is 202 Accepted + + @generated @skip @team:DataDog/k9-investigation + Scenario: Assign or un-assign Jira issues to security findings returns "Bad Request" response + Given operation "AssignIntegrationIssues" enabled + And new "AssignIntegrationIssues" request + And body with value {"data": {"attributes": {"action": "assign", "assignment": {"jira": {"https://jira.example.com/browse/SEC-123": ["MDBjMzdhYzgyNGZkZGJiZmY0OGNmYjNiMWQ2ODY0YmR-OTc0YjMzNjM1Y2UyODA2YTEyNWQxYmNkZjhmODllNzg="]}}, "type": "findings"}, "id": "some_id", "type": "issue_assignment"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/k9-investigation + Scenario: Assign or un-assign Jira issues to security findings returns "Not Found" response + Given operation "AssignIntegrationIssues" enabled + And new "AssignIntegrationIssues" request + And body with value {"data": {"attributes": {"action": "assign", "assignment": {"jira": {"https://jira.example.com/browse/SEC-123": ["MDBjMzdhYzgyNGZkZGJiZmY0OGNmYjNiMWQ2ODY0YmR-OTc0YjMzNjM1Y2UyODA2YTEyNWQxYmNkZjhmODllNzg="]}}, "type": "findings"}, "id": "some_id", "type": "issue_assignment"}} + When the request is sent + Then the response status is 404 Not Found + @team:DataDog/k9-investigation Scenario: Attach security finding to a Jira issue returns "OK" response Given new "AttachJiraIssue" request @@ -330,6 +354,14 @@ Feature: Security Monitoring And the response "data[0].attributes.insights[0].type" is equal to "SECURITY_FINDING" And the response "data[0].attributes.jira_issue.status" is equal to "COMPLETED" + @generated @skip @team:DataDog/k9-investigation + Scenario: Create Jira issues for security findings returns "Accepted" response + Given operation "CreateJiraIssue" enabled + And new "CreateJiraIssue" request + And body with value {"data": {"attributes": {"account_id": "f7ccdf99-0e22-4378-bdf9-03fde5379fea", "fields": null, "issue_type": "story", "issuetype_id": "1235", "mode": "single", "project_id": "1234", "project_key": "SEC"}, "id": "ID", "meta": {"findings": [{"description": "Description", "ids": [{"discovered": 123213123, "id": "afa-afa-hze", "resource": "Resource", "tags": "akjasd:asdsad"}], "impacted": 1, "references": "", "remediation": "Remediation", "severity": "critical", "title": "Title", "type": "ciem"}], "vulnerabilities": [{"description": "Description", "ids": [{"discovered": 123213123, "id": "afa-afa-hze", "resource": "Resource", "tags": "akjasd:asdsad"}], "impacted": 1, "references": "", "remediation": "Remediation", "severity": "critical", "title": "Title", "type": "ciem"}]}, "type": "jira_issue"}} + When the request is sent + Then the response status is 202 Accepted + @team:DataDog/k9-investigation Scenario: Create Jira issues for security findings returns "Bad Request" response Given new "CreateJiraIssues" request @@ -887,6 +919,30 @@ Feature: Security Monitoring When the request is sent Then the response status is 404 Not Found + @generated @skip @team:DataDog/k9-investigation + Scenario: Get Jira issue metadata returns "Bad Request" response + Given operation "GetJiraIssueMetadata" enabled + And new "GetJiraIssueMetadata" request + And request contains "url" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/k9-investigation + Scenario: Get Jira issue metadata returns "Not Found" response + Given operation "GetJiraIssueMetadata" enabled + And new "GetJiraIssueMetadata" request + And request contains "url" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/k9-investigation + Scenario: Get Jira issue metadata returns "OK" response + Given operation "GetJiraIssueMetadata" enabled + And new "GetJiraIssueMetadata" request + And request contains "url" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + @generated @skip @team:DataDog/k9-cloud-vm Scenario: Get SBOM returns "Bad request: The server cannot process the request due to invalid syntax in the request." response Given new "GetSBOM" request diff --git a/tests/v2/features/undo.json b/tests/v2/features/undo.json index c77dfee335..b4b02ddce3 100644 --- a/tests/v2/features/undo.json +++ b/tests/v2/features/undo.json @@ -999,6 +999,22 @@ "type": "idempotent" } }, + "AssignIntegrationIssues": { + "tag": "Security Monitoring", + "undo": { + "operationId": "TODO", + "parameters": [], + "type": "unsafe" + } + }, + "CreateJiraIssue": { + "tag": "Security Monitoring", + "undo": { + "operationId": "TODO", + "parameters": [], + "type": "unsafe" + } + }, "GetResourceEvaluationFilters": { "tag": "Security Monitoring", "undo": { @@ -4286,6 +4302,12 @@ "type": "unsafe" } }, + "GetJiraIssueMetadata": { + "tag": "Security Monitoring", + "undo": { + "type": "safe" + } + }, "SearchSecurityFindings": { "tag": "Security Monitoring", "undo": {