diff --git a/.github/release-drafter.yml b/.github/release-drafter.yml index 7a02aa15919..f2deb493718 100644 --- a/.github/release-drafter.yml +++ b/.github/release-drafter.yml @@ -55,7 +55,7 @@ exclude-labels: change-template: '- $TITLE @$AUTHOR (#$NUMBER)' template: | - Please consult the [Upgrade notes in the documentation ](https://docs.defectdojo.com/en/open_source/upgrading/upgrading_guide/) for specific instructions for this release, and general upgrade instructions. Below is an automatically generated list of all PRs merged since the previous release. + Please consult the [Upgrade notes in the documentation](https://docs.defectdojo.com/releases/os_upgrading/upgrading_guide/) for specific instructions for this release, and general upgrade instructions. Below is an automatically generated list of all PRs merged since the previous release. ## Changes since $PREVIOUS_TAG $CHANGES diff --git a/.github/renovate.json b/.github/renovate.json index 62177863787..ad093496aaf 100644 --- a/.github/renovate.json +++ b/.github/renovate.json @@ -8,6 +8,7 @@ "rebaseWhen": "conflicted", "separateMinorPatch": true, "ignorePaths": [ + "docs/**", "requirements.txt", "requirements-lint.txt", "components/package.json", diff --git a/Dockerfile.django-alpine b/Dockerfile.django-alpine index 039eb9d2ed7..5754802a061 100644 --- a/Dockerfile.django-alpine +++ b/Dockerfile.django-alpine @@ -10,6 +10,7 @@ FROM base AS build WORKDIR /app RUN \ apk update && \ + apk upgrade --no-cache && \ apk add --no-cache \ gcc \ build-base \ @@ -40,6 +41,7 @@ ARG appuser=defectdojo ENV appuser=${appuser} RUN \ apk update && \ + apk upgrade --no-cache && \ apk add --no-cache \ openjpeg \ jpeg \ diff --git a/Dockerfile.django-debian b/Dockerfile.django-debian index 593325c8f69..f7cd795b5b2 100644 --- a/Dockerfile.django-debian +++ b/Dockerfile.django-debian @@ -10,6 +10,7 @@ FROM base AS build WORKDIR /app RUN \ apt-get -y update && \ + apt-get -y upgrade && \ apt-get -y install --no-install-recommends \ gcc \ build-essential \ @@ -39,6 +40,7 @@ ARG appuser=defectdojo ENV appuser=${appuser} RUN \ apt-get -y update && \ + apt-get -y upgrade && \ # ugly fix to install postgresql-client without errors mkdir -p /usr/share/man/man1 /usr/share/man/man7 && \ apt-get -y install --no-install-recommends \ diff --git a/Dockerfile.integration-tests-debian b/Dockerfile.integration-tests-debian index 572b02e1e99..41a8027d615 100644 --- a/Dockerfile.integration-tests-debian +++ b/Dockerfile.integration-tests-debian @@ -7,6 +7,7 @@ FROM python:3.13.12-slim-trixie@sha256:a7a03d8253322dba5b97771f4971c6ee17c561f73 WORKDIR /app RUN \ apt-get -y update && \ + apt-get -y upgrade && \ apt-get -y install \ git \ wget \ @@ -20,6 +21,7 @@ RUN \ xvfb \ && \ apt-get clean && \ + rm -rf /var/lib/apt/lists && \ true RUN pip install --no-cache-dir selenium==4.9.0 requests diff --git a/Dockerfile.nginx-alpine b/Dockerfile.nginx-alpine index 03c90ad317c..c017bf85c79 100644 --- a/Dockerfile.nginx-alpine +++ b/Dockerfile.nginx-alpine @@ -10,6 +10,7 @@ FROM base AS build WORKDIR /app RUN \ apk update && \ + apk upgrade --no-cache && \ apk add --no-cache \ gcc \ build-base \ @@ -70,12 +71,14 @@ COPY --from=collectstatic /app/static/ /usr/share/nginx/html/static/ COPY wsgi_params nginx/nginx.conf nginx/nginx_TLS.conf /etc/nginx/ COPY docker/entrypoint-nginx.sh / RUN \ + apk upgrade --no-cache && \ apk add --no-cache openssl && \ chmod -R g=u /var/cache/nginx && \ mkdir /var/run/defectdojo && \ chmod -R g=u /var/run/defectdojo && \ mkdir -p /etc/nginx/ssl && \ chmod -R g=u /etc/nginx && \ + rm -rf /var/cache/apk/* && \ true ENV \ DD_UWSGI_PASS="uwsgi_server" \ diff --git a/docs/assets/images/RA_image1.png b/docs/assets/images/RA_image1.png new file mode 100644 index 00000000000..5aa022a9005 Binary files /dev/null and b/docs/assets/images/RA_image1.png differ diff --git a/docs/assets/images/RA_image2.png b/docs/assets/images/RA_image2.png new file mode 100644 index 00000000000..eb9aba2d769 Binary files /dev/null and b/docs/assets/images/RA_image2.png differ diff --git a/docs/assets/images/RA_image3.png b/docs/assets/images/RA_image3.png new file mode 100644 index 00000000000..1b45d9aaeeb Binary files /dev/null and b/docs/assets/images/RA_image3.png differ diff --git a/docs/assets/images/RA_image4.png b/docs/assets/images/RA_image4.png new file mode 100644 index 00000000000..fb56d387b8f Binary files /dev/null and b/docs/assets/images/RA_image4.png differ diff --git a/docs/assets/images/RA_image5.png b/docs/assets/images/RA_image5.png new file mode 100644 index 00000000000..eac710aac8e Binary files /dev/null and b/docs/assets/images/RA_image5.png differ diff --git a/docs/assets/images/calendar1.png b/docs/assets/images/calendar1.png new file mode 100644 index 00000000000..d45ef5bd29d Binary files /dev/null and b/docs/assets/images/calendar1.png differ diff --git a/docs/assets/images/calendar2.png b/docs/assets/images/calendar2.png new file mode 100644 index 00000000000..a383183dc3c Binary files /dev/null and b/docs/assets/images/calendar2.png differ diff --git a/docs/config/_default/params.toml b/docs/config/_default/params.toml index 36331f1428b..6561c73fa2b 100644 --- a/docs/config/_default/params.toml +++ b/docs/config/_default/params.toml @@ -49,6 +49,7 @@ mainSections = ["docs"] "en", "supported_tools", "get_started", + "releases", "import_data", "triage_findings", "metrics_reports", diff --git a/docs/content/asset_modelling/engagements_tests/PRO__calendar.md b/docs/content/asset_modelling/engagements_tests/PRO__calendar.md new file mode 100644 index 00000000000..7c326551545 --- /dev/null +++ b/docs/content/asset_modelling/engagements_tests/PRO__calendar.md @@ -0,0 +1,62 @@ +--- +title: "Calendar" +description: "How to use the Calendar in DefectDojo Pro" +audience: pro +weight: 2 +--- + +DefectDojo features a built-in Calendar so you can track all prior and active Engagements and Tests within your organization. Any time a User creates a new Engagement or Test and establishes the start and end dates, a corresponding entry will automatically be added to the Calendar. + +### Landing Page + +The Calendar page includes filters at the top and a monthly calendar below. The filters can adjust which results appear in the calendar based on: +- Engagement and/or Test +- Start and End date +- Engagement Status (e.g., Completed, In Progress, On Hold, etc.) +- Engagement/Test Lead (i.e., to whom is the Engagement/Test assigned?) +- Engagement Type (e.g., Interactive or CI/CD) +- Test Type (e.g., Pen Test, Acunetix Scan, Tenable Scan, etc.) + +![image](images/calendar1.png) + +Once filtered, results can be exported and shared as an ICS file. + +Importantly, Calendar will only present Engagements and Tests to which the User viewing the calendar has access. It will not display Engagements and Tests that the User does not have permission to view. + +## Features + +### Monthly View + +The monthly calendar will preview five entries on each day. Additional entries occurring on that day will be hidden from view unless the **"+ [X] events"** is clicked within the cell of any particular date. Once clicked, the calendar will shift from a monthly view to a daily view. + +Clicking on an for a Test or Engagement will open a pop-up modal with additional information on that entry, including: +- Start and End Date +- Test or Engagement Type +- Lead +- Status +- Asset +- Engagement +- Test + +From there, the Asset, Engagement, or Test can be accessed via hyperlink. + +### Daily View + +In the daily view, all currently active Engagements and Tests will appear chronologically in descending order (i.e, a newly created Engagement or Test will be found at the bottom of that day’s entry). Engagements appear in blue, while Tests appear in Orange. + +If set within the applicable Engagement/Test, the title of each entry in the daily calendar will include the following: +- Status +- Product +- Engagement +- Test +- Assignee + +#### Arrows + +The arrows on the left and right side of each entry indicate whether that particular Test or Engagement is present on the preceding and/or following day. + +For example, a Test that was made on the same day on which it’s being viewed will not have arrows on the left because that Test didn’t exist the day before. Conversely, a Test that ends on the same day on which it’s being viewed will not have arrows on the right because the entry won’t exist on the following day. + +For example, as the final Engagement in the screenshot below (**In Progress** Example Product A ▶ **Sample Engagement** (Unassigned)) is being viewed on the day it was created, and the Target End Date was set for the following day, no arrows are present on either the left or right side. + +![image](images/calendar2.png) \ No newline at end of file diff --git a/docs/content/changelog/os_upgrading/_index.md b/docs/content/changelog/os_upgrading/_index.md deleted file mode 100644 index 5eee9e16873..00000000000 --- a/docs/content/changelog/os_upgrading/_index.md +++ /dev/null @@ -1,71 +0,0 @@ ---- -title: "Upgrading" -description: "Release specific upgrading instructions" -draft: false -sidebar: - collapsed: true -weight: 2 ---- - -## Docker compose - -When you deploy a vanilla docker compose, it will create a persistent -volume for your Postgres database. As long as your volume is there, you -should not lose any data. - -### Using docker images provided in DockerHub - -If you\'re using `latest`, then you need to pre pull the `latest` from -DockerHub to update. - -The generic upgrade method for docker compose are as follows: -- Pull the latest version - - ``` {.sourceCode .bash} - docker pull defectdojo/defectdojo-django:latest - docker pull defectdojo/defectdojo-nginx:latest - ``` - -- If you would like to use a version other than the latest, specify the version (tag) you want to upgrade to: - - ``` {.sourceCode .bash} - docker pull defectdojo/defectdojo-django:1.10.2 - docker pull defectdojo/defectdojo-nginx:1.10.2 - ``` - -- If you would like to use alpine based images, you specify the version (tag) you want to upgrade to: - - ``` {.sourceCode .bash} - docker pull defectdojo/defectdojo-django:1.10.2-alpine - docker pull defectdojo/defectdojo-nginx:1.10.2-alpine - ``` - -- Go to the directory where your docker-compose.yml file lives -- Stop DefectDojo: `docker compose stop` -- Re-start DefectDojo, allowing for container recreation: `docker compose up -d` -- Database migrations will be run automatically by the initializer. - Check the output via `docker compose logs initializer` or relevant k8s command -- If you have the initializer disabled (or if you want to be on the - safe side), run the migration command: - `docker compose exec uwsgi /bin/bash -c "python manage.py migrate"` - -### Building your local images - -If you build your images locally and do not use the ones from DockerHub, -the instructions are the same, with the caveat that you must build your images -first. -- Pull the latest DefectDojo changes - - ``` {.sourceCode .bash} - git fetch - git pull - git merge origin/master - ``` - -Then replace the first step of the above generic upgrade method for docker compose with: `docker compose build` - -## godojo installations - -If you have installed DefectDojo on "iron" and wish to upgrade the installation, please see the [instructions in the repo](https://github.com/DefectDojo/godojo/blob/master/docs-and-scripts/upgrading.md). - -## Upgrade notes for each release diff --git a/docs/content/releases/_index.md b/docs/content/releases/_index.md new file mode 100644 index 00000000000..9f4ee0de7da --- /dev/null +++ b/docs/content/releases/_index.md @@ -0,0 +1,3 @@ +--- +title: "Release Information" +--- diff --git a/docs/content/changelog/os_upgrading/1.10.md b/docs/content/releases/os_upgrading/1.10.md similarity index 100% rename from docs/content/changelog/os_upgrading/1.10.md rename to docs/content/releases/os_upgrading/1.10.md diff --git a/docs/content/changelog/os_upgrading/1.11.md b/docs/content/releases/os_upgrading/1.11.md similarity index 100% rename from docs/content/changelog/os_upgrading/1.11.md rename to docs/content/releases/os_upgrading/1.11.md diff --git a/docs/content/changelog/os_upgrading/1.12.md b/docs/content/releases/os_upgrading/1.12.md similarity index 100% rename from docs/content/changelog/os_upgrading/1.12.md rename to docs/content/releases/os_upgrading/1.12.md diff --git a/docs/content/changelog/os_upgrading/1.13.md b/docs/content/releases/os_upgrading/1.13.md similarity index 100% rename from docs/content/changelog/os_upgrading/1.13.md rename to docs/content/releases/os_upgrading/1.13.md diff --git a/docs/content/changelog/os_upgrading/1.14.md b/docs/content/releases/os_upgrading/1.14.md similarity index 100% rename from docs/content/changelog/os_upgrading/1.14.md rename to docs/content/releases/os_upgrading/1.14.md diff --git a/docs/content/changelog/os_upgrading/1.15.md b/docs/content/releases/os_upgrading/1.15.md similarity index 100% rename from docs/content/changelog/os_upgrading/1.15.md rename to docs/content/releases/os_upgrading/1.15.md diff --git a/docs/content/changelog/os_upgrading/1.2.2.md b/docs/content/releases/os_upgrading/1.2.2.md similarity index 100% rename from docs/content/changelog/os_upgrading/1.2.2.md rename to docs/content/releases/os_upgrading/1.2.2.md diff --git a/docs/content/changelog/os_upgrading/1.2.3.md b/docs/content/releases/os_upgrading/1.2.3.md similarity index 100% rename from docs/content/changelog/os_upgrading/1.2.3.md rename to docs/content/releases/os_upgrading/1.2.3.md diff --git a/docs/content/changelog/os_upgrading/1.2.4.md b/docs/content/releases/os_upgrading/1.2.4.md similarity index 100% rename from docs/content/changelog/os_upgrading/1.2.4.md rename to docs/content/releases/os_upgrading/1.2.4.md diff --git a/docs/content/changelog/os_upgrading/1.2.8.md b/docs/content/releases/os_upgrading/1.2.8.md similarity index 100% rename from docs/content/changelog/os_upgrading/1.2.8.md rename to docs/content/releases/os_upgrading/1.2.8.md diff --git a/docs/content/changelog/os_upgrading/1.2.9.md b/docs/content/releases/os_upgrading/1.2.9.md similarity index 100% rename from docs/content/changelog/os_upgrading/1.2.9.md rename to docs/content/releases/os_upgrading/1.2.9.md diff --git a/docs/content/changelog/os_upgrading/1.3.1.md b/docs/content/releases/os_upgrading/1.3.1.md similarity index 100% rename from docs/content/changelog/os_upgrading/1.3.1.md rename to docs/content/releases/os_upgrading/1.3.1.md diff --git a/docs/content/changelog/os_upgrading/1.7.0.md b/docs/content/releases/os_upgrading/1.7.0.md similarity index 100% rename from docs/content/changelog/os_upgrading/1.7.0.md rename to docs/content/releases/os_upgrading/1.7.0.md diff --git a/docs/content/changelog/os_upgrading/1.8.0.md b/docs/content/releases/os_upgrading/1.8.0.md similarity index 100% rename from docs/content/changelog/os_upgrading/1.8.0.md rename to docs/content/releases/os_upgrading/1.8.0.md diff --git a/docs/content/changelog/os_upgrading/1.9.3.md b/docs/content/releases/os_upgrading/1.9.3.md similarity index 100% rename from docs/content/changelog/os_upgrading/1.9.3.md rename to docs/content/releases/os_upgrading/1.9.3.md diff --git a/docs/content/changelog/os_upgrading/2.0.md b/docs/content/releases/os_upgrading/2.0.md similarity index 100% rename from docs/content/changelog/os_upgrading/2.0.md rename to docs/content/releases/os_upgrading/2.0.md diff --git a/docs/content/changelog/os_upgrading/2.10.md b/docs/content/releases/os_upgrading/2.10.md similarity index 100% rename from docs/content/changelog/os_upgrading/2.10.md rename to docs/content/releases/os_upgrading/2.10.md diff --git a/docs/content/changelog/os_upgrading/2.12.md b/docs/content/releases/os_upgrading/2.12.md similarity index 100% rename from docs/content/changelog/os_upgrading/2.12.md rename to docs/content/releases/os_upgrading/2.12.md diff --git a/docs/content/changelog/os_upgrading/2.13.md b/docs/content/releases/os_upgrading/2.13.md similarity index 100% rename from docs/content/changelog/os_upgrading/2.13.md rename to docs/content/releases/os_upgrading/2.13.md diff --git a/docs/content/changelog/os_upgrading/2.15.md b/docs/content/releases/os_upgrading/2.15.md similarity index 100% rename from docs/content/changelog/os_upgrading/2.15.md rename to docs/content/releases/os_upgrading/2.15.md diff --git a/docs/content/changelog/os_upgrading/2.16.md b/docs/content/releases/os_upgrading/2.16.md similarity index 100% rename from docs/content/changelog/os_upgrading/2.16.md rename to docs/content/releases/os_upgrading/2.16.md diff --git a/docs/content/changelog/os_upgrading/2.17.md b/docs/content/releases/os_upgrading/2.17.md similarity index 100% rename from docs/content/changelog/os_upgrading/2.17.md rename to docs/content/releases/os_upgrading/2.17.md diff --git a/docs/content/changelog/os_upgrading/2.18.md b/docs/content/releases/os_upgrading/2.18.md similarity index 100% rename from docs/content/changelog/os_upgrading/2.18.md rename to docs/content/releases/os_upgrading/2.18.md diff --git a/docs/content/changelog/os_upgrading/2.19.md b/docs/content/releases/os_upgrading/2.19.md similarity index 100% rename from docs/content/changelog/os_upgrading/2.19.md rename to docs/content/releases/os_upgrading/2.19.md diff --git a/docs/content/changelog/os_upgrading/2.2.md b/docs/content/releases/os_upgrading/2.2.md similarity index 100% rename from docs/content/changelog/os_upgrading/2.2.md rename to docs/content/releases/os_upgrading/2.2.md diff --git a/docs/content/changelog/os_upgrading/2.20.md b/docs/content/releases/os_upgrading/2.20.md similarity index 100% rename from docs/content/changelog/os_upgrading/2.20.md rename to docs/content/releases/os_upgrading/2.20.md diff --git a/docs/content/changelog/os_upgrading/2.21.md b/docs/content/releases/os_upgrading/2.21.md similarity index 100% rename from docs/content/changelog/os_upgrading/2.21.md rename to docs/content/releases/os_upgrading/2.21.md diff --git a/docs/content/changelog/os_upgrading/2.22.md b/docs/content/releases/os_upgrading/2.22.md similarity index 100% rename from docs/content/changelog/os_upgrading/2.22.md rename to docs/content/releases/os_upgrading/2.22.md diff --git a/docs/content/changelog/os_upgrading/2.23.md b/docs/content/releases/os_upgrading/2.23.md similarity index 100% rename from docs/content/changelog/os_upgrading/2.23.md rename to docs/content/releases/os_upgrading/2.23.md diff --git a/docs/content/changelog/os_upgrading/2.24.md b/docs/content/releases/os_upgrading/2.24.md similarity index 100% rename from docs/content/changelog/os_upgrading/2.24.md rename to docs/content/releases/os_upgrading/2.24.md diff --git a/docs/content/changelog/os_upgrading/2.25.md b/docs/content/releases/os_upgrading/2.25.md similarity index 100% rename from docs/content/changelog/os_upgrading/2.25.md rename to docs/content/releases/os_upgrading/2.25.md diff --git a/docs/content/changelog/os_upgrading/2.26.md b/docs/content/releases/os_upgrading/2.26.md similarity index 100% rename from docs/content/changelog/os_upgrading/2.26.md rename to docs/content/releases/os_upgrading/2.26.md diff --git a/docs/content/changelog/os_upgrading/2.27.md b/docs/content/releases/os_upgrading/2.27.md similarity index 100% rename from docs/content/changelog/os_upgrading/2.27.md rename to docs/content/releases/os_upgrading/2.27.md diff --git a/docs/content/changelog/os_upgrading/2.28.md b/docs/content/releases/os_upgrading/2.28.md similarity index 100% rename from docs/content/changelog/os_upgrading/2.28.md rename to docs/content/releases/os_upgrading/2.28.md diff --git a/docs/content/changelog/os_upgrading/2.29.md b/docs/content/releases/os_upgrading/2.29.md similarity index 100% rename from docs/content/changelog/os_upgrading/2.29.md rename to docs/content/releases/os_upgrading/2.29.md diff --git a/docs/content/changelog/os_upgrading/2.3.md b/docs/content/releases/os_upgrading/2.3.md similarity index 100% rename from docs/content/changelog/os_upgrading/2.3.md rename to docs/content/releases/os_upgrading/2.3.md diff --git a/docs/content/changelog/os_upgrading/2.30.md b/docs/content/releases/os_upgrading/2.30.md similarity index 100% rename from docs/content/changelog/os_upgrading/2.30.md rename to docs/content/releases/os_upgrading/2.30.md diff --git a/docs/content/changelog/os_upgrading/2.31.md b/docs/content/releases/os_upgrading/2.31.md similarity index 100% rename from docs/content/changelog/os_upgrading/2.31.md rename to docs/content/releases/os_upgrading/2.31.md diff --git a/docs/content/changelog/os_upgrading/2.32.md b/docs/content/releases/os_upgrading/2.32.md similarity index 100% rename from docs/content/changelog/os_upgrading/2.32.md rename to docs/content/releases/os_upgrading/2.32.md diff --git a/docs/content/changelog/os_upgrading/2.33.md b/docs/content/releases/os_upgrading/2.33.md similarity index 100% rename from docs/content/changelog/os_upgrading/2.33.md rename to docs/content/releases/os_upgrading/2.33.md diff --git a/docs/content/changelog/os_upgrading/2.34.md b/docs/content/releases/os_upgrading/2.34.md similarity index 100% rename from docs/content/changelog/os_upgrading/2.34.md rename to docs/content/releases/os_upgrading/2.34.md diff --git a/docs/content/changelog/os_upgrading/2.35.md b/docs/content/releases/os_upgrading/2.35.md similarity index 100% rename from docs/content/changelog/os_upgrading/2.35.md rename to docs/content/releases/os_upgrading/2.35.md diff --git a/docs/content/changelog/os_upgrading/2.36.md b/docs/content/releases/os_upgrading/2.36.md similarity index 100% rename from docs/content/changelog/os_upgrading/2.36.md rename to docs/content/releases/os_upgrading/2.36.md diff --git a/docs/content/changelog/os_upgrading/2.37.md b/docs/content/releases/os_upgrading/2.37.md similarity index 100% rename from docs/content/changelog/os_upgrading/2.37.md rename to docs/content/releases/os_upgrading/2.37.md diff --git a/docs/content/changelog/os_upgrading/2.38.md b/docs/content/releases/os_upgrading/2.38.md similarity index 100% rename from docs/content/changelog/os_upgrading/2.38.md rename to docs/content/releases/os_upgrading/2.38.md diff --git a/docs/content/changelog/os_upgrading/2.39.md b/docs/content/releases/os_upgrading/2.39.md similarity index 100% rename from docs/content/changelog/os_upgrading/2.39.md rename to docs/content/releases/os_upgrading/2.39.md diff --git a/docs/content/changelog/os_upgrading/2.4.md b/docs/content/releases/os_upgrading/2.4.md similarity index 100% rename from docs/content/changelog/os_upgrading/2.4.md rename to docs/content/releases/os_upgrading/2.4.md diff --git a/docs/content/changelog/os_upgrading/2.40.md b/docs/content/releases/os_upgrading/2.40.md similarity index 100% rename from docs/content/changelog/os_upgrading/2.40.md rename to docs/content/releases/os_upgrading/2.40.md diff --git a/docs/content/changelog/os_upgrading/2.41.md b/docs/content/releases/os_upgrading/2.41.md similarity index 100% rename from docs/content/changelog/os_upgrading/2.41.md rename to docs/content/releases/os_upgrading/2.41.md diff --git a/docs/content/changelog/os_upgrading/2.42.md b/docs/content/releases/os_upgrading/2.42.md similarity index 100% rename from docs/content/changelog/os_upgrading/2.42.md rename to docs/content/releases/os_upgrading/2.42.md diff --git a/docs/content/changelog/os_upgrading/2.43.md b/docs/content/releases/os_upgrading/2.43.md similarity index 100% rename from docs/content/changelog/os_upgrading/2.43.md rename to docs/content/releases/os_upgrading/2.43.md diff --git a/docs/content/changelog/os_upgrading/2.44.1.md b/docs/content/releases/os_upgrading/2.44.1.md similarity index 100% rename from docs/content/changelog/os_upgrading/2.44.1.md rename to docs/content/releases/os_upgrading/2.44.1.md diff --git a/docs/content/changelog/os_upgrading/2.44.md b/docs/content/releases/os_upgrading/2.44.md similarity index 100% rename from docs/content/changelog/os_upgrading/2.44.md rename to docs/content/releases/os_upgrading/2.44.md diff --git a/docs/content/changelog/os_upgrading/2.45.md b/docs/content/releases/os_upgrading/2.45.md similarity index 100% rename from docs/content/changelog/os_upgrading/2.45.md rename to docs/content/releases/os_upgrading/2.45.md diff --git a/docs/content/changelog/os_upgrading/2.46.md b/docs/content/releases/os_upgrading/2.46.md similarity index 100% rename from docs/content/changelog/os_upgrading/2.46.md rename to docs/content/releases/os_upgrading/2.46.md diff --git a/docs/content/changelog/os_upgrading/2.47.md b/docs/content/releases/os_upgrading/2.47.md similarity index 100% rename from docs/content/changelog/os_upgrading/2.47.md rename to docs/content/releases/os_upgrading/2.47.md diff --git a/docs/content/changelog/os_upgrading/2.48.2.md b/docs/content/releases/os_upgrading/2.48.2.md similarity index 100% rename from docs/content/changelog/os_upgrading/2.48.2.md rename to docs/content/releases/os_upgrading/2.48.2.md diff --git a/docs/content/changelog/os_upgrading/2.48.md b/docs/content/releases/os_upgrading/2.48.md similarity index 100% rename from docs/content/changelog/os_upgrading/2.48.md rename to docs/content/releases/os_upgrading/2.48.md diff --git a/docs/content/changelog/os_upgrading/2.49.md b/docs/content/releases/os_upgrading/2.49.md similarity index 100% rename from docs/content/changelog/os_upgrading/2.49.md rename to docs/content/releases/os_upgrading/2.49.md diff --git a/docs/content/changelog/os_upgrading/2.5.md b/docs/content/releases/os_upgrading/2.5.md similarity index 100% rename from docs/content/changelog/os_upgrading/2.5.md rename to docs/content/releases/os_upgrading/2.5.md diff --git a/docs/content/changelog/os_upgrading/2.50.md b/docs/content/releases/os_upgrading/2.50.md similarity index 100% rename from docs/content/changelog/os_upgrading/2.50.md rename to docs/content/releases/os_upgrading/2.50.md diff --git a/docs/content/changelog/os_upgrading/2.51.md b/docs/content/releases/os_upgrading/2.51.md similarity index 100% rename from docs/content/changelog/os_upgrading/2.51.md rename to docs/content/releases/os_upgrading/2.51.md diff --git a/docs/content/changelog/os_upgrading/2.52.md b/docs/content/releases/os_upgrading/2.52.md similarity index 100% rename from docs/content/changelog/os_upgrading/2.52.md rename to docs/content/releases/os_upgrading/2.52.md diff --git a/docs/content/changelog/os_upgrading/2.53.md b/docs/content/releases/os_upgrading/2.53.md similarity index 100% rename from docs/content/changelog/os_upgrading/2.53.md rename to docs/content/releases/os_upgrading/2.53.md diff --git a/docs/content/changelog/os_upgrading/2.54.3.md b/docs/content/releases/os_upgrading/2.54.3.md similarity index 100% rename from docs/content/changelog/os_upgrading/2.54.3.md rename to docs/content/releases/os_upgrading/2.54.3.md diff --git a/docs/content/changelog/os_upgrading/2.54.md b/docs/content/releases/os_upgrading/2.54.md similarity index 100% rename from docs/content/changelog/os_upgrading/2.54.md rename to docs/content/releases/os_upgrading/2.54.md diff --git a/docs/content/releases/os_upgrading/2.55.2.md b/docs/content/releases/os_upgrading/2.55.2.md new file mode 100644 index 00000000000..45df3e68dc7 --- /dev/null +++ b/docs/content/releases/os_upgrading/2.55.2.md @@ -0,0 +1,55 @@ +--- +title: 'Upgrading to DefectDojo Version 2.55.2' +toc_hide: true +weight: -20260208 +description: JIRA Reconciliation now also processes Finding Groups. +--- + +## JIRA Reconciliation + +The `jira_status_reconciliation` management command now also processes JIRA issues for Finding Groups. + +New command line options: + +- `--include-findings` / `--no-include-findings` — Process individual findings with direct JIRA issues (default: True) +- `--include-finding-groups` / `--no-include-finding-groups` — Process finding groups with JIRA issues (default: True) + +Full list of options: + + docker compose exec uwsgi bash -c "python manage.py jira_status_reconciliation --help" + + usage: manage.py jira_status_reconciliation [-h] [--mode MODE] [--product PRODUCT] + [--engagement ENGAGEMENT] [--daysback DAYSBACK] [--dryrun] + [--include-findings | --no-include-findings] + [--include-finding-groups | --no-include-finding-groups] + [--version] [-v {0,1,2,3}] [--settings SETTINGS] + [--pythonpath PYTHONPATH] [--traceback] [--no-color] + [--force-color] [--skip-checks] + + Reconcile finding/finding group status with JIRA issue status, stdout will + contain semicolon separated CSV results. Risk Accepted findings are skipped. + Findings created before 1.14.0 are skipped. + + options: + -h, --help show this help message and exit + --mode MODE reconcile: (default) reconcile any differences in + status between Defect Dojo and JIRA. + push_status_to_jira: update JIRA status for all JIRA + issues connected to a finding or finding group. + import_status_from_jira: update finding/finding group + status from JIRA. + --product PRODUCT Only process findings in this product (name) + --engagement ENGAGEMENT + Only process findings in this engagement (name) + --daysback DAYSBACK Only process findings created in the last + 'daysback' days + --dryrun Only print actions to be performed, but make no + modifications. + --include-findings, --no-include-findings + Process individual findings with direct JIRA issues + (default: True) + --include-finding-groups, --no-include-finding-groups + Process finding groups with JIRA issues + (default: True) + +Check the [Release Notes](https://github.com/DefectDojo/django-DefectDojo/releases/tag/2.55.2) for the contents of the release. diff --git a/docs/content/en/open_source/upgrading/2.55.md b/docs/content/releases/os_upgrading/2.55.md similarity index 100% rename from docs/content/en/open_source/upgrading/2.55.md rename to docs/content/releases/os_upgrading/2.55.md diff --git a/docs/content/changelog/os_upgrading/2.6.md b/docs/content/releases/os_upgrading/2.6.md similarity index 100% rename from docs/content/changelog/os_upgrading/2.6.md rename to docs/content/releases/os_upgrading/2.6.md diff --git a/docs/content/changelog/os_upgrading/2.7.md b/docs/content/releases/os_upgrading/2.7.md similarity index 100% rename from docs/content/changelog/os_upgrading/2.7.md rename to docs/content/releases/os_upgrading/2.7.md diff --git a/docs/content/changelog/os_upgrading/2.8.md b/docs/content/releases/os_upgrading/2.8.md similarity index 100% rename from docs/content/changelog/os_upgrading/2.8.md rename to docs/content/releases/os_upgrading/2.8.md diff --git a/docs/content/changelog/os_upgrading/2.9.md b/docs/content/releases/os_upgrading/2.9.md similarity index 100% rename from docs/content/changelog/os_upgrading/2.9.md rename to docs/content/releases/os_upgrading/2.9.md diff --git a/docs/content/releases/os_upgrading/_index.md b/docs/content/releases/os_upgrading/_index.md new file mode 100644 index 00000000000..54683be09d2 --- /dev/null +++ b/docs/content/releases/os_upgrading/_index.md @@ -0,0 +1,7 @@ +--- +title: "Open Source Upgrades" +description: "Release specific upgrading instructions" +draft: false +weight: 2 +audience: opensource +--- diff --git a/docs/content/changelog/os_upgrading/upgrading_guide.md b/docs/content/releases/os_upgrading/upgrading_guide.md similarity index 98% rename from docs/content/changelog/os_upgrading/upgrading_guide.md rename to docs/content/releases/os_upgrading/upgrading_guide.md index 792d024dfc2..18a07166141 100644 --- a/docs/content/changelog/os_upgrading/upgrading_guide.md +++ b/docs/content/releases/os_upgrading/upgrading_guide.md @@ -1,5 +1,5 @@ --- -title: "Upgrading Guide" +title: "Open Source Upgrading" description: "Release specific upgrading instructions" draft: false sidebar: diff --git a/docs/content/releases/pro/_index.md b/docs/content/releases/pro/_index.md new file mode 100644 index 00000000000..da83ccf44b4 --- /dev/null +++ b/docs/content/releases/pro/_index.md @@ -0,0 +1,7 @@ +--- +title: "Pro Upgrades" +description: "" +draft: false +weight: 2 +audience: pro +--- diff --git a/docs/content/changelog/pro_changelog.md b/docs/content/releases/pro/changelog.md similarity index 98% rename from docs/content/changelog/pro_changelog.md rename to docs/content/releases/pro/changelog.md index fa3466d6505..d328fb1dcfc 100644 --- a/docs/content/changelog/pro_changelog.md +++ b/docs/content/releases/pro/changelog.md @@ -6,20 +6,34 @@ exclude_search: true Here are the release notes for **DefectDojo Pro (Cloud Version)**. These release notes are focused on UX, so will not include all code changes. -For Open Source release notes, please see the [Releases page on GitHub](https://github.com/DefectDojo/django-DefectDojo/releases), or alternatively consult the Open Source [upgrade notes](/open_source/upgrading/upgrading_guide/). +For Open Source release notes, please see the [Releases page on GitHub](https://github.com/DefectDojo/django-DefectDojo/releases), or alternatively consult the Open Source [upgrade notes](/changelog/os_upgrading/upgrading_guide/). -## Jan 2025: v2.54 +## Feb 2025: v2.55 -### Jan 20, 2025: v2.54.2 +### Feb 2, 2026: v2.55.0 + +* **(Pro UI)** Risk Acceptances can now have Notes added. +* **(Pro UI)** Note Types are now available in the Pro UI. + +## Jan 2026: v2.54 + +### Jan 27, 2026: v2.54.3 + +* **(Connectors)** Added a "Pending" status to Connectors when Sync or Discovery operations are in progress. +* **(Pro UI)** Findings Under Review can now be Mitigated when clearing Review. +* **(Pro UI)** An Asset's Parent and Child Assets can now be quickly added to a Pro Metrics query. + + +### Jan 20, 2026: v2.54.2 * **(Pro UI)** corrected a bug where unordered lists would display as ordered lists in editor forms. * **(Smart Upload)** introduced severity filtering to the Smart Importer to skip findings below a specified severity level. Added detailed logging throughout the findings processing to improve traceability and debugging. -### Jan 12, 2025: v2.54.1 +### Jan 12, 2026: v2.54.1 * **(AI Tools)** added Risk Scores to schema for MCP processing. -### Jan 5, 2025: v2.54.0 +### Jan 5, 2026: v2.54.0 No significant UX changes. diff --git a/docs/content/triage_findings/findings_workflows/PRO__risk_acceptance.md b/docs/content/triage_findings/findings_workflows/PRO__risk_acceptance.md new file mode 100644 index 00000000000..8ddf6e6a1e5 --- /dev/null +++ b/docs/content/triage_findings/findings_workflows/PRO__risk_acceptance.md @@ -0,0 +1,114 @@ +--- +title: "Risk Acceptances" +description: "Leveraging Risk Acceptances in DefectDojo Pro" +audience: pro +weight: 2 +--- + +**Risk Acceptances** are a special status that can be applied to Findings using either **Full Risk Acceptance** objects or the **Simple Risk Acceptance** workflow. Risk Acceptances are used to formally document and operationalize the decision to acknowledge a vulnerable Finding without immediately remediating it. + +DefectDojo Pro includes enhanced Risk Acceptance capabilities to scale risk management decisions, including: +- **Cross-Product Risk Acceptances**: A single Risk Acceptance can be applied across multiple products, allowing you to bundle all instances of the same or similar Findings throughout your entire portfolio of Assets into a single Risk Acceptance object. +- **Bulk Risk Acceptance Management**: Filter and search for specific Findings of vulnerability IDs and apply Risk Acceptance to all results simultaneously regardless of the Asset they belong to. + +### Accessing Risk Accepted Findings + +The sidebar features a section for Risk Acceptances that includes three subsections in its dropdown menu: +- **Risk Accepted Findings** + - This section includes a table of all Findings that have been risk accepted, whether through as a part of a Full Risk Acceptance object or using the Simple Risk Acceptance workflow. +- **All Risk Acceptances** + - This section includes a table of all Full Risk Acceptance objects, arranged in chronological order. +- **New Risk Acceptance** + - Clicking this option in the sidebar will start the workflow to create a Full Risk Acceptance object. + +![Risk acceptance sidebar](images/RA_image1.png) + +## Creating Risk Acceptances + +When a Finding is Risk Accepted, the following will occur: + +- The Finding’s status will no longer be “Active”. +- The Finding’s status will be changed to “Risk Accepted.” +- The Finding will no longer be counted toward Metrics, but will still appear within the Test it originated from. + +Findings can be Risk Accepted in one of two ways: They can either be added to Full Risk Acceptance objects, or by using the Simple Risk Acceptance workflow. + +### Full Risk Acceptances + +A Full Risk Acceptance allows Users to accept the risk of multiple Findings while bundling them into a single object, regardless of the Asset, Engagement, or Test they originated from. + +If organizational policy requires formal, documented risk acceptances, or Users want to have risk acceptances automatically expire after a certain date, Full Risk Acceptance is the best choice, as they capture the internal decision-making process and can serve as a source of truth. + +Each Full Risk Acceptance adds additional context to Risk Acceptance, such as: +- The name of the Risk Acceptance object. +- The owner of the Risk Acceptance object. +- The security recommendation and decision regarding how to handle the Finding(s). +- Any proof associated with the recommendation or decision. +- Details regarding the recommendation or decision. +- The User who accepts the risk associated with the decision. +- The expiration date. + - Whether the Finding’s status will return to “Active” upon expiration. + - Whether the SLA will restart upon expiration. + +Expiration is unique to Full Risk Acceptance objects, and allows any Findings that have been Risk Accepted to be re-examined at an appropriate time. Once a Risk Acceptance expires, any Findings will be set to Active again. + +If you don’t specify a date, the Default Risk Acceptance / Default Risk Acceptance Expiration days will be used from the System Settings page. + +#### How to Complete a Full Risk Acceptance + +A Full Risk Acceptance object can be made in three different ways: +- Using the **New Risk Acceptance** button in the sidebar. +- Using the **Add Risk Acceptance** button on an individual Finding. +- Clicking the **Risk Acceptance Actions** button that appears after selecting a Finding/multiple Findings from within a table. + +##### New Risk Acceptance (Sidebar) + +Clicking New Risk Acceptance from the sidebar will open a page in which the User can establish the data and details associated with a new Full Risk Acceptance object. The second page will allow the User to filter and select the Findings to be added to that object. + +##### Add Risk Acceptance (Individual) + +Having opened an individual Finding, click the gear icon in the top right corner of the view and select **Add Risk Acceptance**. From there, you will be able to either add the Finding to an existing Full Risk Acceptance object, or create a new object. + +![Risk Acceptance in Finding Submenu](images/RA_image2.png) + +##### Risk Acceptance Actions (Table) + +Having selected a Finding/Findings from within a table, click the **Risk Acceptance Actions** button that appears at the top and select either **Add to New Risk Acceptance Object** or **Add to Existing Risk Acceptance Object** and fill out the required fields. + +Findings can only be added to a single Risk Acceptance at once. If the Risk Acceptance Actions button is unclickable, it’s likely because one of the selected Findings has already been added to a Full Risk Acceptance object. + +![Risk Acceptance Actions button](images/RA_image5.png) + +##### Editing Full Risk Acceptances + +Once a Full Risk Acceptance object has been created, you can edit the details of the object, upload a file with proof of the Risk Acceptance, or delete the object entirely by clicking the gear icon in the top right of the object’s view. + +Findings can also be added and removed from the object using the same menu. Alternatively, Findings can be removed from the object by clicking the ⋮ kebab menu next to an individual Finding, clicking **Bulk Update Actions**, and selecting **Unaccept Risk** from the Simple Risk Acceptance Status dropdown menu. + +Finally, if you add any Findings to a Full Risk Acceptance object and then subsequently delete that object, the Findings within will have their status automatically reverted to “Active.” + +### Simple Risk Acceptances + +Simple Risk Acceptances do not have any associated metadata or expiration date. They are most appropriate for when tracking risk-accepted Findings is still required for compliance, but there is no associated need for an object to track or to change the status of the affected Findings. + +Simple Risk Acceptance is not enabled by default, but it can be toggled in the Optional Fields portion of the Asset’s settings after clicking the gear icon in the top right of the Asset view. + +![Enabling simple risk acceptance](images/RA_image3.png) + +Once enabled, Simple Risk Acceptance can be run from the table of Findings within a Test view. + +#### How to Complete a Simple Risk Acceptance + +You can complete the Simple Risk Acceptance workflow from either the All Findings table (accessible from the sidebar) or from the table of Findings within a specific test. The workflow is identical between the two. + +Select the Findings you wish to Risk Accept and click the **Bulk Update Actions** button that appears at the top of the table. From there, select **Accept Risk** from the Simple Risk Acceptance Status dropdown. Because the Findings have been Simple Risk Accepted, there is no associated Full Risk Acceptance object. The Findings that were Risk Accepted are accessible from the **Risk Accepted Findings** menu in the sidebar. + +![Risk Acceptance Actions in Table](images/RA_image4.png) + +Conversely, if you wish to unaccept the risk for any Findings that had been previously Risk Accepted, select **Unaccept Risk**. If a Finding has been Simple Risk Accepted, the risk must be unaccepted prior to adding it to a Full Risk Acceptance object. + +### Risk Acceptance Best Practices + +While it is possible to affect Findings within Full Risk Acceptance objects using Simple Risk Acceptance workflows (and vice versa), it is generally preferable to default to either process exclusively rather than having both enabled at once. + +For example, if Full Risk Acceptance objects are the default approach, if a Finding is Simple Risk Accepted, it may cause confusion if there is no associated object that contains the affected Finding. Similarly, if Findings are typically Simple Risk Accepted, it may create similar confusion to then add some Findings to a Full Risk Acceptance object when there are no such objects for most other Findings. diff --git a/docs/content/triage_findings/findings_workflows/risk_acceptances.md b/docs/content/triage_findings/findings_workflows/risk_acceptances.md deleted file mode 100644 index db37e0e450d..00000000000 --- a/docs/content/triage_findings/findings_workflows/risk_acceptances.md +++ /dev/null @@ -1,74 +0,0 @@ ---- -title: "Using Risk Acceptances" -description: "Adding Simple and Full Risk Acceptances to your Findings" ---- - -‘Risk Accepted’ is a special status that can be applied to a Finding in two ways: - -* **Risk Accepted** can be freely applied as a Status **if ‘Simple Risk Acceptance’** is enabled. -* You can also create **Full Risk Acceptances**, which are objects stored in DefectDojo to capture a risk acceptance decision made by your team. - -A **Full Risk Acceptance** is a special object in DefectDojo, used when Active Findings are ‘backlogged’ by your team. Often, both security teams and developer teams will decide when a Risk Acceptance is appropriate. In DefectDojo, your team can create Risk Acceptances which capture the internal decision making process and can be used as a source of truth. - -## About Full Risk Acceptances - -Each Full Risk Acceptance can store details about the following: - -* The Security team’s recommendation to a Product owner or other stakeholder -* Description of the decision made by stakeholders -* The DefectDojo user involved in the decision making process -* One or more Findings governed by the Risk Acceptance - -Findings can be added to a Risk Acceptance regardless of the Product, Test or Engagement they are in. - -Any Findings associated with a Full Risk Acceptance will be set to **Inactive**, **Risk Accepted**. - -Generally, any Risk Acceptances should follow your internal security policy and be re\-examined at an appropriate time. As a result, Risk Acceptances also have expiration dates. Once a Risk Acceptance expires, any Findings will be set to Active again. - -### DefectDojo Pro vs Open Source: Cross-Product Risk Acceptances - -**DefectDojo Pro** provides enhanced Risk Acceptance capabilities that aid in managing risk decisions at scale: - -* **Cross-Product Risk Acceptances**: In DefectDojo Pro, you can apply a single Risk Acceptance across multiple Products. For example, if CVE-2024-1234 appears in 10 different products, you can create one Risk Acceptance that governs all instances of that CVE across your entire portfolio. -* **Bulk CVE Management**: Search for all Findings with a specific CVE or vulnerability ID, then apply a Risk Acceptance to all instances simultaneously, regardless of which Product they belong to. - -**DefectDojo Open Source** implements Risk Acceptances at the Engagement level: - -* **Product-Scoped Risk Acceptances**: Risk Acceptances are restricted to individual Products. If CVE-2024-1234 appears in 10 different products, you need to create 10 separate Risk Acceptances—one for each Engagement. - -Both approaches follow the same Risk Acceptance workflow described below, but the scope differs based on your DefectDojo edition. - -### Add a new Full Risk Acceptance - -Risk Acceptances can be added to a Finding in two ways: - -* Using the **Bulk Edit** menu, when looking at a list of Findings -* Using the **Add Risk Acceptance** button on an individual Finding - -![image](images/Risk_Acceptances.png) - - -![image](images/Risk_Acceptances_2.png) -To create a New Risk Acceptance, complete the Add to New Risk Acceptance form on a Finding you wish to Risk Accept. - -![image](images/Risk_Acceptances_3.png) - -2. Select the **Owner** of the Risk Acceptance \- this is generally meant to be the DefectDojo team member responsible for the decision to Risk Accept the Finding. -3. Complete the **Optional Fields** with any relevant information. If you want to set an Expiration Date or a Warning for that Expiration Date, you can do so here as well. If you don’t specify a date, the Default Risk Acceptance / Default Risk Acceptance Expiration days will be used from the **System Settings** page. -4. Select whether you want to **Reactivate** or **Restart SLAs** on any associated Findings once the Risk Acceptance expires. - -## Simple Risk Acceptances - -If you don’t want to create a Full Risk Acceptance object and would prefer to simply **apply a status of ‘Risk Accepted’ to a Finding**, you can do so through the Bulk Edit menu. This method is called **Simple Risk Acceptance**. - -Before you can apply a Simple Risk Acceptance to a Finding, Simple Risk Acceptance will need to be enabled at the Product level. This setting can be found on the **Edit Product Form**. - -### Apply a Simple Risk Acceptance - -With one or more Findings selected, open **Bulk Update Actions**. Navigate to **Simple Risk Acceptance Status** and select either **Accept Risk** or **Unaccept Risk**. Once you have submitted the Bulk Update, ‘Risk Accepted’ will be applied to any Findings selected without the need to create a Risk Acceptance object (with an expiration date or additional metadata). - -## Locating Risk Accepted Findings - -The sidebar in DefectDojo allows you to quickly find any Risk Accepted Findings by opening **Manage \> Risk Acceptances.** From here you can view the Risk Acceptance objects themselves, or view a list of Risk Accepted Findings. - -![image](images/Risk_Acceptances_4.png) diff --git a/docs/layouts/_partials/header/header.html b/docs/layouts/_partials/header/header.html index 24af9353c0b..2db258f53d8 100644 --- a/docs/layouts/_partials/header/header.html +++ b/docs/layouts/_partials/header/header.html @@ -159,7 +159,7 @@
{{ .Site.Params.T {{ else }} {{ printf "❌ Release Notes Fetch failed from: %s\n" $url | warnf }} {{ end }} - + diff --git a/docs/package-lock.json b/docs/package-lock.json index f3d253590e4..bb8b371172a 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -3,6 +3,9 @@ "version": "1.8.0", "lockfileVersion": 3, "requires": true, + "author": "Thulite", + "description": "Doks theme", + "license": "MIT", "packages": { "": { "name": "doks", @@ -12,10 +15,10 @@ "@docsearch/css": "4.5.3", "@docsearch/js": "4.5.3", "@tabler/icons": "3.36.1", - "@thulite/doks-core": "1.8.4", - "@thulite/images": "3.3.4", - "@thulite/inline-svg": "1.2.2", - "@thulite/seo": "2.4.3", + "@thulite/doks-core": "1.8.3", + "@thulite/images": "3.3.3", + "@thulite/inline-svg": "1.2.1", + "@thulite/seo": "2.4.2", "thulite": "2.6.4" }, "devDependencies": { @@ -56,9 +59,9 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.28.6.tgz", - "integrity": "sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.28.5", @@ -70,30 +73,29 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.6.tgz", - "integrity": "sha512-2lfu57JtzctfIrcGMz992hyLlByuzgIk58+hhGCxjKZ3rWI82NnVLjXcaTqkI2NvlcvOskZaiZ5kjUALo3Lpxg==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", + "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.6.tgz", - "integrity": "sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", "license": "MIT", - "peer": true, "dependencies": { - "@babel/code-frame": "^7.28.6", - "@babel/generator": "^7.28.6", + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", "@babel/helper-compilation-targets": "^7.28.6", "@babel/helper-module-transforms": "^7.28.6", "@babel/helpers": "^7.28.6", - "@babel/parser": "^7.28.6", + "@babel/parser": "^7.29.0", "@babel/template": "^7.28.6", - "@babel/traverse": "^7.28.6", - "@babel/types": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", @@ -110,13 +112,13 @@ } }, "node_modules/@babel/generator": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.6.tgz", - "integrity": "sha512-lOoVRwADj8hjf7al89tvQ2a1lf53Z+7tiXMgpZJL3maQPDxh0DgLMN62B2MKUOFcoodBHLMbDM6WAbKgNy5Suw==", + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", "license": "MIT", "dependencies": { - "@babel/parser": "^7.28.6", - "@babel/types": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -192,16 +194,16 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.5.tgz", - "integrity": "sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg==", + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.6.tgz", + "integrity": "sha512-mOAsxeeKkUKayvZR3HeTYD/fICpCPLJrU5ZjelT/PA6WHtNDBOE436YiaEUvHN454bRM3CebhDsIpieCc4texA==", "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-plugin-utils": "^7.27.1", - "debug": "^4.4.1", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "debug": "^4.4.3", "lodash.debounce": "^4.0.8", - "resolve": "^1.22.10" + "resolve": "^1.22.11" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -382,12 +384,12 @@ } }, "node_modules/@babel/parser": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.6.tgz", - "integrity": "sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz", + "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==", "license": "MIT", "dependencies": { - "@babel/types": "^7.28.6" + "@babel/types": "^7.29.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -549,14 +551,14 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.28.6.tgz", - "integrity": "sha512-9knsChgsMzBV5Yh3kkhrZNxH3oCYAfMBkNNaVN4cP2RVlFPe8wYdwwcnOsAbkdDoV9UjFtOXWrWB52M8W4jNeA==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.29.0.tgz", + "integrity": "sha512-va0VdWro4zlBr2JsXC+ofCPB2iG12wPtVGTWFx2WLDOM3nYQZZIGP82qku2eW/JR83sD+k2k+CsNtyEbUqhU6w==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-remap-async-to-generator": "^7.27.1", - "@babel/traverse": "^7.28.6" + "@babel/traverse": "^7.29.0" }, "engines": { "node": ">=6.9.0" @@ -728,9 +730,9 @@ } }, "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.28.6.tgz", - "integrity": "sha512-5suVoXjC14lUN6ZL9OLKIHCNVWCrqGqlmEp/ixdXjvgnEl/kauLvvMO/Xw9NyMc95Joj1AeLVPVMvibBgSoFlA==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.29.0.tgz", + "integrity": "sha512-zBPcW2lFGxdiD8PUnPwJjag2J9otbcLQzvbiOzDxpYXyCuYX9agOwMPGn1prVH0a4qzhCKu24rlH4c1f7yA8rw==", "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.28.5", @@ -930,15 +932,15 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.28.5.tgz", - "integrity": "sha512-vn5Jma98LCOeBy/KpeQhXcV2WZgaRUtjwQmjoBuLNlOmkg0fB5pdvYVeWRYI69wWKwK2cD1QbMiUQnoujWvrew==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.0.tgz", + "integrity": "sha512-PrujnVFbOdUpw4UHiVwKvKRLMMic8+eC0CuNlxjsyZUiBjhFdPsewdXCkveh2KqBA9/waD0W1b4hXSOBQJezpQ==", "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.28.3", - "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-validator-identifier": "^7.28.5", - "@babel/traverse": "^7.28.5" + "@babel/traverse": "^7.29.0" }, "engines": { "node": ">=6.9.0" @@ -964,13 +966,13 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz", - "integrity": "sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.29.0.tgz", + "integrity": "sha512-1CZQA5KNAD6ZYQLPw7oi5ewtDNxH/2vuCh+6SmvgDfhumForvs8a1o9n0UrEoBD8HU4djO2yWngTQlXl1NDVEQ==", "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-regexp-features-plugin": "^7.28.5", + "@babel/helper-plugin-utils": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -1154,9 +1156,9 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.6.tgz", - "integrity": "sha512-eZhoEZHYQLL5uc1gS5e9/oTknS0sSSAtd5TkKMUp3J+S/CaUjagc0kOUPsEbDmMeva0nC3WWl4SxVY6+OBuxfw==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.29.0.tgz", + "integrity": "sha512-FijqlqMA7DmRdg/aINBSs04y8XNTYw/lr1gJ2WsmBnnaNw1iS43EPkJW+zK7z65auG3AWRFXWj+NcTQwYptUog==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" @@ -1339,12 +1341,12 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.28.6.tgz", - "integrity": "sha512-GaTI4nXDrs7l0qaJ6Rg06dtOXTBCG6TMDB44zbqofCIC4PqC7SEvmFFtpxzCDw9W5aJ7RKVshgXTLvLdBFV/qw==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.29.0.tgz", + "integrity": "sha512-fNEdfc0yi16lt6IZo2Qxk3knHVdfMYX33czNb4v8yWhemoBhibCpQK/uYHtSKIiO+p/zd3+8fYVXhQdOVV608w==", "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.28.6", + "@babel/compat-data": "^7.29.0", "@babel/helper-compilation-targets": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-validator-option": "^7.27.1", @@ -1358,7 +1360,7 @@ "@babel/plugin-syntax-import-attributes": "^7.28.6", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", "@babel/plugin-transform-arrow-functions": "^7.27.1", - "@babel/plugin-transform-async-generator-functions": "^7.28.6", + "@babel/plugin-transform-async-generator-functions": "^7.29.0", "@babel/plugin-transform-async-to-generator": "^7.28.6", "@babel/plugin-transform-block-scoped-functions": "^7.27.1", "@babel/plugin-transform-block-scoping": "^7.28.6", @@ -1369,7 +1371,7 @@ "@babel/plugin-transform-destructuring": "^7.28.5", "@babel/plugin-transform-dotall-regex": "^7.28.6", "@babel/plugin-transform-duplicate-keys": "^7.27.1", - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.28.6", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.29.0", "@babel/plugin-transform-dynamic-import": "^7.27.1", "@babel/plugin-transform-explicit-resource-management": "^7.28.6", "@babel/plugin-transform-exponentiation-operator": "^7.28.6", @@ -1382,9 +1384,9 @@ "@babel/plugin-transform-member-expression-literals": "^7.27.1", "@babel/plugin-transform-modules-amd": "^7.27.1", "@babel/plugin-transform-modules-commonjs": "^7.28.6", - "@babel/plugin-transform-modules-systemjs": "^7.28.5", + "@babel/plugin-transform-modules-systemjs": "^7.29.0", "@babel/plugin-transform-modules-umd": "^7.27.1", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.27.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.29.0", "@babel/plugin-transform-new-target": "^7.27.1", "@babel/plugin-transform-nullish-coalescing-operator": "^7.28.6", "@babel/plugin-transform-numeric-separator": "^7.28.6", @@ -1396,7 +1398,7 @@ "@babel/plugin-transform-private-methods": "^7.28.6", "@babel/plugin-transform-private-property-in-object": "^7.28.6", "@babel/plugin-transform-property-literals": "^7.27.1", - "@babel/plugin-transform-regenerator": "^7.28.6", + "@babel/plugin-transform-regenerator": "^7.29.0", "@babel/plugin-transform-regexp-modifiers": "^7.28.6", "@babel/plugin-transform-reserved-words": "^7.27.1", "@babel/plugin-transform-shorthand-properties": "^7.27.1", @@ -1409,10 +1411,10 @@ "@babel/plugin-transform-unicode-regex": "^7.27.1", "@babel/plugin-transform-unicode-sets-regex": "^7.28.6", "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.14", - "babel-plugin-polyfill-corejs3": "^0.13.0", - "babel-plugin-polyfill-regenerator": "^0.6.5", - "core-js-compat": "^3.43.0", + "babel-plugin-polyfill-corejs2": "^0.4.15", + "babel-plugin-polyfill-corejs3": "^0.14.0", + "babel-plugin-polyfill-regenerator": "^0.6.6", + "core-js-compat": "^3.48.0", "semver": "^6.3.1" }, "engines": { @@ -1451,17 +1453,17 @@ } }, "node_modules/@babel/traverse": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.6.tgz", - "integrity": "sha512-fgWX62k02qtjqdSNTAGxmKYY/7FSL9WAS1o2Hu5+I5m9T0yxZzr4cnrfXQ/MX0rIifthCSs6FKTlzYbJcPtMNg==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.28.6", - "@babel/generator": "^7.28.6", + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.6", + "@babel/parser": "^7.29.0", "@babel/template": "^7.28.6", - "@babel/types": "^7.28.6", + "@babel/types": "^7.29.0", "debug": "^4.3.1" }, "engines": { @@ -1469,9 +1471,9 @@ } }, "node_modules/@babel/types": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.6.tgz", - "integrity": "sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.27.1", @@ -1494,9 +1496,9 @@ "license": "MIT" }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.1.tgz", - "integrity": "sha512-HHB50pdsBX6k47S4u5g/CaLjqS3qwaOVE5ILsq64jyzgMhLuCuZ8rGzM9yhsAjfjkbgUPMzZEPa7DAp7yz6vuA==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.3.tgz", + "integrity": "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==", "cpu": [ "ppc64" ], @@ -1511,9 +1513,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.1.tgz", - "integrity": "sha512-kFqa6/UcaTbGm/NncN9kzVOODjhZW8e+FRdSeypWe6j33gzclHtwlANs26JrupOntlcWmB0u8+8HZo8s7thHvg==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.3.tgz", + "integrity": "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==", "cpu": [ "arm" ], @@ -1528,9 +1530,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.1.tgz", - "integrity": "sha512-45fuKmAJpxnQWixOGCrS+ro4Uvb4Re9+UTieUY2f8AEc+t7d4AaZ6eUJ3Hva7dtrxAAWHtlEFsXFMAgNnGU9uQ==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.3.tgz", + "integrity": "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==", "cpu": [ "arm64" ], @@ -1545,9 +1547,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.1.tgz", - "integrity": "sha512-LBEpOz0BsgMEeHgenf5aqmn/lLNTFXVfoWMUox8CtWWYK9X4jmQzWjoGoNb8lmAYml/tQ/Ysvm8q7szu7BoxRQ==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.3.tgz", + "integrity": "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==", "cpu": [ "x64" ], @@ -1562,9 +1564,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.1.tgz", - "integrity": "sha512-veg7fL8eMSCVKL7IW4pxb54QERtedFDfY/ASrumK/SbFsXnRazxY4YykN/THYqFnFwJ0aVjiUrVG2PwcdAEqQQ==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.3.tgz", + "integrity": "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==", "cpu": [ "arm64" ], @@ -1579,9 +1581,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.1.tgz", - "integrity": "sha512-+3ELd+nTzhfWb07Vol7EZ+5PTbJ/u74nC6iv4/lwIU99Ip5uuY6QoIf0Hn4m2HoV0qcnRivN3KSqc+FyCHjoVQ==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.3.tgz", + "integrity": "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==", "cpu": [ "x64" ], @@ -1596,9 +1598,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.1.tgz", - "integrity": "sha512-/8Rfgns4XD9XOSXlzUDepG8PX+AVWHliYlUkFI3K3GB6tqbdjYqdhcb4BKRd7C0BhZSoaCxhv8kTcBrcZWP+xg==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.3.tgz", + "integrity": "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==", "cpu": [ "arm64" ], @@ -1613,9 +1615,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.1.tgz", - "integrity": "sha512-GITpD8dK9C+r+5yRT/UKVT36h/DQLOHdwGVwwoHidlnA168oD3uxA878XloXebK4Ul3gDBBIvEdL7go9gCUFzQ==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.3.tgz", + "integrity": "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==", "cpu": [ "x64" ], @@ -1630,9 +1632,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.1.tgz", - "integrity": "sha512-ieMID0JRZY/ZeCrsFQ3Y3NlHNCqIhTprJfDgSB3/lv5jJZ8FX3hqPyXWhe+gvS5ARMBJ242PM+VNz/ctNj//eA==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.3.tgz", + "integrity": "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==", "cpu": [ "arm" ], @@ -1647,9 +1649,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.1.tgz", - "integrity": "sha512-W9//kCrh/6in9rWIBdKaMtuTTzNj6jSeG/haWBADqLLa9P8O5YSRDzgD5y9QBok4AYlzS6ARHifAb75V6G670Q==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.3.tgz", + "integrity": "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==", "cpu": [ "arm64" ], @@ -1664,9 +1666,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.1.tgz", - "integrity": "sha512-VIUV4z8GD8rtSVMfAj1aXFahsi/+tcoXXNYmXgzISL+KB381vbSTNdeZHHHIYqFyXcoEhu9n5cT+05tRv13rlw==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.3.tgz", + "integrity": "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==", "cpu": [ "ia32" ], @@ -1681,9 +1683,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.1.tgz", - "integrity": "sha512-l4rfiiJRN7sTNI//ff65zJ9z8U+k6zcCg0LALU5iEWzY+a1mVZ8iWC1k5EsNKThZ7XCQ6YWtsZ8EWYm7r1UEsg==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.3.tgz", + "integrity": "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==", "cpu": [ "loong64" ], @@ -1698,9 +1700,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.1.tgz", - "integrity": "sha512-U0bEuAOLvO/DWFdygTHWY8C067FXz+UbzKgxYhXC0fDieFa0kDIra1FAhsAARRJbvEyso8aAqvPdNxzWuStBnA==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.3.tgz", + "integrity": "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==", "cpu": [ "mips64el" ], @@ -1715,9 +1717,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.1.tgz", - "integrity": "sha512-NzdQ/Xwu6vPSf/GkdmRNsOfIeSGnh7muundsWItmBsVpMoNPVpM61qNzAVY3pZ1glzzAxLR40UyYM23eaDDbYQ==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.3.tgz", + "integrity": "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==", "cpu": [ "ppc64" ], @@ -1732,9 +1734,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.1.tgz", - "integrity": "sha512-7zlw8p3IApcsN7mFw0O1Z1PyEk6PlKMu18roImfl3iQHTnr/yAfYv6s4hXPidbDoI2Q0pW+5xeoM4eTCC0UdrQ==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.3.tgz", + "integrity": "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==", "cpu": [ "riscv64" ], @@ -1749,9 +1751,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.1.tgz", - "integrity": "sha512-cGj5wli+G+nkVQdZo3+7FDKC25Uh4ZVwOAK6A06Hsvgr8WqBBuOy/1s+PUEd/6Je+vjfm6stX0kmib5b/O2Ykw==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.3.tgz", + "integrity": "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==", "cpu": [ "s390x" ], @@ -1766,9 +1768,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.1.tgz", - "integrity": "sha512-z3H/HYI9MM0HTv3hQZ81f+AKb+yEoCRlUby1F80vbQ5XdzEMyY/9iNlAmhqiBKw4MJXwfgsh7ERGEOhrM1niMA==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.3.tgz", + "integrity": "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==", "cpu": [ "x64" ], @@ -1783,9 +1785,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.1.tgz", - "integrity": "sha512-wzC24DxAvk8Em01YmVXyjl96Mr+ecTPyOuADAvjGg+fyBpGmxmcr2E5ttf7Im8D0sXZihpxzO1isus8MdjMCXQ==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.3.tgz", + "integrity": "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==", "cpu": [ "arm64" ], @@ -1800,9 +1802,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.1.tgz", - "integrity": "sha512-1YQ8ybGi2yIXswu6eNzJsrYIGFpnlzEWRl6iR5gMgmsrR0FcNoV1m9k9sc3PuP5rUBLshOZylc9nqSgymI+TYg==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.3.tgz", + "integrity": "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==", "cpu": [ "x64" ], @@ -1817,9 +1819,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.1.tgz", - "integrity": "sha512-5Z+DzLCrq5wmU7RDaMDe2DVXMRm2tTDvX2KU14JJVBN2CT/qov7XVix85QoJqHltpvAOZUAc3ndU56HSMWrv8g==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.3.tgz", + "integrity": "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==", "cpu": [ "arm64" ], @@ -1834,9 +1836,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.1.tgz", - "integrity": "sha512-Q73ENzIdPF5jap4wqLtsfh8YbYSZ8Q0wnxplOlZUOyZy7B4ZKW8DXGWgTCZmF8VWD7Tciwv5F4NsRf6vYlZtqg==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.3.tgz", + "integrity": "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==", "cpu": [ "x64" ], @@ -1851,9 +1853,9 @@ } }, "node_modules/@esbuild/openharmony-arm64": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.1.tgz", - "integrity": "sha512-ajbHrGM/XiK+sXM0JzEbJAen+0E+JMQZ2l4RR4VFwvV9JEERx+oxtgkpoKv1SevhjavK2z2ReHk32pjzktWbGg==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.3.tgz", + "integrity": "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==", "cpu": [ "arm64" ], @@ -1868,9 +1870,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.1.tgz", - "integrity": "sha512-IPUW+y4VIjuDVn+OMzHc5FV4GubIwPnsz6ubkvN8cuhEqH81NovB53IUlrlBkPMEPxvNnf79MGBoz8rZ2iW8HA==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.3.tgz", + "integrity": "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==", "cpu": [ "x64" ], @@ -1885,9 +1887,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.1.tgz", - "integrity": "sha512-RIVRWiljWA6CdVu8zkWcRmGP7iRRIIwvhDKem8UMBjPql2TXM5PkDVvvrzMtj1V+WFPB4K7zkIGM7VzRtFkjdg==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.3.tgz", + "integrity": "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==", "cpu": [ "arm64" ], @@ -1902,9 +1904,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.1.tgz", - "integrity": "sha512-2BR5M8CPbptC1AK5JbJT1fWrHLvejwZidKx3UMSF0ecHMa+smhi16drIrCEggkgviBwLYd5nwrFLSl5Kho96RQ==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.3.tgz", + "integrity": "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==", "cpu": [ "ia32" ], @@ -1919,9 +1921,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.1.tgz", - "integrity": "sha512-d5X6RMYv6taIymSk8JBP+nxv8DQAMY6A51GPgusqLdK9wBz5wWIXy1KjTck6HnjE9hqJzJRdk+1p/t5soSbCtw==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.3.tgz", + "integrity": "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==", "cpu": [ "x64" ], @@ -1957,9 +1959,9 @@ } }, "node_modules/@isaacs/brace-expansion": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", - "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.1.tgz", + "integrity": "sha512-WMz71T1JS624nWj2n2fnYAuPovhv7EUhk69R6i9dsVyzxt5eM3bjwvgk9L+APE1TRscGysAVMANkB0jh0LQZrQ==", "license": "MIT", "dependencies": { "@isaacs/balanced-match": "^4.0.1" @@ -1969,99 +1971,12 @@ } }, "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "license": "MIT" - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-9.0.0.tgz", + "integrity": "sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg==", + "license": "BlueOak-1.0.0", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "node": ">=18" } }, "node_modules/@jridgewell/gen-mapping": { @@ -2121,16 +2036,15 @@ "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", "license": "MIT", - "peer": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/popperjs" } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.5.tgz", - "integrity": "sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.57.1.tgz", + "integrity": "sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg==", "cpu": [ "arm" ], @@ -2142,9 +2056,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.5.tgz", - "integrity": "sha512-mQGfsIEFcu21mvqkEKKu2dYmtuSZOBMmAl5CFlPGLY94Vlcm+zWApK7F/eocsNzp8tKmbeBP8yXyAbx0XHsFNA==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.57.1.tgz", + "integrity": "sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w==", "cpu": [ "arm64" ], @@ -2156,9 +2070,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.5.tgz", - "integrity": "sha512-takF3CR71mCAGA+v794QUZ0b6ZSrgJkArC+gUiG6LB6TQty9T0Mqh3m2ImRBOxS2IeYBo4lKWIieSvnEk2OQWA==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.57.1.tgz", + "integrity": "sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg==", "cpu": [ "arm64" ], @@ -2170,9 +2084,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.5.tgz", - "integrity": "sha512-W901Pla8Ya95WpxDn//VF9K9u2JbocwV/v75TE0YIHNTbhqUTv9w4VuQ9MaWlNOkkEfFwkdNhXgcLqPSmHy0fA==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.57.1.tgz", + "integrity": "sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w==", "cpu": [ "x64" ], @@ -2184,9 +2098,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.5.tgz", - "integrity": "sha512-QofO7i7JycsYOWxe0GFqhLmF6l1TqBswJMvICnRUjqCx8b47MTo46W8AoeQwiokAx3zVryVnxtBMcGcnX12LvA==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.57.1.tgz", + "integrity": "sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug==", "cpu": [ "arm64" ], @@ -2198,9 +2112,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.5.tgz", - "integrity": "sha512-jr21b/99ew8ujZubPo9skbrItHEIE50WdV86cdSoRkKtmWa+DDr6fu2c/xyRT0F/WazZpam6kk7IHBerSL7LDQ==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.57.1.tgz", + "integrity": "sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q==", "cpu": [ "x64" ], @@ -2212,9 +2126,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.5.tgz", - "integrity": "sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.57.1.tgz", + "integrity": "sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==", "cpu": [ "arm" ], @@ -2226,9 +2140,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.5.tgz", - "integrity": "sha512-Fw4tysRutyQc/wwkmcyoqFtJhh0u31K+Q6jYjeicsGJJ7bbEq8LwPWV/w0cnzOqR2m694/Af6hpFayLJZkG2VQ==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.57.1.tgz", + "integrity": "sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==", "cpu": [ "arm" ], @@ -2240,9 +2154,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.5.tgz", - "integrity": "sha512-a+3wVnAYdQClOTlyapKmyI6BLPAFYs0JM8HRpgYZQO02rMR09ZcV9LbQB+NL6sljzG38869YqThrRnfPMCDtZg==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.57.1.tgz", + "integrity": "sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==", "cpu": [ "arm64" ], @@ -2254,9 +2168,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.5.tgz", - "integrity": "sha512-AvttBOMwO9Pcuuf7m9PkC1PUIKsfaAJ4AYhy944qeTJgQOqJYJ9oVl2nYgY7Rk0mkbsuOpCAYSs6wLYB2Xiw0Q==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.57.1.tgz", + "integrity": "sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==", "cpu": [ "arm64" ], @@ -2268,9 +2182,23 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.5.tgz", - "integrity": "sha512-DkDk8pmXQV2wVrF6oq5tONK6UHLz/XcEVow4JTTerdeV1uqPeHxwcg7aFsfnSm9L+OO8WJsWotKM2JJPMWrQtA==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.57.1.tgz", + "integrity": "sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.57.1.tgz", + "integrity": "sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw==", "cpu": [ "loong64" ], @@ -2282,9 +2210,23 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.5.tgz", - "integrity": "sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.57.1.tgz", + "integrity": "sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.57.1.tgz", + "integrity": "sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw==", "cpu": [ "ppc64" ], @@ -2296,9 +2238,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.5.tgz", - "integrity": "sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.57.1.tgz", + "integrity": "sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==", "cpu": [ "riscv64" ], @@ -2310,9 +2252,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.5.tgz", - "integrity": "sha512-hq3jU/kGyjXWTvAh2awn8oHroCbrPm8JqM7RUpKjalIRWWXE01CQOf/tUNWNHjmbMHg/hmNCwc/Pz3k1T/j/Lg==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.57.1.tgz", + "integrity": "sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==", "cpu": [ "riscv64" ], @@ -2324,9 +2266,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.5.tgz", - "integrity": "sha512-gn8kHOrku8D4NGHMK1Y7NA7INQTRdVOntt1OCYypZPRt6skGbddska44K8iocdpxHTMMNui5oH4elPH4QOLrFQ==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.57.1.tgz", + "integrity": "sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==", "cpu": [ "s390x" ], @@ -2338,9 +2280,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.5.tgz", - "integrity": "sha512-hXGLYpdhiNElzN770+H2nlx+jRog8TyynpTVzdlc6bndktjKWyZyiCsuDAlpd+j+W+WNqfcyAWz9HxxIGfZm1Q==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.57.1.tgz", + "integrity": "sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==", "cpu": [ "x64" ], @@ -2352,9 +2294,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.5.tgz", - "integrity": "sha512-arCGIcuNKjBoKAXD+y7XomR9gY6Mw7HnFBv5Rw7wQRvwYLR7gBAgV7Mb2QTyjXfTveBNFAtPt46/36vV9STLNg==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.57.1.tgz", + "integrity": "sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw==", "cpu": [ "x64" ], @@ -2365,10 +2307,24 @@ "linux" ] }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.57.1.tgz", + "integrity": "sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.5.tgz", - "integrity": "sha512-QoFqB6+/9Rly/RiPjaomPLmR/13cgkIGfA40LHly9zcH1S0bN2HVFYk3a1eAyHQyjs3ZJYlXvIGtcCs5tko9Cw==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.57.1.tgz", + "integrity": "sha512-4wYoDpNg6o/oPximyc/NG+mYUejZrCU2q+2w6YZqrAs2UcNUChIZXjtafAiiZSUc7On8v5NyNj34Kzj/Ltk6dQ==", "cpu": [ "arm64" ], @@ -2380,9 +2336,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.5.tgz", - "integrity": "sha512-w0cDWVR6MlTstla1cIfOGyl8+qb93FlAVutcor14Gf5Md5ap5ySfQ7R9S/NjNaMLSFdUnKGEasmVnu3lCMqB7w==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.57.1.tgz", + "integrity": "sha512-O54mtsV/6LW3P8qdTcamQmuC990HDfR71lo44oZMZlXU4tzLrbvTii87Ni9opq60ds0YzuAlEr/GNwuNluZyMQ==", "cpu": [ "arm64" ], @@ -2394,9 +2350,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.5.tgz", - "integrity": "sha512-Aufdpzp7DpOTULJCuvzqcItSGDH73pF3ko/f+ckJhxQyHtp67rHw3HMNxoIdDMUITJESNE6a8uh4Lo4SLouOUg==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.57.1.tgz", + "integrity": "sha512-P3dLS+IerxCT/7D2q2FYcRdWRl22dNbrbBEtxdWhXrfIMPP9lQhb5h4Du04mdl5Woq05jVCDPCMF7Ub0NAjIew==", "cpu": [ "ia32" ], @@ -2408,9 +2364,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.5.tgz", - "integrity": "sha512-UGBUGPFp1vkj6p8wCRraqNhqwX/4kNQPS57BCFc8wYh0g94iVIW33wJtQAx3G7vrjjNtRaxiMUylM0ktp/TRSQ==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.57.1.tgz", + "integrity": "sha512-VMBH2eOOaKGtIJYleXsi2B8CPVADrh+TyNxJ4mWPnKfLB/DBUmzW+5m1xUrcwWoMfSLagIRpjUFeW5CO5hyciQ==", "cpu": [ "x64" ], @@ -2422,9 +2378,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.5.tgz", - "integrity": "sha512-TAcgQh2sSkykPRWLrdyy2AiceMckNf5loITqXxFI5VuQjS5tSuw3WlwdN8qv8vzjLAUTvYaH/mVjSFpbkFbpTg==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.57.1.tgz", + "integrity": "sha512-mxRFDdHIWRxg3UfIIAwCm6NzvxG0jDX/wBN6KsQFTvKFqqg9vTrWUE68qEjHt19A5wwx5X5aUi2zuZT7YR0jrA==", "cpu": [ "x64" ], @@ -2437,9 +2393,7 @@ }, "node_modules/@tabler/icons": { "version": "3.36.1", - "resolved": "https://registry.npmjs.org/@tabler/icons/-/icons-3.36.1.tgz", "integrity": "sha512-f4Jg3Fof/Vru5ioix/UO4GX+sdDsF9wQo47FbtvG+utIYYVQ/QVAC0QYgcBbAjQGfbdOh2CCf0BgiFOF9Ixtjw==", - "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/codecalm" @@ -2481,41 +2435,41 @@ } }, "node_modules/@thulite/doks-core": { - "version": "1.8.4", - "resolved": "https://registry.npmjs.org/@thulite/doks-core/-/doks-core-1.8.4.tgz", - "integrity": "sha512-RjIKUOXfT8XpczAsmV/2LLQ+oHaIKUyKVhDFU0Sc8s9tuCopJHaxIQEaOtnplqui5iMJtsvh960lOMsUAWyTfw==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@thulite/doks-core/-/doks-core-1.8.3.tgz", + "integrity": "sha512-qGPlWACP40PDbhQdjK/n5Vmjd72K47qHt0Wtb3l9PeXAl+QYHyghedZuoJIZcehwC17fqiSuwThY5M9A1DABgw==", "license": "MIT", "dependencies": { - "@thulite/bootstrap": "^1.2.3", + "@thulite/bootstrap": "^1.2.2", "clipboard": "^2.0.11", - "flexsearch": "^0.8.212" + "flexsearch": "^0.8.205" }, "engines": { "node": ">=20.11.0" } }, "node_modules/@thulite/images": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@thulite/images/-/images-3.3.4.tgz", - "integrity": "sha512-l7fYyBFiiZWgFkaBLkINDrzDZ+KXTxWnvhTVPPEysL+TexzEubTY7b5s00iQoFZsUg4m+6flbYxZSupydFrEHg==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@thulite/images/-/images-3.3.3.tgz", + "integrity": "sha512-68cjGRJsNgTsUHK0eRTBnefKFjjDnz+0rK5z+Vx0P09d6MUsgKiSng1Wx4zS1wIeO9dRYHqZ0d9t8uOGK9KM7w==", "license": "MIT", "engines": { "node": ">=20.11.0" } }, "node_modules/@thulite/inline-svg": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@thulite/inline-svg/-/inline-svg-1.2.2.tgz", - "integrity": "sha512-jbxeXQjJT5HFuRufckEbEAoZjHJZCHwLY/rjJS6Lhc9ZZuMMp6QaOVk4pJa0Ey1UBsTJLcACyfm/K47oGJBluQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@thulite/inline-svg/-/inline-svg-1.2.1.tgz", + "integrity": "sha512-b6FL896o59Tv4rTTb6KZEHniSRJImphkeC9KJU/vLLIRgL2xgNZcF2XxSiebjoqK7UtWEA1qNPhxIGxZi3mqVw==", "license": "MIT", "engines": { "node": ">=20.11.0" } }, "node_modules/@thulite/seo": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@thulite/seo/-/seo-2.4.3.tgz", - "integrity": "sha512-1Y8PJXjGQBoB+VgcC3+RiPxGyI0VshBgufloOtPGlolB+K+qSMY9SPla1mL2HzkLbteb2W9+9CktS7CA/f90Rg==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@thulite/seo/-/seo-2.4.2.tgz", + "integrity": "sha512-PP9DF2KDQ+fCZbkKfBz9scMxYLWhfBQ5w84man/HGLZl5P8OfQu4hXJkkEmkacfRnaTLn9b7Z72IUJ480Km42w==", "license": "MIT", "engines": { "node": ">=20.11.0" @@ -2565,10 +2519,22 @@ "node": ">= 8" } }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/autoprefixer": { - "version": "10.4.23", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.23.tgz", - "integrity": "sha512-YYTXSFulfwytnjAPlw8QHncHJmlvFKtczb8InXaAx9Q0LbfDnfEYDE55omerIJKihhmU61Ft+cAOSzQVaBUmeA==", + "version": "10.4.24", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.24.tgz", + "integrity": "sha512-uHZg7N9ULTVbutaIsDRoUkoS8/h3bdsmVJYZ5l3wv8Cp/6UIIoRDm90hZ+BwxUj/hGBEzLxdHNSKuFpn8WOyZw==", "funding": [ { "type": "opencollective", @@ -2586,7 +2552,7 @@ "license": "MIT", "dependencies": { "browserslist": "^4.28.1", - "caniuse-lite": "^1.0.30001760", + "caniuse-lite": "^1.0.30001766", "fraction.js": "^5.3.4", "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" @@ -2602,13 +2568,13 @@ } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz", - "integrity": "sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg==", + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.15.tgz", + "integrity": "sha512-hR3GwrRwHUfYwGfrisXPIDP3JcYfBrW7wKE7+Au6wDYl7fm/ka1NEII6kORzxNU556JjfidZeBsO10kYvtV1aw==", "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.27.7", - "@babel/helper-define-polyfill-provider": "^0.6.5", + "@babel/compat-data": "^7.28.6", + "@babel/helper-define-polyfill-provider": "^0.6.6", "semver": "^6.3.1" }, "peerDependencies": { @@ -2616,25 +2582,25 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz", - "integrity": "sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==", + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.14.0.tgz", + "integrity": "sha512-AvDcMxJ34W4Wgy4KBIIePQTAOP1Ie2WFwkQp3dB7FQ/f0lI5+nM96zUnYEOE1P9sEg0es5VCP0HxiWu5fUHZAQ==", "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.5", - "core-js-compat": "^3.43.0" + "@babel/helper-define-polyfill-provider": "^0.6.6", + "core-js-compat": "^3.48.0" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.5.tgz", - "integrity": "sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg==", + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.6.tgz", + "integrity": "sha512-hYm+XLYRMvupxiQzrvXUj7YyvFFVfv5gI0R71AJzudg1g2AI2vyCPPIFEBjk162/wFzti3inBHo7isWFuEVS/A==", "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.5" + "@babel/helper-define-polyfill-provider": "^0.6.6" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -2647,9 +2613,9 @@ "license": "MIT" }, "node_modules/baseline-browser-mapping": { - "version": "2.9.17", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.17.tgz", - "integrity": "sha512-agD0MgJFUP/4nvjqzIB29zRPUuCF7Ge6mEv9s8dHrtYD7QWXRcx75rOADE/d5ah1NI+0vkDl0yorDd5U852IQQ==", + "version": "2.9.19", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz", + "integrity": "sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==", "license": "Apache-2.0", "bin": { "baseline-browser-mapping": "dist/cli.js" @@ -2727,7 +2693,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -2752,9 +2717,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001766", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001766.tgz", - "integrity": "sha512-4C0lfJ0/YPjJQHagaE9x2Elb69CIqEPZeG0anQt9SIvIoOH4a4uaRl73IavyO+0qZh6MDLH//DrXThEYKHkmYA==", + "version": "1.0.30001768", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001768.tgz", + "integrity": "sha512-qY3aDRZC5nWPgHUgIB84WL+nySuo19wk0VJpp/XI9T34lrvkyhRvNVOFJOp2kxClQhiFBu+TaUSudf6oa3vkSA==", "funding": [ { "type": "opencollective", @@ -2939,16 +2904,10 @@ "node": ">=4" } }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "license": "MIT" - }, "node_modules/electron-to-chromium": { - "version": "1.5.278", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.278.tgz", - "integrity": "sha512-dQ0tM1svDRQOwxnXxm+twlGTjr9Upvt8UFWAgmLsxEzFQxhbti4VwxmMjsDxVC51Zo84swW7FVCXEV+VAkhuPw==", + "version": "1.5.286", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.286.tgz", + "integrity": "sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==", "license": "ISC" }, "node_modules/emoji-regex": { @@ -2958,9 +2917,9 @@ "license": "MIT" }, "node_modules/esbuild": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.1.tgz", - "integrity": "sha512-yY35KZckJJuVVPXpvjgxiCuVEJT67F6zDeVTv4rizyPrfGBUpZQsvmxnN+C371c2esD/hNMjj4tpBhuueLN7aA==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.3.tgz", + "integrity": "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -2971,32 +2930,32 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.27.1", - "@esbuild/android-arm": "0.27.1", - "@esbuild/android-arm64": "0.27.1", - "@esbuild/android-x64": "0.27.1", - "@esbuild/darwin-arm64": "0.27.1", - "@esbuild/darwin-x64": "0.27.1", - "@esbuild/freebsd-arm64": "0.27.1", - "@esbuild/freebsd-x64": "0.27.1", - "@esbuild/linux-arm": "0.27.1", - "@esbuild/linux-arm64": "0.27.1", - "@esbuild/linux-ia32": "0.27.1", - "@esbuild/linux-loong64": "0.27.1", - "@esbuild/linux-mips64el": "0.27.1", - "@esbuild/linux-ppc64": "0.27.1", - "@esbuild/linux-riscv64": "0.27.1", - "@esbuild/linux-s390x": "0.27.1", - "@esbuild/linux-x64": "0.27.1", - "@esbuild/netbsd-arm64": "0.27.1", - "@esbuild/netbsd-x64": "0.27.1", - "@esbuild/openbsd-arm64": "0.27.1", - "@esbuild/openbsd-x64": "0.27.1", - "@esbuild/openharmony-arm64": "0.27.1", - "@esbuild/sunos-x64": "0.27.1", - "@esbuild/win32-arm64": "0.27.1", - "@esbuild/win32-ia32": "0.27.1", - "@esbuild/win32-x64": "0.27.1" + "@esbuild/aix-ppc64": "0.27.3", + "@esbuild/android-arm": "0.27.3", + "@esbuild/android-arm64": "0.27.3", + "@esbuild/android-x64": "0.27.3", + "@esbuild/darwin-arm64": "0.27.3", + "@esbuild/darwin-x64": "0.27.3", + "@esbuild/freebsd-arm64": "0.27.3", + "@esbuild/freebsd-x64": "0.27.3", + "@esbuild/linux-arm": "0.27.3", + "@esbuild/linux-arm64": "0.27.3", + "@esbuild/linux-ia32": "0.27.3", + "@esbuild/linux-loong64": "0.27.3", + "@esbuild/linux-mips64el": "0.27.3", + "@esbuild/linux-ppc64": "0.27.3", + "@esbuild/linux-riscv64": "0.27.3", + "@esbuild/linux-s390x": "0.27.3", + "@esbuild/linux-x64": "0.27.3", + "@esbuild/netbsd-arm64": "0.27.3", + "@esbuild/netbsd-x64": "0.27.3", + "@esbuild/openbsd-arm64": "0.27.3", + "@esbuild/openbsd-x64": "0.27.3", + "@esbuild/openharmony-arm64": "0.27.3", + "@esbuild/sunos-x64": "0.27.3", + "@esbuild/win32-arm64": "0.27.3", + "@esbuild/win32-ia32": "0.27.3", + "@esbuild/win32-x64": "0.27.3" } }, "node_modules/escalade": { @@ -3017,6 +2976,23 @@ "node": ">=0.10.0" } }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -3100,9 +3076,9 @@ } }, "node_modules/fs-extra": { - "version": "11.3.2", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz", - "integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==", + "version": "11.3.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.3.tgz", + "integrity": "sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==", "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", @@ -3170,7 +3146,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", @@ -3419,12 +3395,12 @@ "license": "ISC" }, "node_modules/jackspeak": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz", - "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.2.1.tgz", + "integrity": "sha512-GPBXyfcZSGujjddPeA+V34bW70ZJT7jzCEbloVasSH4yjiqWqXHX8iZQtZdVbOhc5esSeAIuiSmMutRZQB/olg==", "license": "BlueOak-1.0.0", "dependencies": { - "@isaacs/cliui": "^8.0.2" + "@isaacs/cliui": "^9.0.0" }, "engines": { "node": "20 || >=22" @@ -3506,9 +3482,9 @@ } }, "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", + "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", "license": "MIT" }, "node_modules/lodash.debounce": { @@ -3720,9 +3696,9 @@ "license": "MIT" }, "node_modules/path-scurry": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", - "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.1.tgz", + "integrity": "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==", "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^11.0.0", @@ -3736,10 +3712,10 @@ } }, "node_modules/path-scurry/node_modules/lru-cache": { - "version": "11.2.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.2.tgz", - "integrity": "sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==", - "license": "ISC", + "version": "11.2.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.5.tgz", + "integrity": "sha512-vFrFJkWtJvJnD5hg+hJvVE8Lh/TcMzKnTgCWmtBipwI5yLX/iX+5UB2tfuyODF5E7k9xEzMdYgGqaSb1c0c5Yw==", + "license": "BlueOak-1.0.0", "engines": { "node": "20 || >=22" } @@ -3751,12 +3727,12 @@ "license": "ISC" }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "license": "MIT", "engines": { - "node": ">=8.6" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/jonschlinkert" @@ -3790,7 +3766,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -3985,14 +3960,15 @@ } }, "node_modules/purgecss/node_modules/glob": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.3.tgz", - "integrity": "sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==", - "license": "ISC", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.1.0.tgz", + "integrity": "sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "license": "BlueOak-1.0.0", "dependencies": { "foreground-child": "^3.3.1", "jackspeak": "^4.1.1", - "minimatch": "^10.0.3", + "minimatch": "^10.1.1", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^2.0.0" @@ -4008,12 +3984,12 @@ } }, "node_modules/purgecss/node_modules/minimatch": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", - "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", - "license": "ISC", + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.2.tgz", + "integrity": "sha512-fu656aJ0n2kcXwsnwnv9g24tkU5uSmOlTjd6WyyaKm2Z+h1qmY6bAjrcaIxF/BslFqbZ8UBtbJi7KgQOZD2PTw==", + "license": "BlueOak-1.0.0", "dependencies": { - "@isaacs/brace-expansion": "^5.0.0" + "@isaacs/brace-expansion": "^5.0.1" }, "engines": { "node": "20 || >=22" @@ -4074,6 +4050,18 @@ "node": ">=8.10.0" } }, + "node_modules/readdirp/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", @@ -4172,9 +4160,9 @@ } }, "node_modules/rollup": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.52.5.tgz", - "integrity": "sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.57.1.tgz", + "integrity": "sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==", "dev": true, "license": "MIT", "dependencies": { @@ -4188,28 +4176,31 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.52.5", - "@rollup/rollup-android-arm64": "4.52.5", - "@rollup/rollup-darwin-arm64": "4.52.5", - "@rollup/rollup-darwin-x64": "4.52.5", - "@rollup/rollup-freebsd-arm64": "4.52.5", - "@rollup/rollup-freebsd-x64": "4.52.5", - "@rollup/rollup-linux-arm-gnueabihf": "4.52.5", - "@rollup/rollup-linux-arm-musleabihf": "4.52.5", - "@rollup/rollup-linux-arm64-gnu": "4.52.5", - "@rollup/rollup-linux-arm64-musl": "4.52.5", - "@rollup/rollup-linux-loong64-gnu": "4.52.5", - "@rollup/rollup-linux-ppc64-gnu": "4.52.5", - "@rollup/rollup-linux-riscv64-gnu": "4.52.5", - "@rollup/rollup-linux-riscv64-musl": "4.52.5", - "@rollup/rollup-linux-s390x-gnu": "4.52.5", - "@rollup/rollup-linux-x64-gnu": "4.52.5", - "@rollup/rollup-linux-x64-musl": "4.52.5", - "@rollup/rollup-openharmony-arm64": "4.52.5", - "@rollup/rollup-win32-arm64-msvc": "4.52.5", - "@rollup/rollup-win32-ia32-msvc": "4.52.5", - "@rollup/rollup-win32-x64-gnu": "4.52.5", - "@rollup/rollup-win32-x64-msvc": "4.52.5", + "@rollup/rollup-android-arm-eabi": "4.57.1", + "@rollup/rollup-android-arm64": "4.57.1", + "@rollup/rollup-darwin-arm64": "4.57.1", + "@rollup/rollup-darwin-x64": "4.57.1", + "@rollup/rollup-freebsd-arm64": "4.57.1", + "@rollup/rollup-freebsd-x64": "4.57.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.57.1", + "@rollup/rollup-linux-arm-musleabihf": "4.57.1", + "@rollup/rollup-linux-arm64-gnu": "4.57.1", + "@rollup/rollup-linux-arm64-musl": "4.57.1", + "@rollup/rollup-linux-loong64-gnu": "4.57.1", + "@rollup/rollup-linux-loong64-musl": "4.57.1", + "@rollup/rollup-linux-ppc64-gnu": "4.57.1", + "@rollup/rollup-linux-ppc64-musl": "4.57.1", + "@rollup/rollup-linux-riscv64-gnu": "4.57.1", + "@rollup/rollup-linux-riscv64-musl": "4.57.1", + "@rollup/rollup-linux-s390x-gnu": "4.57.1", + "@rollup/rollup-linux-x64-gnu": "4.57.1", + "@rollup/rollup-linux-x64-musl": "4.57.1", + "@rollup/rollup-openbsd-x64": "4.57.1", + "@rollup/rollup-openharmony-arm64": "4.57.1", + "@rollup/rollup-win32-arm64-msvc": "4.57.1", + "@rollup/rollup-win32-ia32-msvc": "4.57.1", + "@rollup/rollup-win32-x64-gnu": "4.57.1", + "@rollup/rollup-win32-x64-msvc": "4.57.1", "fsevents": "~2.3.2" } }, @@ -4324,21 +4315,6 @@ "node": ">=8" } }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -4351,19 +4327,6 @@ "node": ">=8" } }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", @@ -4393,9 +4356,7 @@ }, "node_modules/thulite": { "version": "2.6.4", - "resolved": "https://registry.npmjs.org/thulite/-/thulite-2.6.4.tgz", "integrity": "sha512-kjt8NVflkCxkOLxr6gH4JlQZkftqsXZU1GOQgH1F0fAjTr9cZtt2YVjTjcwslG2v0j2Uzu11JEuabN7r/AyvPg==", - "license": "MIT", "dependencies": { "@thulite/core": "^1.5.6" }, @@ -4425,36 +4386,6 @@ "url": "https://github.com/sponsors/SuperchupuDev" } }, - "node_modules/tinyglobby/node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -4627,38 +4558,6 @@ } } }, - "node_modules/vite/node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/vite/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -4697,24 +4596,6 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -4737,15 +4618,18 @@ "license": "ISC" }, "node_modules/yaml": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz", - "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==", + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz", + "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==", "license": "ISC", "bin": { "yaml": "bin.mjs" }, "engines": { "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" } }, "node_modules/yargs": { @@ -4775,5 +4659,27 @@ "node": ">=12" } } + }, + "devDependencies": { + "prettier": "3.8.1", + "vite": "7.3.1" + }, + "engines": { + "node": ">=20.11.0" + }, + "publishConfig": { + "access": "public", + "registry": "https://registry.npmjs.org/" + }, + "repository": { + "type": "git", + "url": "https://github.com/thuliteio/doks.git" + }, + "scripts": { + "build": "hugo --minify --gc", + "create": "hugo new", + "dev": "hugo server --disableFastRender --noHTTPCache", + "format": "prettier **/** -w -c", + "preview": "vite preview --outDir public" } } diff --git a/docs/package.json b/docs/package.json index 9b6e2f0fd0d..77c261601ef 100644 --- a/docs/package.json +++ b/docs/package.json @@ -19,10 +19,10 @@ "@docsearch/css": "4.5.3", "@docsearch/js": "4.5.3", "@tabler/icons": "3.36.1", - "@thulite/doks-core": "1.8.4", - "@thulite/images": "3.3.4", - "@thulite/inline-svg": "1.2.2", - "@thulite/seo": "2.4.3", + "@thulite/doks-core": "1.8.3", + "@thulite/images": "3.3.3", + "@thulite/inline-svg": "1.2.1", + "@thulite/seo": "2.4.2", "thulite": "2.6.4" }, "devDependencies": { @@ -36,4 +36,4 @@ "access": "public", "registry": "https://registry.npmjs.org/" } -} +} \ No newline at end of file diff --git a/dojo/api_v2/serializers.py b/dojo/api_v2/serializers.py index 6e75449ecab..f9bac76264d 100644 --- a/dojo/api_v2/serializers.py +++ b/dojo/api_v2/serializers.py @@ -1555,6 +1555,13 @@ def create(self, validated_data): instance = super().create(validated_data) user = getattr(self.context.get("request", None), "user", None) ra_helper.add_findings_to_risk_acceptance(user, instance, instance.accepted_findings.all()) + + # Add risk acceptance to engagement + # This is fine as Pro has its own model + relationshop to track links with engagements. + if instance.accepted_findings.exists(): + engagement = instance.accepted_findings.first().test.engagement + engagement.risk_acceptance.add(instance) + return instance def update(self, instance, validated_data): @@ -1574,6 +1581,13 @@ def update(self, instance, validated_data): # Remove the ones that were not present in the payload for finding in findings_to_remove: ra_helper.remove_finding_from_risk_acceptance(user, instance, finding) + + # Handle orphaned risk acceptances: link to engagement if it now has findings + # This is fine as Pro has its own model + relationshop to track links with engagements. + if instance.accepted_findings.exists() and not instance.engagement: + engagement = instance.accepted_findings.first().test.engagement + engagement.risk_acceptance.add(instance) + return instance @extend_schema_field(serializers.CharField()) @@ -1610,16 +1624,32 @@ def validate_findings_have_same_engagement(finding_objects: list[Finding]): findings = data.get("accepted_findings", []) findings_ids = [x.id for x in findings] finding_objects = Finding.objects.filter(id__in=findings_ids) - authed_findings = get_authorized_findings(Permissions.Finding_Edit).filter(id__in=findings_ids) + authed_findings = get_authorized_findings(Permissions.Risk_Acceptance).filter(id__in=findings_ids) if len(findings) != len(authed_findings): msg = "You are not permitted to add one or more selected findings to this risk acceptance" raise PermissionDenied(msg) if self.context["request"].method == "POST": validate_findings_have_same_engagement(finding_objects) + + # Validate product allows full risk acceptance BEFORE creating instance + if finding_objects.exists(): + engagement = finding_objects.first().test.engagement + if not engagement.product.enable_full_risk_acceptance: + msg = "Full risk acceptance is not enabled for this product" + raise PermissionDenied(msg) elif self.context["request"].method in {"PATCH", "PUT"}: - existing_findings = Finding.objects.filter(risk_acceptance=self.instance.id) + # Use the reverse relation instead of filtering + existing_findings = self.instance.accepted_findings.all() existing_and_new_findings = existing_findings | finding_objects validate_findings_have_same_engagement(existing_and_new_findings) + + # Explicit check to prevent engagement switching + risk_acceptance_engagement = self.instance.engagement + if risk_acceptance_engagement and finding_objects.exists(): + new_findings_engagement = finding_objects.first().test.engagement + if risk_acceptance_engagement.id != new_findings_engagement.id: + msg = f"Risk Acceptance belongs to engagement {risk_acceptance_engagement.id}. Cannot add findings from engagement {new_findings_engagement.id}" + raise ValidationError(msg) return data class Meta: @@ -1858,8 +1888,9 @@ def update(self, instance, validated_data): for location_ref in locations: location_ref.location.associate_with_finding(instance) - if push_to_jira: - jira_helper.push_to_jira(instance) + if push_to_jira or finding_helper.is_keep_in_sync_with_jira(instance): + # Push synchronously so that we can see jira errors in real time + jira_helper.push_to_jira(instance, sync=True) return instance diff --git a/dojo/api_v2/views.py b/dojo/api_v2/views.py index 3998683c315..15ba41e3d01 100644 --- a/dojo/api_v2/views.py +++ b/dojo/api_v2/views.py @@ -46,6 +46,7 @@ ) from dojo.api_v2.prefetch.prefetcher import _Prefetcher from dojo.authorization.roles_permissions import Permissions +from dojo.celery_dispatch import dojo_dispatch_task from dojo.cred.queries import get_authorized_cred_mappings from dojo.endpoint.queries import ( get_authorized_endpoint_status, @@ -679,13 +680,13 @@ def update_jira_epic(self, request, pk=None): try: if engagement.has_jira_issue: - jira_helper.update_epic(engagement.id, **request.data) + dojo_dispatch_task(jira_helper.update_epic, engagement.id, **request.data) response = Response( {"info": "Jira Epic update query sent"}, status=status.HTTP_200_OK, ) else: - jira_helper.add_epic(engagement.id, **request.data) + dojo_dispatch_task(jira_helper.add_epic, engagement.id, **request.data) response = Response( {"info": "Jira Epic create query sent"}, status=status.HTTP_200_OK, @@ -2555,7 +2556,7 @@ def perform_create(self, serializer): auto_create.process_import_meta_data_from_dict(converted_dict) # Get an existing product product = auto_create.get_target_product_if_exists(**converted_dict) - engagement = auto_create.get_target_engagement_if_exists(**converted_dict) + engagement = auto_create.get_target_engagement_if_exists(product=product, **converted_dict) except (ValueError, TypeError) as e: # Raise an explicit drf exception here raise ValidationError(str(e)) @@ -2712,8 +2713,8 @@ def perform_create(self, serializer): auto_create.process_import_meta_data_from_dict(converted_dict) # Get an existing product product = auto_create.get_target_product_if_exists(**converted_dict) - engagement = auto_create.get_target_engagement_if_exists(**converted_dict) - test = auto_create.get_target_test_if_exists(**converted_dict) + engagement = auto_create.get_target_engagement_if_exists(product=product, **converted_dict) + test = auto_create.get_target_test_if_exists(engagement=engagement, **converted_dict) except (ValueError, TypeError) as e: # Raise an explicit drf exception here raise ValidationError(str(e)) diff --git a/dojo/celery.py b/dojo/celery.py index ead4a8813a8..3cf09e1bc2c 100644 --- a/dojo/celery.py +++ b/dojo/celery.py @@ -12,16 +12,56 @@ os.environ.setdefault("DJANGO_SETTINGS_MODULE", "dojo.settings.settings") -class PgHistoryTask(Task): +class DojoAsyncTask(Task): + + """ + Base task class that provides dojo_async_task functionality without using a decorator. + + This class: + - Injects user context into task kwargs + - Tracks task calls for performance testing + - Supports all Celery features (signatures, chords, groups, chains) + """ + + def apply_async(self, args=None, kwargs=None, **options): + """Override apply_async to inject user context and track tasks.""" + from dojo.decorators import dojo_async_task_counter # noqa: PLC0415 circular import + from dojo.utils import get_current_user # noqa: PLC0415 circular import + + if kwargs is None: + kwargs = {} + + # Inject user context if not already present + if "async_user" not in kwargs: + kwargs["async_user"] = get_current_user() + + # Control flag used for sync/async decision; never pass into the task itself + kwargs.pop("sync", None) + + # Track dispatch + dojo_async_task_counter.incr( + self.name, + args=args, + kwargs=kwargs, + ) + + # Call parent to execute async + return super().apply_async(args=args, kwargs=kwargs, **options) + + +class PgHistoryTask(DojoAsyncTask): """ Custom Celery base task that automatically applies pghistory context. - When a task is dispatched via dojo_async_task, the current pghistory - context is captured and passed in kwargs as "_pgh_context". This base - class extracts that context and applies it before running the task, - ensuring all database events share the same context as the original - request. + This class inherits from DojoAsyncTask to provide: + - User context injection and task tracking (from DojoAsyncTask) + - Automatic pghistory context application (from this class) + + When a task is dispatched via dojo_dispatch_task or dojo_async_task, the current + pghistory context is captured and passed in kwargs as "_pgh_context". This base + class extracts that context and applies it before running the task, ensuring all + database events share the same context as the original request. """ def __call__(self, *args, **kwargs): diff --git a/dojo/celery_dispatch.py b/dojo/celery_dispatch.py new file mode 100644 index 00000000000..f4ce0e3241b --- /dev/null +++ b/dojo/celery_dispatch.py @@ -0,0 +1,95 @@ +from __future__ import annotations + +from typing import TYPE_CHECKING, Any, Protocol, cast + +from celery.canvas import Signature + +if TYPE_CHECKING: + from collections.abc import Mapping + + +class _SupportsSi(Protocol): + def si(self, *args: Any, **kwargs: Any) -> Signature: ... + + +class _SupportsApplyAsync(Protocol): + def apply_async(self, args: Any | None = None, kwargs: Any | None = None, **options: Any) -> Any: ... + + +def _inject_async_user(kwargs: Mapping[str, Any] | None) -> dict[str, Any]: + result: dict[str, Any] = dict(kwargs or {}) + if "async_user" not in result: + from dojo.utils import get_current_user # noqa: PLC0415 circular import + + result["async_user"] = get_current_user() + return result + + +def _inject_pghistory_context(kwargs: Mapping[str, Any] | None) -> dict[str, Any]: + """Capture and inject pghistory context if available.""" + result: dict[str, Any] = dict(kwargs or {}) + if "_pgh_context" not in result: + from dojo.pghistory_utils import get_serializable_pghistory_context # noqa: PLC0415 circular import + + if pgh_context := get_serializable_pghistory_context(): + result["_pgh_context"] = pgh_context + return result + + +def dojo_create_signature(task_or_sig: _SupportsSi | Signature, *args: Any, **kwargs: Any) -> Signature: + """ + Build a Celery signature with DefectDojo user context and pghistory context injected. + + - If passed a task, returns `task_or_sig.si(*args, **kwargs)`. + - If passed an existing signature, returns a cloned signature with merged kwargs. + """ + injected = _inject_async_user(kwargs) + injected = _inject_pghistory_context(injected) + injected.pop("countdown", None) + + if isinstance(task_or_sig, Signature): + merged_kwargs = {**(task_or_sig.kwargs or {}), **injected} + return task_or_sig.clone(kwargs=merged_kwargs) + + return task_or_sig.si(*args, **injected) + + +def dojo_dispatch_task(task_or_sig: _SupportsSi | _SupportsApplyAsync | Signature, *args: Any, **kwargs: Any) -> Any: + """ + Dispatch a task/signature using DefectDojo semantics. + + - Inject `async_user` if missing. + - Capture and inject pghistory context if available. + - Respect `sync=True` (foreground execution) and user `block_execution`. + - Support `countdown=` for async dispatch. + + Returns: + - async: AsyncResult-like return from Celery + - sync: underlying return value of the task + + """ + from dojo.decorators import dojo_async_task_counter, we_want_async # noqa: PLC0415 circular import + + countdown = cast("int", kwargs.pop("countdown", 0)) + injected = _inject_async_user(kwargs) + injected = _inject_pghistory_context(injected) + + sig = dojo_create_signature(task_or_sig if isinstance(task_or_sig, Signature) else cast("_SupportsSi", task_or_sig), *args, **injected) + sig_kwargs = dict(sig.kwargs or {}) + + if we_want_async(*sig.args, func=getattr(sig, "type", None), **sig_kwargs): + # DojoAsyncTask.apply_async tracks async dispatch. Avoid double-counting here. + return sig.apply_async(countdown=countdown) + + # Track foreground execution as a "created task" as well (matches historical dojo_async_task behavior) + dojo_async_task_counter.incr(str(sig.task), args=sig.args, kwargs=sig_kwargs) + + sig_kwargs.pop("sync", None) + sig = sig.clone(kwargs=sig_kwargs) + eager = sig.apply() + try: + return eager.get(propagate=True) + except RuntimeError: + # Since we are intentionally running synchronously, we can propagate exceptions directly, and enable sync subtasks + # If the requests desires this. Celery docs explain that this is a rare use case, but we support it _just in case_ + return eager.get(propagate=True, disable_sync_subtasks=False) diff --git a/dojo/endpoint/views.py b/dojo/endpoint/views.py index f66869d35b2..caa48f02757 100644 --- a/dojo/endpoint/views.py +++ b/dojo/endpoint/views.py @@ -18,6 +18,7 @@ from dojo.authorization.authorization import user_has_permission_or_403 from dojo.authorization.authorization_decorators import user_is_authorized from dojo.authorization.roles_permissions import Permissions +from dojo.celery_dispatch import dojo_dispatch_task from dojo.endpoint.queries import get_authorized_endpoints_for_queryset from dojo.endpoint.utils import clean_hosts_run, endpoint_meta_import from dojo.filters import EndpointFilter, EndpointFilterWithoutObjectLookups @@ -345,7 +346,7 @@ def endpoint_bulk_update_all(request, pid=None): product_calc = list(Product.objects.filter(endpoint__id__in=endpoints_to_update).distinct()) endpoints.delete() for prod in product_calc: - calculate_grade(prod.id) + dojo_dispatch_task(calculate_grade, prod.id) if skipped_endpoint_count > 0: add_error_message_to_response(f"Skipped deletion of {skipped_endpoint_count} endpoints because you are not authorized.") diff --git a/dojo/engagement/services.py b/dojo/engagement/services.py index cd70af1ea2c..42a7c1c05e4 100644 --- a/dojo/engagement/services.py +++ b/dojo/engagement/services.py @@ -5,6 +5,7 @@ from django.dispatch import receiver import dojo.jira_link.helper as jira_helper +from dojo.celery_dispatch import dojo_dispatch_task from dojo.models import Engagement logger = logging.getLogger(__name__) @@ -16,7 +17,7 @@ def close_engagement(eng): eng.save() if jira_helper.get_jira_project(eng): - jira_helper.close_epic(eng.id, push_to_jira=True) + dojo_dispatch_task(jira_helper.close_epic, eng.id, push_to_jira=True) def reopen_engagement(eng): diff --git a/dojo/engagement/views.py b/dojo/engagement/views.py index 4eb5398cb61..fbe0ca6b496 100644 --- a/dojo/engagement/views.py +++ b/dojo/engagement/views.py @@ -37,6 +37,7 @@ from dojo.authorization.authorization import user_has_permission_or_403 from dojo.authorization.authorization_decorators import user_is_authorized from dojo.authorization.roles_permissions import Permissions +from dojo.celery_dispatch import dojo_dispatch_task from dojo.endpoint.utils import save_endpoints_to_add from dojo.engagement.queries import get_authorized_engagements from dojo.engagement.services import close_engagement, reopen_engagement @@ -392,7 +393,7 @@ def copy_engagement(request, eid): form = DoneForm(request.POST) if form.is_valid(): engagement_copy = engagement.copy() - calculate_grade(product.id) + dojo_dispatch_task(calculate_grade, product.id) messages.add_message( request, messages.SUCCESS, diff --git a/dojo/filters.py b/dojo/filters.py index 893be4d5a7d..dabd1aec119 100644 --- a/dojo/filters.py +++ b/dojo/filters.py @@ -518,6 +518,7 @@ def get_finding_filterset_fields(*, metrics=False, similar=False, filter_string_ if get_system_setting("enable_jira"): fields.extend([ "has_jira_group_issue", + "has_any_jira_issue", ]) return fields @@ -1916,7 +1917,10 @@ def filter_endpoints(self, queryset, name, value): lookup_expr="isnull", exclude=True, label="Has Group JIRA") - has_any_jira = FindingHasJIRAFilter(label="Has Any JIRA") + has_any_jira_issue = FindingHasJIRAFilter( + label="Has Any JIRA Issue", + help_text="Matches JIRA issues linked to the finding itself or to the finding's group.", + ) outside_of_sla = FindingSLAFilter(label="Outside of SLA") has_tags = BooleanFilter(field_name="tags", lookup_expr="isnull", exclude=True, label="Has tags") @@ -2070,12 +2074,12 @@ class FindingFilterWithoutObjectLookups(FindingFilterHelper, FindingTagStringFil label="Engagement name Contains", help_text="Search for Engagement names that contain a given pattern") test__name = CharFilter( - field_name="test__name", + field_name="test__title", lookup_expr="iexact", label="Test Name", help_text="Search for Test names that are an exact match") test__name_contains = CharFilter( - field_name="test__name", + field_name="test__title", lookup_expr="icontains", label="Test name Contains", help_text="Search for Test names that contain a given pattern") @@ -3480,12 +3484,12 @@ class ReportFindingFilterWithoutObjectLookups(ReportFindingFilterHelper, Finding label="Engagement name Contains", help_text="Search for Engagement names that contain a given pattern") test__name = CharFilter( - field_name="test__name", + field_name="test__title", lookup_expr="iexact", label="Test Name", help_text="Search for Test names that are an exact match") test__name_contains = CharFilter( - field_name="test__name", + field_name="test__title", lookup_expr="icontains", label="Test name Contains", help_text="Search for Test names that contain a given pattern") diff --git a/dojo/finding/deduplication.py b/dojo/finding/deduplication.py index 54517108f25..51e34015b61 100644 --- a/dojo/finding/deduplication.py +++ b/dojo/finding/deduplication.py @@ -8,7 +8,6 @@ from django.db.models.query_utils import Q from dojo.celery import app -from dojo.decorators import dojo_async_task from dojo.models import Finding, System_Settings logger = logging.getLogger(__name__) @@ -45,13 +44,11 @@ def get_finding_models_for_deduplication(finding_ids): ) -@dojo_async_task @app.task def do_dedupe_finding_task(new_finding_id, *args, **kwargs): return do_dedupe_finding_task_internal(Finding.objects.get(id=new_finding_id), *args, **kwargs) -@dojo_async_task @app.task def do_dedupe_batch_task(finding_ids, *args, **kwargs): """ diff --git a/dojo/finding/helper.py b/dojo/finding/helper.py index 51c65553742..09a95af07dd 100644 --- a/dojo/finding/helper.py +++ b/dojo/finding/helper.py @@ -16,7 +16,6 @@ import dojo.jira_link.helper as jira_helper import dojo.risk_acceptance.helper as ra_helper from dojo.celery import app -from dojo.decorators import dojo_async_task from dojo.endpoint.utils import endpoint_get_or_create, save_endpoints_to_add from dojo.file_uploads.helper import delete_related_files from dojo.finding.deduplication import ( @@ -24,6 +23,7 @@ do_dedupe_finding_task_internal, get_finding_models_for_deduplication, ) +from dojo.jira_link.helper import is_keep_in_sync_with_jira from dojo.location.models import Location from dojo.location.status import FindingLocationStatus from dojo.location.utils import save_locations_to_add @@ -33,6 +33,7 @@ Engagement, Finding, Finding_Group, + JIRA_Instance, Notes, System_Settings, Test, @@ -395,7 +396,6 @@ def add_findings_to_auto_group(name, findings, group_by, *, create_finding_group finding_group.findings.add(*findings) -@dojo_async_task @app.task def post_process_finding_save(finding_id, dedupe_option=True, rules_option=True, product_grading_option=True, # noqa: FBT002 issue_updater_option=True, push_to_jira=False, user=None, *args, **kwargs): # noqa: FBT002 - this is bit hard to fix nice have this universally fixed @@ -440,7 +440,9 @@ def post_process_finding_save_internal(finding, dedupe_option=True, rules_option if product_grading_option: if system_settings.enable_product_grade: - calculate_grade(finding.test.engagement.product.id) + from dojo.celery_dispatch import dojo_dispatch_task # noqa: PLC0415 circular import + + dojo_dispatch_task(calculate_grade, finding.test.engagement.product.id) else: deduplicationLogger.debug("skipping product grading because it's disabled in system settings") @@ -457,16 +459,25 @@ def post_process_finding_save_internal(finding, dedupe_option=True, rules_option jira_helper.push_to_jira(finding.finding_group) -@dojo_async_task @app.task -def post_process_findings_batch(finding_ids, *args, dedupe_option=True, rules_option=True, product_grading_option=True, - issue_updater_option=True, push_to_jira=False, user=None, **kwargs): +def post_process_findings_batch( + finding_ids, + *args, + dedupe_option=True, + rules_option=True, + product_grading_option=True, + issue_updater_option=True, + push_to_jira=False, + jira_instance_id=None, + user=None, + **kwargs, +): logger.debug( f"post_process_findings_batch called: finding_ids_count={len(finding_ids) if finding_ids else 0}, " f"args={args}, dedupe_option={dedupe_option}, rules_option={rules_option}, " f"product_grading_option={product_grading_option}, issue_updater_option={issue_updater_option}, " - f"push_to_jira={push_to_jira}, user={user.id if user else None}, kwargs={kwargs}", + f"push_to_jira={push_to_jira}, jira_instance_id={jira_instance_id}, user={user.id if user else None}, kwargs={kwargs}", ) if not finding_ids: return @@ -500,16 +511,25 @@ def post_process_findings_batch(finding_ids, *args, dedupe_option=True, rules_op tool_issue_updater.async_tool_issue_update(finding) if product_grading_option and system_settings.enable_product_grade: - calculate_grade(findings[0].test.engagement.product.id) - - if push_to_jira: + from dojo.celery_dispatch import dojo_dispatch_task # noqa: PLC0415 circular import + + dojo_dispatch_task(calculate_grade, findings[0].test.engagement.product.id) + + # If we received the ID of a jira instance, then we need to determine the keep in sync behavior + jira_instance = None + if jira_instance_id is not None: + with suppress(JIRA_Instance.DoesNotExist): + jira_instance = JIRA_Instance.objects.get(id=jira_instance_id) + # We dont check if the finding jira sync is applicable quite yet until we can get in the loop + # but this is a way to at least make it that far + if push_to_jira or getattr(jira_instance, "finding_jira_sync", False): for finding in findings: - if finding.has_jira_issue or not finding.finding_group: - jira_helper.push_to_jira(finding) - else: - jira_helper.push_to_jira(finding.finding_group) + object_to_push = finding if finding.has_jira_issue or not finding.finding_group else finding.finding_group + # Check the push_to_jira flag again to potentially shorty circuit without checking for existing findings + if push_to_jira or is_keep_in_sync_with_jira(object_to_push, prefetched_jira_instance=jira_instance): + jira_helper.push_to_jira(object_to_push) else: - logger.debug("push_to_jira is False, not ushing to JIRA") + logger.debug("push_to_jira is False, not pushing to JIRA") @receiver(pre_delete, sender=Finding) diff --git a/dojo/finding/views.py b/dojo/finding/views.py index 3269f92902a..5dfd50d601b 100644 --- a/dojo/finding/views.py +++ b/dojo/finding/views.py @@ -38,6 +38,7 @@ user_is_authorized, ) from dojo.authorization.roles_permissions import Permissions +from dojo.celery_dispatch import dojo_dispatch_task from dojo.filters import ( AcceptedFindingFilter, AcceptedFindingFilterWithoutObjectLookups, @@ -1099,7 +1100,7 @@ def process_form(self, request: HttpRequest, finding: Finding, context: dict): product = finding.test.engagement.product finding.delete() # Update the grade of the product async - calculate_grade(product.id) + dojo_dispatch_task(calculate_grade, product.id) # Add a message to the request that the finding was successfully deleted messages.add_message( request, @@ -1374,7 +1375,7 @@ def copy_finding(request, fid): test = form.cleaned_data.get("test") product = finding.test.engagement.product finding_copy = finding.copy(test=test) - calculate_grade(product.id) + dojo_dispatch_task(calculate_grade, product.id) messages.add_message( request, messages.SUCCESS, @@ -2962,7 +2963,11 @@ def _bulk_push_to_jira(finds, form, note): ) logger.debug("finding_groups: %s", finding_groups) for group in finding_groups: - if form.cleaned_data.get("push_to_jira"): + if ( + form.cleaned_data.get("push_to_jira") + or jira_helper.is_push_all_issues(group) + or jira_helper.is_keep_in_sync_with_jira(group) + ): ( can_be_pushed_to_jira, error_message, diff --git a/dojo/importers/base_importer.py b/dojo/importers/base_importer.py index 3e00a216cbd..ec7c09829cf 100644 --- a/dojo/importers/base_importer.py +++ b/dojo/importers/base_importer.py @@ -3,7 +3,6 @@ import time from collections.abc import Iterable -from celery import chord, group from django.conf import settings from django.core.exceptions import ValidationError from django.core.files.base import ContentFile @@ -14,10 +13,11 @@ import dojo.finding.helper as finding_helper import dojo.risk_acceptance.helper as ra_helper -from dojo import utils +from dojo.celery_dispatch import dojo_dispatch_task from dojo.importers.endpoint_manager import EndpointManager from dojo.importers.location_manager import LocationManager from dojo.importers.options import ImporterOptions +from dojo.jira_link.helper import is_keep_in_sync_with_jira from dojo.location.models import AbstractLocation, Location from dojo.models import ( # Import History States @@ -31,7 +31,6 @@ Endpoint, FileUpload, Finding, - System_Settings, Test, Test_Import, Test_Import_Finding_Action, @@ -676,47 +675,6 @@ def update_test_type_from_internal_test(self, internal_test: ParserTest) -> None self.test.test_type.dynamic_tool = dynamic_tool self.test.test_type.save() - def maybe_launch_post_processing_chord( - self, - post_processing_task_signatures, - current_batch_number: int, - max_batch_size: int, - * - is_final_batch: bool, - ) -> tuple[list, int, bool]: - """ - Helper to optionally launch a chord of post-processing tasks with a calculate-grade callback - when async is desired. Uses exponential batch sizing up to the configured max batch size. - - Returns a tuple of (post_processing_task_signatures, current_batch_number, launched) - where launched indicates whether a chord/group was dispatched and signatures were reset. - """ - launched = False - if not post_processing_task_signatures: - return post_processing_task_signatures, current_batch_number, launched - - current_batch_size = min(2 ** current_batch_number, max_batch_size) - batch_full = len(post_processing_task_signatures) >= current_batch_size - - if batch_full or is_final_batch: - product = self.test.engagement.product - system_settings = System_Settings.objects.get() - if system_settings.enable_product_grade: - calculate_grade_signature = utils.calculate_grade.si(product.id) - chord(post_processing_task_signatures)(calculate_grade_signature) - else: - group(post_processing_task_signatures).apply_async() - - logger.debug( - f"Launched chord with {len(post_processing_task_signatures)} tasks (batch #{current_batch_number}, size: {len(post_processing_task_signatures)})", - ) - post_processing_task_signatures = [] - if not is_final_batch: - current_batch_number += 1 - launched = True - - return post_processing_task_signatures, current_batch_number, launched - def verify_tool_configuration_from_test(self): """ Verify that the Tool_Configuration supplied along with the @@ -988,17 +946,29 @@ def mitigate_finding( ra_helper.risk_unaccept(self.user, finding, perform_save=False, post_comments=False) if settings.V3_FEATURE_LOCATIONS: # Mitigate the location statuses - self.location_manager.mitigate_location_status(finding.locations.all(), self.user, kwuser=self.user, sync=True) + dojo_dispatch_task( + LocationManager.mitigate_location_status, + finding.locations.all(), + self.user, + kwuser=self.user, + sync=True, + ) else: # TODO: Delete this after the move to Locations # Mitigate the endpoint statuses - self.endpoint_manager.mitigate_endpoint_status(finding.status_finding.all(), self.user, kwuser=self.user, sync=True) + dojo_dispatch_task( + EndpointManager.mitigate_endpoint_status, + finding.status_finding.all(), + self.user, + kwuser=self.user, + sync=True, + ) # to avoid pushing a finding group multiple times, we push those outside of the loop if finding_groups_enabled and finding.finding_group: # don't try to dedupe findings that we are closing finding.save(dedupe_option=False, product_grading_option=product_grading_option) else: - finding.save(dedupe_option=False, push_to_jira=self.push_to_jira, product_grading_option=product_grading_option) + finding.save(dedupe_option=False, push_to_jira=(self.push_to_jira or is_keep_in_sync_with_jira(finding, prefetched_jira_instance=self.jira_instance)), product_grading_option=product_grading_option) def notify_scan_added( self, diff --git a/dojo/importers/default_importer.py b/dojo/importers/default_importer.py index 6fc2beff074..db838fb8b3b 100644 --- a/dojo/importers/default_importer.py +++ b/dojo/importers/default_importer.py @@ -7,9 +7,11 @@ from django.urls import reverse import dojo.jira_link.helper as jira_helper +from dojo.celery_dispatch import dojo_dispatch_task from dojo.finding import helper as finding_helper from dojo.importers.base_importer import BaseImporter, Parser from dojo.importers.options import ImporterOptions +from dojo.jira_link.helper import is_keep_in_sync_with_jira from dojo.models import ( Engagement, Finding, @@ -265,7 +267,8 @@ def process_findings( batch_finding_ids.clear() logger.debug("process_findings: dispatching batch with push_to_jira=%s (batch_size=%d, is_final=%s)", push_to_jira, len(finding_ids_batch), is_final_finding) - finding_helper.post_process_findings_batch( + dojo_dispatch_task( + finding_helper.post_process_findings_batch, finding_ids_batch, dedupe_option=True, rules_option=True, @@ -381,9 +384,13 @@ def close_old_findings( product_grading_option=False, ) # push finding groups to jira since we only only want to push whole groups - if self.findings_groups_enabled and self.push_to_jira: + # We dont check if the finding jira sync is applicable quite yet until we can get in the loop + # but this is a way to at least make it that far + if self.findings_groups_enabled and (self.push_to_jira or getattr(self.jira_instance, "finding_jira_sync", False)): for finding_group in {finding.finding_group for finding in old_findings if finding.finding_group is not None}: - jira_helper.push_to_jira(finding_group) + # Check the push_to_jira flag again to potentially shorty circuit without checking for existing findings + if self.push_to_jira or is_keep_in_sync_with_jira(finding_group, prefetched_jira_instance=self.jira_instance): + jira_helper.push_to_jira(finding_group) # Calculate grade once after all findings have been closed if old_findings: diff --git a/dojo/importers/default_reimporter.py b/dojo/importers/default_reimporter.py index 863a2cf0212..8ac156cde01 100644 --- a/dojo/importers/default_reimporter.py +++ b/dojo/importers/default_reimporter.py @@ -7,6 +7,7 @@ import dojo.finding.helper as finding_helper import dojo.jira_link.helper as jira_helper +from dojo.celery_dispatch import dojo_dispatch_task from dojo.finding.deduplication import ( find_candidates_for_deduplication_hash, find_candidates_for_deduplication_uid_or_hash, @@ -15,6 +16,7 @@ ) from dojo.importers.base_importer import BaseImporter, Parser from dojo.importers.options import ImporterOptions +from dojo.jira_link.helper import is_keep_in_sync_with_jira from dojo.location.status import FindingLocationStatus from dojo.models import ( Development_Environment, @@ -432,13 +434,15 @@ def process_findings( if len(batch_finding_ids) >= dedupe_batch_max_size or is_final: finding_ids_batch = list(batch_finding_ids) batch_finding_ids.clear() - finding_helper.post_process_findings_batch( + dojo_dispatch_task( + finding_helper.post_process_findings_batch, finding_ids_batch, dedupe_option=True, rules_option=True, product_grading_option=True, issue_updater_option=True, push_to_jira=push_to_jira, + jira_instance_id=getattr(self.jira_instance, "id", None), ) # No chord: tasks are dispatched immediately above per batch @@ -497,10 +501,13 @@ def close_old_findings( ) mitigated_findings.append(finding) # push finding groups to jira since we only only want to push whole groups - if self.findings_groups_enabled and self.push_to_jira: + # We dont check if the finding jira sync is applicable quite yet until we can get in the loop + # but this is a way to at least make it that far + if self.findings_groups_enabled and (self.push_to_jira or getattr(self.jira_instance, "finding_jira_sync", False)): for finding_group in {finding.finding_group for finding in findings if finding.finding_group is not None}: - jira_helper.push_to_jira(finding_group) - + # Check the push_to_jira flag again to potentially shorty circuit without checking for existing findings + if self.push_to_jira or is_keep_in_sync_with_jira(finding_group, prefetched_jira_instance=self.jira_instance): + jira_helper.push_to_jira(finding_group) # Calculate grade once after all findings have been closed if mitigated_findings: perform_product_grading(self.test.engagement.product) @@ -983,19 +990,24 @@ def process_groups_for_all_findings( create_finding_groups_for_all_findings=self.create_finding_groups_for_all_findings, **kwargs, ) - if self.push_to_jira: - if findings[0].finding_group is not None: - jira_helper.push_to_jira(findings[0].finding_group) - else: - jira_helper.push_to_jira(findings[0]) - - if self.findings_groups_enabled and self.push_to_jira: + # We dont check if the finding jira sync is applicable quite yet until we can get in the loop + # but this is a way to at least make it that far + if self.push_to_jira or getattr(self.jira_instance, "finding_jira_sync", False): + object_to_push = findings[0].finding_group if findings[0].finding_group is not None else findings[0] + # Check the push_to_jira flag again to potentially shorty circuit without checking for existing findings + if self.push_to_jira or is_keep_in_sync_with_jira(object_to_push, prefetched_jira_instance=self.jira_instance): + jira_helper.push_to_jira(object_to_push) + # We dont check if the finding jira sync is applicable quite yet until we can get in the loop + # but this is a way to at least make it that far + if self.findings_groups_enabled and (self.push_to_jira or getattr(self.jira_instance, "finding_jira_sync", False)): for finding_group in { finding.finding_group for finding in self.reactivated_items + self.unchanged_items if finding.finding_group is not None and not finding.is_mitigated }: - jira_helper.push_to_jira(finding_group) + # Check the push_to_jira flag again to potentially shorty circuit without checking for existing findings + if self.push_to_jira or is_keep_in_sync_with_jira(finding_group, prefetched_jira_instance=self.jira_instance): + jira_helper.push_to_jira(finding_group) def process_results( self, diff --git a/dojo/importers/endpoint_manager.py b/dojo/importers/endpoint_manager.py index 8817ff71bdb..3f8c3ec817e 100644 --- a/dojo/importers/endpoint_manager.py +++ b/dojo/importers/endpoint_manager.py @@ -5,7 +5,7 @@ from django.utils import timezone from dojo.celery import app -from dojo.decorators import dojo_async_task +from dojo.celery_dispatch import dojo_dispatch_task from dojo.endpoint.utils import endpoint_get_or_create from dojo.models import ( Dojo_User, @@ -19,17 +19,15 @@ # TODO: Delete this after the move to Locations class EndpointManager: - @dojo_async_task - @app.task() + @app.task def add_endpoints_to_unsaved_finding( - self, - finding: Finding, + finding: Finding, # noqa: N805 endpoints: list[Endpoint], **kwargs: dict, ) -> None: """Creates Endpoint objects for a single finding and creates the link via the endpoint status""" logger.debug(f"IMPORT_SCAN: Adding {len(endpoints)} endpoints to finding: {finding}") - self.clean_unsaved_endpoints(endpoints) + EndpointManager.clean_unsaved_endpoints(endpoints) for endpoint in endpoints: ep = None eps = [] @@ -42,7 +40,8 @@ def add_endpoints_to_unsaved_finding( path=endpoint.path, query=endpoint.query, fragment=endpoint.fragment, - product=finding.test.engagement.product) + product=finding.test.engagement.product, + ) eps.append(ep) except (MultipleObjectsReturned): msg = ( @@ -59,11 +58,9 @@ def add_endpoints_to_unsaved_finding( logger.debug(f"IMPORT_SCAN: {len(endpoints)} endpoints imported") - @dojo_async_task - @app.task() + @app.task def mitigate_endpoint_status( - self, - endpoint_status_list: list[Endpoint_Status], + endpoint_status_list: list[Endpoint_Status], # noqa: N805 user: Dojo_User, **kwargs: dict, ) -> None: @@ -86,11 +83,9 @@ def mitigate_endpoint_status( batch_size=1000, ) - @dojo_async_task - @app.task() + @app.task def reactivate_endpoint_status( - self, - endpoint_status_list: list[Endpoint_Status], + endpoint_status_list: list[Endpoint_Status], # noqa: N805 **kwargs: dict, ) -> None: """Reactivate all endpoint status objects that are supplied""" @@ -119,10 +114,10 @@ def chunk_endpoints_and_disperse( endpoints: list[Endpoint], **kwargs: dict, ) -> None: - self.add_endpoints_to_unsaved_finding(finding, endpoints, sync=True) + dojo_dispatch_task(EndpointManager.add_endpoints_to_unsaved_finding, finding, endpoints, sync=True) + @staticmethod def clean_unsaved_endpoints( - self, endpoints: list[Endpoint], ) -> None: """ @@ -140,7 +135,7 @@ def chunk_endpoints_and_reactivate( endpoint_status_list: list[Endpoint_Status], **kwargs: dict, ) -> None: - self.reactivate_endpoint_status(endpoint_status_list, sync=True) + dojo_dispatch_task(EndpointManager.reactivate_endpoint_status, endpoint_status_list, sync=True) def chunk_endpoints_and_mitigate( self, @@ -148,7 +143,7 @@ def chunk_endpoints_and_mitigate( user: Dojo_User, **kwargs: dict, ) -> None: - self.mitigate_endpoint_status(endpoint_status_list, user, sync=True) + dojo_dispatch_task(EndpointManager.mitigate_endpoint_status, endpoint_status_list, user, sync=True) def update_endpoint_status( self, diff --git a/dojo/importers/location_manager.py b/dojo/importers/location_manager.py index c3a12fb5391..82a08c6204d 100644 --- a/dojo/importers/location_manager.py +++ b/dojo/importers/location_manager.py @@ -6,7 +6,7 @@ from django.utils import timezone from dojo.celery import app -from dojo.decorators import dojo_async_task +from dojo.celery_dispatch import dojo_dispatch_task from dojo.location.models import AbstractLocation, LocationFindingReference from dojo.location.status import FindingLocationStatus from dojo.models import ( @@ -24,17 +24,16 @@ # test_notifications.py: Implement Locations class LocationManager: - def get_or_create_location(self, unsaved_location: AbstractLocation) -> AbstractLocation | None: + @staticmethod + def get_or_create_location(unsaved_location: AbstractLocation) -> AbstractLocation | None: if isinstance(unsaved_location, URL): return URL.get_or_create_from_object(unsaved_location) logger.debug(f"IMPORT_SCAN: Unsupported location type: {type(unsaved_location)}") return None - @dojo_async_task - @app.task() + @app.task def add_locations_to_unsaved_finding( - self, - finding: Finding, + finding: Finding, # noqa: N805 locations: list[AbstractLocation], **kwargs: dict, ) -> None: @@ -42,23 +41,21 @@ def add_locations_to_unsaved_finding( locations = list(set(locations)) logger.debug(f"IMPORT_SCAN: Adding {len(locations)} locations to finding: {finding}") - self.clean_unsaved_locations(locations) + LocationManager.clean_unsaved_locations(locations) # LOCATION LOCATION LOCATION # TODO: bulk create the finding/product refs... locations_saved = 0 for unsaved_location in locations: - if saved_location := self.get_or_create_location(unsaved_location): + if saved_location := LocationManager.get_or_create_location(unsaved_location): locations_saved += 1 saved_location.location.associate_with_finding(finding, status=FindingLocationStatus.Active) logger.debug(f"IMPORT_SCAN: {locations_saved} locations imported") - @dojo_async_task - @app.task() + @app.task def mitigate_location_status( - self, - location_refs: QuerySet[LocationFindingReference], + location_refs: QuerySet[LocationFindingReference], # noqa: N805 user: Dojo_User, **kwargs: dict, ) -> None: @@ -69,11 +66,9 @@ def mitigate_location_status( status=FindingLocationStatus.Mitigated, ) - @dojo_async_task - @app.task() + @app.task def reactivate_location_status( - self, - location_refs: QuerySet[LocationFindingReference], + location_refs: QuerySet[LocationFindingReference], # noqa: N805 **kwargs: dict, ) -> None: """Reactivate all given (mitigated) locations refs""" @@ -89,10 +84,10 @@ def chunk_locations_and_disperse( locations: list[AbstractLocation], **kwargs: dict, ) -> None: - self.add_locations_to_unsaved_finding(finding, locations, sync=True) + dojo_dispatch_task(LocationManager.add_locations_to_unsaved_finding, finding, locations, sync=True) + @staticmethod def clean_unsaved_locations( - self, locations: list[AbstractLocation], ) -> None: """ @@ -110,7 +105,7 @@ def chunk_locations_and_reactivate( location_refs: QuerySet[LocationFindingReference], **kwargs: dict, ) -> None: - self.reactivate_location_status(location_refs, sync=True) + dojo_dispatch_task(LocationManager.reactivate_location_status, location_refs, sync=True) def chunk_locations_and_mitigate( self, @@ -118,7 +113,7 @@ def chunk_locations_and_mitigate( user: Dojo_User, **kwargs: dict, ) -> None: - self.mitigate_location_status(location_refs, user, sync=True) + dojo_dispatch_task(LocationManager.mitigate_location_status, location_refs, user, sync=True) def update_location_status( self, diff --git a/dojo/importers/options.py b/dojo/importers/options.py index f7a8e722733..5b9576615c8 100644 --- a/dojo/importers/options.py +++ b/dojo/importers/options.py @@ -10,12 +10,14 @@ from django.utils import timezone from django.utils.functional import SimpleLazyObject +from dojo.jira_link.helper import get_jira_instance from dojo.models import ( Development_Environment, Dojo_User, Endpoint, Engagement, Finding, + JIRA_Instance, Product_API_Scan_Configuration, Test, Test_Import, @@ -70,7 +72,6 @@ def load_base_options( self.lead: Dojo_User | None = self.validate_lead(*args, **kwargs) self.minimum_severity: str = self.validate_minimum_severity(*args, **kwargs) self.parsed_findings: list[Finding] | None = self.validate_parsed_findings(*args, **kwargs) - self.push_to_jira: bool = self.validate_push_to_jira(*args, **kwargs) self.scan_date: datetime = self.validate_scan_date(*args, **kwargs) self.scan_type: str = self.validate_scan_type(*args, **kwargs) self.service: str = self.validate_service(*args, **kwargs) @@ -80,6 +81,8 @@ def load_base_options( self.test_title: str = self.validate_test_title(*args, **kwargs) self.verified: bool = self.validate_verified(*args, **kwargs) self.version: str = self.validate_version(*args, **kwargs) + # Save this for last to use engagement and test for prefetching related to Jira info + self.push_to_jira: bool = self.validate_push_to_jira(*args, **kwargs) def load_additional_options( self, @@ -478,6 +481,7 @@ def validate_push_to_jira( *args: list, **kwargs: dict, ) -> bool: + self.jira_instance: JIRA_Instance | None = get_jira_instance(self.engagement or self.test) return self.validate( "push_to_jira", expected_types=[bool], diff --git a/dojo/jira_link/helper.py b/dojo/jira_link/helper.py index 6f7774c7cc3..d5f5eb2da1a 100644 --- a/dojo/jira_link/helper.py +++ b/dojo/jira_link/helper.py @@ -18,7 +18,7 @@ from requests.auth import HTTPBasicAuth from dojo.celery import app -from dojo.decorators import dojo_async_task +from dojo.celery_dispatch import dojo_dispatch_task from dojo.forms import JIRAEngagementForm, JIRAProjectForm from dojo.models import ( Engagement, @@ -145,17 +145,19 @@ def _safely_get_obj_status_for_jira(obj: Finding | Finding_Group, *, isenforced: return status or ["Inactive"] -def is_keep_in_sync_with_jira(finding): - keep_in_sync_enabled = False - # Check if there is a jira issue that needs to be updated - jira_issue_exists = finding.has_jira_issue or (finding.finding_group and finding.finding_group.has_jira_issue) - if jira_issue_exists: - # Determine if any automatic sync should occur - jira_instance = get_jira_instance(finding) - if jira_instance: - keep_in_sync_enabled = jira_instance.finding_jira_sync - - return keep_in_sync_enabled +def is_keep_in_sync_with_jira(obj: Finding | Finding_Group, prefetched_jira_instance: JIRA_Instance = None): + """Determine if any automatic sync should occur""" + jira_issue_exists = False + # Check for a jira issue on each type of object + if isinstance(obj, Finding): + jira_issue_exists = obj.has_jira_issue or (obj.finding_group and obj.finding_group.has_jira_issue) + elif isinstance(obj, Finding_Group): + jira_issue_exists = obj.has_jira_issue + # Now determine if we need to pull the jira instance to check if sync is enabled + # but only if there is a jira issue that would need syncing + if jira_issue_exists and (jira_instance := prefetched_jira_instance or get_jira_instance(obj)) is not None: + return jira_instance.finding_jira_sync + return False # checks if a finding can be pushed to JIRA @@ -225,8 +227,8 @@ def can_be_pushed_to_jira(obj, form=None): # use_inheritance=True means get jira_project config from product if engagement itself has none -def get_jira_project(obj, *, use_inheritance=True): - if not is_jira_enabled(): +def get_jira_project(obj, *, use_inheritance=True, jira_enabled: bool = False): + if not jira_enabled and not (jira_enabled := is_jira_enabled()): return None if obj is None: @@ -242,19 +244,19 @@ def get_jira_project(obj, *, use_inheritance=True): return obj.jira_project # some old jira_issue records don't have a jira_project, so try to go via the finding instead if (hasattr(obj, "finding") and obj.finding) or (hasattr(obj, "engagement") and obj.engagement): - return get_jira_project(obj.finding, use_inheritance=use_inheritance) + return get_jira_project(obj.finding, use_inheritance=use_inheritance, jira_enabled=jira_enabled) return None if isinstance(obj, Finding | Stub_Finding): finding = obj - return get_jira_project(finding.test) + return get_jira_project(finding.test, jira_enabled=jira_enabled) if isinstance(obj, Finding_Group): - return get_jira_project(obj.test) + return get_jira_project(obj.test, jira_enabled=jira_enabled) if isinstance(obj, Test): test = obj - return get_jira_project(test.engagement) + return get_jira_project(test.engagement, jira_enabled=jira_enabled) if isinstance(obj, Engagement): engagement = obj @@ -269,7 +271,7 @@ def get_jira_project(obj, *, use_inheritance=True): if use_inheritance: logger.debug("delegating to product %s for %s", engagement.product, engagement) - return get_jira_project(engagement.product) + return get_jira_project(engagement.product, jira_enabled=jira_enabled) logger.debug("not delegating to product %s for %s", engagement.product, engagement) return None @@ -286,11 +288,11 @@ def get_jira_project(obj, *, use_inheritance=True): return None -def get_jira_instance(obj): - if not is_jira_enabled(): +def get_jira_instance(obj, jira_enabled: bool = False): # noqa: FBT001, FBT002 + if not jira_enabled and not (jira_enabled := is_jira_enabled()): return None - jira_project = get_jira_project(obj) + jira_project = get_jira_project(obj, jira_enabled=jira_enabled) if jira_project: logger.debug("found jira_instance %s for %s", jira_project.jira_instance, obj) return jira_project.jira_instance @@ -415,17 +417,17 @@ def get_jira_finding_text(jira_instance): return None -def has_jira_issue(obj): +def has_jira_issue(obj: Finding | Engagement | Finding_Group) -> bool: return get_jira_issue(obj) is not None -def get_jira_issue(obj): - if isinstance(obj, Finding | Engagement | Finding_Group): - try: - return obj.jira_issue - except JIRA_Issue.DoesNotExist: - return None - return None +def get_jira_issue(obj: Finding | Engagement | Finding_Group) -> JIRA_Issue | None: + """ + This pattern is "cheaper" than the try/catch handling of the DoesNotExist exception + that would happen if we try to access obj.jira_issue when there is none, and it also + works with prefetch_related where the related object is None instead of a RelatedManager + """ + return getattr(obj, "jira_issue", None) def has_jira_configured(obj): @@ -763,20 +765,19 @@ def push_to_jira(obj, *args, **kwargs): if isinstance(obj, Finding): if obj.has_finding_group: logger.debug("pushing finding group for %s to JIRA", obj) - return push_finding_group_to_jira(obj.finding_group.id, *args, **kwargs) - return push_finding_to_jira(obj.id, *args, **kwargs) + return dojo_dispatch_task(push_finding_group_to_jira, obj.finding_group.id, *args, **kwargs) + return dojo_dispatch_task(push_finding_to_jira, obj.id, *args, **kwargs) if isinstance(obj, Finding_Group): - return push_finding_group_to_jira(obj.id, *args, **kwargs) + return dojo_dispatch_task(push_finding_group_to_jira, obj.id, *args, **kwargs) if isinstance(obj, Engagement): - return push_engagement_to_jira(obj.id, *args, **kwargs) + return dojo_dispatch_task(push_engagement_to_jira, obj.id, *args, **kwargs) logger.error("unsupported object passed to push_to_jira: %s %i %s", obj.__name__, obj.id, obj) return None # we need thre separate celery tasks due to the decorators we're using to map to/from ids -@dojo_async_task @app.task def push_finding_to_jira(finding_id, *args, **kwargs): finding = get_object_or_none(Finding, id=finding_id) @@ -789,7 +790,6 @@ def push_finding_to_jira(finding_id, *args, **kwargs): return add_jira_issue(finding, *args, **kwargs) -@dojo_async_task @app.task def push_finding_group_to_jira(finding_group_id, *args, **kwargs): finding_group = get_object_or_none(Finding_Group, id=finding_group_id) @@ -806,7 +806,6 @@ def push_finding_group_to_jira(finding_group_id, *args, **kwargs): return add_jira_issue(finding_group, *args, **kwargs) -@dojo_async_task @app.task def push_engagement_to_jira(engagement_id, *args, **kwargs): engagement = get_object_or_none(Engagement, id=engagement_id) @@ -815,8 +814,8 @@ def push_engagement_to_jira(engagement_id, *args, **kwargs): return None if engagement.has_jira_issue: - return update_epic(engagement.id, *args, **kwargs) - return add_epic(engagement.id, *args, **kwargs) + return dojo_dispatch_task(update_epic, engagement.id, *args, **kwargs) + return dojo_dispatch_task(add_epic, engagement.id, *args, **kwargs) def add_issues_to_epic(jira, obj, epic_id, issue_keys, *, ignore_epics=True): @@ -1396,7 +1395,6 @@ def jira_check_attachment(issue, source_file_name): return file_exists -@dojo_async_task @app.task def close_epic(engagement_id, push_to_jira, **kwargs): engagement = get_object_or_none(Engagement, id=engagement_id) @@ -1445,7 +1443,6 @@ def close_epic(engagement_id, push_to_jira, **kwargs): return False -@dojo_async_task @app.task def update_epic(engagement_id, **kwargs): engagement = get_object_or_none(Engagement, id=engagement_id) @@ -1492,7 +1489,6 @@ def update_epic(engagement_id, **kwargs): return False -@dojo_async_task @app.task def add_epic(engagement_id, **kwargs): engagement = get_object_or_none(Engagement, id=engagement_id) @@ -1601,10 +1597,9 @@ def add_comment(obj, note, *, force_push=False, **kwargs): return False # Call the internal task with IDs (runs synchronously within this task) - return add_comment_internal(jira_issue.id, note.id, force_push=force_push, **kwargs) + return dojo_dispatch_task(add_comment_internal, jira_issue.id, note.id, force_push=force_push, **kwargs) -@dojo_async_task @app.task def add_comment_internal(jira_issue_id, note_id, *, force_push=False, **kwargs): """Internal Celery task that adds a comment to a JIRA issue.""" diff --git a/dojo/management/commands/dedupe.py b/dojo/management/commands/dedupe.py index a4cbee519a6..3d17f4a7fe9 100644 --- a/dojo/management/commands/dedupe.py +++ b/dojo/management/commands/dedupe.py @@ -131,14 +131,25 @@ def _run_dedupe(self, *, restrict_to_parsers, hash_code_only, dedupe_only, dedup mass_model_updater(Finding, findings, do_dedupe_finding_task_internal, fields=None, order="desc", page_size=100, log_prefix="deduplicating ") else: # async tasks only need the id - mass_model_updater(Finding, findings.only("id"), lambda f: do_dedupe_finding_task(f.id), fields=None, order="desc", log_prefix="deduplicating ") + from dojo.celery_dispatch import dojo_dispatch_task # noqa: PLC0415 circular import + + mass_model_updater( + Finding, + findings.only("id"), + lambda f: dojo_dispatch_task(do_dedupe_finding_task, f.id), + fields=None, + order="desc", + log_prefix="deduplicating ", + ) if dedupe_sync: # update the grading (if enabled) and only useful in sync mode # in async mode the background task that grades products every hour will pick it up logger.debug("Updating grades for products...") for product in Product.objects.all(): - calculate_grade(product.id) + from dojo.celery_dispatch import dojo_dispatch_task # noqa: PLC0415 circular import + + dojo_dispatch_task(calculate_grade, product.id) logger.info("######## Done deduplicating (%s) ########", ("foreground" if dedupe_sync else "tasks submitted to celery")) else: @@ -185,7 +196,9 @@ def _dedupe_batch_mode(self, findings_queryset, *, dedupe_sync: bool = True): else: # Asynchronous: submit task with finding IDs logger.debug(f"Submitting async batch task for {len(batch_finding_ids)} findings for test {test_id}") - do_dedupe_batch_task(batch_finding_ids) + from dojo.celery_dispatch import dojo_dispatch_task # noqa: PLC0415 circular import + + dojo_dispatch_task(do_dedupe_batch_task, batch_finding_ids) total_processed += len(batch_finding_ids) batch_finding_ids = [] diff --git a/dojo/management/commands/jira_status_reconciliation.py b/dojo/management/commands/jira_status_reconciliation.py index a6a49e9256b..2b8a649ed9f 100644 --- a/dojo/management/commands/jira_status_reconciliation.py +++ b/dojo/management/commands/jira_status_reconciliation.py @@ -1,3 +1,4 @@ +import argparse import logging import pghistory @@ -8,7 +9,7 @@ from django.utils.dateparse import parse_datetime import dojo.jira_link.helper as jira_helper -from dojo.models import Engagement, Finding, Product +from dojo.models import Engagement, Finding, Finding_Group, Product logger = logging.getLogger(__name__) @@ -19,6 +20,8 @@ def jira_status_reconciliation(*args, **kwargs): engagement = kwargs["engagement"] daysback = kwargs["daysback"] dryrun = kwargs["dryrun"] + include_findings = kwargs.get("include_findings", True) + include_finding_groups = kwargs.get("include_finding_groups", True) logger.debug("mode: %s product:%s engagement: %s dryrun: %s", mode, product, engagement, dryrun) @@ -29,22 +32,50 @@ def jira_status_reconciliation(*args, **kwargs): if not mode: mode = "reconcile" - findings = Finding.objects.all() + # Resolve product and engagement objects once for reuse in both loops + product_obj = None if product: - product = Product.objects.filter(name=product).first() - findings = findings.filter(test__engagement__product=product) + product_obj = Product.objects.filter(name=product).first() + engagement_obj = None if engagement: - engagement = Engagement.objects.filter(name=engagement).first() - findings = findings.filter(test__engagement=engagement) + engagement_obj = Engagement.objects.filter(name=engagement).first() + timestamp = None if daysback: timestamp = timezone.now() - relativedelta(days=int(daysback)) + + messages = ["jira_key;url;resolution_or_status;jira_issue.jira_change;issue_from_jira.fields.updated;last_status_update;issue_from_jira.fields.updated;last_reviewed;issue_from_jira.fields.updated;flag1;flag2;flag3;action;change_made"] + + # --- Process individual findings with direct JIRA issues --- + if include_findings: + _reconcile_findings(mode, product_obj, engagement_obj, timestamp, dryrun, messages) + + # --- Process finding groups with JIRA issues --- + if include_finding_groups: + _reconcile_finding_groups(mode, product_obj, engagement_obj, timestamp, dryrun, messages) + + logger.info("results (semicolon seperated)") + for message in messages: + logger.info(message) + return None + + +def _reconcile_findings(mode, product_obj, engagement_obj, timestamp, dryrun, messages): + """Reconcile individual findings that have their own direct JIRA issues.""" + findings = Finding.objects.all() + if product_obj: + findings = findings.filter(test__engagement__product=product_obj) + + if engagement_obj: + findings = findings.filter(test__engagement=engagement_obj) + + if timestamp: findings = findings.filter(created__gte=timestamp) findings = findings.exclude(jira_issue__isnull=True) - # order by product, engagement to increase the cance of being able to reuse jira_instance + jira connection + # order by product, engagement to increase the chance of being able to reuse jira_instance + jira connection findings = findings.order_by("test__engagement__product__id", "test__engagement__id") findings = findings.prefetch_related("jira_issue__jira_project__jira_instance") @@ -53,7 +84,6 @@ def jira_status_reconciliation(*args, **kwargs): logger.debug(findings.query) - messages = ["jira_key;finding_url;resolution_or_status;find.jira_issue.jira_change;issue_from_jira.fields.updated;find.last_status_update;issue_from_jira.fields.updated;find.last_reviewed;issue_from_jira.fields.updated;flag1;flag2;flag3;action;change_made"] for find in findings: logger.debug("jira status reconciliation for: %i:%s", find.id, find) @@ -182,10 +212,171 @@ def jira_status_reconciliation(*args, **kwargs): logger.info(message) - logger.info("results (semicolon seperated)") - for message in messages: - logger.info(message) - return None + +def _reconcile_finding_groups(mode, product_obj, engagement_obj, timestamp, dryrun, messages): + """ + Reconcile finding groups that have their own JIRA issues. + + This handles JIRA issues attached to Finding_Group objects separately from + individual finding JIRA issues to avoid pushing the same JIRA issue twice. + We use push_status_to_jira directly on the group (not push_finding_group_to_jira + which would also push individual finding JIRA issues already handled by + _reconcile_findings). + """ + finding_groups = Finding_Group.objects.all() + if product_obj: + finding_groups = finding_groups.filter(test__engagement__product=product_obj) + + if engagement_obj: + finding_groups = finding_groups.filter(test__engagement=engagement_obj) + + if timestamp: + finding_groups = finding_groups.filter(created__gte=timestamp) + + finding_groups = finding_groups.exclude(jira_issue__isnull=True) + + # order by product, engagement to increase the chance of being able to reuse jira_instance + jira connection + finding_groups = finding_groups.order_by("test__engagement__product__id", "test__engagement__id") + + finding_groups = finding_groups.prefetch_related("jira_issue__jira_project__jira_instance") + finding_groups = finding_groups.prefetch_related("test__engagement__jira_project__jira_instance") + finding_groups = finding_groups.prefetch_related("test__engagement__product__jira_project_set__jira_instance") + finding_groups = finding_groups.prefetch_related("findings") + + logger.debug(finding_groups.query) + + for finding_group in finding_groups: + logger.debug("jira status reconciliation for finding group: %i:%s", finding_group.id, finding_group) + + group_findings = finding_group.findings.all() + group_url = f"{settings.SITE_URL}/test/{finding_group.test.id}" + + issue_from_jira = jira_helper.get_jira_issue_from_jira(finding_group) + + if not issue_from_jira: + message = f"{finding_group.jira_issue.jira_key};{group_url};{finding_group.status()};unable to retrieve JIRA Issue;error" + messages.append(message) + logger.info(message) + continue + + assignee = issue_from_jira.fields.assignee if hasattr(issue_from_jira.fields, "assignee") else None + assignee_name = assignee.displayName if assignee else None + resolution = issue_from_jira.fields.resolution if issue_from_jira.fields.resolution and issue_from_jira.fields.resolution != "None" else None + resolution_id = resolution.id if resolution else None + resolution_name = resolution.name if resolution else None + + # convert from str to datetime + issue_from_jira.fields.updated = parse_datetime(issue_from_jira.fields.updated) + + # Derive timestamps from the findings in the group + group_last_status_update = _max_or_none(f.last_status_update for f in group_findings) + group_last_reviewed = _max_or_none(f.last_reviewed for f in group_findings) + group_is_active = any(f.active for f in group_findings) + group_all_mitigated = all(f.is_mitigated for f in group_findings) if group_findings else False + + flag1, flag2, flag3 = None, None, None + + if mode == "reconcile" and not group_last_status_update: + message = f"{finding_group.jira_issue.jira_key}; {group_url};finding_group:{finding_group.id};{finding_group.status()};skipping finding group with no last_status_update;skipped" + messages.append(message) + logger.info(message) + continue + + jira_is_active = jira_helper.issue_from_jira_is_active(issue_from_jira) + + if jira_is_active and group_is_active: + message = f"{finding_group.jira_issue.jira_key}; {group_url};finding_group:{finding_group.id};{finding_group.status()};{resolution_name};no action both sides are active/open;equal" + messages.append(message) + logger.info(message) + elif not jira_is_active and not group_is_active: + message = f"{finding_group.jira_issue.jira_key}; {group_url};finding_group:{finding_group.id};{finding_group.status()};{resolution_name};no action both sides are inactive/closed;equal" + messages.append(message) + logger.info(message) + + else: + # statuses are different + action = None + if mode in {"push_status_to_jira", "import_status_from_jira"}: + action = mode + else: + # reconcile - determine which side is newer using derived timestamps + # Status in JIRA is newer if all DefectDojo timestamps are older than JIRA updated + flag1 = (not finding_group.jira_issue.jira_change or (finding_group.jira_issue.jira_change < issue_from_jira.fields.updated)) + flag2 = not group_last_status_update or (group_last_status_update < issue_from_jira.fields.updated) + flag3 = (not group_last_reviewed or (group_last_reviewed < issue_from_jira.fields.updated)) + + logger.debug("finding_group reconcile: %s,%s,%s,%s", resolution_name, flag1, flag2, flag3) + + if flag1 and flag2 and flag3: + action = "import_status_from_jira" + else: + # Status in DefectDojo is newer + flag1 = not finding_group.jira_issue.jira_change or (finding_group.jira_issue.jira_change > issue_from_jira.fields.updated) + flag2 = group_last_status_update and (group_last_status_update > issue_from_jira.fields.updated) + flag3 = group_all_mitigated and finding_group.jira_issue.jira_change and any( + f.is_mitigated and f.mitigated and f.mitigated > finding_group.jira_issue.jira_change + for f in group_findings + ) + + logger.debug("finding_group reconcile dojo newer: %s,%s,%s,%s", resolution_name, flag1, flag2, flag3) + + if flag1 or flag2 or flag3: + action = "push_status_to_jira" + + prev_jira_instance, jira = None, None + + if action == "import_status_from_jira": + # Import status from JIRA to all findings in the group + # Same pattern as the JIRA webhook handler in dojo/jira_link/views.py + any_status_changed = False + for find in group_findings: + if not dryrun: + status_changed = jira_helper.process_resolution_from_jira( + find, resolution_id, resolution_name, assignee_name, + issue_from_jira.fields.updated, finding_group.jira_issue, + finding_group=finding_group, + ) + else: + status_changed = "dryrun" + if status_changed: + any_status_changed = True + + message_action = "deactivating" if group_is_active else "reactivating" + message = f"{finding_group.jira_issue.jira_key}; {group_url};finding_group:{finding_group.id};{finding_group.status()};{resolution_name};{flag1};{flag2};{flag3};{message_action} findings in finding group;{any_status_changed}" + messages.append(message) + logger.info(message) + + elif action == "push_status_to_jira": + # Push the finding group's aggregate status to its JIRA issue directly. + # We do NOT use push_finding_group_to_jira here because that would also push + # individual finding JIRA issues which are already handled by _reconcile_findings. + jira_instance = jira_helper.get_jira_instance(finding_group) + if not prev_jira_instance or (jira_instance.id != prev_jira_instance.id): + jira = jira_helper.get_jira_connection(jira_instance) + + message_action = "reopening" if group_is_active else "closing" + + status_changed = jira_helper.push_status_to_jira(finding_group, jira_instance, jira, issue_from_jira, save=True) if not dryrun else "dryrun" + + if status_changed: + message = f"{finding_group.jira_issue.jira_key}; {group_url};finding_group:{finding_group.id};{finding_group.status()};{resolution_name};{flag1};{flag2};{flag3};{message_action} jira issue for finding group;{status_changed}" + else: + if status_changed is None: + status_changed = "Error" + message = f"{finding_group.jira_issue.jira_key}; {group_url};finding_group:{finding_group.id};{finding_group.status()};{resolution_name};{flag1};{flag2};{flag3};no changes made while pushing status to jira;{status_changed}" + + messages.append(message) + logger.info(message) + else: + message = f"{finding_group.jira_issue.jira_key}; {group_url};finding_group:{finding_group.id};{finding_group.status()};{resolution_name};{flag1};{flag2};{flag3};unable to determine source of truth;unknown" + messages.append(message) + logger.info(message) + + +def _max_or_none(iterable): + """Return the max of non-None values in iterable, or None if all are None.""" + values = [v for v in iterable if v is not None] + return max(values) if values else None class Command(BaseCommand): @@ -200,21 +391,29 @@ class Command(BaseCommand): - sync_from_jira: overwrite status in Defect Dojo with status from JIRA """ - help = "Reconcile finding status with JIRA issue status, stdout will contain semicolon seperated CSV results. \ + help = "Reconcile finding/finding group status with JIRA issue status, stdout will contain semicolon seperated CSV results. \ Risk Accepted findings are skipped. Findings created before 1.14.0 are skipped." mode_help = ( "- reconcile: (default)reconcile any differences in status between Defect Dojo and JIRA, will look at the latest status change timestamp in both systems to determine which one is the correct status" - "- push_status_to_jira: update JIRA status for all JIRA issues connected to a Defect Dojo finding (will not push summary/description, only status)" - "- import_status_from_jira: update Defect Dojo finding status from JIRA" + "- push_status_to_jira: update JIRA status for all JIRA issues connected to a Defect Dojo finding or finding group (will not push summary/description, only status)" + "- import_status_from_jira: update Defect Dojo finding/finding group status from JIRA" ) def add_arguments(self, parser): parser.add_argument("--mode", help=self.mode_help) parser.add_argument("--product", help="Only process findings in this product (name)") - parser.add_argument("--engagement", help="Only process findings in this product (name)") + parser.add_argument("--engagement", help="Only process findings in this engagement (name)") parser.add_argument("--daysback", type=int, help="Only process findings created in the last 'daysback' days") parser.add_argument("--dryrun", action="store_true", help="Only print actions to be performed, but make no modifications.") + parser.add_argument( + "--include-findings", action=argparse.BooleanOptionalAction, default=True, + help="Process individual findings with direct JIRA issues (default: True)", + ) + parser.add_argument( + "--include-finding-groups", action=argparse.BooleanOptionalAction, default=True, + help="Process finding groups with JIRA issues (default: True)", + ) def handle(self, *args, **options): # Wrap with pghistory context for audit trail diff --git a/dojo/models.py b/dojo/models.py index 2281a2bfac8..5f470c83d93 100644 --- a/dojo/models.py +++ b/dojo/models.py @@ -1092,7 +1092,9 @@ def save(self, *args, **kwargs): super(Product, product).save() # launch the async task to update all finding sla expiration dates from dojo.sla_config.helpers import async_update_sla_expiration_dates_sla_config_sync # noqa: I001, PLC0415 circular import - async_update_sla_expiration_dates_sla_config_sync(self, products, severities=severities) + from dojo.celery_dispatch import dojo_dispatch_task # noqa: PLC0415 circular import + + dojo_dispatch_task(async_update_sla_expiration_dates_sla_config_sync, self, products, severities=severities) def clean(self): sla_days = [self.critical, self.high, self.medium, self.low] @@ -1252,7 +1254,9 @@ def save(self, *args, **kwargs): super(SLA_Configuration, sla_config).save() # launch the async task to update all finding sla expiration dates from dojo.sla_config.helpers import async_update_sla_expiration_dates_sla_config_sync # noqa: I001, PLC0415 circular import - async_update_sla_expiration_dates_sla_config_sync(sla_config, Product.objects.filter(id=self.id)) + from dojo.celery_dispatch import dojo_dispatch_task # noqa: PLC0415 circular import + + dojo_dispatch_task(async_update_sla_expiration_dates_sla_config_sync, sla_config, Product.objects.filter(id=self.id)) def get_absolute_url(self): return reverse("view_product", args=[str(self.id)]) diff --git a/dojo/notifications/helper.py b/dojo/notifications/helper.py index c4458daec01..7318bae91af 100644 --- a/dojo/notifications/helper.py +++ b/dojo/notifications/helper.py @@ -18,7 +18,8 @@ from dojo import __version__ as dd_version from dojo.authorization.roles_permissions import Permissions from dojo.celery import app -from dojo.decorators import dojo_async_task, we_want_async +from dojo.celery_dispatch import dojo_dispatch_task +from dojo.decorators import we_want_async from dojo.labels import get_labels from dojo.models import ( Alerts, @@ -45,6 +46,26 @@ labels = get_labels() +def get_manager_class_instance(): + default_manager = NotificationManager + notification_manager_class = default_manager + if isinstance( + ( + notification_manager := getattr( + settings, + "NOTIFICATION_MANAGER", + default_manager, + ) + ), + str, + ): + with suppress(ModuleNotFoundError): + module_name, _separator, class_name = notification_manager.rpartition(".") + module = importlib.import_module(module_name) + notification_manager_class = getattr(module, class_name) + return notification_manager_class() + + def create_notification( event: str | None = None, title: str | None = None, @@ -62,23 +83,7 @@ def create_notification( **kwargs: dict, ) -> None: """Create an instance of a NotificationManager and dispatch the notification.""" - default_manager = NotificationManager - notification_manager_class = default_manager - if isinstance( - ( - notification_manager := getattr( - settings, - "NOTIFICATION_MANAGER", - default_manager, - ) - ), - str, - ): - with suppress(ModuleNotFoundError): - module_name, _separator, class_name = notification_manager.rpartition(".") - module = importlib.import_module(module_name) - notification_manager_class = getattr(module, class_name) - notification_manager_class().create_notification( + get_manager_class_instance().create_notification( event=event, title=title, finding=finding, @@ -199,8 +204,6 @@ class SlackNotificationManger(NotificationManagerHelpers): """Manger for slack notifications and their helpers.""" - @dojo_async_task - @app.task def send_slack_notification( self, event: str, @@ -317,8 +320,6 @@ class MSTeamsNotificationManger(NotificationManagerHelpers): """Manger for Microsoft Teams notifications and their helpers.""" - @dojo_async_task - @app.task def send_msteams_notification( self, event: str, @@ -368,8 +369,6 @@ class EmailNotificationManger(NotificationManagerHelpers): """Manger for email notifications and their helpers.""" - @dojo_async_task - @app.task def send_mail_notification( self, event: str, @@ -420,8 +419,6 @@ class WebhookNotificationManger(NotificationManagerHelpers): ERROR_PERMANENT = "permanent" ERROR_TEMPORARY = "temporary" - @dojo_async_task - @app.task def send_webhooks_notification( self, event: str, @@ -480,11 +477,7 @@ def send_webhooks_notification( endpoint.first_error = now endpoint.status = Notification_Webhooks.Status.STATUS_INACTIVE_TMP # In case of failure within one day, endpoint can be deactivated temporally only for one minute - self._webhook_reactivation.apply_async( - args=[self], - kwargs={"endpoint_id": endpoint.pk}, - countdown=60, - ) + webhook_reactivation.apply_async(kwargs={"endpoint_id": endpoint.pk}, countdown=60) # There is no reason to keep endpoint active if it is returning 4xx errors else: endpoint.status = Notification_Webhooks.Status.STATUS_INACTIVE_PERMANENT @@ -559,7 +552,6 @@ def _test_webhooks_notification(self, endpoint: Notification_Webhooks) -> None: # in "send_webhooks_notification", we are doing deeper analysis, why it failed # for now, "raise_for_status" should be enough - @app.task(ignore_result=True) def _webhook_reactivation(self, endpoint_id: int, **_kwargs: dict): endpoint = Notification_Webhooks.objects.get(pk=endpoint_id) # User already changed status of endpoint @@ -832,9 +824,10 @@ def _process_notifications( notifications.other, ): logger.debug("Sending Slack Notification") - self._get_manager_instance("slack").send_slack_notification( + dojo_dispatch_task( + send_slack_notification, event, - user=notifications.user, + user_id=getattr(notifications.user, "id", None), **kwargs, ) @@ -844,9 +837,10 @@ def _process_notifications( notifications.other, ): logger.debug("Sending MSTeams Notification") - self._get_manager_instance("msteams").send_msteams_notification( + dojo_dispatch_task( + send_msteams_notification, event, - user=notifications.user, + user_id=getattr(notifications.user, "id", None), **kwargs, ) @@ -856,9 +850,10 @@ def _process_notifications( notifications.other, ): logger.debug("Sending Mail Notification") - self._get_manager_instance("mail").send_mail_notification( + dojo_dispatch_task( + send_mail_notification, event, - user=notifications.user, + user_id=getattr(notifications.user, "id", None), **kwargs, ) @@ -868,13 +863,43 @@ def _process_notifications( notifications.other, ): logger.debug("Sending Webhooks Notification") - self._get_manager_instance("webhooks").send_webhooks_notification( + dojo_dispatch_task( + send_webhooks_notification, event, - user=notifications.user, + user_id=getattr(notifications.user, "id", None), **kwargs, ) +@app.task +def send_slack_notification(event: str, user_id: int | None = None, **kwargs: dict) -> None: + user = Dojo_User.objects.get(pk=user_id) if user_id else None + get_manager_class_instance()._get_manager_instance("slack").send_slack_notification(event, user=user, **kwargs) + + +@app.task +def send_msteams_notification(event: str, user_id: int | None = None, **kwargs: dict) -> None: + user = Dojo_User.objects.get(pk=user_id) if user_id else None + get_manager_class_instance()._get_manager_instance("msteams").send_msteams_notification(event, user=user, **kwargs) + + +@app.task +def send_mail_notification(event: str, user_id: int | None = None, **kwargs: dict) -> None: + user = Dojo_User.objects.get(pk=user_id) if user_id else None + get_manager_class_instance()._get_manager_instance("mail").send_mail_notification(event, user=user, **kwargs) + + +@app.task +def send_webhooks_notification(event: str, user_id: int | None = None, **kwargs: dict) -> None: + user = Dojo_User.objects.get(pk=user_id) if user_id else None + get_manager_class_instance()._get_manager_instance("webhooks").send_webhooks_notification(event, user=user, **kwargs) + + +@app.task(ignore_result=True) +def webhook_reactivation(endpoint_id: int, **_kwargs: dict) -> None: + get_manager_class_instance()._get_manager_instance("webhooks")._webhook_reactivation(endpoint_id=endpoint_id) + + @app.task(ignore_result=True) def webhook_status_cleanup(*_args: list, **_kwargs: dict): # If some endpoint was affected by some outage (5xx, 429, Timeout) but it was clean during last 24 hours, @@ -902,4 +927,4 @@ def webhook_status_cleanup(*_args: list, **_kwargs: dict): ) for endpoint in broken_endpoints: manager = WebhookNotificationManger() - manager._webhook_reactivation(manager, endpoint_id=endpoint.pk) + manager._webhook_reactivation(endpoint_id=endpoint.pk) diff --git a/dojo/product/helpers.py b/dojo/product/helpers.py index 8247cad4fa8..cdb0750f317 100644 --- a/dojo/product/helpers.py +++ b/dojo/product/helpers.py @@ -5,14 +5,12 @@ from django.db.models import Q from dojo.celery import app -from dojo.decorators import dojo_async_task from dojo.location.models import Location from dojo.models import Endpoint, Engagement, Finding, Product, Test logger = logging.getLogger(__name__) -@dojo_async_task @app.task def propagate_tags_on_product(product_id, *args, **kwargs): with contextlib.suppress(Product.DoesNotExist): diff --git a/dojo/sla_config/helpers.py b/dojo/sla_config/helpers.py index da5899a85b0..045456f38d7 100644 --- a/dojo/sla_config/helpers.py +++ b/dojo/sla_config/helpers.py @@ -1,14 +1,12 @@ import logging from dojo.celery import app -from dojo.decorators import dojo_async_task from dojo.models import Finding, Product, SLA_Configuration, System_Settings from dojo.utils import get_custom_method, mass_model_updater logger = logging.getLogger(__name__) -@dojo_async_task @app.task def async_update_sla_expiration_dates_sla_config_sync(sla_config: SLA_Configuration, products: list[Product], *args, severities: list[str] | None = None, **kwargs): if method := get_custom_method("FINDING_SLA_EXPIRATION_CALCULATION_METHOD"): diff --git a/dojo/tags_signals.py b/dojo/tags_signals.py index 58682421d0b..0fea7ae8ad5 100644 --- a/dojo/tags_signals.py +++ b/dojo/tags_signals.py @@ -4,6 +4,7 @@ from django.db.models import signals from django.dispatch import receiver +from dojo.celery_dispatch import dojo_dispatch_task from dojo.location.models import Location, LocationFindingReference, LocationProductReference from dojo.models import Endpoint, Engagement, Finding, Product, Test from dojo.product import helpers as async_product_funcs @@ -20,7 +21,7 @@ def product_tags_post_add_remove(sender, instance, action, **kwargs): running_async_process = instance.running_async_process # Check if the async process is already running to avoid calling it a second time if not running_async_process and inherit_product_tags(instance): - async_product_funcs.propagate_tags_on_product(instance.id, countdown=5) + dojo_dispatch_task(async_product_funcs.propagate_tags_on_product, instance.id, countdown=5) instance.running_async_process = True diff --git a/dojo/tasks.py b/dojo/tasks.py index b934abc9f02..1bbe104783b 100644 --- a/dojo/tasks.py +++ b/dojo/tasks.py @@ -2,6 +2,7 @@ from datetime import timedelta import pghistory +from celery import Task from celery.utils.log import get_task_logger from django.apps import apps from django.conf import settings @@ -12,7 +13,7 @@ from dojo.auditlog import run_flush_auditlog from dojo.celery import app -from dojo.decorators import dojo_async_task +from dojo.celery_dispatch import dojo_dispatch_task from dojo.finding.helper import fix_loop_duplicates from dojo.location.models import Location from dojo.management.commands.jira_status_reconciliation import jira_status_reconciliation @@ -31,7 +32,7 @@ def log_generic_alert(source, title, description): @app.task(bind=True) -def add_alerts(self, runinterval): +def add_alerts(self, runinterval, *args, **kwargs): now = timezone.now() upcoming_engagements = Engagement.objects.filter(target_start__gt=now + timedelta(days=3), target_start__lt=now + timedelta(days=3) + runinterval).order_by("target_start") @@ -73,7 +74,7 @@ def add_alerts(self, runinterval): if system_settings.enable_product_grade: products = Product.objects.all() for product in products: - calculate_grade(product.id) + dojo_dispatch_task(calculate_grade, product.id) @app.task(bind=True) @@ -170,11 +171,18 @@ def _async_dupe_delete_impl(): if system_settings.enable_product_grade: logger.info("performing batch product grading for %s products", len(affected_products)) for product in affected_products: - calculate_grade(product.id) + dojo_dispatch_task(calculate_grade, product.id) -@app.task(ignore_result=False) +@app.task(ignore_result=False, base=Task) def celery_status(): + """ + Simple health check task to verify Celery is running. + + Uses base Task class (not PgHistoryTask) since it doesn't need: + - User context tracking + - Pghistory context (no database modifications) + """ return True @@ -242,7 +250,6 @@ def clear_sessions(*args, **kwargs): call_command("clearsessions") -@dojo_async_task @app.task def update_watson_search_index_for_model(model_name, pk_list, *args, **kwargs): """ diff --git a/dojo/templates/issue-trackers/jira_german/jira-description.tpl b/dojo/templates/issue-trackers/jira_german/jira-description.tpl new file mode 100644 index 00000000000..d5d0fe2294e --- /dev/null +++ b/dojo/templates/issue-trackers/jira_german/jira-description.tpl @@ -0,0 +1,55 @@ +{% load navigation_tags %} +{% load display_tags %} +{% load get_endpoint_status %} +{% url 'view_product' finding.test.engagement.product.id as product_url %} +{% url 'view_engagement' finding.test.engagement.id as engagement_url %} +{% url 'view_finding' finding.id as finding_url %} + +Nach dem [Schwachstellenmanagementprozess| https://wiki.teambank.de/confluence/spaces/IB/pages/521544189/ITG.111_Schwachstellenmanagement+ausf%C3%BChren] wird ein Ticket eröffnet, wenn die Schwachstellen einer Applikation oder eines Assets die in der [Patchmanagementrichtlinie|https://ohb.easycredit.intern/#default/item/c.policy.TeamBank_P.u_v4ASyfEfAXmwBQVo2gcw.-1/~AahbIml0ZW1Eb2N1bWVudGF0aW9uIl0~] definierten Behebungszeiten überschreitet. +Der [Application Manager|https://ohb.easycredit.intern/#default/item/c.role.TeamBank_P.ErtXQOrkEedWBwBQVoVVJw.-1/~AfBbImNvbXBvbmVudF9jb21tZW50U3RyZWFtMTk5Il0~] der betroffenen Applikation ist für die Behebung der Schwachstellen verantwortlich. +Die Bearbeitungszeiten hierfür regelt die [Schwachstellenmanagementrichtlinie|https://ohb.easycredit.intern/#default/item/c.policy.TeamBank_P.t_GTUSyfEfAXmwBQVo2gcw.-1/~AahbIml0ZW1Eb2N1bWVudGF0aW9uIl0~]. +Nach Überschreitung dieser Zeit wird der Vorgang an die CISO-Organisation eskaliert und eine Risikobehandlung durchgeführt. + +Die folgende Schwachstelle von {{ finding.test.engagement.product.name }} überschreitet den Schwellwert für die Behebungszeit: + +--- + +*Schwachstellentitel:* +{{ finding.title|jiraencode }} + +{% if finding.endpoints.all %} +*Betroffenes System / Endpoint:* +{% for endpoint in finding|get_vulnerable_endpoints %} +- {{ endpoint }} +{% endfor %} +{% else %} +*Betroffenes Asset:* +{{ finding.test.engagement.product.name }} +{% endif %} + +*DefectDojo-Link:* +{{ finding_url|full_url }} + +*Schweregrad / Severity:* +{{ finding.severity }} + +{% if finding.cve %} +*CVE:* +{{ finding.cve }} +{% else %} +*CVE:* +Nicht bekannt +{% endif %} + +{% if finding.cvssv3_score %} +*CVSS v3:* +{{ finding.cvssv3_score }}{% if finding.cvssv3 %} ({{ finding.cvssv3 }}){% endif %} +{% endif %} + +*Festgestellt durch:* +{{ finding.test.engagement.name }} + +--- + +*Beschreibung der Schwachstelle:* +{{ finding.description|safe }} diff --git a/dojo/templates/issue-trackers/jira_german/jira-finding-group-description.tpl b/dojo/templates/issue-trackers/jira_german/jira-finding-group-description.tpl new file mode 100644 index 00000000000..1d53270ff80 --- /dev/null +++ b/dojo/templates/issue-trackers/jira_german/jira-finding-group-description.tpl @@ -0,0 +1,104 @@ +{% load navigation_tags %} +{% load display_tags %} +{% load get_endpoint_status %} +{% url 'view_finding_group' finding_group.id as finding_group_url %} +{% url 'view_product' finding_group.test.engagement.product.id as product_url %} +{% url 'view_engagement' finding_group.test.engagement.id as engagement_url %} +{% url 'view_test' finding_group.test.id as test_url %} + +A group of Findings has been pushed to JIRA to be investigated and fixed: + +h2. Group +*Group*: [{{ finding_group.name|jiraencode}}|{{ finding_group_url|full_url }}] in [{{ finding_group.test.engagement.product.name|jiraencode }}|{{ product_url|full_url }}] / [{{ finding_group.test.engagement.name|jiraencode }}|{{ engagement_url|full_url }}] / [{{ finding_group.test|stringformat:'s'|jiraencode }}|{{ test_url|full_url }}] + +h2. Summary +*Severity:* {{ finding_group.findings.all | jira_severity }} {% if finding_group.sla_deadline %} *Due Date:* {{ finding_group | jira_sla_deadline }} {% endif %} + +Findings matching the Active, Verified and Severity criteria: +|| Severity || CVE || CWE || Component || Version || Title || Status ||{% for finding in finding_group|jira_qualified_findings %} +|{{finding.severity}}|{% if finding.cve %}[{{finding.cve}}|{{finding.cve|vulnerability_url}}]{% else %}None{% endif %}|[{{finding.cwe}}|{{finding.cwe|cwe_url}}]|{{finding.component_name|jiraencode_component}}|{{finding.component_version}}|{% url 'view_finding' finding.id as finding_url %}[{{ finding.title|jiraencode}}|{{ finding_url|full_url }}]|{{ finding.status }}|{% endfor %} + +Findings *not* matching the Active, Verified and Severity criteria: +|| Severity || CVE || CWE || Component || Version || Title || Status ||{% for finding in finding_group|jira_non_qualified_findings %} +|{{finding.severity}}|{% if finding.cve %}[{{finding.cve}}|{{finding.cve|vulnerability_url}}]{% else %}None{% endif %}|[{{finding.cwe}}|{{finding.cwe|cwe_url}}]|{{finding.component_name|jiraencode_component}}|{{finding.component_version}}|{% url 'view_finding' finding.id as finding_url %}[{{ finding.title|jiraencode}}|{{ finding_url|full_url }}]|{{ finding.status }}|{% endfor %} + +{% if finding_group.test.engagement.branch_tag %} +*Branch/Tag:* {{ finding_group.test.engagement.branch_tag }} +{% endif %} + +{% if finding_group.test.engagement.build_id %} +*BuildID:* {{ finding_group.test.engagement.build_id }} +{% endif %} + +{% if finding_group.test.engagement.commit_hash %} +*Commit hash:* {{ finding_group.test.engagement.commit_hash }} +{% endif %} + +{% for finding in finding_group.findings.all %} +{% url 'view_finding' finding.id as finding_url %} + +h1. Findings + +h3. [{{ finding.title|jiraencode}}|{{ finding_url|full_url }}] +*Defect Dojo link:* {{ finding_url|full_url }} ({{ finding.id }}) +*Severity:* {{ finding.severity }} +{% if finding.sla_deadline %} *Due Date:* {{ finding.sla_deadline }} {% endif %} +{% if finding.cwe > 0 %} *CWE:* [CWE-{{ finding.cwe }}|{{ finding.cwe|cwe_url }}] {% endif %} +{% if finding.cve %}*CVE:* [{{ finding.cve }}|{{ finding.cve|vulnerability_url }}]{% else %}*CVE:* Unknown{% endif %} +{% if finding.cvssv3_score %} *CVSSv3 Score:* {{ finding.cvssv3_score }} {% endif %} + +{% if finding.endpoints.all %} +*Systems/Endpoints*: +||System/Endpoint||Status|| +{% for endpoint in finding|get_vulnerable_endpoints %}|{{ endpoint }}|{{ endpoint|endpoint_display_status:finding }}| +{% endfor %}{% for endpoint in finding|get_mitigated_endpoints %}|{{ endpoint }}|{{ endpoint|endpoint_display_status:finding }}| +{% endfor %} +{%endif%} + +{% if finding.sast_source_object %} +*Source Object*: {{ finding.sast_source_object }} +*Source File*: {{ finding.sast_source_file_path }} +*Source Line*: {{ finding.sast_source_line }} +*Sink Object*: {{ finding.sast_sink_object }} +{% elif finding.static_finding %} +{% if finding.file_path and finding.get_file_path_with_raw_link %} +*Source File*: [{{ finding.file_path }} | {{ finding.get_file_path_with_raw_link }}] +{% elif finding.file_path %} +*Source File*: {{ finding.file_path }} +{% endif %} +{% if finding.line %} +*Source Line*: {{ finding.line }} +{% endif %} +{% endif %} + +*Description*: +{{ finding.description|safe }} + +{% if finding.mitigation %} +*Mitigation*: +{{ finding.mitigation|safe }} +{% endif %} + +{% if finding.impact %} +*Impact*: +{{ finding.impact|safe }} +{% endif %} + +{% if finding.steps_to_reproduce %} +*Steps to reproduce*: +{{ finding.steps_to_reproduce|safe }} +{% endif %} + +{% if finding.references %} +*References*: +{{ finding.references|safe }} +{% endif %} + +{% if finding_text %} +*Finding Text*: +{{ finding_text|safe }} +{% endif %} + + +*Reporter:* [{{ finding.reporter|full_name}} ({{ finding.reporter.email }})|mailto:{{ finding.reporter.email }}] +{% endfor %} \ No newline at end of file diff --git a/dojo/templatetags/display_tags.py b/dojo/templatetags/display_tags.py index 0fd6b604f06..18c4b7f6f4a 100644 --- a/dojo/templatetags/display_tags.py +++ b/dojo/templatetags/display_tags.py @@ -363,7 +363,9 @@ def product_grade(product): if system_settings.enable_product_grade and product: prod_numeric_grade = product.prod_numeric_grade if not prod_numeric_grade or prod_numeric_grade is None: - calculate_grade(product.id) + from dojo.celery_dispatch import dojo_dispatch_task # noqa: PLC0415 circular import + + dojo_dispatch_task(calculate_grade, product.id) if prod_numeric_grade: if prod_numeric_grade >= system_settings.product_grade_a: grade = "A" diff --git a/dojo/test/views.py b/dojo/test/views.py index 96f7c54e470..c8b52bb6f14 100644 --- a/dojo/test/views.py +++ b/dojo/test/views.py @@ -27,6 +27,7 @@ from dojo.authorization.authorization import user_has_permission_or_403 from dojo.authorization.authorization_decorators import user_is_authorized from dojo.authorization.roles_permissions import Permissions +from dojo.celery_dispatch import dojo_dispatch_task from dojo.engagement.queries import get_authorized_engagements from dojo.filters import FindingFilter, FindingFilterWithoutObjectLookups, TemplateFindingFilter, TestImportFilter from dojo.finding.queries import prefetch_for_findings @@ -345,7 +346,7 @@ def copy_test(request, tid): engagement = form.cleaned_data.get("engagement") product = test.engagement.product test_copy = test.copy(engagement=engagement) - calculate_grade(product.id) + dojo_dispatch_task(calculate_grade, product.id) messages.add_message( request, messages.SUCCESS, diff --git a/dojo/tools/tool_issue_updater.py b/dojo/tools/tool_issue_updater.py index 854fb989113..8211e166eed 100644 --- a/dojo/tools/tool_issue_updater.py +++ b/dojo/tools/tool_issue_updater.py @@ -3,7 +3,7 @@ import pghistory from dojo.celery import app -from dojo.decorators import dojo_async_task +from dojo.celery_dispatch import dojo_dispatch_task from dojo.models import Finding from dojo.tools.api_sonarqube.parser import SCAN_SONARQUBE_API from dojo.tools.api_sonarqube.updater import SonarQubeApiUpdater @@ -15,7 +15,7 @@ def async_tool_issue_update(finding, *args, **kwargs): if is_tool_issue_updater_needed(finding): - tool_issue_updater(finding.id) + dojo_dispatch_task(tool_issue_updater, finding.id) def is_tool_issue_updater_needed(finding, *args, **kwargs): @@ -23,7 +23,6 @@ def is_tool_issue_updater_needed(finding, *args, **kwargs): return test_type.name == SCAN_SONARQUBE_API -@dojo_async_task @app.task def tool_issue_updater(finding_id, *args, **kwargs): finding = get_object_or_none(Finding, id=finding_id) @@ -37,7 +36,6 @@ def tool_issue_updater(finding_id, *args, **kwargs): SonarQubeApiUpdater().update_sonarqube_finding(finding) -@dojo_async_task @app.task def update_findings_from_source_issues(**kwargs): # Wrap with pghistory context for audit trail diff --git a/dojo/utils.py b/dojo/utils.py index 980cd107659..ba1b5ed0d7c 100644 --- a/dojo/utils.py +++ b/dojo/utils.py @@ -47,7 +47,6 @@ from dojo.authorization.roles_permissions import Permissions from dojo.celery import app -from dojo.decorators import dojo_async_task from dojo.finding.queries import get_authorized_findings from dojo.github import ( add_external_issue_github, @@ -1057,7 +1056,6 @@ def handle_uploaded_selenium(f, cred): cred.save() -@dojo_async_task @app.task def add_external_issue(finding_id, external_issue_provider, **kwargs): finding = get_object_or_none(Finding, id=finding_id) @@ -1073,7 +1071,6 @@ def add_external_issue(finding_id, external_issue_provider, **kwargs): add_external_issue_github(finding, prod, eng) -@dojo_async_task @app.task def update_external_issue(finding_id, old_status, external_issue_provider, **kwargs): finding = get_object_or_none(Finding, id=finding_id) @@ -1088,7 +1085,6 @@ def update_external_issue(finding_id, old_status, external_issue_provider, **kwa update_external_issue_github(finding, prod, eng) -@dojo_async_task @app.task def close_external_issue(finding_id, note, external_issue_provider, **kwargs): finding = get_object_or_none(Finding, id=finding_id) @@ -1103,7 +1099,6 @@ def close_external_issue(finding_id, note, external_issue_provider, **kwargs): close_external_issue_github(finding, note, prod, eng) -@dojo_async_task @app.task def reopen_external_issue(finding_id, note, external_issue_provider, **kwargs): finding = get_object_or_none(Finding, id=finding_id) @@ -1259,7 +1254,6 @@ def grade_product(crit, high, med, low): return max(health, 5) -@dojo_async_task @app.task def calculate_grade(product_id, *args, **kwargs): product = get_object_or_none(Product, id=product_id) @@ -1317,7 +1311,9 @@ def calculate_grade_internal(product, *args, **kwargs): def perform_product_grading(product): system_settings = System_Settings.objects.get() if system_settings.enable_product_grade: - calculate_grade(product.id) + from dojo.celery_dispatch import dojo_dispatch_task # noqa: PLC0415 circular import + + dojo_dispatch_task(calculate_grade, product.id) def get_celery_worker_status(): @@ -2037,130 +2033,187 @@ def is_finding_groups_enabled(): return get_system_setting("enable_finding_groups") -class async_delete: - def __init__(self, *args, **kwargs): - self.mapping = { - "Product_Type": [ - (Endpoint, "product__prod_type__id"), - (Finding, "test__engagement__product__prod_type__id"), - (Test, "engagement__product__prod_type__id"), - (Engagement, "product__prod_type__id"), - (Product, "prod_type__id")], - "Product": [ - (Endpoint, "product__id"), - (Finding, "test__engagement__product__id"), - (Test, "engagement__product__id"), - (Engagement, "product__id")], - "Engagement": [ - (Finding, "test__engagement__id"), - (Test, "engagement__id")], - "Test": [(Finding, "test__id")], - } +# Mapping of object types to their related models for cascading deletes +ASYNC_DELETE_MAPPING = { + "Product_Type": [ + (Endpoint, "product__prod_type__id"), + (Finding, "test__engagement__product__prod_type__id"), + (Test, "engagement__product__prod_type__id"), + (Engagement, "product__prod_type__id"), + (Product, "prod_type__id")], + "Product": [ + (Endpoint, "product__id"), + (Finding, "test__engagement__product__id"), + (Test, "engagement__product__id"), + (Engagement, "product__id")], + "Engagement": [ + (Finding, "test__engagement__id"), + (Test, "engagement__id")], + "Test": [(Finding, "test__id")], +} + + +def _get_object_name(obj): + """Get the class name of an object or model class.""" + if obj.__class__.__name__ == "ModelBase": + return obj.__name__ + return obj.__class__.__name__ - @dojo_async_task - @app.task - def delete_chunk(self, objects, **kwargs): - # Now delete all objects with retry for deadlocks - max_retries = 3 - for obj in objects: - retry_count = 0 - while retry_count < max_retries: - try: - obj.delete() - break # Success, exit retry loop - except OperationalError as e: - error_msg = str(e) - if "deadlock detected" in error_msg.lower(): - retry_count += 1 - if retry_count < max_retries: - # Exponential backoff with jitter - wait_time = (2 ** retry_count) + random.uniform(0, 1) # noqa: S311 - logger.warning( - f"ASYNC_DELETE: Deadlock detected deleting {self.get_object_name(obj)} {obj.pk}, " - f"retrying ({retry_count}/{max_retries}) after {wait_time:.2f}s", - ) - time.sleep(wait_time) - # Refresh object from DB before retry - obj.refresh_from_db() - else: - logger.error( - f"ASYNC_DELETE: Deadlock persisted after {max_retries} retries for {self.get_object_name(obj)} {obj.pk}: {e}", - ) - raise + +@app.task +def async_delete_chunk_task(objects, **kwargs): + """ + Module-level Celery task to delete a chunk of objects. + + Accepts **kwargs for async_user and _pgh_context injected by dojo_dispatch_task. + Uses PgHistoryTask base class (default) to preserve pghistory context for audit trail. + """ + max_retries = 3 + for obj in objects: + retry_count = 0 + while retry_count < max_retries: + try: + obj.delete() + break # Success, exit retry loop + except OperationalError as e: + error_msg = str(e) + if "deadlock detected" in error_msg.lower(): + retry_count += 1 + if retry_count < max_retries: + # Exponential backoff with jitter + wait_time = (2 ** retry_count) + random.uniform(0, 1) # noqa: S311 + logger.warning( + f"ASYNC_DELETE: Deadlock detected deleting {_get_object_name(obj)} {obj.pk}, " + f"retrying ({retry_count}/{max_retries}) after {wait_time:.2f}s", + ) + time.sleep(wait_time) + # Refresh object from DB before retry + obj.refresh_from_db() else: - # Not a deadlock, re-raise + logger.error( + f"ASYNC_DELETE: Deadlock persisted after {max_retries} retries for {_get_object_name(obj)} {obj.pk}: {e}", + ) raise - except AssertionError: - logger.debug("ASYNC_DELETE: object has already been deleted elsewhere. Skipping") - # The id must be None - # The object has already been deleted elsewhere - break - except LogEntry.MultipleObjectsReturned: - # Delete the log entrys first, then delete - LogEntry.objects.filter( - content_type=ContentType.objects.get_for_model(obj.__class__), - object_pk=str(obj.pk), - action=LogEntry.Action.DELETE, - ).delete() - # Now delete the object again (no retry needed for this case) - obj.delete() - break - - @dojo_async_task - @app.task - def delete(self, obj, **kwargs): - logger.debug("ASYNC_DELETE: Deleting " + self.get_object_name(obj) + ": " + str(obj)) - model_list = self.mapping.get(self.get_object_name(obj), None) - if model_list: - # The object to be deleted was found in the object list - self.crawl(obj, model_list) - else: - # The object is not supported in async delete, delete normally - logger.debug("ASYNC_DELETE: " + self.get_object_name(obj) + " async delete not supported. Deleteing normally: " + str(obj)) - obj.delete() - - @dojo_async_task - @app.task - def crawl(self, obj, model_list, **kwargs): - logger.debug("ASYNC_DELETE: Crawling " + self.get_object_name(obj) + ": " + str(obj)) - with Endpoint.allow_endpoint_init(): # TODO: Delete this after the move to Locations - for model_info in model_list: - task_results = [] - model = model_info[0] - model_query = model_info[1] - filter_dict = {model_query: obj.id} - # Only fetch the IDs since we will make a list of IDs in the following function call - objects_to_delete = model.objects.only("id").filter(**filter_dict).distinct().order_by("id") - logger.debug("ASYNC_DELETE: Deleting " + str(len(objects_to_delete)) + " " + self.get_object_name(model) + "s in chunks") - chunks = self.chunk_list(model, objects_to_delete) - for chunk in chunks: - logger.debug(f"deleting {len(chunk)} {self.get_object_name(model)}") - result = self.delete_chunk(chunk) - # Collect async task results to wait for them all at once - if hasattr(result, "get"): - task_results.append(result) - # Wait for all chunk deletions to complete (they run in parallel) - for task_result in task_results: - task_result.get(timeout=300) # 5 minute timeout per chunk - # Now delete the main object after all chunks are done - result = self.delete_chunk([obj]) - # Wait for final deletion to complete + else: + # Not a deadlock, re-raise + raise + except AssertionError: + logger.debug("ASYNC_DELETE: object has already been deleted elsewhere. Skipping") + # The id must be None + # The object has already been deleted elsewhere + break + except LogEntry.MultipleObjectsReturned: + # Delete the log entrys first, then delete + LogEntry.objects.filter( + content_type=ContentType.objects.get_for_model(obj.__class__), + object_pk=str(obj.pk), + action=LogEntry.Action.DELETE, + ).delete() + # Now delete the object again (no retry needed for this case) + obj.delete() + break + + +@app.task +def async_delete_crawl_task(obj, model_list, **kwargs): + """ + Module-level Celery task to crawl and delete related objects. + + Accepts **kwargs for async_user and _pgh_context injected by dojo_dispatch_task. + Uses PgHistoryTask base class (default) to preserve pghistory context for audit trail. + """ + from dojo.celery_dispatch import dojo_dispatch_task # noqa: PLC0415 circular import + + logger.debug("ASYNC_DELETE: Crawling " + _get_object_name(obj) + ": " + str(obj)) + for model_info in model_list: + task_results = [] + model = model_info[0] + model_query = model_info[1] + filter_dict = {model_query: obj.id} + # Only fetch the IDs since we will make a list of IDs in the following function call + objects_to_delete = model.objects.only("id").filter(**filter_dict).distinct().order_by("id") + logger.debug("ASYNC_DELETE: Deleting " + str(len(objects_to_delete)) + " " + _get_object_name(model) + "s in chunks") + chunk_size = get_setting("ASYNC_OBEJECT_DELETE_CHUNK_SIZE") + chunks = [objects_to_delete[i:i + chunk_size] for i in range(0, len(objects_to_delete), chunk_size)] + logger.debug("ASYNC_DELETE: Split " + _get_object_name(model) + " into " + str(len(chunks)) + " chunks of " + str(chunk_size)) + for chunk in chunks: + logger.debug(f"deleting {len(chunk)} {_get_object_name(model)}") + result = dojo_dispatch_task(async_delete_chunk_task, list(chunk)) + # Collect async task results to wait for them all at once if hasattr(result, "get"): - result.get(timeout=300) # 5 minute timeout - logger.debug("ASYNC_DELETE: Successfully deleted " + self.get_object_name(obj) + ": " + str(obj)) + task_results.append(result) + # Wait for all chunk deletions to complete (they run in parallel) + for task_result in task_results: + task_result.get(timeout=300) # 5 minute timeout per chunk + # Now delete the main object after all chunks are done + result = dojo_dispatch_task(async_delete_chunk_task, [obj]) + # Wait for final deletion to complete + if hasattr(result, "get"): + result.get(timeout=300) # 5 minute timeout + logger.debug("ASYNC_DELETE: Successfully deleted " + _get_object_name(obj) + ": " + str(obj)) - def chunk_list(self, model, full_list): + +@app.task +def async_delete_task(obj, **kwargs): + """ + Module-level Celery task to delete an object and its related objects. + + Accepts **kwargs for async_user and _pgh_context injected by dojo_dispatch_task. + Uses PgHistoryTask base class (default) to preserve pghistory context for audit trail. + """ + from dojo.celery_dispatch import dojo_dispatch_task # noqa: PLC0415 circular import + + logger.debug("ASYNC_DELETE: Deleting " + _get_object_name(obj) + ": " + str(obj)) + model_list = ASYNC_DELETE_MAPPING.get(_get_object_name(obj)) + if model_list: + # The object to be deleted was found in the object list + dojo_dispatch_task(async_delete_crawl_task, obj, model_list) + else: + # The object is not supported in async delete, delete normally + logger.debug("ASYNC_DELETE: " + _get_object_name(obj) + " async delete not supported. Deleteing normally: " + str(obj)) + obj.delete() + + +class async_delete: + + """ + Entry point class for async object deletion. + + Usage: + async_del = async_delete() + async_del.delete(instance) + + This class dispatches deletion to module-level Celery tasks via dojo_dispatch_task, + which properly handles user context injection and pghistory context. + """ + + def __init__(self, *args, **kwargs): + # Keep mapping reference for backwards compatibility + self.mapping = ASYNC_DELETE_MAPPING + + def delete(self, obj, **kwargs): + """ + Entry point to delete an object asynchronously. + + Dispatches to async_delete_task via dojo_dispatch_task to ensure proper + handling of async_user and _pgh_context. + """ + from dojo.celery_dispatch import dojo_dispatch_task # noqa: PLC0415 circular import + + dojo_dispatch_task(async_delete_task, obj, **kwargs) + + # Keep helper methods for backwards compatibility and potential direct use + @staticmethod + def get_object_name(obj): + return _get_object_name(obj) + + @staticmethod + def chunk_list(model, full_list): chunk_size = get_setting("ASYNC_OBEJECT_DELETE_CHUNK_SIZE") - # Break the list of objects into "chunk_size" lists chunk_list = [full_list[i:i + chunk_size] for i in range(0, len(full_list), chunk_size)] - logger.debug("ASYNC_DELETE: Split " + self.get_object_name(model) + " into " + str(len(chunk_list)) + " chunks of " + str(chunk_size)) + logger.debug("ASYNC_DELETE: Split " + _get_object_name(model) + " into " + str(len(chunk_list)) + " chunks of " + str(chunk_size)) return chunk_list - def get_object_name(self, obj): - if obj.__class__.__name__ == "ModelBase": - return obj.__name__ - return obj.__class__.__name__ - @receiver(user_logged_in) def log_user_login(sender, request, user, **kwargs): diff --git a/helm/defectdojo/Chart.yaml b/helm/defectdojo/Chart.yaml index 4a72395782f..23bcbb1af8f 100644 --- a/helm/defectdojo/Chart.yaml +++ b/helm/defectdojo/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 appVersion: "2.56.0-dev" description: A Helm chart for Kubernetes to install DefectDojo name: defectdojo -version: 1.9.12-dev +version: 1.9.13-dev icon: https://defectdojo.com/hubfs/DefectDojo_favicon.png maintainers: - name: madchap diff --git a/helm/defectdojo/README.md b/helm/defectdojo/README.md index d6285067684..a63757f2687 100644 --- a/helm/defectdojo/README.md +++ b/helm/defectdojo/README.md @@ -511,7 +511,7 @@ The HELM schema will be generated for you. # General information about chart values -![Version: 1.9.12-dev](https://img.shields.io/badge/Version-1.9.12--dev-informational?style=flat-square) ![AppVersion: 2.56.0-dev](https://img.shields.io/badge/AppVersion-2.56.0--dev-informational?style=flat-square) +![Version: 1.9.13-dev](https://img.shields.io/badge/Version-1.9.13--dev-informational?style=flat-square) ![AppVersion: 2.56.0-dev](https://img.shields.io/badge/AppVersion-2.56.0--dev-informational?style=flat-square) A Helm chart for Kubernetes to install DefectDojo diff --git a/unittests/dojo_test_case.py b/unittests/dojo_test_case.py index 7e773d14034..6c2ff9c6554 100644 --- a/unittests/dojo_test_case.py +++ b/unittests/dojo_test_case.py @@ -488,12 +488,24 @@ def assert_jira_updated_map_changed(self, test_id, updated_map): logger.debug("finding!") self.assertNotEqual(jira_helper.get_jira_updated(finding), updated_map[finding.id]) + def assert_jira_status_changed(self, finding_id: int, payload: dict, current_status_name: str, expected_status_name: str, push_to_jira: bool = True): # noqa: FBT001, FBT002 + pre_jira_status = self.get_jira_issue_status(finding_id) + self.assertEqual(current_status_name, pre_jira_status.name) + self.patch_finding_api(finding_id, {"push_to_jira": push_to_jira, **payload}) + post_jira_status = self.get_jira_issue_status(finding_id) + self.assertEqual(expected_status_name, post_jira_status.name) + # Toggle epic mapping on jira product def toggle_jira_project_epic_mapping(self, obj, value): project = jira_helper.get_jira_project(obj) project.enable_engagement_epic_mapping = value project.save() + def toggle_jira_finding_sync(self, obj, value): + instance = jira_helper.get_jira_instance(obj) + instance.finding_jira_sync = value + instance.save() + # Return a list of jira issue in json format. def get_epic_issues(self, engagement): instance = jira_helper.get_jira_instance(engagement) diff --git a/unittests/scans/generic/generic_one_finding_with_component_name.json b/unittests/scans/generic/generic_one_finding_with_component_name.json new file mode 100644 index 00000000000..64541f4a2e2 --- /dev/null +++ b/unittests/scans/generic/generic_one_finding_with_component_name.json @@ -0,0 +1,11 @@ +{ + "findings": [ + { + "title": "High", + "description": "test", + "date": "2025-12-01", + "severity": "High", + "component_name": "Component A" + } + ] +} \ No newline at end of file diff --git a/unittests/scans/generic/generic_two_findings_same_component_name.json b/unittests/scans/generic/generic_two_findings_same_component_name.json new file mode 100644 index 00000000000..7fe4c71b696 --- /dev/null +++ b/unittests/scans/generic/generic_two_findings_same_component_name.json @@ -0,0 +1,18 @@ +{ + "findings": [ + { + "title": "Critical", + "description": "test", + "date": "2025-12-01", + "severity": "Critical", + "component_name": "Component A" + }, + { + "title": "High", + "description": "test", + "date": "2025-12-01", + "severity": "High", + "component_name": "Component A" + } + ] +} diff --git a/unittests/test_async_delete.py b/unittests/test_async_delete.py new file mode 100644 index 00000000000..341723e8296 --- /dev/null +++ b/unittests/test_async_delete.py @@ -0,0 +1,313 @@ +""" +Unit tests for async_delete functionality. + +These tests verify that the async_delete class works correctly with dojo_dispatch_task, +which injects async_user and _pgh_context kwargs into task calls. + +The original bug was that @app.task decorated instance methods didn't properly handle +the injected kwargs, causing TypeError: unexpected keyword argument 'async_user'. +""" +import logging + +from crum import impersonate +from django.contrib.auth.models import User +from django.test import override_settings +from django.utils import timezone + +from dojo.models import Engagement, Finding, Product, Product_Type, Test, Test_Type, UserContactInfo +from dojo.utils import async_delete + +from .dojo_test_case import DojoTestCase + +logger = logging.getLogger(__name__) + + +class TestAsyncDelete(DojoTestCase): + + """ + Test async_delete functionality with dojo_dispatch_task kwargs injection. + + These tests use block_execution=True and crum.impersonate to run tasks synchronously, + which allows errors to surface immediately rather than being lost in background workers. + """ + + def setUp(self): + """Set up test user with block_execution=True and disable unneeded features.""" + super().setUp() + + # Create test user with block_execution=True to run tasks synchronously + self.testuser = User.objects.create( + username="test_async_delete_user", + is_staff=True, + is_superuser=True, + ) + UserContactInfo.objects.create(user=self.testuser, block_execution=True) + + # Log in as the test user (for API client) + self.client.force_login(self.testuser) + + # Disable features that might interfere with deletion + self.system_settings(enable_product_grade=False) + self.system_settings(enable_github=False) + self.system_settings(enable_jira=False) + + # Create base test data + self.product_type = Product_Type.objects.create(name="Test Product Type for Async Delete") + self.test_type = Test_Type.objects.get_or_create(name="Manual Test")[0] + + def tearDown(self): + """Clean up any remaining test data.""" + # Clean up in reverse order of dependencies + Finding.objects.filter(test__engagement__product__prod_type=self.product_type).delete() + Test.objects.filter(engagement__product__prod_type=self.product_type).delete() + Engagement.objects.filter(product__prod_type=self.product_type).delete() + Product.objects.filter(prod_type=self.product_type).delete() + self.product_type.delete() + + super().tearDown() + + def _create_product(self, name="Test Product"): + """Helper to create a product for testing.""" + return Product.objects.create( + name=name, + description="Test product for async delete", + prod_type=self.product_type, + ) + + def _create_engagement(self, product, name="Test Engagement"): + """Helper to create an engagement for testing.""" + return Engagement.objects.create( + name=name, + product=product, + target_start=timezone.now(), + target_end=timezone.now(), + ) + + def _create_test(self, engagement, name="Test"): + """Helper to create a test for testing.""" + return Test.objects.create( + engagement=engagement, + test_type=self.test_type, + target_start=timezone.now(), + target_end=timezone.now(), + ) + + def _create_finding(self, test, title="Test Finding"): + """Helper to create a finding for testing.""" + return Finding.objects.create( + test=test, + title=title, + severity="High", + description="Test finding for async delete", + mitigation="Test mitigation", + impact="Test impact", + reporter=self.testuser, + ) + + @override_settings(ASYNC_OBJECT_DELETE=True) + def test_async_delete_simple_object(self): + """ + Test that async_delete works for a simple object (Finding). + + Finding is not in the async_delete mapping, so it falls back to direct delete. + This tests that the module-level task accepts **kwargs properly. + """ + product = self._create_product() + engagement = self._create_engagement(product) + test = self._create_test(engagement) + finding = self._create_finding(test) + finding_pk = finding.pk + + # Use impersonate to set current user context (required for block_execution to work) + with impersonate(self.testuser): + # This would raise TypeError before the fix: + # TypeError: delete() got an unexpected keyword argument 'async_user' + async_del = async_delete() + async_del.delete(finding) + + # Verify the finding was deleted + self.assertFalse( + Finding.objects.filter(pk=finding_pk).exists(), + "Finding should be deleted", + ) + + @override_settings(ASYNC_OBJECT_DELETE=True) + def test_async_delete_test_with_findings(self): + """ + Test that async_delete cascades deletion for Test objects. + + Test is in the async_delete mapping and should cascade delete its findings. + """ + product = self._create_product() + engagement = self._create_engagement(product) + test = self._create_test(engagement) + finding1 = self._create_finding(test, "Finding 1") + finding2 = self._create_finding(test, "Finding 2") + + test_pk = test.pk + finding1_pk = finding1.pk + finding2_pk = finding2.pk + + # Use impersonate to set current user context (required for block_execution to work) + with impersonate(self.testuser): + # Delete the test (should cascade to findings) + async_del = async_delete() + async_del.delete(test) + + # Verify all objects were deleted + self.assertFalse( + Test.objects.filter(pk=test_pk).exists(), + "Test should be deleted", + ) + self.assertFalse( + Finding.objects.filter(pk=finding1_pk).exists(), + "Finding 1 should be deleted via cascade", + ) + self.assertFalse( + Finding.objects.filter(pk=finding2_pk).exists(), + "Finding 2 should be deleted via cascade", + ) + + @override_settings(ASYNC_OBJECT_DELETE=True) + def test_async_delete_engagement_with_tests(self): + """ + Test that async_delete cascades deletion for Engagement objects. + + Engagement is in the async_delete mapping and should cascade delete + its tests and findings. + """ + product = self._create_product() + engagement = self._create_engagement(product) + test1 = self._create_test(engagement, "Test 1") + test2 = self._create_test(engagement, "Test 2") + finding1 = self._create_finding(test1, "Finding in Test 1") + finding2 = self._create_finding(test2, "Finding in Test 2") + + engagement_pk = engagement.pk + test1_pk = test1.pk + test2_pk = test2.pk + finding1_pk = finding1.pk + finding2_pk = finding2.pk + + # Use impersonate to set current user context (required for block_execution to work) + with impersonate(self.testuser): + # Delete the engagement (should cascade to tests and findings) + async_del = async_delete() + async_del.delete(engagement) + + # Verify all objects were deleted + self.assertFalse( + Engagement.objects.filter(pk=engagement_pk).exists(), + "Engagement should be deleted", + ) + self.assertFalse( + Test.objects.filter(pk__in=[test1_pk, test2_pk]).exists(), + "Tests should be deleted via cascade", + ) + self.assertFalse( + Finding.objects.filter(pk__in=[finding1_pk, finding2_pk]).exists(), + "Findings should be deleted via cascade", + ) + + @override_settings(ASYNC_OBJECT_DELETE=True) + def test_async_delete_product_with_hierarchy(self): + """ + Test that async_delete cascades deletion for Product objects. + + Product is in the async_delete mapping and should cascade delete + its engagements, tests, and findings. + """ + product = self._create_product() + engagement = self._create_engagement(product) + test = self._create_test(engagement) + finding = self._create_finding(test) + + product_pk = product.pk + engagement_pk = engagement.pk + test_pk = test.pk + finding_pk = finding.pk + + # Use impersonate to set current user context (required for block_execution to work) + with impersonate(self.testuser): + # Delete the product (should cascade to everything) + async_del = async_delete() + async_del.delete(product) + + # Verify all objects were deleted + self.assertFalse( + Product.objects.filter(pk=product_pk).exists(), + "Product should be deleted", + ) + self.assertFalse( + Engagement.objects.filter(pk=engagement_pk).exists(), + "Engagement should be deleted via cascade", + ) + self.assertFalse( + Test.objects.filter(pk=test_pk).exists(), + "Test should be deleted via cascade", + ) + self.assertFalse( + Finding.objects.filter(pk=finding_pk).exists(), + "Finding should be deleted via cascade", + ) + + @override_settings(ASYNC_OBJECT_DELETE=True) + def test_async_delete_accepts_sync_kwarg(self): + """ + Test that async_delete passes through the sync kwarg properly. + + The sync=True kwarg forces synchronous execution for the top-level task. + However, nested task dispatches still need user context to run synchronously, + so we use impersonate here as well. + """ + product = self._create_product() + product_pk = product.pk + + # Use impersonate to ensure nested tasks also run synchronously + with impersonate(self.testuser): + # Explicitly pass sync=True + async_del = async_delete() + async_del.delete(product, sync=True) + + # Verify the product was deleted + self.assertFalse( + Product.objects.filter(pk=product_pk).exists(), + "Product should be deleted with sync=True", + ) + + def test_async_delete_helper_methods(self): + """ + Test that static helper methods on async_delete class still work. + + These are kept for backwards compatibility. + """ + product = self._create_product() + + # Test get_object_name + self.assertEqual( + async_delete.get_object_name(product), + "Product", + "get_object_name should return class name", + ) + + # Test get_object_name with model class + self.assertEqual( + async_delete.get_object_name(Product), + "Product", + "get_object_name should work with model class", + ) + + def test_async_delete_mapping_preserved(self): + """ + Test that the mapping attribute is preserved on async_delete instances. + + This ensures backwards compatibility for code that might access the mapping. + """ + async_del = async_delete() + + # Verify mapping exists and has expected keys + self.assertIsNotNone(async_del.mapping) + self.assertIn("Product", async_del.mapping) + self.assertIn("Product_Type", async_del.mapping) + self.assertIn("Engagement", async_del.mapping) + self.assertIn("Test", async_del.mapping) diff --git a/unittests/test_duplication_loops.py b/unittests/test_duplication_loops.py index 3b1666eee04..a2afbeb37f9 100644 --- a/unittests/test_duplication_loops.py +++ b/unittests/test_duplication_loops.py @@ -5,7 +5,8 @@ from dojo.finding.deduplication import set_duplicate from dojo.management.commands.fix_loop_duplicates import fix_loop_duplicates -from dojo.models import Engagement, Finding, Product, User, copy_model_util +from dojo.models import Engagement, Finding, Product, System_Settings, User, copy_model_util +from dojo.tasks import _async_dupe_delete_impl # noqa: PLC2701 from .dojo_test_case import DojoTestCase, versioned_fixtures @@ -374,6 +375,38 @@ def test_list_relations_for_three_reverse(self): self.assertEqual(self.finding_c.duplicate_finding_set().count(), 2) self.assertEqual(self.finding_b.duplicate_finding_set().count(), 2) + # Test that Delete Duplicate Findings & Maximum Duplicate is correctly deleting olding finding first based off of finding date value + def test_delete_duplicate_order(self): + # Turn on delete duplicates and set the maximum dedupe value to 1 + system_settings = System_Settings.objects.get() + system_settings.delete_duplicates = True + system_settings.max_dupes = 1 + system_settings.save() + + # Add dates to finding b and c + self.finding_b.date = "2024-01-01" + self.finding_c.date = "2023-01-01" + # Make findings b and c duplicates of a + set_duplicate(self.finding_b, self.finding_a) + set_duplicate(self.finding_c, self.finding_a) + + # Perform delete dedupe logic + _async_dupe_delete_impl() + + # Finding C (2023) should be deleted + self.assertFalse( + Finding.objects.filter(id=self.finding_c.id).exists(), + "The oldest duplicate (Finding c) should have been deleted.", + ) + # Finding b (2024) should exist + self.assertTrue( + Finding.objects.filter(id=self.finding_b.id).exists(), + "The newest duplicate (Finding B) should still exist.", + ) + # Finding A should now only have 1 duplicate in its set + self.finding_a.refresh_from_db() + self.assertEqual(self.finding_a.duplicate_finding_set().count(), 1) + def test_delete_all_engagements(self): # make sure there is no exception when deleting all engagements for engagement in Engagement.objects.all().order_by("id"): diff --git a/unittests/test_jira_import_and_pushing_api.py b/unittests/test_jira_import_and_pushing_api.py index e1a8284698e..d7caf5404c4 100644 --- a/unittests/test_jira_import_and_pushing_api.py +++ b/unittests/test_jira_import_and_pushing_api.py @@ -11,7 +11,7 @@ import dojo.risk_acceptance.helper as ra_helper from dojo.jira_link import helper as jira_helper -from dojo.models import Finding, Finding_Group, JIRA_Instance, Risk_Acceptance, User +from dojo.models import Finding, Finding_Group, JIRA_Instance, JIRA_Project, Risk_Acceptance, Test, User from unittests.dojo_test_case import ( DojoVCRAPITestCase, get_unit_tests_path, @@ -81,6 +81,9 @@ def setUp(self): self.zap_sample5_filename = get_unit_tests_scans_path("zap") / "5_zap_sample_one.xml" self.npm_groups_sample_filename = get_unit_tests_scans_path("npm_audit") / "many_vuln_with_groups.json" self.npm_groups_sample_filename2 = get_unit_tests_scans_path("npm_audit") / "many_vuln_with_groups_different_titles.json" + self.generic_one_finding_with_component_name = get_unit_tests_scans_path("generic") / "generic_one_finding_with_component_name.json" + self.generic_two_findings_same_component_name = get_unit_tests_scans_path("generic") / "generic_two_findings_same_component_name.json" + self.generic_report_with_findings = get_unit_tests_scans_path("generic") / "generic_report1.json" self.clair_few_findings = get_unit_tests_scans_path("clair") / "clair_few_vuln.json" self.client.force_login(self.get_test_admin()) @@ -981,7 +984,7 @@ def test_engagement_epic_mapping_disabled_no_epic_and_push_findings(self): @patch("dojo.jira_link.helper.can_be_pushed_to_jira", return_value=(True, None, None)) @patch("dojo.jira_link.helper.is_push_all_issues", return_value=False) @patch("dojo.jira_link.helper.push_to_jira", return_value=None) - @patch("dojo.notifications.helper.WebhookNotificationManger.send_webhooks_notification") + @patch("dojo.notifications.helper.send_webhooks_notification") def test_bulk_edit_mixed_findings_and_groups_jira_push_bug(self, mock_webhooks, mock_push_to_jira, mock_is_push_all_issues, mock_can_be_pushed): """ Test the bug in bulk edit: when bulk editing findings where some are in groups @@ -1070,6 +1073,256 @@ def test_bulk_edit_mixed_findings_and_groups_jira_push_bug(self, mock_webhooks, self.assertEqual(len(group_calls), 2, "Expected 2 finding groups to be pushed") self.assertEqual(len(individual_calls), 2, "Expected 2 individual findings to be pushed") + def _bulk_edit_finding_groups_without_checkbox(self): + """ + Helper: sets up a mixed grouped/ungrouped scenario and performs a bulk edit + WITHOUT the push_to_jira checkbox. Returns the test_id and finding IDs used. + """ + # Import scan with groups but don't push to JIRA initially + import0 = self.import_scan_with_params( + self.npm_groups_sample_filename, + scan_type="NPM Audit Scan", + group_by="component_name+component_version", + push_to_jira=False, + verified=True, + ) + test_id = import0["test"] + + # Verify no JIRA issues were created during import + self.assert_jira_issue_count_in_test(test_id, 0) + self.assert_jira_group_issue_count_in_test(test_id, 0) + + # Get the finding groups created + finding_groups = Finding_Group.objects.filter(test__id=test_id) + + # Create mixed scenario: some findings in groups, some ungrouped + if finding_groups.exists(): + group_to_remove = finding_groups.first() + group_to_remove.findings.clear() + group_to_remove.delete() + + # Verify we now have both grouped and ungrouped findings + all_findings = Finding.objects.filter(test__id=test_id) + grouped_findings = [f for f in all_findings if f.finding_group is not None] + ungrouped_findings = [f for f in all_findings if f.finding_group is None] + + self.assertGreater(len(grouped_findings), 0, "Should have some grouped findings") + self.assertGreater(len(ungrouped_findings), 0, "Should have some ungrouped findings") + + current_findings = Finding.objects.filter(test__id=test_id) + all_finding_ids = [str(f.id) for f in current_findings] + + admin_user = get_user_model().objects.get(username="admin") + self.client.force_login(admin_user) + + # NOTE: push_to_jira is NOT in the post data -- the checkbox is unchecked + post_data = { + "finding_to_update": all_finding_ids, + "severity": "", + "active": "", + "verified": "", + "false_p": "", + "duplicate": "", + "out_of_scope": "", + "is_mitigated": "", + "status": "", + } + + self.client.post("/finding/bulk", post_data) + + @patch("dojo.jira_link.helper.can_be_pushed_to_jira", return_value=(True, None, None)) + @patch("dojo.jira_link.helper.is_push_all_issues", return_value=True) + @patch("dojo.jira_link.helper.push_to_jira", return_value=None) + @patch("dojo.notifications.helper.WebhookNotificationManger.send_webhooks_notification") + def test_bulk_edit_push_all_issues_pushes_finding_groups(self, mock_webhooks, mock_push_to_jira, mock_is_push_all_issues, mock_can_be_pushed): + """ + When push_all_issues is enabled on the JIRA project, bulk editing findings + should push finding groups to JIRA even without the push_to_jira checkbox. + """ + self._bulk_edit_finding_groups_without_checkbox() + + group_calls = [call for call in mock_push_to_jira.call_args_list if isinstance(call[0][0], Finding_Group)] + individual_calls = [call for call in mock_push_to_jira.call_args_list if isinstance(call[0][0], Finding)] + + self.assertGreater(len(group_calls), 0, "Finding groups should be pushed when push_all_issues is enabled") + self.assertGreater(len(individual_calls), 0, "Individual ungrouped findings should be pushed when push_all_issues is enabled") + + self.assertEqual(len(group_calls), 2, "Expected 2 finding groups to be pushed") + self.assertEqual(len(individual_calls), 2, "Expected 2 individual findings to be pushed") + + @patch("dojo.jira_link.helper.can_be_pushed_to_jira", return_value=(True, None, None)) + @patch("dojo.jira_link.helper.is_keep_in_sync_with_jira", return_value=True) + @patch("dojo.jira_link.helper.is_push_all_issues", return_value=False) + @patch("dojo.jira_link.helper.push_to_jira", return_value=None) + @patch("dojo.notifications.helper.WebhookNotificationManger.send_webhooks_notification") + def test_bulk_edit_keep_in_sync_pushes_finding_groups(self, mock_webhooks, mock_push_to_jira, mock_is_push_all_issues, mock_is_keep_in_sync, mock_can_be_pushed): + """ + When keep_in_sync_with_jira (finding_jira_sync) is enabled on the JIRA instance, + bulk editing findings should push finding groups to JIRA even without the + push_to_jira checkbox. + """ + self._bulk_edit_finding_groups_without_checkbox() + + group_calls = [call for call in mock_push_to_jira.call_args_list if isinstance(call[0][0], Finding_Group)] + individual_calls = [call for call in mock_push_to_jira.call_args_list if isinstance(call[0][0], Finding)] + + self.assertGreater(len(group_calls), 0, "Finding groups should be pushed when keep_in_sync is enabled") + self.assertGreater(len(individual_calls), 0, "Individual ungrouped findings should be pushed when keep_in_sync is enabled") + + self.assertEqual(len(group_calls), 2, "Expected 2 finding groups to be pushed") + self.assertEqual(len(individual_calls), 2, "Expected 2 individual findings to be pushed") + + def test_keep_sync_push_finding_then_update_individual_finding_with_no_push(self): + """ + With keep_sync enabled, import a scan with push_to_jira=True, then update one of the + findings with push_to_jira=False, but keep_sync enabled, should update the issue in JIRA + """ + # Set the finding sync setting + import0 = self.import_scan_with_params( + self.generic_one_finding_with_component_name, + scan_type="Generic Findings Import", + push_to_jira=True, + verified=True, + ) + test_id = import0["test"] + test = Test.objects.get(id=test_id) + self.assert_jira_issue_count_in_test(test_id, 1) + self.assert_jira_group_issue_count_in_test(test_id, 0) + # Enable the finding sync + self.toggle_jira_finding_sync(test, value=True) + # Get one of the findings + finding_id = self.get_test_findings_api(test_id)["results"][0]["id"] + # Ensure the status is what we expect before the update + pre_jira_status = self.get_jira_issue_status(finding_id) + self.assertEqual("Backlog", pre_jira_status.name) + # Make the update to the finding + self.patch_finding_api(finding_id, {"push_to_jira": False, "is_mitigated": True}) + # Verify that the status did in fact change + post_jira_status = self.get_jira_issue_status(finding_id) + self.assertEqual("Done", post_jira_status.name) + # by asserting full cassette is played we know issues have been updated in JIRA + self.assert_cassette_played() + + def test_keep_sync_push_finding_then_reimport_with_no_push(self): + """ + With keep_sync enabled, import a scan with push_to_jira=True, then reimport a second + scan with push_to_jira=False that closes one of the findings, should update the issue in JIRA + """ + # Set the finding sync setting + import0 = self.import_scan_with_params( + self.generic_two_findings_same_component_name, + scan_type="Generic Findings Import", + push_to_jira=True, + verified=True, + ) + test_id = import0["test"] + test = Test.objects.get(id=test_id) + self.assert_jira_issue_count_in_test(test_id, 2) + self.assert_jira_group_issue_count_in_test(test_id, 0) + # Enable the finding sync + self.toggle_jira_finding_sync(test, value=True) + # Get the finding that will be closing in the next reimport + finding_id = self.get_test_findings_api(test_id, severity="Critical")["results"][0]["id"] + # Ensure the status is what we expect before the update + pre_jira_status = self.get_jira_issue_status(finding_id) + self.assertEqual("Backlog", pre_jira_status.name) + # Reimport with a different file that has one finding closed, but push_to_jira=False + import0 = self.reimport_scan_with_params( + test_id, + self.generic_one_finding_with_component_name, + scan_type="Generic Findings Import", + push_to_jira=False, + verified=True, + close_old_findings=True, + ) + # Verify that the status did in fact change + post_jira_status = self.get_jira_issue_status(finding_id) + self.assertEqual("Done", post_jira_status.name) + # by asserting full cassette is played we know issues have been updated in JIRA + self.assert_cassette_played() + + def test_keep_sync_push_finding_groups_then_reimport_empty_file_with_no_push_change_status(self): + """ + With keep_sync enabled, import a scan with push_to_jira=True that creates a group, then reimport + an empty scan with push_to_jira=False that closes the finding in the group, should update the + issue in JIRA to closed + """ + # Set the finding sync setting + import0 = self.import_scan_with_params( + self.generic_two_findings_same_component_name, + scan_type="Generic Findings Import", + push_to_jira=True, + verified=True, + group_by="component_name", + ) + test_id = import0["test"] + test = Test.objects.get(id=test_id) + self.assert_jira_issue_count_in_test(test_id, 0) + self.assert_jira_group_issue_count_in_test(test_id, 1) + # Enable the finding sync + self.toggle_jira_finding_sync(test, value=True) + # Get the finding that will be closing in the next reimport + finding_id = self.get_test_findings_api(test_id, severity="Critical")["results"][0]["id"] + # Ensure the status is what we expect before the update + pre_jira_status = self.get_jira_issue_status(finding_id) + self.assertEqual("Backlog", pre_jira_status.name) + # Reimport with a different file that has one finding closed, but push_to_jira=False + import0 = self.reimport_scan_with_params( + test_id, + self.generic_report_with_findings, + scan_type="Generic Findings Import", + push_to_jira=False, + verified=True, + close_old_findings=True, + group_by="component_name", + ) + # Verify that the status did in fact change + post_jira_status = self.get_jira_issue_status(finding_id) + self.assertEqual("Done", post_jira_status.name) + # by asserting full cassette is played we know issues have been updated in JIRA + self.assert_cassette_played() + + def test_keep_sync_push_finding_groups_then_reimport_empty_file_with_no_push_change_priority(self): + """ + With keep_sync enabled, import a scan with push_to_jira=True that creates a group, then reimport + an empty scan with push_to_jira=False that closes the finding in the group, this should leave the + the high severity finding in the group, and reduce the priority from Critical to High + """ + # Set the finding sync setting + import0 = self.import_scan_with_params( + self.generic_two_findings_same_component_name, + scan_type="Generic Findings Import", + push_to_jira=True, + verified=True, + group_by="component_name", + ) + test_id = import0["test"] + test = Test.objects.get(id=test_id) + self.assert_jira_issue_count_in_test(test_id, 0) + self.assert_jira_group_issue_count_in_test(test_id, 1) + # Enable the finding sync + self.toggle_jira_finding_sync(test, value=True) + # Get the finding that will stay open in the next reimport + finding_id = self.get_test_findings_api(test_id, severity="High")["results"][0]["id"] + # Get the priority that we are starting out with + pre_jira_priority = self.get_jira_issue_priority(finding_id) + self.assertEqual("Highest", pre_jira_priority.name) + # Reimport with a different file that has one finding closed, but push_to_jira=False + import0 = self.reimport_scan_with_params( + test_id, + self.generic_one_finding_with_component_name, + scan_type="Generic Findings Import", + push_to_jira=False, + verified=True, + close_old_findings=True, + group_by="component_name", + ) + # Verify that the priority did in fact change + post_jira_priority = self.get_jira_issue_priority(finding_id) + self.assertEqual("High", post_jira_priority.name) + # by asserting full cassette is played we know issues have been updated in JIRA + self.assert_cassette_played() + # creation of epic via the UI is already tested in test_jira_config_engagement_epic, so # we take a shortcut here as creating an engagement with epic mapping via the API is not implemented yet def create_engagement_epic(self, engagement): @@ -1079,3 +1332,88 @@ def create_engagement_epic(self, engagement): def assert_epic_issue_count(self, engagement, count): jira_issues = self.get_epic_issues(engagement) self.assertEqual(count, len(jira_issues)) + + def _test_setup_jira_project_for_engagement(self) -> dict: + import_reimport_config = { + "active": True, + "verified": True, + "product_type_name": "Some Product Type", + "product_name": "Jira Product (Not Configured)", + "engagement_name": "Jira Engagement", + "engagement": None, # This is hardcoded on the test function, so lets just null it out + "auto_create_context": True, + } + # First have a regular import create all the things + import0 = self.import_scan_with_params( + self.zap_sample5_filename, + **import_reimport_config, + ) + test_id = import0["test"] + test = Test.objects.get(id=test_id) + engagement = test.engagement + # Ensure we have push to jira settings set as false here (.first fetches the most recent object) + self.assertFalse(test.test_import_set.first().import_settings["push_to_jira"], "Expected push_to_jira to be False since no Jira project is configured") + # Now set up the jira instance and project, and reimport the same report again with the same parameters, which should now fetch the jira project from the engagement and set push_to_jira to True in the import settings + JIRA_Project.objects.create( + jira_instance=JIRA_Instance.objects.first(), + project_key="TEST", + engagement=engagement, + push_all_issues=True, + ) + # Double check we have no jira findings + self.assert_jira_issue_count_in_test(test_id, 0) + + return import_reimport_config + + # Disable deduplication here because it keeps getting in the way of us properly testing that + # findings are pushed to jira on reimport, since the same report is being imported twice in + # this test and deduplication will prevent the second import from creating any findings at all, + # which means no jira issues will be created on the second import, which is what we need to assert + # that the jira project is being fetched correctly and push_to_jira is being set to True in the import settings + @toggle_system_setting_boolean("enable_deduplication", False) # noqa: FBT003 + def test_import_auto_create_context_fetches_all_objects_for_push_to_jira(self): + """ + This test is responsible for ensuring that all related objects in auto context are fetched appropriately. + To test this, we will first set up a jira instance with a project configured at the engagement level only. + It is not really important that we test that findings are pushed to jira here, but we can assert that the + import history import settings reflect that the viewset was given a "True" value for push_to_jira, + which is only possible if the engagement's jira project was correctly fetched before the serializer was invoked. + """ + import_reimport_config = self._test_setup_jira_project_for_engagement() + # Not run the import again + import1 = self.import_scan_with_params( + self.zap_sample5_filename, + **import_reimport_config, + ) + test_id = import1["test"] + test = Test.objects.get(id=test_id) + # We should now have push_to_jira set to True in the import settings due to the jira project being on the engagement + self.assertTrue(test.test_import_set.first().import_settings["push_to_jira"], "Expected push_to_jira to be True since a Jira project is configured on the engagement") + # Make sure we actually pushed something to jira + self.assert_jira_issue_count_in_test(test_id, 2) + # by asserting full cassette is played we know issues have been updated in JIRA + self.assert_cassette_played() + + def test_reimport_auto_create_context_fetches_all_objects_for_push_to_jira(self): + """ + This test is responsible for ensuring that all related objects in auto context are fetched appropriately. + To test this, we will first set up a jira instance with a project configured at the engagement level only. + It is not really important that we test that findings are pushed to jira here, but we can assert that the + import history import settings reflect that the viewset was given a "True" value for push_to_jira, + which is only possible if the engagement's jira project was correctly fetched before the serializer was invoked. + """ + import_reimport_config = self._test_setup_jira_project_for_engagement() + # Not run the import again + import1 = self.reimport_scan_with_params( + import_reimport_config.pop("test_id", None), + self.zap_sample5_filename, + **import_reimport_config, + ) + test_id = import1["test"] + test = Test.objects.get(id=test_id) + # We should now have push_to_jira set to True in the import settings due to the jira project being on the engagement + self.assertTrue(test.test_import_set.first().import_settings["push_to_jira"], "Expected push_to_jira to be True since a Jira project is configured on the engagement") + # Make sure we actually pushed something to jira + self.assert_jira_issue_count_in_test(test_id, 2) + # by asserting full cassette is played we know issues have been updated in JIRA + self.assert_cassette_played() diff --git a/unittests/test_notifications.py b/unittests/test_notifications.py index fc547f526a1..2e897702fc4 100644 --- a/unittests/test_notifications.py +++ b/unittests/test_notifications.py @@ -680,7 +680,7 @@ def test_webhook_reactivation(self): with self.subTest("active"): wh = Notification_Webhooks.objects.filter(owner=None).first() manager = WebhookNotificationManger() - manager._webhook_reactivation(manager, endpoint_id=wh.pk) + manager._webhook_reactivation(endpoint_id=wh.pk) updated_wh = Notification_Webhooks.objects.filter(owner=None).first() self.assertEqual(updated_wh.status, Notification_Webhooks.Status.STATUS_ACTIVE) @@ -699,7 +699,7 @@ def test_webhook_reactivation(self): with self.assertLogs("dojo.notifications.helper", level="DEBUG") as cm: manager = WebhookNotificationManger() - manager._webhook_reactivation(manager, endpoint_id=wh.pk) + manager._webhook_reactivation(endpoint_id=wh.pk) updated_wh = Notification_Webhooks.objects.filter(owner=None).first() self.assertEqual(updated_wh.status, Notification_Webhooks.Status.STATUS_ACTIVE_TMP) diff --git a/unittests/test_risk_acceptance_api.py b/unittests/test_risk_acceptance_api.py new file mode 100644 index 00000000000..45756bb6e54 --- /dev/null +++ b/unittests/test_risk_acceptance_api.py @@ -0,0 +1,360 @@ +import datetime + +from rest_framework.authtoken.models import Token +from rest_framework.reverse import reverse +from rest_framework.test import APIClient, APITestCase + +from dojo.authorization.roles_permissions import Roles +from dojo.models import ( + Engagement, + Finding, + Product, + Product_Type, + Product_Type_Member, + Risk_Acceptance, + Role, + Test, + Test_Type, + User, +) + + +class TestRiskAcceptanceApi(APITestCase): + + """ + Comprehensive API tests for Risk Acceptance creation and updates. + Tests edge cases, validations, and engagement linking. + """ + + @classmethod + def setUpTestData(cls): + # Create user with permissions + cls.user = User.objects.create(username="test_user", first_name="Test", last_name="User", is_staff=True) + cls.token = Token.objects.create(user=cls.user) + + # Create product type + cls.product_type = Product_Type.objects.create(name="Test Product Type") + Product_Type_Member.objects.create(product_type=cls.product_type, user=cls.user, role=Role.objects.get(id=Roles.Owner)) + + # Create product with full risk acceptance enabled + cls.product_enabled = Product.objects.create( + prod_type=cls.product_type, + name="Product with RA Enabled", + description="Test product with full risk acceptance enabled", + enable_full_risk_acceptance=True, + ) + + # Create product with full risk acceptance disabled + cls.product_disabled = Product.objects.create( + prod_type=cls.product_type, + name="Product with RA Disabled", + description="Test product with full risk acceptance disabled", + enable_full_risk_acceptance=False, + ) + + # Create engagements + cls.engagement_a = Engagement.objects.create( + product=cls.product_enabled, + target_start=datetime.datetime(2000, 1, 1, tzinfo=datetime.UTC), + target_end=datetime.datetime(2000, 2, 1, tzinfo=datetime.UTC), + name="Engagement A", + ) + + cls.engagement_b = Engagement.objects.create( + product=cls.product_enabled, + target_start=datetime.datetime(2000, 1, 1, tzinfo=datetime.UTC), + target_end=datetime.datetime(2000, 2, 1, tzinfo=datetime.UTC), + name="Engagement B", + ) + + cls.engagement_disabled = Engagement.objects.create( + product=cls.product_disabled, + target_start=datetime.datetime(2000, 1, 1, tzinfo=datetime.UTC), + target_end=datetime.datetime(2000, 2, 1, tzinfo=datetime.UTC), + name="Engagement Disabled", + ) + + # Create test type and tests + cls.test_type = Test_Type.objects.create(name="API Test Scan", static_tool=True) + + cls.test_a1 = Test.objects.create( + engagement=cls.engagement_a, + test_type=cls.test_type, + target_start=datetime.datetime(2000, 1, 1, tzinfo=datetime.UTC), + target_end=datetime.datetime(2000, 2, 1, tzinfo=datetime.UTC), + ) + + cls.test_b1 = Test.objects.create( + engagement=cls.engagement_b, + test_type=cls.test_type, + target_start=datetime.datetime(2000, 1, 1, tzinfo=datetime.UTC), + target_end=datetime.datetime(2000, 2, 1, tzinfo=datetime.UTC), + ) + + cls.test_disabled = Test.objects.create( + engagement=cls.engagement_disabled, + test_type=cls.test_type, + target_start=datetime.datetime(2000, 1, 1, tzinfo=datetime.UTC), + target_end=datetime.datetime(2000, 2, 1, tzinfo=datetime.UTC), + ) + + # Create findings + cls.finding_a1 = Finding.objects.create( + test=cls.test_a1, + title="Finding A1", + severity="High", + verified=True, + description="Test finding in engagement A", + reporter=cls.user, + numerical_severity="S1", + static_finding=True, + dynamic_finding=False, + ) + + cls.finding_a2 = Finding.objects.create( + test=cls.test_a1, + title="Finding A2", + severity="Medium", + verified=True, + description="Another test finding in engagement A", + reporter=cls.user, + numerical_severity="S2", + static_finding=True, + dynamic_finding=False, + ) + + cls.finding_a3 = Finding.objects.create( + test=cls.test_a1, + title="Finding A3", + severity="Low", + verified=True, + description="Third test finding in engagement A", + reporter=cls.user, + numerical_severity="S3", + static_finding=True, + dynamic_finding=False, + ) + + cls.finding_b1 = Finding.objects.create( + test=cls.test_b1, + title="Finding B1", + severity="High", + verified=True, + description="Test finding in engagement B", + reporter=cls.user, + numerical_severity="S1", + static_finding=True, + dynamic_finding=False, + ) + + cls.finding_b2 = Finding.objects.create( + test=cls.test_b1, + title="Finding B2", + severity="Medium", + verified=True, + description="Another test finding in engagement B", + reporter=cls.user, + numerical_severity="S2", + static_finding=True, + dynamic_finding=False, + ) + + cls.finding_disabled = Finding.objects.create( + test=cls.test_disabled, + title="Finding Disabled", + severity="High", + verified=True, + description="Test finding in disabled engagement", + reporter=cls.user, + numerical_severity="S1", + static_finding=True, + dynamic_finding=False, + ) + + def setUp(self): + self.client = APIClient() + self.client.credentials(HTTP_AUTHORIZATION="Token " + self.token.key) + self.url = reverse("risk_acceptance-list") + + def test_create_risk_acceptance_links_to_engagement(self): + """Test that risk acceptance created via API appears in engagement.risk_acceptance""" + payload = { + "name": "Test Risk Acceptance", + "recommendation": "A", + "recommendation_details": "Test recommendation", + "decision": "A", + "decision_details": "Test decision", + "accepted_by": "Test User", + "owner": self.user.id, + "expiration_date": "2025-12-31T23:59:59Z", + "reactivate_expired": True, + "restart_sla_expired": False, + "accepted_findings": [self.finding_a1.id, self.finding_a2.id], + } + + response = self.client.post(self.url, payload, format="json") + self.assertEqual(201, response.status_code, response.content) + + # Verify risk acceptance was created + ra_id = response.data["id"] + risk_acceptance = Risk_Acceptance.objects.get(id=ra_id) + + # Verify it's linked to the engagement + self.assertIn(risk_acceptance, self.engagement_a.risk_acceptance.all()) + self.assertEqual(1, self.engagement_a.risk_acceptance.count()) + + # Verify findings are marked as risk accepted + self.finding_a1.refresh_from_db() + self.finding_a2.refresh_from_db() + self.assertTrue(self.finding_a1.risk_accepted) + self.assertTrue(self.finding_a2.risk_accepted) + + def test_create_risk_acceptance_multiple_engagements_fails(self): + """Test that creating risk acceptance with findings from multiple engagements fails""" + payload = { + "name": "Invalid Risk Acceptance", + "recommendation": "A", + "decision": "A", + "accepted_by": "Test User", + "owner": self.user.id, + "accepted_findings": [self.finding_a1.id, self.finding_b1.id], # Different engagements! + } + + response = self.client.post(self.url, payload, format="json") + self.assertEqual(403, response.status_code, response.content) + self.assertIn("multiple engagements", str(response.data)) + + def test_create_risk_acceptance_product_disabled_fails(self): + """Test that creating risk acceptance fails when product has enable_full_risk_acceptance=False""" + payload = { + "name": "Disabled Product Risk Acceptance", + "recommendation": "A", + "decision": "A", + "accepted_by": "Test User", + "owner": self.user.id, + "accepted_findings": [self.finding_disabled.id], + } + + response = self.client.post(self.url, payload, format="json") + self.assertEqual(403, response.status_code, response.content) + self.assertIn("not enabled", str(response.data)) + + # Verify no risk acceptance was created + self.assertEqual(0, self.engagement_disabled.risk_acceptance.count()) + + def test_update_risk_acceptance_add_findings_same_engagement(self): + """Test that updating to add more findings from same engagement succeeds""" + # Create risk acceptance with one finding + ra = Risk_Acceptance.objects.create( + name="Initial RA", + recommendation="A", + decision="A", + accepted_by="Test User", + owner=self.user, + ) + ra.accepted_findings.add(self.finding_a1) + self.engagement_a.risk_acceptance.add(ra) + + # Update to add another finding from same engagement + payload = { + "name": "Updated RA", + "recommendation": "A", + "decision": "A", + "accepted_by": "Test User", + "owner": self.user.id, + "accepted_findings": [self.finding_a1.id, self.finding_a2.id], + } + + response = self.client.put(f"{self.url}{ra.id}/", payload, format="json") + self.assertEqual(200, response.status_code, response.content) + + # Verify both findings are now in the risk acceptance + ra.refresh_from_db() + self.assertEqual(2, ra.accepted_findings.count()) + self.assertIn(self.finding_a1, ra.accepted_findings.all()) + self.assertIn(self.finding_a2, ra.accepted_findings.all()) + + def test_update_risk_acceptance_switch_engagement_fails(self): + """Test that replacing all findings with findings from different engagement fails""" + # Create risk acceptance with findings from engagement A + ra = Risk_Acceptance.objects.create( + name="RA for Engagement A", + recommendation="A", + decision="A", + accepted_by="Test User", + owner=self.user, + ) + ra.accepted_findings.add(self.finding_a1) + self.engagement_a.risk_acceptance.add(ra) + + # Try to replace with finding from engagement B + payload = { + "name": "RA for Engagement A", + "recommendation": "A", + "decision": "A", + "accepted_by": "Test User", + "owner": self.user.id, + "accepted_findings": [self.finding_b1.id], # Different engagement! + } + + response = self.client.put(f"{self.url}{ra.id}/", payload, format="json") + # Returns 403 because the validate_findings_have_same_engagement check runs first + self.assertEqual(403, response.status_code, response.content) + self.assertIn("multiple engagements", str(response.data)) + + def test_update_risk_acceptance_empty_then_different_engagement_fails(self): + """Test edge case: risk acceptance with no findings cannot accept findings from different engagement""" + # Create risk acceptance with findings from engagement A, then remove them + ra = Risk_Acceptance.objects.create( + name="RA for Engagement A", + recommendation="A", + decision="A", + accepted_by="Test User", + owner=self.user, + ) + ra.accepted_findings.add(self.finding_a1) + self.engagement_a.risk_acceptance.add(ra) + + # Remove all findings (make it empty) + ra.accepted_findings.clear() + + # Try to add finding from engagement B + payload = { + "name": "RA for Engagement A", + "recommendation": "A", + "decision": "A", + "accepted_by": "Test User", + "owner": self.user.id, + "accepted_findings": [self.finding_b1.id], # Different engagement! + } + + response = self.client.put(f"{self.url}{ra.id}/", payload, format="json") + self.assertEqual(400, response.status_code, response.content) + self.assertIn("belongs to engagement", str(response.data)) + + def test_update_risk_acceptance_add_cross_engagement_fails(self): + """Test that adding findings from different engagement while keeping existing ones fails""" + # Create risk acceptance with finding from engagement A + ra = Risk_Acceptance.objects.create( + name="RA for Engagement A", + recommendation="A", + decision="A", + accepted_by="Test User", + owner=self.user, + ) + ra.accepted_findings.add(self.finding_a1) + self.engagement_a.risk_acceptance.add(ra) + + # Try to add findings from both engagements + payload = { + "name": "RA for Engagement A", + "recommendation": "A", + "decision": "A", + "accepted_by": "Test User", + "owner": self.user.id, + "accepted_findings": [self.finding_a1.id, self.finding_b1.id], # Mixed engagements! + } + + response = self.client.put(f"{self.url}{ra.id}/", payload, format="json") + self.assertEqual(403, response.status_code, response.content) + self.assertIn("multiple engagements", str(response.data)) diff --git a/unittests/vcr/jira/JIRAImportAndPushTestApi.test_import_auto_create_context_fetches_all_objects_for_push_to_jira.yaml b/unittests/vcr/jira/JIRAImportAndPushTestApi.test_import_auto_create_context_fetches_all_objects_for_push_to_jira.yaml new file mode 100644 index 00000000000..3d0a6494960 --- /dev/null +++ b/unittests/vcr/jira/JIRAImportAndPushTestApi.test_import_auto_create_context_fetches_all_objects_for_push_to_jira.yaml @@ -0,0 +1,1472 @@ +interactions: +- request: + body: '{"description": "Product Type Some Product Type has been created successfully.", + "title": "Some Product Type", "user": null, "url_ui": "http://localhost:8080/product/type/5", + "url_api": "http://localhost:8080/api/v2/product_types/5/", "product_type": + {"name": "Some Product Type", "id": 5, "url_ui": "http://localhost:8080/product/type/5", + "url_api": "http://localhost:8080/api/v2/product_types/5/"}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Auth: + - Token xxx + Connection: + - keep-alive + Content-Length: + - '400' + Content-Type: + - application/json + User-Agent: + - DefectDojo-2.55.1 + X-DefectDojo-Event: + - product_type_added + X-DefectDojo-Instance: + - http://localhost:8080 + method: POST + uri: http://webhook.endpoint:8080/post + response: + body: + string: "{\n \"args\": {},\n \"headers\": {\n \"Accept\": [\n \"application/json\"\n + \ ],\n \"Accept-Encoding\": [\n \"gzip, deflate\"\n ],\n \"Auth\": + [\n \"Token xxx\"\n ],\n \"Connection\": [\n \"keep-alive\"\n + \ ],\n \"Content-Length\": [\n \"400\"\n ],\n \"Content-Type\": + [\n \"application/json\"\n ],\n \"Host\": [\n \"webhook.endpoint:8080\"\n + \ ],\n \"User-Agent\": [\n \"DefectDojo-2.55.1\"\n ],\n \"X-Defectdojo-Event\": + [\n \"product_type_added\"\n ],\n \"X-Defectdojo-Instance\": [\n + \ \"http://localhost:8080\"\n ]\n },\n \"method\": \"POST\",\n \"origin\": + \"172.18.0.6\",\n \"url\": \"http://webhook.endpoint:8080/post\",\n \"data\": + \"{\\\"description\\\": \\\"Product Type Some Product Type has been created + successfully.\\\", \\\"title\\\": \\\"Some Product Type\\\", \\\"user\\\": + null, \\\"url_ui\\\": \\\"http://localhost:8080/product/type/5\\\", \\\"url_api\\\": + \\\"http://localhost:8080/api/v2/product_types/5/\\\", \\\"product_type\\\": + {\\\"name\\\": \\\"Some Product Type\\\", \\\"id\\\": 5, \\\"url_ui\\\": \\\"http://localhost:8080/product/type/5\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/product_types/5/\\\"}}\",\n + \ \"files\": {},\n \"form\": {},\n \"json\": {\n \"description\": \"Product + Type Some Product Type has been created successfully.\",\n \"product_type\": + {\n \"id\": 5,\n \"name\": \"Some Product Type\",\n \"url_api\": + \"http://localhost:8080/api/v2/product_types/5/\",\n \"url_ui\": \"http://localhost:8080/product/type/5\"\n + \ },\n \"title\": \"Some Product Type\",\n \"url_api\": \"http://localhost:8080/api/v2/product_types/5/\",\n + \ \"url_ui\": \"http://localhost:8080/product/type/5\",\n \"user\": null\n + \ }\n}\n" + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Origin: + - '*' + Content-Length: + - '1593' + Content-Type: + - application/json; charset=utf-8 + Date: + - Fri, 06 Feb 2026 18:56:40 GMT + status: + code: 200 + message: OK +- request: + body: '{"description": "Product Jira Product (Not Configured) has been created + successfully.", "title": "Jira Product (Not Configured)", "user": null, "url_ui": + "http://localhost:8080/product/5", "url_api": "http://localhost:8080/api/v2/products/5/", + "product_type": {"name": "Some Product Type", "id": 5, "url_ui": "http://localhost:8080/product/type/5", + "url_api": "http://localhost:8080/api/v2/product_types/5/"}, "product": {"name": + "Jira Product (Not Configured)", "id": 5, "url_ui": "http://localhost:8080/product/5", + "url_api": "http://localhost:8080/api/v2/products/5/"}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Auth: + - Token xxx + Connection: + - keep-alive + Content-Length: + - '572' + Content-Type: + - application/json + User-Agent: + - DefectDojo-2.55.1 + X-DefectDojo-Event: + - product_added + X-DefectDojo-Instance: + - http://localhost:8080 + method: POST + uri: http://webhook.endpoint:8080/post + response: + body: + string: "{\n \"args\": {},\n \"headers\": {\n \"Accept\": [\n \"application/json\"\n + \ ],\n \"Accept-Encoding\": [\n \"gzip, deflate\"\n ],\n \"Auth\": + [\n \"Token xxx\"\n ],\n \"Connection\": [\n \"keep-alive\"\n + \ ],\n \"Content-Length\": [\n \"572\"\n ],\n \"Content-Type\": + [\n \"application/json\"\n ],\n \"Host\": [\n \"webhook.endpoint:8080\"\n + \ ],\n \"User-Agent\": [\n \"DefectDojo-2.55.1\"\n ],\n \"X-Defectdojo-Event\": + [\n \"product_added\"\n ],\n \"X-Defectdojo-Instance\": [\n \"http://localhost:8080\"\n + \ ]\n },\n \"method\": \"POST\",\n \"origin\": \"172.18.0.6\",\n \"url\": + \"http://webhook.endpoint:8080/post\",\n \"data\": \"{\\\"description\\\": + \\\"Product Jira Product (Not Configured) has been created successfully.\\\", + \\\"title\\\": \\\"Jira Product (Not Configured)\\\", \\\"user\\\": null, + \\\"url_ui\\\": \\\"http://localhost:8080/product/5\\\", \\\"url_api\\\": + \\\"http://localhost:8080/api/v2/products/5/\\\", \\\"product_type\\\": {\\\"name\\\": + \\\"Some Product Type\\\", \\\"id\\\": 5, \\\"url_ui\\\": \\\"http://localhost:8080/product/type/5\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/product_types/5/\\\"}, \\\"product\\\": + {\\\"name\\\": \\\"Jira Product (Not Configured)\\\", \\\"id\\\": 5, \\\"url_ui\\\": + \\\"http://localhost:8080/product/5\\\", \\\"url_api\\\": \\\"http://localhost:8080/api/v2/products/5/\\\"}}\",\n + \ \"files\": {},\n \"form\": {},\n \"json\": {\n \"description\": \"Product + Jira Product (Not Configured) has been created successfully.\",\n \"product\": + {\n \"id\": 5,\n \"name\": \"Jira Product (Not Configured)\",\n + \ \"url_api\": \"http://localhost:8080/api/v2/products/5/\",\n \"url_ui\": + \"http://localhost:8080/product/5\"\n },\n \"product_type\": {\n \"id\": + 5,\n \"name\": \"Some Product Type\",\n \"url_api\": \"http://localhost:8080/api/v2/product_types/5/\",\n + \ \"url_ui\": \"http://localhost:8080/product/type/5\"\n },\n \"title\": + \"Jira Product (Not Configured)\",\n \"url_api\": \"http://localhost:8080/api/v2/products/5/\",\n + \ \"url_ui\": \"http://localhost:8080/product/5\",\n \"user\": null\n + \ }\n}\n" + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Origin: + - '*' + Content-Length: + - '1982' + Content-Type: + - application/json; charset=utf-8 + Date: + - Fri, 06 Feb 2026 18:56:40 GMT + status: + code: 200 + message: OK +- request: + body: '{"description": "Event engagement_added has occurred.", "title": "Engagement + created for \"Jira Product (Not Configured)\": Jira Engagement", "user": null, + "url_ui": "http://localhost:8080/engagement/8", "url_api": "http://localhost:8080/api/v2/engagements/8/", + "product_type": {"name": "Some Product Type", "id": 5, "url_ui": "http://localhost:8080/product/type/5", + "url_api": "http://localhost:8080/api/v2/product_types/5/"}, "product": {"name": + "Jira Product (Not Configured)", "id": 5, "url_ui": "http://localhost:8080/product/5", + "url_api": "http://localhost:8080/api/v2/products/5/"}, "engagement": {"name": + "Jira Engagement", "id": 8, "url_ui": "http://localhost:8080/engagement/8", + "url_api": "http://localhost:8080/api/v2/engagements/8/"}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Auth: + - Token xxx + Connection: + - keep-alive + Content-Length: + - '748' + Content-Type: + - application/json + User-Agent: + - DefectDojo-2.55.1 + X-DefectDojo-Event: + - engagement_added + X-DefectDojo-Instance: + - http://localhost:8080 + method: POST + uri: http://webhook.endpoint:8080/post + response: + body: + string: "{\n \"args\": {},\n \"headers\": {\n \"Accept\": [\n \"application/json\"\n + \ ],\n \"Accept-Encoding\": [\n \"gzip, deflate\"\n ],\n \"Auth\": + [\n \"Token xxx\"\n ],\n \"Connection\": [\n \"keep-alive\"\n + \ ],\n \"Content-Length\": [\n \"748\"\n ],\n \"Content-Type\": + [\n \"application/json\"\n ],\n \"Host\": [\n \"webhook.endpoint:8080\"\n + \ ],\n \"User-Agent\": [\n \"DefectDojo-2.55.1\"\n ],\n \"X-Defectdojo-Event\": + [\n \"engagement_added\"\n ],\n \"X-Defectdojo-Instance\": [\n + \ \"http://localhost:8080\"\n ]\n },\n \"method\": \"POST\",\n \"origin\": + \"172.18.0.6\",\n \"url\": \"http://webhook.endpoint:8080/post\",\n \"data\": + \"{\\\"description\\\": \\\"Event engagement_added has occurred.\\\", \\\"title\\\": + \\\"Engagement created for \\\\\\\"Jira Product (Not Configured)\\\\\\\": + Jira Engagement\\\", \\\"user\\\": null, \\\"url_ui\\\": \\\"http://localhost:8080/engagement/8\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/engagements/8/\\\", \\\"product_type\\\": + {\\\"name\\\": \\\"Some Product Type\\\", \\\"id\\\": 5, \\\"url_ui\\\": \\\"http://localhost:8080/product/type/5\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/product_types/5/\\\"}, \\\"product\\\": + {\\\"name\\\": \\\"Jira Product (Not Configured)\\\", \\\"id\\\": 5, \\\"url_ui\\\": + \\\"http://localhost:8080/product/5\\\", \\\"url_api\\\": \\\"http://localhost:8080/api/v2/products/5/\\\"}, + \\\"engagement\\\": {\\\"name\\\": \\\"Jira Engagement\\\", \\\"id\\\": 8, + \\\"url_ui\\\": \\\"http://localhost:8080/engagement/8\\\", \\\"url_api\\\": + \\\"http://localhost:8080/api/v2/engagements/8/\\\"}}\",\n \"files\": {},\n + \ \"form\": {},\n \"json\": {\n \"description\": \"Event engagement_added + has occurred.\",\n \"engagement\": {\n \"id\": 8,\n \"name\": + \"Jira Engagement\",\n \"url_api\": \"http://localhost:8080/api/v2/engagements/8/\",\n + \ \"url_ui\": \"http://localhost:8080/engagement/8\"\n },\n \"product\": + {\n \"id\": 5,\n \"name\": \"Jira Product (Not Configured)\",\n + \ \"url_api\": \"http://localhost:8080/api/v2/products/5/\",\n \"url_ui\": + \"http://localhost:8080/product/5\"\n },\n \"product_type\": {\n \"id\": + 5,\n \"name\": \"Some Product Type\",\n \"url_api\": \"http://localhost:8080/api/v2/product_types/5/\",\n + \ \"url_ui\": \"http://localhost:8080/product/type/5\"\n },\n \"title\": + \"Engagement created for \\\"Jira Product (Not Configured)\\\": Jira Engagement\",\n + \ \"url_api\": \"http://localhost:8080/api/v2/engagements/8/\",\n \"url_ui\": + \"http://localhost:8080/engagement/8\",\n \"user\": null\n }\n}\n" + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Origin: + - '*' + Content-Type: + - application/json; charset=utf-8 + Date: + - Fri, 06 Feb 2026 18:56:40 GMT + Transfer-Encoding: + - chunked + status: + code: 200 + message: OK +- request: + body: '{"description": "Event test_added has occurred.", "title": "Test created + for Jira Product (Not Configured): Jira Engagement: ZAP Scan", "user": null, + "url_ui": "http://localhost:8080/test/93", "url_api": "http://localhost:8080/api/v2/tests/93/", + "product_type": {"name": "Some Product Type", "id": 5, "url_ui": "http://localhost:8080/product/type/5", + "url_api": "http://localhost:8080/api/v2/product_types/5/"}, "product": {"name": + "Jira Product (Not Configured)", "id": 5, "url_ui": "http://localhost:8080/product/5", + "url_api": "http://localhost:8080/api/v2/products/5/"}, "engagement": {"name": + "Jira Engagement", "id": 8, "url_ui": "http://localhost:8080/engagement/8", + "url_api": "http://localhost:8080/api/v2/engagements/8/"}, "test": {"title": + null, "id": 93, "url_ui": "http://localhost:8080/test/93", "url_api": "http://localhost:8080/api/v2/tests/93/"}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Auth: + - Token xxx + Connection: + - keep-alive + Content-Length: + - '863' + Content-Type: + - application/json + User-Agent: + - DefectDojo-2.55.1 + X-DefectDojo-Event: + - test_added + X-DefectDojo-Instance: + - http://localhost:8080 + method: POST + uri: http://webhook.endpoint:8080/post + response: + body: + string: "{\n \"args\": {},\n \"headers\": {\n \"Accept\": [\n \"application/json\"\n + \ ],\n \"Accept-Encoding\": [\n \"gzip, deflate\"\n ],\n \"Auth\": + [\n \"Token xxx\"\n ],\n \"Connection\": [\n \"keep-alive\"\n + \ ],\n \"Content-Length\": [\n \"863\"\n ],\n \"Content-Type\": + [\n \"application/json\"\n ],\n \"Host\": [\n \"webhook.endpoint:8080\"\n + \ ],\n \"User-Agent\": [\n \"DefectDojo-2.55.1\"\n ],\n \"X-Defectdojo-Event\": + [\n \"test_added\"\n ],\n \"X-Defectdojo-Instance\": [\n \"http://localhost:8080\"\n + \ ]\n },\n \"method\": \"POST\",\n \"origin\": \"172.18.0.6\",\n \"url\": + \"http://webhook.endpoint:8080/post\",\n \"data\": \"{\\\"description\\\": + \\\"Event test_added has occurred.\\\", \\\"title\\\": \\\"Test created for + Jira Product (Not Configured): Jira Engagement: ZAP Scan\\\", \\\"user\\\": + null, \\\"url_ui\\\": \\\"http://localhost:8080/test/93\\\", \\\"url_api\\\": + \\\"http://localhost:8080/api/v2/tests/93/\\\", \\\"product_type\\\": {\\\"name\\\": + \\\"Some Product Type\\\", \\\"id\\\": 5, \\\"url_ui\\\": \\\"http://localhost:8080/product/type/5\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/product_types/5/\\\"}, \\\"product\\\": + {\\\"name\\\": \\\"Jira Product (Not Configured)\\\", \\\"id\\\": 5, \\\"url_ui\\\": + \\\"http://localhost:8080/product/5\\\", \\\"url_api\\\": \\\"http://localhost:8080/api/v2/products/5/\\\"}, + \\\"engagement\\\": {\\\"name\\\": \\\"Jira Engagement\\\", \\\"id\\\": 8, + \\\"url_ui\\\": \\\"http://localhost:8080/engagement/8\\\", \\\"url_api\\\": + \\\"http://localhost:8080/api/v2/engagements/8/\\\"}, \\\"test\\\": {\\\"title\\\": + null, \\\"id\\\": 93, \\\"url_ui\\\": \\\"http://localhost:8080/test/93\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/tests/93/\\\"}}\",\n \"files\": + {},\n \"form\": {},\n \"json\": {\n \"description\": \"Event test_added + has occurred.\",\n \"engagement\": {\n \"id\": 8,\n \"name\": + \"Jira Engagement\",\n \"url_api\": \"http://localhost:8080/api/v2/engagements/8/\",\n + \ \"url_ui\": \"http://localhost:8080/engagement/8\"\n },\n \"product\": + {\n \"id\": 5,\n \"name\": \"Jira Product (Not Configured)\",\n + \ \"url_api\": \"http://localhost:8080/api/v2/products/5/\",\n \"url_ui\": + \"http://localhost:8080/product/5\"\n },\n \"product_type\": {\n \"id\": + 5,\n \"name\": \"Some Product Type\",\n \"url_api\": \"http://localhost:8080/api/v2/product_types/5/\",\n + \ \"url_ui\": \"http://localhost:8080/product/type/5\"\n },\n \"test\": + {\n \"id\": 93,\n \"title\": null,\n \"url_api\": \"http://localhost:8080/api/v2/tests/93/\",\n + \ \"url_ui\": \"http://localhost:8080/test/93\"\n },\n \"title\": + \"Test created for Jira Product (Not Configured): Jira Engagement: ZAP Scan\",\n + \ \"url_api\": \"http://localhost:8080/api/v2/tests/93/\",\n \"url_ui\": + \"http://localhost:8080/test/93\",\n \"user\": null\n }\n}\n" + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Origin: + - '*' + Content-Type: + - application/json; charset=utf-8 + Date: + - Fri, 06 Feb 2026 18:56:40 GMT + Transfer-Encoding: + - chunked + status: + code: 200 + message: OK +- request: + body: '{"description": "Event scan_added has occurred.", "title": "Created/Updated + 2 findings for Jira Product (Not Configured): Jira Engagement: ZAP Scan", "user": + null, "url_ui": "http://localhost:8080/test/93", "url_api": "http://localhost:8080/api/v2/tests/93/", + "product_type": {"name": "Some Product Type", "id": 5, "url_ui": "http://localhost:8080/product/type/5", + "url_api": "http://localhost:8080/api/v2/product_types/5/"}, "product": {"name": + "Jira Product (Not Configured)", "id": 5, "url_ui": "http://localhost:8080/product/5", + "url_api": "http://localhost:8080/api/v2/products/5/"}, "engagement": {"name": + "Jira Engagement", "id": 8, "url_ui": "http://localhost:8080/engagement/8", + "url_api": "http://localhost:8080/api/v2/engagements/8/"}, "test": {"title": + null, "id": 93, "url_ui": "http://localhost:8080/test/93", "url_api": "http://localhost:8080/api/v2/tests/93/"}, + "finding_count": 2, "findings": {"new": [{"id": 236, "title": "Zap1: Cookie + Without Secure Flag", "severity": "Low", "url_ui": "http://localhost:8080/finding/236", + "url_api": "http://localhost:8080/api/v2/findings/236/"}, {"id": 237, "title": + "Zap2: Cookie Without Secure Flag", "severity": "Low", "url_ui": "http://localhost:8080/finding/237", + "url_api": "http://localhost:8080/api/v2/findings/237/"}], "reactivated": [], + "mitigated": [], "untouched": []}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Auth: + - Token xxx + Connection: + - keep-alive + Content-Length: + - '1335' + Content-Type: + - application/json + User-Agent: + - DefectDojo-2.55.1 + X-DefectDojo-Event: + - scan_added + X-DefectDojo-Instance: + - http://localhost:8080 + method: POST + uri: http://webhook.endpoint:8080/post + response: + body: + string: "{\n \"args\": {},\n \"headers\": {\n \"Accept\": [\n \"application/json\"\n + \ ],\n \"Accept-Encoding\": [\n \"gzip, deflate\"\n ],\n \"Auth\": + [\n \"Token xxx\"\n ],\n \"Connection\": [\n \"keep-alive\"\n + \ ],\n \"Content-Length\": [\n \"1335\"\n ],\n \"Content-Type\": + [\n \"application/json\"\n ],\n \"Host\": [\n \"webhook.endpoint:8080\"\n + \ ],\n \"User-Agent\": [\n \"DefectDojo-2.55.1\"\n ],\n \"X-Defectdojo-Event\": + [\n \"scan_added\"\n ],\n \"X-Defectdojo-Instance\": [\n \"http://localhost:8080\"\n + \ ]\n },\n \"method\": \"POST\",\n \"origin\": \"172.18.0.6\",\n \"url\": + \"http://webhook.endpoint:8080/post\",\n \"data\": \"{\\\"description\\\": + \\\"Event scan_added has occurred.\\\", \\\"title\\\": \\\"Created/Updated + 2 findings for Jira Product (Not Configured): Jira Engagement: ZAP Scan\\\", + \\\"user\\\": null, \\\"url_ui\\\": \\\"http://localhost:8080/test/93\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/tests/93/\\\", \\\"product_type\\\": + {\\\"name\\\": \\\"Some Product Type\\\", \\\"id\\\": 5, \\\"url_ui\\\": \\\"http://localhost:8080/product/type/5\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/product_types/5/\\\"}, \\\"product\\\": + {\\\"name\\\": \\\"Jira Product (Not Configured)\\\", \\\"id\\\": 5, \\\"url_ui\\\": + \\\"http://localhost:8080/product/5\\\", \\\"url_api\\\": \\\"http://localhost:8080/api/v2/products/5/\\\"}, + \\\"engagement\\\": {\\\"name\\\": \\\"Jira Engagement\\\", \\\"id\\\": 8, + \\\"url_ui\\\": \\\"http://localhost:8080/engagement/8\\\", \\\"url_api\\\": + \\\"http://localhost:8080/api/v2/engagements/8/\\\"}, \\\"test\\\": {\\\"title\\\": + null, \\\"id\\\": 93, \\\"url_ui\\\": \\\"http://localhost:8080/test/93\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/tests/93/\\\"}, \\\"finding_count\\\": + 2, \\\"findings\\\": {\\\"new\\\": [{\\\"id\\\": 236, \\\"title\\\": \\\"Zap1: + Cookie Without Secure Flag\\\", \\\"severity\\\": \\\"Low\\\", \\\"url_ui\\\": + \\\"http://localhost:8080/finding/236\\\", \\\"url_api\\\": \\\"http://localhost:8080/api/v2/findings/236/\\\"}, + {\\\"id\\\": 237, \\\"title\\\": \\\"Zap2: Cookie Without Secure Flag\\\", + \\\"severity\\\": \\\"Low\\\", \\\"url_ui\\\": \\\"http://localhost:8080/finding/237\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/findings/237/\\\"}], \\\"reactivated\\\": + [], \\\"mitigated\\\": [], \\\"untouched\\\": []}}\",\n \"files\": {},\n + \ \"form\": {},\n \"json\": {\n \"description\": \"Event scan_added has + occurred.\",\n \"engagement\": {\n \"id\": 8,\n \"name\": \"Jira + Engagement\",\n \"url_api\": \"http://localhost:8080/api/v2/engagements/8/\",\n + \ \"url_ui\": \"http://localhost:8080/engagement/8\"\n },\n \"finding_count\": + 2,\n \"findings\": {\n \"mitigated\": [],\n \"new\": [\n {\n + \ \"id\": 236,\n \"severity\": \"Low\",\n \"title\": + \"Zap1: Cookie Without Secure Flag\",\n \"url_api\": \"http://localhost:8080/api/v2/findings/236/\",\n + \ \"url_ui\": \"http://localhost:8080/finding/236\"\n },\n + \ {\n \"id\": 237,\n \"severity\": \"Low\",\n \"title\": + \"Zap2: Cookie Without Secure Flag\",\n \"url_api\": \"http://localhost:8080/api/v2/findings/237/\",\n + \ \"url_ui\": \"http://localhost:8080/finding/237\"\n }\n ],\n + \ \"reactivated\": [],\n \"untouched\": []\n },\n \"product\": + {\n \"id\": 5,\n \"name\": \"Jira Product (Not Configured)\",\n + \ \"url_api\": \"http://localhost:8080/api/v2/products/5/\",\n \"url_ui\": + \"http://localhost:8080/product/5\"\n },\n \"product_type\": {\n \"id\": + 5,\n \"name\": \"Some Product Type\",\n \"url_api\": \"http://localhost:8080/api/v2/product_types/5/\",\n + \ \"url_ui\": \"http://localhost:8080/product/type/5\"\n },\n \"test\": + {\n \"id\": 93,\n \"title\": null,\n \"url_api\": \"http://localhost:8080/api/v2/tests/93/\",\n + \ \"url_ui\": \"http://localhost:8080/test/93\"\n },\n \"title\": + \"Created/Updated 2 findings for Jira Product (Not Configured): Jira Engagement: + ZAP Scan\",\n \"url_api\": \"http://localhost:8080/api/v2/tests/93/\",\n + \ \"url_ui\": \"http://localhost:8080/test/93\",\n \"user\": null\n }\n}\n" + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Origin: + - '*' + Content-Type: + - application/json; charset=utf-8 + Date: + - Fri, 06 Feb 2026 18:56:40 GMT + Transfer-Encoding: + - chunked + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/serverInfo + response: + body: + string: '{"baseUrl":"https://defectdojo.atlassian.net","displayUrl":"https://defectdojo.atlassian.net","displayUrlServicedeskHelpCenter":"https://defectdojo.atlassian.net","displayUrlCSMHelpSeeker":"https://defectdojo.atlassian.net","displayUrlConfluence":"https://defectdojo.atlassian.net","version":"1001.0.0-SNAPSHOT","versionNumbers":[1001,0,0],"deploymentType":"Cloud","buildNumber":100290,"buildDate":"2026-02-06T12:38:29.000+0100","serverTime":"2026-02-06T19:56:40.443+0100","scmInfo":"9d700605f271b9e38f3e73c4116a686dae8d11d7","serverTitle":"Jira","defaultLocale":{"locale":"en_US"},"serverTimeZone":"Etc/UTC"}' + headers: + Atl-Request-Id: + - 0ddff33f-bafb-42c0-aefb-05deb7117e8d + Atl-Traceid: + - 0ddff33fbafb42c0aefb05deb7117e8d + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Fri, 06 Feb 2026 18:56:40 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=67,cdn-upstream-fbl;dur=260,atl-edge;dur=168,atl-edge-internal;dur=16,atl-edge-upstream;dur=152,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN53-P1",cdn-rid;desc="Ub1ZEkbKroz1OJ7JRnz0QcXI0EpCwx2MJetu_7xw_YVDVTjU8YUgYg==",cdn-downstream-fbl;dur=263 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 f88732a3c07912cb33374b1e2ce03f84.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - Ub1ZEkbKroz1OJ7JRnz0QcXI0EpCwx2MJetu_7xw_YVDVTjU8YUgYg== + X-Amz-Cf-Pop: + - DEN53-P1 + X-Arequestid: + - ba3b2fd7e52bf2bdd2933b702982ce3a + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '350' + X-Ratelimit-Remaining: + - '349' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/issue/createmeta?projectKeys=TEST&issuetypeNames=Task&expand=projects.issuetypes.fields + response: + body: + string: '{"expand":"projects","projects":[{"expand":"issuetypes","self":"https://defectdojo.atlassian.net/rest/api/2/project/10223","id":"10223","key":"TEST","name":"test","avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425?size=medium"},"issuetypes":[{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10213","id":"10213","description":"Tasks + track small, distinct pieces of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","untranslatedName":"Task","subtask":false,"hierarchyLevel":0,"scope":{"type":"PROJECT","project":{"id":"10223"}},"expand":"fields","fields":{"summary":{"required":true,"schema":{"type":"string","system":"summary"},"name":"Summary","key":"summary","hasDefaultValue":false,"operations":["set"]},"issuetype":{"required":true,"schema":{"type":"issuetype","system":"issuetype"},"name":"Issue + Type","key":"issuetype","hasDefaultValue":false,"operations":[],"allowedValues":[{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10213","id":"10213","description":"Tasks + track small, distinct pieces of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","subtask":false,"avatarId":10318,"entityId":"2e566caf-2038-46a7-94c3-c0d1cc9479bd","hierarchyLevel":0}]},"issuerestriction":{"required":false,"schema":{"type":"issuerestriction","system":"issuerestriction"},"name":"Restrict + to","key":"issuerestriction","hasDefaultValue":false,"operations":["set"],"allowedValues":[]},"parent":{"required":false,"schema":{"type":"issuelink","system":"parent"},"name":"Parent","key":"parent","hasDefaultValue":false,"operations":["set"]},"description":{"required":false,"schema":{"type":"string","system":"description"},"name":"Description","key":"description","hasDefaultValue":false,"operations":["set"]},"project":{"required":true,"schema":{"type":"project","system":"project"},"name":"Project","key":"project","hasDefaultValue":false,"operations":["set"],"allowedValues":[{"self":"https://defectdojo.atlassian.net/rest/api/2/project/10223","id":"10223","key":"TEST","name":"test","projectTypeKey":"software","simplified":true,"avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425?size=medium"}}]},"customfield_10021":{"required":false,"schema":{"type":"array","items":"option","custom":"com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes","customId":10021},"name":"Flagged","key":"customfield_10021","hasDefaultValue":false,"operations":["add","set","remove"],"allowedValues":[{"self":"https://defectdojo.atlassian.net/rest/api/2/customFieldOption/10019","value":"Impediment","id":"10019"}]},"customfield_10000":{"required":false,"schema":{"type":"any","custom":"com.atlassian.jira.plugins.jira-development-integration-plugin:devsummarycf","customId":10000},"name":"Development","key":"customfield_10000","hasDefaultValue":false,"operations":["set"]},"customfield_10001":{"required":false,"schema":{"type":"team","custom":"com.atlassian.jira.plugin.system.customfieldtypes:atlassian-team","customId":10001,"configuration":{"com.atlassian.jira.plugin.system.customfieldtypes:atlassian-team":true}},"name":"Team","key":"customfield_10001","autoCompleteUrl":"https://defectdojo.atlassian.net/gateway/api/v1/recommendations","hasDefaultValue":false,"operations":["set"]},"labels":{"required":false,"schema":{"type":"array","items":"string","system":"labels"},"name":"Labels","key":"labels","autoCompleteUrl":"https://defectdojo.atlassian.net/rest/api/1.0/labels/suggest?query=","hasDefaultValue":false,"operations":["add","set","remove"]},"customfield_10015":{"required":false,"schema":{"type":"date","custom":"com.atlassian.jira.plugin.system.customfieldtypes:datepicker","customId":10015},"name":"Start + date","key":"customfield_10015","hasDefaultValue":false,"operations":["set"]},"customfield_10019":{"required":false,"schema":{"type":"any","custom":"com.pyxis.greenhopper.jira:gh-lexo-rank","customId":10019},"name":"Rank","key":"customfield_10019","hasDefaultValue":false,"operations":["set"]},"attachment":{"required":false,"schema":{"type":"array","items":"attachment","system":"attachment"},"name":"Attachment","key":"attachment","hasDefaultValue":false,"operations":["set","copy"]},"duedate":{"required":false,"schema":{"type":"date","system":"duedate"},"name":"Due + date","key":"duedate","hasDefaultValue":false,"operations":["set"]},"issuelinks":{"required":false,"schema":{"type":"array","items":"issuelinks","system":"issuelinks"},"name":"Linked + Issues","key":"issuelinks","autoCompleteUrl":"https://defectdojo.atlassian.net/rest/api/2/issue/picker?currentProjectId=&showSubTaskParent=true&showSubTasks=true¤tIssueKey=null&query=","hasDefaultValue":false,"operations":["add","copy"]},"assignee":{"required":false,"schema":{"type":"user","system":"assignee"},"name":"Assignee","key":"assignee","autoCompleteUrl":"https://defectdojo.atlassian.net/rest/api/2/user/assignable/search?project=TEST&query=","hasDefaultValue":false,"operations":["set"]}}}]}]}' + headers: + Atl-Request-Id: + - baa19213-7da2-4241-845b-a1494a13964c + Atl-Traceid: + - baa192137da24241845ba1494a13964c + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Fri, 06 Feb 2026 18:56:41 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=66,cdn-upstream-fbl;dur=478,atl-edge;dur=388,atl-edge-internal;dur=19,atl-edge-upstream;dur=370,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN53-P3",cdn-rid;desc="0gACBNLvbk3A8EutSuvEiFc0-1u55XhSjQlejfur1mRg2vWbRF2ZXg==",cdn-downstream-fbl;dur=481 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 30deb42cd45095ca57ec57e8117c8d8a.cloudfront.net (CloudFront) + Warning: + - 'The issue create meta endpoint has been deprecated. (Deprecation start date: + June 03, 2024)' + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - 0gACBNLvbk3A8EutSuvEiFc0-1u55XhSjQlejfur1mRg2vWbRF2ZXg== + X-Amz-Cf-Pop: + - DEN53-P3 + X-Arequestid: + - 5a1346a659aa3c92b2abba52e0ac6fa7 + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '350' + X-Ratelimit-Remaining: + - '349' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: '{"fields": {"project": {"key": "TEST"}, "issuetype": {"name": "Task"}, + "summary": "Zap1: Cookie Without Secure Flag", "description": "\n\n\n\n\n\n\n*Title*: + [Zap1: Cookie Without Secure Flag|http://localhost:8080/finding/238]\n\n*Defect + Dojo link:* http://localhost:8080/finding/238 (238)\n\n*Severity:* Low\n\n\n*Due + Date:* June 6, 2026\n\n\n\n*CWE:* [CWE-614|https://cwe.mitre.org/data/definitions/614.html]\n\n\n\n*CVE:* + Unknown\n\n\n\n\n*Product/Engagement/Test:* [Jira Product (Not Configured)|http://localhost:8080/product/5] + / [Jira Engagement|http://localhost:8080/engagement/8] / [ZAP Scan|http://localhost:8080/test/94]\n\n\n\n\n\n\n\n\n*Systems/Endpoints*:\n||System/Endpoint||Status||\n|https://mainsite.com/dashboard|Active|\n|https://mainsite.com|Active|\n\n\n\n\n\n\n\n\n*Description*:\nA + cookie has been set without the secure flag, which means that the cookie can\nbe + accessed via unencrypted connections.\n\n\n\n\n*Mitigation*:\nWhenever a cookie + contains sensitive information or is a session token, then\nit should always + be passed using an encrypted channel. Ensure that the secure\nflag is set for + cookies containing such sensitive information.\n\n\n\n\n\n*Impact*:\nNone\n\n\n\n\n\n*References*:\nhttp://www.owasp.org/index.php/Testing_for_cookies_attributes_(OWASP-SM-002)\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n", "duedate": "2026-06-06"}}' + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Length: + - '1374' + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: POST + uri: https://defectdojo.atlassian.net/rest/api/2/issue + response: + body: + string: '{"id":"25251","key":"TEST-7","self":"https://defectdojo.atlassian.net/rest/api/2/issue/25251"}' + headers: + Atl-Request-Id: + - a9563673-20c5-4323-b957-15d1921e4e57 + Atl-Traceid: + - a956367320c54323b95715d1921e4e57 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Type: + - application/json;charset=UTF-8 + Date: + - Fri, 06 Feb 2026 18:56:42 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=0,cdn-upstream-fbl;dur=895,atl-edge;dur=872,atl-edge-internal;dur=19,atl-edge-upstream;dur=853,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN53-P2",cdn-rid;desc="DkilZpJnPyQDNYfPVHfPcQvKNsavWJsRrOdFdiKoUineHi4bX71LkA==",cdn-downstream-fbl;dur=901 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 76f2e1e449c547c66904d58101f10ea6.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - DkilZpJnPyQDNYfPVHfPcQvKNsavWJsRrOdFdiKoUineHi4bX71LkA== + X-Amz-Cf-Pop: + - DEN53-P2 + X-Arequestid: + - cec3f7a852aff867ffd03a18faec0ff3 + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '200' + X-Ratelimit-Remaining: + - '199' + X-Xss-Protection: + - 1; mode=block + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/issue/TEST-7 + response: + body: + string: '{"expand":"renderedFields,names,schema,operations,editmeta,changelog,versionedRepresentations","id":"25251","self":"https://defectdojo.atlassian.net/rest/api/2/issue/25251","key":"TEST-7","fields":{"statuscategorychangedate":"2026-02-06T19:56:41.941+0100","issuetype":{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10213","id":"10213","description":"Tasks + track small, distinct pieces of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","subtask":false,"avatarId":10318,"entityId":"2e566caf-2038-46a7-94c3-c0d1cc9479bd","hierarchyLevel":0},"components":[],"timespent":null,"timeoriginalestimate":null,"project":{"self":"https://defectdojo.atlassian.net/rest/api/2/project/10223","id":"10223","key":"TEST","name":"test","projectTypeKey":"software","simplified":true,"avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425?size=medium"}},"description":"\n\n\n\n\n\n\n*Title*: + [Zap1: Cookie Without Secure Flag|http://localhost:8080/finding/238]\n\n*Defect + Dojo link:* http://localhost:8080/finding/238 (238)\n\n*Severity:* Low\n\n\n*Due + Date:* June 6, 2026\n\n\n\n*CWE:* [CWE-614|https://cwe.mitre.org/data/definitions/614.html]\n\n\n\n*CVE:* + Unknown\n\n\n\n\n*Product/Engagement/Test:* [Jira Product (Not Configured)|http://localhost:8080/product/5] + / [Jira Engagement|http://localhost:8080/engagement/8] / [ZAP Scan|http://localhost:8080/test/94]\n\n\n\n\n\n\n\n\n*Systems/Endpoints*:\n||System/Endpoint||Status||\n|https://mainsite.com/dashboard|Active|\n|https://mainsite.com|Active|\n\n\n\n\n\n\n\n\n*Description*:\nA + cookie has been set without the secure flag, which means that the cookie can\nbe + accessed via unencrypted connections.\n\n\n\n\n*Mitigation*:\nWhenever a cookie + contains sensitive information or is a session token, then\nit should always + be passed using an encrypted channel. Ensure that the secure\nflag is set + for cookies containing such sensitive information.\n\n\n\n\n\n*Impact*:\nNone\n\n\n\n\n\n*References*:\nhttp://www.owasp.org/index.php/Testing_for_cookies_attributes_(OWASP-SM-002)\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n","fixVersions":[],"aggregatetimespent":null,"statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"},"resolution":null,"timetracking":{},"customfield_10015":null,"security":null,"attachment":[],"aggregatetimeestimate":null,"resolutiondate":null,"workratio":-1,"summary":"Zap1: + Cookie Without Secure Flag","issuerestriction":{"issuerestrictions":{},"shouldDisplay":true},"watches":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/TEST-7/watchers","watchCount":1,"isWatching":true},"lastViewed":null,"creator":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"subtasks":[],"created":"2026-02-06T19:56:41.588+0100","customfield_10021":null,"reporter":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"aggregateprogress":{"progress":0,"total":0},"priority":{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/3","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/medium_new.svg","name":"Medium","id":"3"},"customfield_10001":null,"labels":[],"environment":null,"customfield_10019":"0|i014t3:","timeestimate":null,"aggregatetimeoriginalestimate":null,"versions":[],"duedate":"2026-06-06","progress":{"progress":0,"total":0},"issuelinks":[],"votes":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/TEST-7/votes","votes":0,"hasVoted":false},"comment":{"comments":[],"self":"https://defectdojo.atlassian.net/rest/api/2/issue/25251/comment","maxResults":0,"total":0,"startAt":0},"assignee":null,"worklog":{"startAt":0,"maxResults":20,"total":0,"worklogs":[]},"updated":"2026-02-06T19:56:41.682+0100","status":{"self":"https://defectdojo.atlassian.net/rest/api/2/status/10271","description":"","iconUrl":"https://defectdojo.atlassian.net/","name":"To + Do","id":"10271","statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"}}}}' + headers: + Atl-Request-Id: + - 69a8b4b9-5466-45b6-a3fc-15aca6eb4837 + Atl-Traceid: + - 69a8b4b9546645b6a3fc15aca6eb4837 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Fri, 06 Feb 2026 18:56:42 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=65,cdn-upstream-fbl;dur=334,atl-edge;dur=246,atl-edge-internal;dur=18,atl-edge-upstream;dur=228,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN53-P3",cdn-rid;desc="u1kFc6IbfkC5JttEYeRM2T1glV4j7WPy6Wod_f7DfOZuHgtMqblrpQ==",cdn-downstream-fbl;dur=338 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 51185e40453f61916e037fc6db50766c.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - u1kFc6IbfkC5JttEYeRM2T1glV4j7WPy6Wod_f7DfOZuHgtMqblrpQ== + X-Amz-Cf-Pop: + - DEN53-P3 + X-Arequestid: + - a698afe62adec034296147a397acd4a2 + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '400' + X-Ratelimit-Remaining: + - '399' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/issue/25251 + response: + body: + string: '{"expand":"renderedFields,names,schema,operations,editmeta,changelog,versionedRepresentations","id":"25251","self":"https://defectdojo.atlassian.net/rest/api/2/issue/25251","key":"TEST-7","fields":{"statuscategorychangedate":"2026-02-06T19:56:41.941+0100","issuetype":{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10213","id":"10213","description":"Tasks + track small, distinct pieces of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","subtask":false,"avatarId":10318,"entityId":"2e566caf-2038-46a7-94c3-c0d1cc9479bd","hierarchyLevel":0},"components":[],"timespent":null,"timeoriginalestimate":null,"project":{"self":"https://defectdojo.atlassian.net/rest/api/2/project/10223","id":"10223","key":"TEST","name":"test","projectTypeKey":"software","simplified":true,"avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425?size=medium"}},"description":"\n\n\n\n\n\n\n*Title*: + [Zap1: Cookie Without Secure Flag|http://localhost:8080/finding/238]\n\n*Defect + Dojo link:* http://localhost:8080/finding/238 (238)\n\n*Severity:* Low\n\n\n*Due + Date:* June 6, 2026\n\n\n\n*CWE:* [CWE-614|https://cwe.mitre.org/data/definitions/614.html]\n\n\n\n*CVE:* + Unknown\n\n\n\n\n*Product/Engagement/Test:* [Jira Product (Not Configured)|http://localhost:8080/product/5] + / [Jira Engagement|http://localhost:8080/engagement/8] / [ZAP Scan|http://localhost:8080/test/94]\n\n\n\n\n\n\n\n\n*Systems/Endpoints*:\n||System/Endpoint||Status||\n|https://mainsite.com/dashboard|Active|\n|https://mainsite.com|Active|\n\n\n\n\n\n\n\n\n*Description*:\nA + cookie has been set without the secure flag, which means that the cookie can\nbe + accessed via unencrypted connections.\n\n\n\n\n*Mitigation*:\nWhenever a cookie + contains sensitive information or is a session token, then\nit should always + be passed using an encrypted channel. Ensure that the secure\nflag is set + for cookies containing such sensitive information.\n\n\n\n\n\n*Impact*:\nNone\n\n\n\n\n\n*References*:\nhttp://www.owasp.org/index.php/Testing_for_cookies_attributes_(OWASP-SM-002)\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n","fixVersions":[],"aggregatetimespent":null,"statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"},"resolution":null,"timetracking":{},"customfield_10015":null,"security":null,"attachment":[],"aggregatetimeestimate":null,"resolutiondate":null,"workratio":-1,"summary":"Zap1: + Cookie Without Secure Flag","issuerestriction":{"issuerestrictions":{},"shouldDisplay":true},"watches":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/TEST-7/watchers","watchCount":1,"isWatching":true},"lastViewed":null,"creator":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"subtasks":[],"created":"2026-02-06T19:56:41.588+0100","customfield_10021":null,"reporter":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"aggregateprogress":{"progress":0,"total":0},"priority":{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/3","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/medium_new.svg","name":"Medium","id":"3"},"customfield_10001":null,"labels":[],"environment":null,"customfield_10019":"0|i014t3:","timeestimate":null,"aggregatetimeoriginalestimate":null,"versions":[],"duedate":"2026-06-06","progress":{"progress":0,"total":0},"issuelinks":[],"votes":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/TEST-7/votes","votes":0,"hasVoted":false},"comment":{"comments":[],"self":"https://defectdojo.atlassian.net/rest/api/2/issue/25251/comment","maxResults":0,"total":0,"startAt":0},"assignee":null,"worklog":{"startAt":0,"maxResults":20,"total":0,"worklogs":[]},"updated":"2026-02-06T19:56:41.682+0100","status":{"self":"https://defectdojo.atlassian.net/rest/api/2/status/10271","description":"","iconUrl":"https://defectdojo.atlassian.net/","name":"To + Do","id":"10271","statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"}}}}' + headers: + Atl-Request-Id: + - 131f7a6e-ee36-4037-be16-b22494a33ca2 + Atl-Traceid: + - 131f7a6eee364037be16b22494a33ca2 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Fri, 06 Feb 2026 18:56:42 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=0,cdn-upstream-fbl;dur=253,atl-edge;dur=229,atl-edge-internal;dur=20,atl-edge-upstream;dur=210,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN52-P3",cdn-rid;desc="OxLF3H2bhaT2RxR9OrK95y9G2x0gvAbcrx27YMWzkdeOHlt-wO518Q==",cdn-downstream-fbl;dur=257 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 ce431f517854de6a993633b3607e3d06.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - OxLF3H2bhaT2RxR9OrK95y9G2x0gvAbcrx27YMWzkdeOHlt-wO518Q== + X-Amz-Cf-Pop: + - DEN52-P3 + X-Arequestid: + - a64541bc753b0c30ffbbe9b05b123274 + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '400' + X-Ratelimit-Remaining: + - '398' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/serverInfo + response: + body: + string: '{"baseUrl":"https://defectdojo.atlassian.net","displayUrl":"https://defectdojo.atlassian.net","displayUrlServicedeskHelpCenter":"https://defectdojo.atlassian.net","displayUrlCSMHelpSeeker":"https://defectdojo.atlassian.net","displayUrlConfluence":"https://defectdojo.atlassian.net","version":"1001.0.0-SNAPSHOT","versionNumbers":[1001,0,0],"deploymentType":"Cloud","buildNumber":100290,"buildDate":"2026-02-06T12:38:29.000+0100","serverTime":"2026-02-06T19:56:43.097+0100","scmInfo":"9d700605f271b9e38f3e73c4116a686dae8d11d7","serverTitle":"Jira","defaultLocale":{"locale":"en_US"},"serverTimeZone":"Etc/UTC"}' + headers: + Atl-Request-Id: + - aa475022-2296-4154-858d-3ec8ec5fec18 + Atl-Traceid: + - aa47502222964154858d3ec8ec5fec18 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Fri, 06 Feb 2026 18:56:43 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=65,cdn-upstream-fbl;dur=256,atl-edge;dur=166,atl-edge-internal;dur=18,atl-edge-upstream;dur=148,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN53-P1",cdn-rid;desc="RdI-xyUfy_3PdrBVxDeRvIzQYAmcb6GAnYnq0Us037O1rEBZXaEaGg==",cdn-downstream-fbl;dur=260 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 0e87c7138186d05e35dac8a520dc0682.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - RdI-xyUfy_3PdrBVxDeRvIzQYAmcb6GAnYnq0Us037O1rEBZXaEaGg== + X-Amz-Cf-Pop: + - DEN53-P1 + X-Arequestid: + - 8141ca85fa1f8ed710b8ddf5222e377e + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '350' + X-Ratelimit-Remaining: + - '349' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/issue/createmeta?projectKeys=TEST&issuetypeNames=Task&expand=projects.issuetypes.fields + response: + body: + string: '{"expand":"projects","projects":[{"expand":"issuetypes","self":"https://defectdojo.atlassian.net/rest/api/2/project/10223","id":"10223","key":"TEST","name":"test","avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425?size=medium"},"issuetypes":[{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10213","id":"10213","description":"Tasks + track small, distinct pieces of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","untranslatedName":"Task","subtask":false,"hierarchyLevel":0,"scope":{"type":"PROJECT","project":{"id":"10223"}},"expand":"fields","fields":{"summary":{"required":true,"schema":{"type":"string","system":"summary"},"name":"Summary","key":"summary","hasDefaultValue":false,"operations":["set"]},"issuetype":{"required":true,"schema":{"type":"issuetype","system":"issuetype"},"name":"Issue + Type","key":"issuetype","hasDefaultValue":false,"operations":[],"allowedValues":[{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10213","id":"10213","description":"Tasks + track small, distinct pieces of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","subtask":false,"avatarId":10318,"entityId":"2e566caf-2038-46a7-94c3-c0d1cc9479bd","hierarchyLevel":0}]},"issuerestriction":{"required":false,"schema":{"type":"issuerestriction","system":"issuerestriction"},"name":"Restrict + to","key":"issuerestriction","hasDefaultValue":false,"operations":["set"],"allowedValues":[]},"parent":{"required":false,"schema":{"type":"issuelink","system":"parent"},"name":"Parent","key":"parent","hasDefaultValue":false,"operations":["set"]},"description":{"required":false,"schema":{"type":"string","system":"description"},"name":"Description","key":"description","hasDefaultValue":false,"operations":["set"]},"project":{"required":true,"schema":{"type":"project","system":"project"},"name":"Project","key":"project","hasDefaultValue":false,"operations":["set"],"allowedValues":[{"self":"https://defectdojo.atlassian.net/rest/api/2/project/10223","id":"10223","key":"TEST","name":"test","projectTypeKey":"software","simplified":true,"avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425?size=medium"}}]},"customfield_10021":{"required":false,"schema":{"type":"array","items":"option","custom":"com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes","customId":10021},"name":"Flagged","key":"customfield_10021","hasDefaultValue":false,"operations":["add","set","remove"],"allowedValues":[{"self":"https://defectdojo.atlassian.net/rest/api/2/customFieldOption/10019","value":"Impediment","id":"10019"}]},"customfield_10000":{"required":false,"schema":{"type":"any","custom":"com.atlassian.jira.plugins.jira-development-integration-plugin:devsummarycf","customId":10000},"name":"Development","key":"customfield_10000","hasDefaultValue":false,"operations":["set"]},"customfield_10001":{"required":false,"schema":{"type":"team","custom":"com.atlassian.jira.plugin.system.customfieldtypes:atlassian-team","customId":10001,"configuration":{"com.atlassian.jira.plugin.system.customfieldtypes:atlassian-team":true}},"name":"Team","key":"customfield_10001","autoCompleteUrl":"https://defectdojo.atlassian.net/gateway/api/v1/recommendations","hasDefaultValue":false,"operations":["set"]},"labels":{"required":false,"schema":{"type":"array","items":"string","system":"labels"},"name":"Labels","key":"labels","autoCompleteUrl":"https://defectdojo.atlassian.net/rest/api/1.0/labels/suggest?query=","hasDefaultValue":false,"operations":["add","set","remove"]},"customfield_10015":{"required":false,"schema":{"type":"date","custom":"com.atlassian.jira.plugin.system.customfieldtypes:datepicker","customId":10015},"name":"Start + date","key":"customfield_10015","hasDefaultValue":false,"operations":["set"]},"customfield_10019":{"required":false,"schema":{"type":"any","custom":"com.pyxis.greenhopper.jira:gh-lexo-rank","customId":10019},"name":"Rank","key":"customfield_10019","hasDefaultValue":false,"operations":["set"]},"attachment":{"required":false,"schema":{"type":"array","items":"attachment","system":"attachment"},"name":"Attachment","key":"attachment","hasDefaultValue":false,"operations":["set","copy"]},"duedate":{"required":false,"schema":{"type":"date","system":"duedate"},"name":"Due + date","key":"duedate","hasDefaultValue":false,"operations":["set"]},"issuelinks":{"required":false,"schema":{"type":"array","items":"issuelinks","system":"issuelinks"},"name":"Linked + Issues","key":"issuelinks","autoCompleteUrl":"https://defectdojo.atlassian.net/rest/api/2/issue/picker?currentProjectId=&showSubTaskParent=true&showSubTasks=true¤tIssueKey=null&query=","hasDefaultValue":false,"operations":["add","copy"]},"assignee":{"required":false,"schema":{"type":"user","system":"assignee"},"name":"Assignee","key":"assignee","autoCompleteUrl":"https://defectdojo.atlassian.net/rest/api/2/user/assignable/search?project=TEST&query=","hasDefaultValue":false,"operations":["set"]}}}]}]}' + headers: + Atl-Request-Id: + - 9f46f075-49ae-4f7b-9795-79709196be70 + Atl-Traceid: + - 9f46f07549ae4f7b979579709196be70 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Fri, 06 Feb 2026 18:56:43 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=65,cdn-upstream-fbl;dur=458,atl-edge;dur=371,atl-edge-internal;dur=20,atl-edge-upstream;dur=350,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN52-P2",cdn-rid;desc="Z9IPfJItEhDyff6AL4tHYM66MJmEBfz2utY4RBKkPnkWUvd3FNZDdA==",cdn-downstream-fbl;dur=462 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 77cfd797d789c3b8bc1b8f2f8a42a9c6.cloudfront.net (CloudFront) + Warning: + - 'The issue create meta endpoint has been deprecated. (Deprecation start date: + June 03, 2024)' + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - Z9IPfJItEhDyff6AL4tHYM66MJmEBfz2utY4RBKkPnkWUvd3FNZDdA== + X-Amz-Cf-Pop: + - DEN52-P2 + X-Arequestid: + - 1bcf6672f6d947cb60c3c7f539ec7e01 + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '350' + X-Ratelimit-Remaining: + - '349' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: '{"fields": {"project": {"key": "TEST"}, "issuetype": {"name": "Task"}, + "summary": "Zap2: Cookie Without Secure Flag", "description": "\n\n\n\n\n\n\n*Title*: + [Zap2: Cookie Without Secure Flag|http://localhost:8080/finding/239]\n\n*Defect + Dojo link:* http://localhost:8080/finding/239 (239)\n\n*Severity:* Low\n\n\n*Due + Date:* June 6, 2026\n\n\n\n*CWE:* [CWE-614|https://cwe.mitre.org/data/definitions/614.html]\n\n\n\n*CVE:* + Unknown\n\n\n\n\n*Product/Engagement/Test:* [Jira Product (Not Configured)|http://localhost:8080/product/5] + / [Jira Engagement|http://localhost:8080/engagement/8] / [ZAP Scan|http://localhost:8080/test/94]\n\n\n\n\n\n\n\n\n*Systems/Endpoints*:\n||System/Endpoint||Status||\n|https://mainsite.com/dashboard|Active|\n|https://mainsite.com|Active|\n\n\n\n\n\n\n\n\n*Description*:\nA + cookie has been set without the secure flag, which means that the cookie can\nbe + accessed via unencrypted connections.\n\n\n\n\n*Mitigation*:\nWhenever a cookie + contains sensitive information or is a session token, then\nit should always + be passed using an encrypted channel. Ensure that the secure\nflag is set for + cookies containing such sensitive information.\n\n\n\n\n\n*Impact*:\nNone\n\n\n\n\n\n*References*:\nhttp://www.owasp.org/index.php/Testing_for_cookies_attributes_(OWASP-SM-002)\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n", "duedate": "2026-06-06"}}' + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Length: + - '1374' + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: POST + uri: https://defectdojo.atlassian.net/rest/api/2/issue + response: + body: + string: '{"id":"25252","key":"TEST-8","self":"https://defectdojo.atlassian.net/rest/api/2/issue/25252"}' + headers: + Atl-Request-Id: + - a7bb1a64-949d-4c3b-ae29-cd826a82ae82 + Atl-Traceid: + - a7bb1a64949d4c3bae29cd826a82ae82 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Type: + - application/json;charset=UTF-8 + Date: + - Fri, 06 Feb 2026 18:56:44 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=67,cdn-upstream-fbl;dur=895,atl-edge;dur=803,atl-edge-internal;dur=23,atl-edge-upstream;dur=780,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN52-P1",cdn-rid;desc="5xdnWx5_J9tgn1Y5kUB_H48gL3DVAsUt28Unsn6MmfZVBC388RNjNQ==",cdn-downstream-fbl;dur=900 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 b8620ad7aedba28451ef92dbe52bd094.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - 5xdnWx5_J9tgn1Y5kUB_H48gL3DVAsUt28Unsn6MmfZVBC388RNjNQ== + X-Amz-Cf-Pop: + - DEN52-P1 + X-Arequestid: + - f11d64e20e8779ea9f26ed0b38789361 + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '200' + X-Ratelimit-Remaining: + - '199' + X-Xss-Protection: + - 1; mode=block + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/issue/TEST-8 + response: + body: + string: '{"expand":"renderedFields,names,schema,operations,editmeta,changelog,versionedRepresentations","id":"25252","self":"https://defectdojo.atlassian.net/rest/api/2/issue/25252","key":"TEST-8","fields":{"statuscategorychangedate":"2026-02-06T19:56:44.566+0100","issuetype":{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10213","id":"10213","description":"Tasks + track small, distinct pieces of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","subtask":false,"avatarId":10318,"entityId":"2e566caf-2038-46a7-94c3-c0d1cc9479bd","hierarchyLevel":0},"components":[],"timespent":null,"timeoriginalestimate":null,"project":{"self":"https://defectdojo.atlassian.net/rest/api/2/project/10223","id":"10223","key":"TEST","name":"test","projectTypeKey":"software","simplified":true,"avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425?size=medium"}},"description":"\n\n\n\n\n\n\n*Title*: + [Zap2: Cookie Without Secure Flag|http://localhost:8080/finding/239]\n\n*Defect + Dojo link:* http://localhost:8080/finding/239 (239)\n\n*Severity:* Low\n\n\n*Due + Date:* June 6, 2026\n\n\n\n*CWE:* [CWE-614|https://cwe.mitre.org/data/definitions/614.html]\n\n\n\n*CVE:* + Unknown\n\n\n\n\n*Product/Engagement/Test:* [Jira Product (Not Configured)|http://localhost:8080/product/5] + / [Jira Engagement|http://localhost:8080/engagement/8] / [ZAP Scan|http://localhost:8080/test/94]\n\n\n\n\n\n\n\n\n*Systems/Endpoints*:\n||System/Endpoint||Status||\n|https://mainsite.com/dashboard|Active|\n|https://mainsite.com|Active|\n\n\n\n\n\n\n\n\n*Description*:\nA + cookie has been set without the secure flag, which means that the cookie can\nbe + accessed via unencrypted connections.\n\n\n\n\n*Mitigation*:\nWhenever a cookie + contains sensitive information or is a session token, then\nit should always + be passed using an encrypted channel. Ensure that the secure\nflag is set + for cookies containing such sensitive information.\n\n\n\n\n\n*Impact*:\nNone\n\n\n\n\n\n*References*:\nhttp://www.owasp.org/index.php/Testing_for_cookies_attributes_(OWASP-SM-002)\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n","fixVersions":[],"aggregatetimespent":null,"statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"},"resolution":null,"timetracking":{},"customfield_10015":null,"security":null,"attachment":[],"aggregatetimeestimate":null,"resolutiondate":null,"workratio":-1,"summary":"Zap2: + Cookie Without Secure Flag","issuerestriction":{"issuerestrictions":{},"shouldDisplay":true},"watches":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/TEST-8/watchers","watchCount":1,"isWatching":true},"lastViewed":null,"creator":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"subtasks":[],"created":"2026-02-06T19:56:44.320+0100","customfield_10021":null,"reporter":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"aggregateprogress":{"progress":0,"total":0},"priority":{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/3","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/medium_new.svg","name":"Medium","id":"3"},"customfield_10001":null,"labels":[],"environment":null,"customfield_10019":"0|i014tb:","timeestimate":null,"aggregatetimeoriginalestimate":null,"versions":[],"duedate":"2026-06-06","progress":{"progress":0,"total":0},"issuelinks":[],"votes":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/TEST-8/votes","votes":0,"hasVoted":false},"comment":{"comments":[],"self":"https://defectdojo.atlassian.net/rest/api/2/issue/25252/comment","maxResults":0,"total":0,"startAt":0},"assignee":null,"worklog":{"startAt":0,"maxResults":20,"total":0,"worklogs":[]},"updated":"2026-02-06T19:56:44.401+0100","status":{"self":"https://defectdojo.atlassian.net/rest/api/2/status/10271","description":"","iconUrl":"https://defectdojo.atlassian.net/","name":"To + Do","id":"10271","statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"}}}}' + headers: + Atl-Request-Id: + - 5d32e712-6b26-4076-ada2-cfd0a1d7dbbc + Atl-Traceid: + - 5d32e7126b264076ada2cfd0a1d7dbbc + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Fri, 06 Feb 2026 18:56:45 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=0,cdn-upstream-fbl;dur=248,atl-edge;dur=224,atl-edge-internal;dur=18,atl-edge-upstream;dur=206,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN52-P2",cdn-rid;desc="WA8Xy769N6kr1KhjudbIZT2iDyfqjeSmA_VAmKWKVLxKtPCJ55Nm5w==",cdn-downstream-fbl;dur=253 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 3fddcbe99f78632bf14e5e80e6c14058.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - WA8Xy769N6kr1KhjudbIZT2iDyfqjeSmA_VAmKWKVLxKtPCJ55Nm5w== + X-Amz-Cf-Pop: + - DEN52-P2 + X-Arequestid: + - b2f1573a364f9cb503e9579aeae9403c + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '400' + X-Ratelimit-Remaining: + - '399' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/issue/25252 + response: + body: + string: '{"expand":"renderedFields,names,schema,operations,editmeta,changelog,versionedRepresentations","id":"25252","self":"https://defectdojo.atlassian.net/rest/api/2/issue/25252","key":"TEST-8","fields":{"statuscategorychangedate":"2026-02-06T19:56:44.566+0100","issuetype":{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10213","id":"10213","description":"Tasks + track small, distinct pieces of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","subtask":false,"avatarId":10318,"entityId":"2e566caf-2038-46a7-94c3-c0d1cc9479bd","hierarchyLevel":0},"components":[],"timespent":null,"timeoriginalestimate":null,"project":{"self":"https://defectdojo.atlassian.net/rest/api/2/project/10223","id":"10223","key":"TEST","name":"test","projectTypeKey":"software","simplified":true,"avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425?size=medium"}},"description":"\n\n\n\n\n\n\n*Title*: + [Zap2: Cookie Without Secure Flag|http://localhost:8080/finding/239]\n\n*Defect + Dojo link:* http://localhost:8080/finding/239 (239)\n\n*Severity:* Low\n\n\n*Due + Date:* June 6, 2026\n\n\n\n*CWE:* [CWE-614|https://cwe.mitre.org/data/definitions/614.html]\n\n\n\n*CVE:* + Unknown\n\n\n\n\n*Product/Engagement/Test:* [Jira Product (Not Configured)|http://localhost:8080/product/5] + / [Jira Engagement|http://localhost:8080/engagement/8] / [ZAP Scan|http://localhost:8080/test/94]\n\n\n\n\n\n\n\n\n*Systems/Endpoints*:\n||System/Endpoint||Status||\n|https://mainsite.com/dashboard|Active|\n|https://mainsite.com|Active|\n\n\n\n\n\n\n\n\n*Description*:\nA + cookie has been set without the secure flag, which means that the cookie can\nbe + accessed via unencrypted connections.\n\n\n\n\n*Mitigation*:\nWhenever a cookie + contains sensitive information or is a session token, then\nit should always + be passed using an encrypted channel. Ensure that the secure\nflag is set + for cookies containing such sensitive information.\n\n\n\n\n\n*Impact*:\nNone\n\n\n\n\n\n*References*:\nhttp://www.owasp.org/index.php/Testing_for_cookies_attributes_(OWASP-SM-002)\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n","fixVersions":[],"aggregatetimespent":null,"statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"},"resolution":null,"timetracking":{},"customfield_10015":null,"security":null,"attachment":[],"aggregatetimeestimate":null,"resolutiondate":null,"workratio":-1,"summary":"Zap2: + Cookie Without Secure Flag","issuerestriction":{"issuerestrictions":{},"shouldDisplay":true},"watches":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/TEST-8/watchers","watchCount":1,"isWatching":true},"lastViewed":null,"creator":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"subtasks":[],"created":"2026-02-06T19:56:44.320+0100","customfield_10021":null,"reporter":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"aggregateprogress":{"progress":0,"total":0},"priority":{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/3","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/medium_new.svg","name":"Medium","id":"3"},"customfield_10001":null,"labels":[],"environment":null,"customfield_10019":"0|i014tb:","timeestimate":null,"aggregatetimeoriginalestimate":null,"versions":[],"duedate":"2026-06-06","progress":{"progress":0,"total":0},"issuelinks":[],"votes":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/TEST-8/votes","votes":0,"hasVoted":false},"comment":{"comments":[],"self":"https://defectdojo.atlassian.net/rest/api/2/issue/25252/comment","maxResults":0,"total":0,"startAt":0},"assignee":null,"worklog":{"startAt":0,"maxResults":20,"total":0,"worklogs":[]},"updated":"2026-02-06T19:56:44.401+0100","status":{"self":"https://defectdojo.atlassian.net/rest/api/2/status/10271","description":"","iconUrl":"https://defectdojo.atlassian.net/","name":"To + Do","id":"10271","statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"}}}}' + headers: + Atl-Request-Id: + - 21f77e22-6deb-468a-a119-77c08abe74c1 + Atl-Traceid: + - 21f77e226deb468aa11977c08abe74c1 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Fri, 06 Feb 2026 18:56:45 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=64,cdn-upstream-fbl;dur=331,atl-edge;dur=243,atl-edge-internal;dur=26,atl-edge-upstream;dur=217,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN52-P1",cdn-rid;desc="NkHd6--z-7Yii87YYRhg2UuRclj9SlRTrswxIhQlqwcTp5-CNEAt_g==",cdn-downstream-fbl;dur=335 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 89771419757f75b08f6c8fd411f8ef54.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - NkHd6--z-7Yii87YYRhg2UuRclj9SlRTrswxIhQlqwcTp5-CNEAt_g== + X-Amz-Cf-Pop: + - DEN52-P1 + X-Arequestid: + - 56a63b1825d52ad9847294ccd10c525c + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '400' + X-Ratelimit-Remaining: + - '398' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: '{"description": "Event test_added has occurred.", "title": "Test created + for Jira Product (Not Configured): Jira Engagement: ZAP Scan", "user": null, + "url_ui": "http://localhost:8080/test/94", "url_api": "http://localhost:8080/api/v2/tests/94/", + "product_type": {"name": "Some Product Type", "id": 5, "url_ui": "http://localhost:8080/product/type/5", + "url_api": "http://localhost:8080/api/v2/product_types/5/"}, "product": {"name": + "Jira Product (Not Configured)", "id": 5, "url_ui": "http://localhost:8080/product/5", + "url_api": "http://localhost:8080/api/v2/products/5/"}, "engagement": {"name": + "Jira Engagement", "id": 8, "url_ui": "http://localhost:8080/engagement/8", + "url_api": "http://localhost:8080/api/v2/engagements/8/"}, "test": {"title": + null, "id": 94, "url_ui": "http://localhost:8080/test/94", "url_api": "http://localhost:8080/api/v2/tests/94/"}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Auth: + - Token xxx + Connection: + - keep-alive + Content-Length: + - '863' + Content-Type: + - application/json + User-Agent: + - DefectDojo-2.55.1 + X-DefectDojo-Event: + - test_added + X-DefectDojo-Instance: + - http://localhost:8080 + method: POST + uri: http://webhook.endpoint:8080/post + response: + body: + string: "{\n \"args\": {},\n \"headers\": {\n \"Accept\": [\n \"application/json\"\n + \ ],\n \"Accept-Encoding\": [\n \"gzip, deflate\"\n ],\n \"Auth\": + [\n \"Token xxx\"\n ],\n \"Connection\": [\n \"keep-alive\"\n + \ ],\n \"Content-Length\": [\n \"863\"\n ],\n \"Content-Type\": + [\n \"application/json\"\n ],\n \"Host\": [\n \"webhook.endpoint:8080\"\n + \ ],\n \"User-Agent\": [\n \"DefectDojo-2.55.1\"\n ],\n \"X-Defectdojo-Event\": + [\n \"test_added\"\n ],\n \"X-Defectdojo-Instance\": [\n \"http://localhost:8080\"\n + \ ]\n },\n \"method\": \"POST\",\n \"origin\": \"172.18.0.6\",\n \"url\": + \"http://webhook.endpoint:8080/post\",\n \"data\": \"{\\\"description\\\": + \\\"Event test_added has occurred.\\\", \\\"title\\\": \\\"Test created for + Jira Product (Not Configured): Jira Engagement: ZAP Scan\\\", \\\"user\\\": + null, \\\"url_ui\\\": \\\"http://localhost:8080/test/94\\\", \\\"url_api\\\": + \\\"http://localhost:8080/api/v2/tests/94/\\\", \\\"product_type\\\": {\\\"name\\\": + \\\"Some Product Type\\\", \\\"id\\\": 5, \\\"url_ui\\\": \\\"http://localhost:8080/product/type/5\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/product_types/5/\\\"}, \\\"product\\\": + {\\\"name\\\": \\\"Jira Product (Not Configured)\\\", \\\"id\\\": 5, \\\"url_ui\\\": + \\\"http://localhost:8080/product/5\\\", \\\"url_api\\\": \\\"http://localhost:8080/api/v2/products/5/\\\"}, + \\\"engagement\\\": {\\\"name\\\": \\\"Jira Engagement\\\", \\\"id\\\": 8, + \\\"url_ui\\\": \\\"http://localhost:8080/engagement/8\\\", \\\"url_api\\\": + \\\"http://localhost:8080/api/v2/engagements/8/\\\"}, \\\"test\\\": {\\\"title\\\": + null, \\\"id\\\": 94, \\\"url_ui\\\": \\\"http://localhost:8080/test/94\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/tests/94/\\\"}}\",\n \"files\": + {},\n \"form\": {},\n \"json\": {\n \"description\": \"Event test_added + has occurred.\",\n \"engagement\": {\n \"id\": 8,\n \"name\": + \"Jira Engagement\",\n \"url_api\": \"http://localhost:8080/api/v2/engagements/8/\",\n + \ \"url_ui\": \"http://localhost:8080/engagement/8\"\n },\n \"product\": + {\n \"id\": 5,\n \"name\": \"Jira Product (Not Configured)\",\n + \ \"url_api\": \"http://localhost:8080/api/v2/products/5/\",\n \"url_ui\": + \"http://localhost:8080/product/5\"\n },\n \"product_type\": {\n \"id\": + 5,\n \"name\": \"Some Product Type\",\n \"url_api\": \"http://localhost:8080/api/v2/product_types/5/\",\n + \ \"url_ui\": \"http://localhost:8080/product/type/5\"\n },\n \"test\": + {\n \"id\": 94,\n \"title\": null,\n \"url_api\": \"http://localhost:8080/api/v2/tests/94/\",\n + \ \"url_ui\": \"http://localhost:8080/test/94\"\n },\n \"title\": + \"Test created for Jira Product (Not Configured): Jira Engagement: ZAP Scan\",\n + \ \"url_api\": \"http://localhost:8080/api/v2/tests/94/\",\n \"url_ui\": + \"http://localhost:8080/test/94\",\n \"user\": null\n }\n}\n" + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Origin: + - '*' + Content-Type: + - application/json; charset=utf-8 + Date: + - Fri, 06 Feb 2026 18:56:45 GMT + Transfer-Encoding: + - chunked + status: + code: 200 + message: OK +- request: + body: '{"description": "Event scan_added has occurred.", "title": "Created/Updated + 2 findings for Jira Product (Not Configured): Jira Engagement: ZAP Scan", "user": + null, "url_ui": "http://localhost:8080/test/94", "url_api": "http://localhost:8080/api/v2/tests/94/", + "product_type": {"name": "Some Product Type", "id": 5, "url_ui": "http://localhost:8080/product/type/5", + "url_api": "http://localhost:8080/api/v2/product_types/5/"}, "product": {"name": + "Jira Product (Not Configured)", "id": 5, "url_ui": "http://localhost:8080/product/5", + "url_api": "http://localhost:8080/api/v2/products/5/"}, "engagement": {"name": + "Jira Engagement", "id": 8, "url_ui": "http://localhost:8080/engagement/8", + "url_api": "http://localhost:8080/api/v2/engagements/8/"}, "test": {"title": + null, "id": 94, "url_ui": "http://localhost:8080/test/94", "url_api": "http://localhost:8080/api/v2/tests/94/"}, + "finding_count": 2, "findings": {"new": [{"id": 238, "title": "Zap1: Cookie + Without Secure Flag", "severity": "Low", "url_ui": "http://localhost:8080/finding/238", + "url_api": "http://localhost:8080/api/v2/findings/238/"}, {"id": 239, "title": + "Zap2: Cookie Without Secure Flag", "severity": "Low", "url_ui": "http://localhost:8080/finding/239", + "url_api": "http://localhost:8080/api/v2/findings/239/"}], "reactivated": [], + "mitigated": [], "untouched": []}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Auth: + - Token xxx + Connection: + - keep-alive + Content-Length: + - '1335' + Content-Type: + - application/json + User-Agent: + - DefectDojo-2.55.1 + X-DefectDojo-Event: + - scan_added + X-DefectDojo-Instance: + - http://localhost:8080 + method: POST + uri: http://webhook.endpoint:8080/post + response: + body: + string: "{\n \"args\": {},\n \"headers\": {\n \"Accept\": [\n \"application/json\"\n + \ ],\n \"Accept-Encoding\": [\n \"gzip, deflate\"\n ],\n \"Auth\": + [\n \"Token xxx\"\n ],\n \"Connection\": [\n \"keep-alive\"\n + \ ],\n \"Content-Length\": [\n \"1335\"\n ],\n \"Content-Type\": + [\n \"application/json\"\n ],\n \"Host\": [\n \"webhook.endpoint:8080\"\n + \ ],\n \"User-Agent\": [\n \"DefectDojo-2.55.1\"\n ],\n \"X-Defectdojo-Event\": + [\n \"scan_added\"\n ],\n \"X-Defectdojo-Instance\": [\n \"http://localhost:8080\"\n + \ ]\n },\n \"method\": \"POST\",\n \"origin\": \"172.18.0.6\",\n \"url\": + \"http://webhook.endpoint:8080/post\",\n \"data\": \"{\\\"description\\\": + \\\"Event scan_added has occurred.\\\", \\\"title\\\": \\\"Created/Updated + 2 findings for Jira Product (Not Configured): Jira Engagement: ZAP Scan\\\", + \\\"user\\\": null, \\\"url_ui\\\": \\\"http://localhost:8080/test/94\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/tests/94/\\\", \\\"product_type\\\": + {\\\"name\\\": \\\"Some Product Type\\\", \\\"id\\\": 5, \\\"url_ui\\\": \\\"http://localhost:8080/product/type/5\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/product_types/5/\\\"}, \\\"product\\\": + {\\\"name\\\": \\\"Jira Product (Not Configured)\\\", \\\"id\\\": 5, \\\"url_ui\\\": + \\\"http://localhost:8080/product/5\\\", \\\"url_api\\\": \\\"http://localhost:8080/api/v2/products/5/\\\"}, + \\\"engagement\\\": {\\\"name\\\": \\\"Jira Engagement\\\", \\\"id\\\": 8, + \\\"url_ui\\\": \\\"http://localhost:8080/engagement/8\\\", \\\"url_api\\\": + \\\"http://localhost:8080/api/v2/engagements/8/\\\"}, \\\"test\\\": {\\\"title\\\": + null, \\\"id\\\": 94, \\\"url_ui\\\": \\\"http://localhost:8080/test/94\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/tests/94/\\\"}, \\\"finding_count\\\": + 2, \\\"findings\\\": {\\\"new\\\": [{\\\"id\\\": 238, \\\"title\\\": \\\"Zap1: + Cookie Without Secure Flag\\\", \\\"severity\\\": \\\"Low\\\", \\\"url_ui\\\": + \\\"http://localhost:8080/finding/238\\\", \\\"url_api\\\": \\\"http://localhost:8080/api/v2/findings/238/\\\"}, + {\\\"id\\\": 239, \\\"title\\\": \\\"Zap2: Cookie Without Secure Flag\\\", + \\\"severity\\\": \\\"Low\\\", \\\"url_ui\\\": \\\"http://localhost:8080/finding/239\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/findings/239/\\\"}], \\\"reactivated\\\": + [], \\\"mitigated\\\": [], \\\"untouched\\\": []}}\",\n \"files\": {},\n + \ \"form\": {},\n \"json\": {\n \"description\": \"Event scan_added has + occurred.\",\n \"engagement\": {\n \"id\": 8,\n \"name\": \"Jira + Engagement\",\n \"url_api\": \"http://localhost:8080/api/v2/engagements/8/\",\n + \ \"url_ui\": \"http://localhost:8080/engagement/8\"\n },\n \"finding_count\": + 2,\n \"findings\": {\n \"mitigated\": [],\n \"new\": [\n {\n + \ \"id\": 238,\n \"severity\": \"Low\",\n \"title\": + \"Zap1: Cookie Without Secure Flag\",\n \"url_api\": \"http://localhost:8080/api/v2/findings/238/\",\n + \ \"url_ui\": \"http://localhost:8080/finding/238\"\n },\n + \ {\n \"id\": 239,\n \"severity\": \"Low\",\n \"title\": + \"Zap2: Cookie Without Secure Flag\",\n \"url_api\": \"http://localhost:8080/api/v2/findings/239/\",\n + \ \"url_ui\": \"http://localhost:8080/finding/239\"\n }\n ],\n + \ \"reactivated\": [],\n \"untouched\": []\n },\n \"product\": + {\n \"id\": 5,\n \"name\": \"Jira Product (Not Configured)\",\n + \ \"url_api\": \"http://localhost:8080/api/v2/products/5/\",\n \"url_ui\": + \"http://localhost:8080/product/5\"\n },\n \"product_type\": {\n \"id\": + 5,\n \"name\": \"Some Product Type\",\n \"url_api\": \"http://localhost:8080/api/v2/product_types/5/\",\n + \ \"url_ui\": \"http://localhost:8080/product/type/5\"\n },\n \"test\": + {\n \"id\": 94,\n \"title\": null,\n \"url_api\": \"http://localhost:8080/api/v2/tests/94/\",\n + \ \"url_ui\": \"http://localhost:8080/test/94\"\n },\n \"title\": + \"Created/Updated 2 findings for Jira Product (Not Configured): Jira Engagement: + ZAP Scan\",\n \"url_api\": \"http://localhost:8080/api/v2/tests/94/\",\n + \ \"url_ui\": \"http://localhost:8080/test/94\",\n \"user\": null\n }\n}\n" + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Origin: + - '*' + Content-Type: + - application/json; charset=utf-8 + Date: + - Fri, 06 Feb 2026 18:56:45 GMT + Transfer-Encoding: + - chunked + status: + code: 200 + message: OK +version: 1 diff --git a/unittests/vcr/jira/JIRAImportAndPushTestApi.test_keep_sync_push_finding_groups_then_reimport_empty_file_with_no_push_change_priority.yaml b/unittests/vcr/jira/JIRAImportAndPushTestApi.test_keep_sync_push_finding_groups_then_reimport_empty_file_with_no_push_change_priority.yaml new file mode 100644 index 00000000000..838a58d1f24 --- /dev/null +++ b/unittests/vcr/jira/JIRAImportAndPushTestApi.test_keep_sync_push_finding_groups_then_reimport_empty_file_with_no_push_change_priority.yaml @@ -0,0 +1,2445 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/serverInfo + response: + body: + string: '{"baseUrl":"https://defectdojo.atlassian.net","displayUrl":"https://defectdojo.atlassian.net","displayUrlServicedeskHelpCenter":"https://defectdojo.atlassian.net","displayUrlCSMHelpSeeker":"https://defectdojo.atlassian.net","displayUrlConfluence":"https://defectdojo.atlassian.net","version":"1001.0.0-SNAPSHOT","versionNumbers":[1001,0,0],"deploymentType":"Cloud","buildNumber":100290,"buildDate":"2026-02-06T12:38:29.000+0100","serverTime":"2026-02-07T01:53:00.252+0100","scmInfo":"9d700605f271b9e38f3e73c4116a686dae8d11d7","serverTitle":"Jira","defaultLocale":{"locale":"en_US"},"serverTimeZone":"Etc/UTC"}' + headers: + Atl-Request-Id: + - 2391f3d1-da17-44f0-9361-34af9690344c + Atl-Traceid: + - 2391f3d1da1744f0936134af9690344c + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 00:53:00 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=66,cdn-upstream-fbl;dur=307,atl-edge;dur=219,atl-edge-internal;dur=15,atl-edge-upstream;dur=204,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN53-P2",cdn-rid;desc="9nUy7AxZqVbjAOdzq1NDVmCLLN9mI34_X2OyY9eC5ByupeD_M1yWkw==",cdn-downstream-fbl;dur=311 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 aa7c02138e28876292fe4d4b8f22d312.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - 9nUy7AxZqVbjAOdzq1NDVmCLLN9mI34_X2OyY9eC5ByupeD_M1yWkw== + X-Amz-Cf-Pop: + - DEN53-P2 + X-Arequestid: + - 4176581cf75cd001dd10d597c9164cd2 + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '350' + X-Ratelimit-Remaining: + - '349' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/issue/createmeta?projectKeys=NTEST&issuetypeNames=Task&expand=projects.issuetypes.fields + response: + body: + string: '{"expand":"projects","projects":[{"expand":"issuetypes","self":"https://defectdojo.atlassian.net/rest/api/2/project/10000","id":"10000","key":"NTEST","name":"Unittests","avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=medium"},"issuetypes":[{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10002","id":"10002","description":"A + small, distinct piece of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","untranslatedName":"Task","subtask":false,"hierarchyLevel":0,"expand":"fields","fields":{"summary":{"required":true,"schema":{"type":"string","system":"summary"},"name":"Summary","key":"summary","hasDefaultValue":false,"operations":["set"]},"issuetype":{"required":true,"schema":{"type":"issuetype","system":"issuetype"},"name":"Issue + Type","key":"issuetype","hasDefaultValue":false,"operations":[],"allowedValues":[{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10002","id":"10002","description":"A + small, distinct piece of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","subtask":false,"avatarId":10318,"hierarchyLevel":0}]},"parent":{"required":false,"schema":{"type":"issuelink","system":"parent"},"name":"Parent","key":"parent","hasDefaultValue":false,"operations":["set"]},"components":{"required":false,"schema":{"type":"array","items":"component","system":"components"},"name":"Components","key":"components","hasDefaultValue":false,"operations":["add","set","remove"],"allowedValues":[]},"description":{"required":false,"schema":{"type":"string","system":"description"},"name":"Description","key":"description","hasDefaultValue":false,"operations":["set"]},"project":{"required":true,"schema":{"type":"project","system":"project"},"name":"Project","key":"project","hasDefaultValue":false,"operations":["set"],"allowedValues":[{"self":"https://defectdojo.atlassian.net/rest/api/2/project/10000","id":"10000","key":"NTEST","name":"Unittests","projectTypeKey":"software","simplified":false,"avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=medium"}}]},"fixVersions":{"required":false,"schema":{"type":"array","items":"version","system":"fixVersions"},"name":"Fix + versions","key":"fixVersions","hasDefaultValue":false,"operations":["set","add","remove"],"allowedValues":[]},"priority":{"required":false,"schema":{"type":"priority","system":"priority"},"name":"Priority","key":"priority","hasDefaultValue":true,"operations":["set"],"allowedValues":[{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/1","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/highest_new.svg","name":"Highest","id":"1"},{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/2","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/high_new.svg","name":"High","id":"2"},{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/3","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/medium_new.svg","name":"Medium","id":"3"},{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/4","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/low_new.svg","name":"Low","id":"4"},{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/5","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/lowest_new.svg","name":"Lowest","id":"5"}],"defaultValue":{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/3","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/medium_new.svg","name":"Medium","id":"3"}},"customfield_10014":{"required":false,"schema":{"type":"any","custom":"com.pyxis.greenhopper.jira:gh-epic-link","customId":10014},"name":"Epic + Link","key":"customfield_10014","hasDefaultValue":false,"operations":["set"]},"labels":{"required":false,"schema":{"type":"array","items":"string","system":"labels"},"name":"Labels","key":"labels","autoCompleteUrl":"https://defectdojo.atlassian.net/rest/api/1.0/labels/suggest?query=","hasDefaultValue":false,"operations":["add","set","remove"]},"attachment":{"required":false,"schema":{"type":"array","items":"attachment","system":"attachment"},"name":"Attachment","key":"attachment","hasDefaultValue":false,"operations":["set","copy"]},"issuelinks":{"required":false,"schema":{"type":"array","items":"issuelinks","system":"issuelinks"},"name":"Linked + Issues","key":"issuelinks","autoCompleteUrl":"https://defectdojo.atlassian.net/rest/api/2/issue/picker?currentProjectId=&showSubTaskParent=true&showSubTasks=true¤tIssueKey=null&query=","hasDefaultValue":false,"operations":["add","copy"]},"assignee":{"required":false,"schema":{"type":"user","system":"assignee"},"name":"Assignee","key":"assignee","autoCompleteUrl":"https://defectdojo.atlassian.net/rest/api/2/user/assignable/search?project=NTEST&query=","hasDefaultValue":false,"operations":["set"]}}}]}]}' + headers: + Atl-Request-Id: + - 0c109409-70b5-4d96-acf6-c715ca2a022b + Atl-Traceid: + - 0c10940970b54d96acf6c715ca2a022b + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 00:53:00 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=67,cdn-upstream-fbl;dur=514,atl-edge;dur=424,atl-edge-internal;dur=18,atl-edge-upstream;dur=405,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN52-P1",cdn-rid;desc="taq0WP7E1aL3Egfs_aXofySoOUKZxiE3BGpmPYRieeIPfuBknbuuGg==",cdn-downstream-fbl;dur=519 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 007f474c20bf8a7a3cce4825eb52f2c8.cloudfront.net (CloudFront) + Warning: + - 'The issue create meta endpoint has been deprecated. (Deprecation start date: + June 03, 2024)' + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - taq0WP7E1aL3Egfs_aXofySoOUKZxiE3BGpmPYRieeIPfuBknbuuGg== + X-Amz-Cf-Pop: + - DEN52-P1 + X-Arequestid: + - 50948338b1a33d78a31b89d7b9f7d671 + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '350' + X-Ratelimit-Remaining: + - '349' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: '{"fields": {"project": {"key": "NTEST"}, "issuetype": {"name": "Task"}, + "summary": "Findings in: Component A", "description": "\n\n\n\n\n\n\n\nA group + of Findings has been pushed to JIRA to be investigated and fixed:\n\nh2. Group\n*Group*: + [Findings in: Component A|http://localhost:8080/finding_group/79] in [Security + How-to|http://localhost:8080/product/2] / [1st Quarter Engagement|http://localhost:8080/engagement/1] + / [Generic Findings Import|http://localhost:8080/test/92]\n\nh2. Summary\n*Severity:* + Critical *Due Date:* Dec. 8, 2025 \n\nFindings matching the Active, Verified + and Severity criteria:\n|| Severity || CVE || CWE || Component || Version || + Title || Status ||\n|Critical|None|[0|]|Component A|None|[Critical|http://localhost:8080/finding/234]|Active, + Verified|\n|High|None|[0|]|Component A|None|[High|http://localhost:8080/finding/235]|Active, + Verified|\n\nFindings *not* matching the Active, Verified and Severity criteria:\n|| + Severity || CVE || CWE || Component || Version || Title || Status ||\n\n\n\n\n\n\n\n\n\n\nh1. + Findings\n\nh3. [Critical|http://localhost:8080/finding/234]\n*Defect Dojo link:* + http://localhost:8080/finding/234 (234)\n*Severity:* Critical\n *Due Date:* + Dec. 8, 2025 \n\n*CVE:* Unknown\n\n\n\n\n\n\n*Description*:\ntest\n\n\n\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n\n\n\nh1. Findings\n\nh3. [High|http://localhost:8080/finding/235]\n*Defect + Dojo link:* http://localhost:8080/finding/235 (235)\n*Severity:* High\n *Due + Date:* Dec. 31, 2025 \n\n*CVE:* Unknown\n\n\n\n\n\n\n*Description*:\ntest\n\n\n\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n", "priority": {"name": "Highest"}}}' + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Length: + - '1649' + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: POST + uri: https://defectdojo.atlassian.net/rest/api/2/issue + response: + body: + string: '{"id":"25285","key":"NTEST-3244","self":"https://defectdojo.atlassian.net/rest/api/2/issue/25285"}' + headers: + Atl-Request-Id: + - ece3bb1c-9ad0-4d8d-9d96-f151f3f1e849 + Atl-Traceid: + - ece3bb1c9ad04d8d9d96f151f3f1e849 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 00:53:01 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=66,cdn-upstream-fbl;dur=883,atl-edge;dur=794,atl-edge-internal;dur=14,atl-edge-upstream;dur=780,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN53-P1",cdn-rid;desc="TZmX2h9kbeL8J5FLgICoBuIB_QGNomSHnL1t3OC2jJ-vLQiGnG2H5g==",cdn-downstream-fbl;dur=888 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 d99e1939ecc9ba777a9fa6749a5b276a.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - TZmX2h9kbeL8J5FLgICoBuIB_QGNomSHnL1t3OC2jJ-vLQiGnG2H5g== + X-Amz-Cf-Pop: + - DEN53-P1 + X-Arequestid: + - e2a5fe0496017609f95ea4148a24a666 + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '200' + X-Ratelimit-Remaining: + - '199' + X-Xss-Protection: + - 1; mode=block + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3244 + response: + body: + string: '{"expand":"renderedFields,names,schema,operations,editmeta,changelog,versionedRepresentations,customfield_10010.requestTypePractice","id":"25285","self":"https://defectdojo.atlassian.net/rest/api/2/issue/25285","key":"NTEST-3244","fields":{"statuscategorychangedate":"2026-02-07T01:53:01.739+0100","fixVersions":[],"statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"},"resolution":null,"lastViewed":null,"customfield_10060":null,"customfield_10061":null,"customfield_10062":null,"customfield_10063":null,"customfield_10064":null,"customfield_10065":null,"customfield_10066":null,"priority":{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/1","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/highest_new.svg","name":"Highest","id":"1"},"labels":[],"timeestimate":null,"aggregatetimeoriginalestimate":null,"versions":[],"issuelinks":[],"assignee":null,"status":{"self":"https://defectdojo.atlassian.net/rest/api/2/status/10000","description":"","iconUrl":"https://defectdojo.atlassian.net/","name":"Backlog","id":"10000","statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"}},"components":[],"customfield_10050":null,"customfield_10051":null,"customfield_10053":null,"customfield_10055":null,"customfield_10056":null,"customfield_10057":null,"customfield_10058":null,"customfield_10059":null,"customfield_10049":null,"aggregatetimeestimate":null,"creator":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"subtasks":[],"customfield_10040":null,"customfield_10041":null,"customfield_10042":null,"reporter":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"customfield_10043":null,"aggregateprogress":{"progress":0,"total":0},"customfield_10044":null,"customfield_10045":null,"customfield_10046":null,"customfield_10047":null,"customfield_10048":null,"customfield_10038":null,"customfield_10039":null,"progress":{"progress":0,"total":0},"votes":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3244/votes","votes":0,"hasVoted":false},"worklog":{"startAt":0,"maxResults":20,"total":0,"worklogs":[]},"issuetype":{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10002","id":"10002","description":"A + small, distinct piece of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","subtask":false,"avatarId":10318,"hierarchyLevel":0},"timespent":null,"customfield_10030":null,"project":{"self":"https://defectdojo.atlassian.net/rest/api/2/project/10000","id":"10000","key":"NTEST","name":"Unittests","projectTypeKey":"software","simplified":false,"avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=medium"}},"customfield_10031":null,"customfield_10032":null,"customfield_10033":null,"aggregatetimespent":null,"customfield_10035":null,"customfield_10036":null,"customfield_10037":null,"customfield_10027":null,"customfield_10028":null,"customfield_10029":null,"resolutiondate":null,"workratio":-1,"watches":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3244/watchers","watchCount":1,"isWatching":true},"created":"2026-02-07T01:53:01.434+0100","customfield_10020":null,"customfield_10021":null,"customfield_10022":null,"customfield_10023":null,"customfield_10016":null,"customfield_10017":null,"customfield_10019":"0|i0150n:","updated":"2026-02-07T01:53:01.531+0100","customfield_10090":null,"timeoriginalestimate":null,"description":"\n\n\n\n\n\n\n\nA + group of Findings has been pushed to JIRA to be investigated and fixed:\n\nh2. + Group\n*Group*: [Findings in: Component A|http://localhost:8080/finding_group/79] + in [Security How-to|http://localhost:8080/product/2] / [1st Quarter Engagement|http://localhost:8080/engagement/1] + / [Generic Findings Import|http://localhost:8080/test/92]\n\nh2. Summary\n*Severity:* + Critical *Due Date:* Dec. 8, 2025 \n\nFindings matching the Active, Verified + and Severity criteria:\n|| Severity || CVE || CWE || Component || Version + || Title || Status ||\n|Critical|None|[0|]|Component A|None|[Critical|http://localhost:8080/finding/234]|Active, + Verified|\n|High|None|[0|]|Component A|None|[High|http://localhost:8080/finding/235]|Active, + Verified|\n\nFindings *not* matching the Active, Verified and Severity criteria:\n|| + Severity || CVE || CWE || Component || Version || Title || Status ||\n\n\n\n\n\n\n\n\n\n\nh1. + Findings\n\nh3. [Critical|http://localhost:8080/finding/234]\n*Defect Dojo + link:* http://localhost:8080/finding/234 (234)\n*Severity:* Critical\n *Due + Date:* Dec. 8, 2025 \n\n*CVE:* Unknown\n\n\n\n\n\n\n*Description*:\ntest\n\n\n\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n\n\n\nh1. Findings\n\nh3. [High|http://localhost:8080/finding/235]\n*Defect + Dojo link:* http://localhost:8080/finding/235 (235)\n*Severity:* High\n *Due + Date:* Dec. 31, 2025 \n\n*CVE:* Unknown\n\n\n\n\n\n\n*Description*:\ntest\n\n\n\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n","customfield_10010":null,"customfield_10014":null,"timetracking":{},"customfield_10015":null,"customfield_10005":null,"customfield_10006":null,"customfield_10007":null,"security":null,"customfield_10008":null,"attachment":[],"customfield_10009":null,"summary":"Findings + in: Component A","customfield_10001":null,"customfield_10002":[],"customfield_10123":null,"customfield_10003":null,"customfield_10004":null,"environment":null,"duedate":null,"comment":{"comments":[],"self":"https://defectdojo.atlassian.net/rest/api/2/issue/25285/comment","maxResults":0,"total":0,"startAt":0}}}' + headers: + Atl-Request-Id: + - 58d8afd3-17c4-4663-878b-40f7eb2d0b26 + Atl-Traceid: + - 58d8afd317c44663878b40f7eb2d0b26 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 00:53:02 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=67,cdn-upstream-fbl;dur=583,atl-edge;dur=492,atl-edge-internal;dur=16,atl-edge-upstream;dur=476,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN53-P1",cdn-rid;desc="ab6aD-20JsB63sowvoTUTdUL1hOatYH9o71jxBVYmqWqXDpQk8vmVg==",cdn-downstream-fbl;dur=587 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 cb4937748c19bcccb40a5a5875f01552.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - ab6aD-20JsB63sowvoTUTdUL1hOatYH9o71jxBVYmqWqXDpQk8vmVg== + X-Amz-Cf-Pop: + - DEN53-P1 + X-Arequestid: + - 61c901f12c2429c970409a081afc0025 + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '400' + X-Ratelimit-Remaining: + - '399' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/issue/25285 + response: + body: + string: '{"expand":"renderedFields,names,schema,operations,editmeta,changelog,versionedRepresentations,customfield_10010.requestTypePractice","id":"25285","self":"https://defectdojo.atlassian.net/rest/api/2/issue/25285","key":"NTEST-3244","fields":{"statuscategorychangedate":"2026-02-07T01:53:01.739+0100","fixVersions":[],"statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"},"resolution":null,"lastViewed":null,"customfield_10060":null,"customfield_10061":null,"customfield_10062":null,"customfield_10063":null,"customfield_10064":null,"customfield_10065":null,"customfield_10066":null,"priority":{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/1","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/highest_new.svg","name":"Highest","id":"1"},"labels":[],"timeestimate":null,"aggregatetimeoriginalestimate":null,"versions":[],"issuelinks":[],"assignee":null,"status":{"self":"https://defectdojo.atlassian.net/rest/api/2/status/10000","description":"","iconUrl":"https://defectdojo.atlassian.net/","name":"Backlog","id":"10000","statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"}},"components":[],"customfield_10050":null,"customfield_10051":null,"customfield_10053":null,"customfield_10055":null,"customfield_10056":null,"customfield_10057":null,"customfield_10058":null,"customfield_10059":null,"customfield_10049":null,"aggregatetimeestimate":null,"creator":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"subtasks":[],"customfield_10040":null,"customfield_10041":null,"customfield_10042":null,"reporter":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"customfield_10043":null,"aggregateprogress":{"progress":0,"total":0},"customfield_10044":null,"customfield_10045":null,"customfield_10046":null,"customfield_10047":null,"customfield_10048":null,"customfield_10038":null,"customfield_10039":null,"progress":{"progress":0,"total":0},"votes":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3244/votes","votes":0,"hasVoted":false},"worklog":{"startAt":0,"maxResults":20,"total":0,"worklogs":[]},"issuetype":{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10002","id":"10002","description":"A + small, distinct piece of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","subtask":false,"avatarId":10318,"hierarchyLevel":0},"timespent":null,"customfield_10030":null,"project":{"self":"https://defectdojo.atlassian.net/rest/api/2/project/10000","id":"10000","key":"NTEST","name":"Unittests","projectTypeKey":"software","simplified":false,"avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=medium"}},"customfield_10031":null,"customfield_10032":null,"customfield_10033":null,"aggregatetimespent":null,"customfield_10035":null,"customfield_10036":null,"customfield_10037":null,"customfield_10027":null,"customfield_10028":null,"customfield_10029":null,"resolutiondate":null,"workratio":-1,"watches":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3244/watchers","watchCount":1,"isWatching":true},"created":"2026-02-07T01:53:01.434+0100","customfield_10020":null,"customfield_10021":null,"customfield_10022":null,"customfield_10023":null,"customfield_10016":null,"customfield_10017":null,"customfield_10019":"0|i0150n:","updated":"2026-02-07T01:53:01.531+0100","customfield_10090":null,"timeoriginalestimate":null,"description":"\n\n\n\n\n\n\n\nA + group of Findings has been pushed to JIRA to be investigated and fixed:\n\nh2. + Group\n*Group*: [Findings in: Component A|http://localhost:8080/finding_group/79] + in [Security How-to|http://localhost:8080/product/2] / [1st Quarter Engagement|http://localhost:8080/engagement/1] + / [Generic Findings Import|http://localhost:8080/test/92]\n\nh2. Summary\n*Severity:* + Critical *Due Date:* Dec. 8, 2025 \n\nFindings matching the Active, Verified + and Severity criteria:\n|| Severity || CVE || CWE || Component || Version + || Title || Status ||\n|Critical|None|[0|]|Component A|None|[Critical|http://localhost:8080/finding/234]|Active, + Verified|\n|High|None|[0|]|Component A|None|[High|http://localhost:8080/finding/235]|Active, + Verified|\n\nFindings *not* matching the Active, Verified and Severity criteria:\n|| + Severity || CVE || CWE || Component || Version || Title || Status ||\n\n\n\n\n\n\n\n\n\n\nh1. + Findings\n\nh3. [Critical|http://localhost:8080/finding/234]\n*Defect Dojo + link:* http://localhost:8080/finding/234 (234)\n*Severity:* Critical\n *Due + Date:* Dec. 8, 2025 \n\n*CVE:* Unknown\n\n\n\n\n\n\n*Description*:\ntest\n\n\n\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n\n\n\nh1. Findings\n\nh3. [High|http://localhost:8080/finding/235]\n*Defect + Dojo link:* http://localhost:8080/finding/235 (235)\n*Severity:* High\n *Due + Date:* Dec. 31, 2025 \n\n*CVE:* Unknown\n\n\n\n\n\n\n*Description*:\ntest\n\n\n\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n","customfield_10010":null,"customfield_10014":null,"timetracking":{},"customfield_10015":null,"customfield_10005":null,"customfield_10006":null,"customfield_10007":null,"security":null,"customfield_10008":null,"attachment":[],"customfield_10009":null,"summary":"Findings + in: Component A","customfield_10001":null,"customfield_10002":[],"customfield_10123":null,"customfield_10003":null,"customfield_10004":null,"environment":null,"duedate":null,"comment":{"comments":[],"self":"https://defectdojo.atlassian.net/rest/api/2/issue/25285/comment","maxResults":0,"total":0,"startAt":0}}}' + headers: + Atl-Request-Id: + - 4933bc65-1a48-4aed-9bfd-0befa42919c2 + Atl-Traceid: + - 4933bc651a484aed9bfd0befa42919c2 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 00:53:03 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=65,cdn-upstream-fbl;dur=338,atl-edge;dur=250,atl-edge-internal;dur=15,atl-edge-upstream;dur=234,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN53-P1",cdn-rid;desc="oearBWba_QpXBJ4PQxshdCxNuCMSRyWQjL0T6--p-ogr6IvtDXmksQ==",cdn-downstream-fbl;dur=342 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 4665a13a9a7d99c0536b8829f2bef2e8.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - oearBWba_QpXBJ4PQxshdCxNuCMSRyWQjL0T6--p-ogr6IvtDXmksQ== + X-Amz-Cf-Pop: + - DEN53-P1 + X-Arequestid: + - bcbbbcf01d87569af6f620bdf43427db + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '400' + X-Ratelimit-Remaining: + - '398' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: '{"description": "Event test_added has occurred.", "title": "Test created + for Security How-to: 1st Quarter Engagement: Generic Findings Import", "user": + null, "url_ui": "http://localhost:8080/test/92", "url_api": "http://localhost:8080/api/v2/tests/92/", + "product_type": {"name": "ebooks", "id": 2, "url_ui": "http://localhost:8080/product/type/2", + "url_api": "http://localhost:8080/api/v2/product_types/2/"}, "product": {"name": + "Security How-to", "id": 2, "url_ui": "http://localhost:8080/product/2", "url_api": + "http://localhost:8080/api/v2/products/2/"}, "engagement": {"name": "1st Quarter + Engagement", "id": 1, "url_ui": "http://localhost:8080/engagement/1", "url_api": + "http://localhost:8080/api/v2/engagements/1/"}, "test": {"title": null, "id": + 92, "url_ui": "http://localhost:8080/test/92", "url_api": "http://localhost:8080/api/v2/tests/92/"}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Auth: + - Token xxx + Connection: + - keep-alive + Content-Length: + - '853' + Content-Type: + - application/json + User-Agent: + - DefectDojo-2.55.1 + X-DefectDojo-Event: + - test_added + X-DefectDojo-Instance: + - http://localhost:8080 + method: POST + uri: http://webhook.endpoint:8080/post + response: + body: + string: "{\n \"args\": {},\n \"headers\": {\n \"Accept\": [\n \"application/json\"\n + \ ],\n \"Accept-Encoding\": [\n \"gzip, deflate\"\n ],\n \"Auth\": + [\n \"Token xxx\"\n ],\n \"Connection\": [\n \"keep-alive\"\n + \ ],\n \"Content-Length\": [\n \"853\"\n ],\n \"Content-Type\": + [\n \"application/json\"\n ],\n \"Host\": [\n \"webhook.endpoint:8080\"\n + \ ],\n \"User-Agent\": [\n \"DefectDojo-2.55.1\"\n ],\n \"X-Defectdojo-Event\": + [\n \"test_added\"\n ],\n \"X-Defectdojo-Instance\": [\n \"http://localhost:8080\"\n + \ ]\n },\n \"method\": \"POST\",\n \"origin\": \"172.18.0.8\",\n \"url\": + \"http://webhook.endpoint:8080/post\",\n \"data\": \"{\\\"description\\\": + \\\"Event test_added has occurred.\\\", \\\"title\\\": \\\"Test created for + Security How-to: 1st Quarter Engagement: Generic Findings Import\\\", \\\"user\\\": + null, \\\"url_ui\\\": \\\"http://localhost:8080/test/92\\\", \\\"url_api\\\": + \\\"http://localhost:8080/api/v2/tests/92/\\\", \\\"product_type\\\": {\\\"name\\\": + \\\"ebooks\\\", \\\"id\\\": 2, \\\"url_ui\\\": \\\"http://localhost:8080/product/type/2\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/product_types/2/\\\"}, \\\"product\\\": + {\\\"name\\\": \\\"Security How-to\\\", \\\"id\\\": 2, \\\"url_ui\\\": \\\"http://localhost:8080/product/2\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/products/2/\\\"}, \\\"engagement\\\": + {\\\"name\\\": \\\"1st Quarter Engagement\\\", \\\"id\\\": 1, \\\"url_ui\\\": + \\\"http://localhost:8080/engagement/1\\\", \\\"url_api\\\": \\\"http://localhost:8080/api/v2/engagements/1/\\\"}, + \\\"test\\\": {\\\"title\\\": null, \\\"id\\\": 92, \\\"url_ui\\\": \\\"http://localhost:8080/test/92\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/tests/92/\\\"}}\",\n \"files\": + {},\n \"form\": {},\n \"json\": {\n \"description\": \"Event test_added + has occurred.\",\n \"engagement\": {\n \"id\": 1,\n \"name\": + \"1st Quarter Engagement\",\n \"url_api\": \"http://localhost:8080/api/v2/engagements/1/\",\n + \ \"url_ui\": \"http://localhost:8080/engagement/1\"\n },\n \"product\": + {\n \"id\": 2,\n \"name\": \"Security How-to\",\n \"url_api\": + \"http://localhost:8080/api/v2/products/2/\",\n \"url_ui\": \"http://localhost:8080/product/2\"\n + \ },\n \"product_type\": {\n \"id\": 2,\n \"name\": \"ebooks\",\n + \ \"url_api\": \"http://localhost:8080/api/v2/product_types/2/\",\n \"url_ui\": + \"http://localhost:8080/product/type/2\"\n },\n \"test\": {\n \"id\": + 92,\n \"title\": null,\n \"url_api\": \"http://localhost:8080/api/v2/tests/92/\",\n + \ \"url_ui\": \"http://localhost:8080/test/92\"\n },\n \"title\": + \"Test created for Security How-to: 1st Quarter Engagement: Generic Findings + Import\",\n \"url_api\": \"http://localhost:8080/api/v2/tests/92/\",\n + \ \"url_ui\": \"http://localhost:8080/test/92\",\n \"user\": null\n }\n}\n" + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Origin: + - '*' + Content-Type: + - application/json; charset=utf-8 + Date: + - Sat, 07 Feb 2026 00:53:03 GMT + Transfer-Encoding: + - chunked + status: + code: 200 + message: OK +- request: + body: '{"description": "Event scan_added has occurred.", "title": "Created/Updated + 2 findings for Security How-to: 1st Quarter Engagement: Generic Findings Import", + "user": null, "url_ui": "http://localhost:8080/test/92", "url_api": "http://localhost:8080/api/v2/tests/92/", + "product_type": {"name": "ebooks", "id": 2, "url_ui": "http://localhost:8080/product/type/2", + "url_api": "http://localhost:8080/api/v2/product_types/2/"}, "product": {"name": + "Security How-to", "id": 2, "url_ui": "http://localhost:8080/product/2", "url_api": + "http://localhost:8080/api/v2/products/2/"}, "engagement": {"name": "1st Quarter + Engagement", "id": 1, "url_ui": "http://localhost:8080/engagement/1", "url_api": + "http://localhost:8080/api/v2/engagements/1/"}, "test": {"title": null, "id": + 92, "url_ui": "http://localhost:8080/test/92", "url_api": "http://localhost:8080/api/v2/tests/92/"}, + "finding_count": 2, "findings": {"new": [{"id": 234, "title": "Critical", "severity": + "Critical", "url_ui": "http://localhost:8080/finding/234", "url_api": "http://localhost:8080/api/v2/findings/234/"}, + {"id": 235, "title": "High", "severity": "High", "url_ui": "http://localhost:8080/finding/235", + "url_api": "http://localhost:8080/api/v2/findings/235/"}], "reactivated": [], + "mitigated": [], "untouched": []}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Auth: + - Token xxx + Connection: + - keep-alive + Content-Length: + - '1279' + Content-Type: + - application/json + User-Agent: + - DefectDojo-2.55.1 + X-DefectDojo-Event: + - scan_added + X-DefectDojo-Instance: + - http://localhost:8080 + method: POST + uri: http://webhook.endpoint:8080/post + response: + body: + string: "{\n \"args\": {},\n \"headers\": {\n \"Accept\": [\n \"application/json\"\n + \ ],\n \"Accept-Encoding\": [\n \"gzip, deflate\"\n ],\n \"Auth\": + [\n \"Token xxx\"\n ],\n \"Connection\": [\n \"keep-alive\"\n + \ ],\n \"Content-Length\": [\n \"1279\"\n ],\n \"Content-Type\": + [\n \"application/json\"\n ],\n \"Host\": [\n \"webhook.endpoint:8080\"\n + \ ],\n \"User-Agent\": [\n \"DefectDojo-2.55.1\"\n ],\n \"X-Defectdojo-Event\": + [\n \"scan_added\"\n ],\n \"X-Defectdojo-Instance\": [\n \"http://localhost:8080\"\n + \ ]\n },\n \"method\": \"POST\",\n \"origin\": \"172.18.0.8\",\n \"url\": + \"http://webhook.endpoint:8080/post\",\n \"data\": \"{\\\"description\\\": + \\\"Event scan_added has occurred.\\\", \\\"title\\\": \\\"Created/Updated + 2 findings for Security How-to: 1st Quarter Engagement: Generic Findings Import\\\", + \\\"user\\\": null, \\\"url_ui\\\": \\\"http://localhost:8080/test/92\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/tests/92/\\\", \\\"product_type\\\": + {\\\"name\\\": \\\"ebooks\\\", \\\"id\\\": 2, \\\"url_ui\\\": \\\"http://localhost:8080/product/type/2\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/product_types/2/\\\"}, \\\"product\\\": + {\\\"name\\\": \\\"Security How-to\\\", \\\"id\\\": 2, \\\"url_ui\\\": \\\"http://localhost:8080/product/2\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/products/2/\\\"}, \\\"engagement\\\": + {\\\"name\\\": \\\"1st Quarter Engagement\\\", \\\"id\\\": 1, \\\"url_ui\\\": + \\\"http://localhost:8080/engagement/1\\\", \\\"url_api\\\": \\\"http://localhost:8080/api/v2/engagements/1/\\\"}, + \\\"test\\\": {\\\"title\\\": null, \\\"id\\\": 92, \\\"url_ui\\\": \\\"http://localhost:8080/test/92\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/tests/92/\\\"}, \\\"finding_count\\\": + 2, \\\"findings\\\": {\\\"new\\\": [{\\\"id\\\": 234, \\\"title\\\": \\\"Critical\\\", + \\\"severity\\\": \\\"Critical\\\", \\\"url_ui\\\": \\\"http://localhost:8080/finding/234\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/findings/234/\\\"}, {\\\"id\\\": + 235, \\\"title\\\": \\\"High\\\", \\\"severity\\\": \\\"High\\\", \\\"url_ui\\\": + \\\"http://localhost:8080/finding/235\\\", \\\"url_api\\\": \\\"http://localhost:8080/api/v2/findings/235/\\\"}], + \\\"reactivated\\\": [], \\\"mitigated\\\": [], \\\"untouched\\\": []}}\",\n + \ \"files\": {},\n \"form\": {},\n \"json\": {\n \"description\": \"Event + scan_added has occurred.\",\n \"engagement\": {\n \"id\": 1,\n \"name\": + \"1st Quarter Engagement\",\n \"url_api\": \"http://localhost:8080/api/v2/engagements/1/\",\n + \ \"url_ui\": \"http://localhost:8080/engagement/1\"\n },\n \"finding_count\": + 2,\n \"findings\": {\n \"mitigated\": [],\n \"new\": [\n {\n + \ \"id\": 234,\n \"severity\": \"Critical\",\n \"title\": + \"Critical\",\n \"url_api\": \"http://localhost:8080/api/v2/findings/234/\",\n + \ \"url_ui\": \"http://localhost:8080/finding/234\"\n },\n + \ {\n \"id\": 235,\n \"severity\": \"High\",\n \"title\": + \"High\",\n \"url_api\": \"http://localhost:8080/api/v2/findings/235/\",\n + \ \"url_ui\": \"http://localhost:8080/finding/235\"\n }\n ],\n + \ \"reactivated\": [],\n \"untouched\": []\n },\n \"product\": + {\n \"id\": 2,\n \"name\": \"Security How-to\",\n \"url_api\": + \"http://localhost:8080/api/v2/products/2/\",\n \"url_ui\": \"http://localhost:8080/product/2\"\n + \ },\n \"product_type\": {\n \"id\": 2,\n \"name\": \"ebooks\",\n + \ \"url_api\": \"http://localhost:8080/api/v2/product_types/2/\",\n \"url_ui\": + \"http://localhost:8080/product/type/2\"\n },\n \"test\": {\n \"id\": + 92,\n \"title\": null,\n \"url_api\": \"http://localhost:8080/api/v2/tests/92/\",\n + \ \"url_ui\": \"http://localhost:8080/test/92\"\n },\n \"title\": + \"Created/Updated 2 findings for Security How-to: 1st Quarter Engagement: + Generic Findings Import\",\n \"url_api\": \"http://localhost:8080/api/v2/tests/92/\",\n + \ \"url_ui\": \"http://localhost:8080/test/92\",\n \"user\": null\n }\n}\n" + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Origin: + - '*' + Content-Type: + - application/json; charset=utf-8 + Date: + - Sat, 07 Feb 2026 00:53:03 GMT + Transfer-Encoding: + - chunked + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/serverInfo + response: + body: + string: '{"baseUrl":"https://defectdojo.atlassian.net","displayUrl":"https://defectdojo.atlassian.net","displayUrlServicedeskHelpCenter":"https://defectdojo.atlassian.net","displayUrlCSMHelpSeeker":"https://defectdojo.atlassian.net","displayUrlConfluence":"https://defectdojo.atlassian.net","version":"1001.0.0-SNAPSHOT","versionNumbers":[1001,0,0],"deploymentType":"Cloud","buildNumber":100290,"buildDate":"2026-02-06T12:38:29.000+0100","serverTime":"2026-02-07T01:53:03.403+0100","scmInfo":"9d700605f271b9e38f3e73c4116a686dae8d11d7","serverTitle":"Jira","defaultLocale":{"locale":"en_US"},"serverTimeZone":"Etc/UTC"}' + headers: + Atl-Request-Id: + - 0033bad5-c544-4c2e-9a41-4408905c4abb + Atl-Traceid: + - 0033bad5c5444c2e9a414408905c4abb + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 00:53:03 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=66,cdn-upstream-fbl;dur=254,atl-edge;dur=165,atl-edge-internal;dur=14,atl-edge-upstream;dur=151,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN53-P3",cdn-rid;desc="w-qjgr4pmJE32Wnk2_3QElDpU2gmLr02YigizMcHfgLC5iwCNrMbRQ==",cdn-downstream-fbl;dur=258 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 2b6f0b2cd8495233ea20114fbb247772.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - w-qjgr4pmJE32Wnk2_3QElDpU2gmLr02YigizMcHfgLC5iwCNrMbRQ== + X-Amz-Cf-Pop: + - DEN53-P3 + X-Arequestid: + - a8647be1d10e9f35aaeef9a6e703d95f + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '350' + X-Ratelimit-Remaining: + - '349' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/issue/25285 + response: + body: + string: '{"expand":"renderedFields,names,schema,operations,editmeta,changelog,versionedRepresentations,customfield_10010.requestTypePractice","id":"25285","self":"https://defectdojo.atlassian.net/rest/api/2/issue/25285","key":"NTEST-3244","fields":{"statuscategorychangedate":"2026-02-07T01:53:01.739+0100","fixVersions":[],"statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"},"resolution":null,"lastViewed":null,"customfield_10060":null,"customfield_10061":null,"customfield_10062":null,"customfield_10063":null,"customfield_10064":null,"customfield_10065":null,"customfield_10066":null,"priority":{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/1","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/highest_new.svg","name":"Highest","id":"1"},"labels":[],"timeestimate":null,"aggregatetimeoriginalestimate":null,"versions":[],"issuelinks":[],"assignee":null,"status":{"self":"https://defectdojo.atlassian.net/rest/api/2/status/10000","description":"","iconUrl":"https://defectdojo.atlassian.net/","name":"Backlog","id":"10000","statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"}},"components":[],"customfield_10050":null,"customfield_10051":null,"customfield_10053":null,"customfield_10055":null,"customfield_10056":null,"customfield_10057":null,"customfield_10058":null,"customfield_10059":null,"customfield_10049":null,"aggregatetimeestimate":null,"creator":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"subtasks":[],"customfield_10040":null,"customfield_10041":null,"customfield_10042":null,"reporter":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"customfield_10043":null,"aggregateprogress":{"progress":0,"total":0},"customfield_10044":null,"customfield_10045":null,"customfield_10046":null,"customfield_10047":null,"customfield_10048":null,"customfield_10038":null,"customfield_10039":null,"progress":{"progress":0,"total":0},"votes":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3244/votes","votes":0,"hasVoted":false},"worklog":{"startAt":0,"maxResults":20,"total":0,"worklogs":[]},"issuetype":{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10002","id":"10002","description":"A + small, distinct piece of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","subtask":false,"avatarId":10318,"hierarchyLevel":0},"timespent":null,"customfield_10030":null,"project":{"self":"https://defectdojo.atlassian.net/rest/api/2/project/10000","id":"10000","key":"NTEST","name":"Unittests","projectTypeKey":"software","simplified":false,"avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=medium"}},"customfield_10031":null,"customfield_10032":null,"customfield_10033":null,"aggregatetimespent":null,"customfield_10035":null,"customfield_10036":null,"customfield_10037":null,"customfield_10027":null,"customfield_10028":null,"customfield_10029":null,"resolutiondate":null,"workratio":-1,"watches":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3244/watchers","watchCount":1,"isWatching":true},"created":"2026-02-07T01:53:01.434+0100","customfield_10020":null,"customfield_10021":null,"customfield_10022":null,"customfield_10023":null,"customfield_10016":null,"customfield_10017":null,"customfield_10019":"0|i0150n:","updated":"2026-02-07T01:53:01.531+0100","customfield_10090":null,"timeoriginalestimate":null,"description":"\n\n\n\n\n\n\n\nA + group of Findings has been pushed to JIRA to be investigated and fixed:\n\nh2. + Group\n*Group*: [Findings in: Component A|http://localhost:8080/finding_group/79] + in [Security How-to|http://localhost:8080/product/2] / [1st Quarter Engagement|http://localhost:8080/engagement/1] + / [Generic Findings Import|http://localhost:8080/test/92]\n\nh2. Summary\n*Severity:* + Critical *Due Date:* Dec. 8, 2025 \n\nFindings matching the Active, Verified + and Severity criteria:\n|| Severity || CVE || CWE || Component || Version + || Title || Status ||\n|Critical|None|[0|]|Component A|None|[Critical|http://localhost:8080/finding/234]|Active, + Verified|\n|High|None|[0|]|Component A|None|[High|http://localhost:8080/finding/235]|Active, + Verified|\n\nFindings *not* matching the Active, Verified and Severity criteria:\n|| + Severity || CVE || CWE || Component || Version || Title || Status ||\n\n\n\n\n\n\n\n\n\n\nh1. + Findings\n\nh3. [Critical|http://localhost:8080/finding/234]\n*Defect Dojo + link:* http://localhost:8080/finding/234 (234)\n*Severity:* Critical\n *Due + Date:* Dec. 8, 2025 \n\n*CVE:* Unknown\n\n\n\n\n\n\n*Description*:\ntest\n\n\n\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n\n\n\nh1. Findings\n\nh3. [High|http://localhost:8080/finding/235]\n*Defect + Dojo link:* http://localhost:8080/finding/235 (235)\n*Severity:* High\n *Due + Date:* Dec. 31, 2025 \n\n*CVE:* Unknown\n\n\n\n\n\n\n*Description*:\ntest\n\n\n\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n","customfield_10010":null,"customfield_10014":null,"timetracking":{},"customfield_10015":null,"customfield_10005":null,"customfield_10006":null,"customfield_10007":null,"security":null,"customfield_10008":null,"attachment":[],"customfield_10009":null,"summary":"Findings + in: Component A","customfield_10001":null,"customfield_10002":[],"customfield_10123":null,"customfield_10003":null,"customfield_10004":null,"environment":null,"duedate":null,"comment":{"comments":[],"self":"https://defectdojo.atlassian.net/rest/api/2/issue/25285/comment","maxResults":0,"total":0,"startAt":0}}}' + headers: + Atl-Request-Id: + - 4359b28d-bee9-4ae0-b2a9-b6c8963ee421 + Atl-Traceid: + - 4359b28dbee94ae0b2a9b6c8963ee421 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 00:53:03 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=67,cdn-upstream-fbl;dur=341,atl-edge;dur=249,atl-edge-internal;dur=18,atl-edge-upstream;dur=231,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN52-P3",cdn-rid;desc="ufisLLGITqgUAcDmf8XQDOzFYoRS8_yohjzXhsrVuaaEQT2jbps1TA==",cdn-downstream-fbl;dur=344 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 f65dcddaf4d3d1ea834dd4e676c13038.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - ufisLLGITqgUAcDmf8XQDOzFYoRS8_yohjzXhsrVuaaEQT2jbps1TA== + X-Amz-Cf-Pop: + - DEN52-P3 + X-Arequestid: + - 91cd96eaf7ecf4f893740b25739071dc + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '400' + X-Ratelimit-Remaining: + - '397' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/serverInfo + response: + body: + string: '{"baseUrl":"https://defectdojo.atlassian.net","displayUrl":"https://defectdojo.atlassian.net","displayUrlServicedeskHelpCenter":"https://defectdojo.atlassian.net","displayUrlCSMHelpSeeker":"https://defectdojo.atlassian.net","displayUrlConfluence":"https://defectdojo.atlassian.net","version":"1001.0.0-SNAPSHOT","versionNumbers":[1001,0,0],"deploymentType":"Cloud","buildNumber":100290,"buildDate":"2026-02-06T12:38:29.000+0100","serverTime":"2026-02-07T01:53:04.247+0100","scmInfo":"9d700605f271b9e38f3e73c4116a686dae8d11d7","serverTitle":"Jira","defaultLocale":{"locale":"en_US"},"serverTimeZone":"Etc/UTC"}' + headers: + Atl-Request-Id: + - 15645190-34c8-4092-a3ba-c97789b50e27 + Atl-Traceid: + - 1564519034c84092a3bac97789b50e27 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 00:53:04 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=66,cdn-upstream-fbl;dur=257,atl-edge;dur=167,atl-edge-internal;dur=14,atl-edge-upstream;dur=153,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN52-P1",cdn-rid;desc="2q2XmEXAIyJSBE83OOd_iT-3JFdpriP2jbNGCU4fwXyJt8z5a5ohpQ==",cdn-downstream-fbl;dur=261 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 4c98f000f0c28d2e527e3c684f54be1e.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - 2q2XmEXAIyJSBE83OOd_iT-3JFdpriP2jbNGCU4fwXyJt8z5a5ohpQ== + X-Amz-Cf-Pop: + - DEN52-P1 + X-Arequestid: + - c18d8462dfac8b9b091d1caa66f61c52 + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '350' + X-Ratelimit-Remaining: + - '348' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/issue/25285 + response: + body: + string: '{"expand":"renderedFields,names,schema,operations,editmeta,changelog,versionedRepresentations,customfield_10010.requestTypePractice","id":"25285","self":"https://defectdojo.atlassian.net/rest/api/2/issue/25285","key":"NTEST-3244","fields":{"statuscategorychangedate":"2026-02-07T01:53:01.739+0100","fixVersions":[],"statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"},"resolution":null,"lastViewed":null,"customfield_10060":null,"customfield_10061":null,"customfield_10062":null,"customfield_10063":null,"customfield_10064":null,"customfield_10065":null,"customfield_10066":null,"priority":{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/1","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/highest_new.svg","name":"Highest","id":"1"},"labels":[],"timeestimate":null,"aggregatetimeoriginalestimate":null,"versions":[],"issuelinks":[],"assignee":null,"status":{"self":"https://defectdojo.atlassian.net/rest/api/2/status/10000","description":"","iconUrl":"https://defectdojo.atlassian.net/","name":"Backlog","id":"10000","statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"}},"components":[],"customfield_10050":null,"customfield_10051":null,"customfield_10053":null,"customfield_10055":null,"customfield_10056":null,"customfield_10057":null,"customfield_10058":null,"customfield_10059":null,"customfield_10049":null,"aggregatetimeestimate":null,"creator":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"subtasks":[],"customfield_10040":null,"customfield_10041":null,"customfield_10042":null,"reporter":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"customfield_10043":null,"aggregateprogress":{"progress":0,"total":0},"customfield_10044":null,"customfield_10045":null,"customfield_10046":null,"customfield_10047":null,"customfield_10048":null,"customfield_10038":null,"customfield_10039":null,"progress":{"progress":0,"total":0},"votes":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3244/votes","votes":0,"hasVoted":false},"worklog":{"startAt":0,"maxResults":20,"total":0,"worklogs":[]},"issuetype":{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10002","id":"10002","description":"A + small, distinct piece of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","subtask":false,"avatarId":10318,"hierarchyLevel":0},"timespent":null,"customfield_10030":null,"project":{"self":"https://defectdojo.atlassian.net/rest/api/2/project/10000","id":"10000","key":"NTEST","name":"Unittests","projectTypeKey":"software","simplified":false,"avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=medium"}},"customfield_10031":null,"customfield_10032":null,"customfield_10033":null,"aggregatetimespent":null,"customfield_10035":null,"customfield_10036":null,"customfield_10037":null,"customfield_10027":null,"customfield_10028":null,"customfield_10029":null,"resolutiondate":null,"workratio":-1,"watches":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3244/watchers","watchCount":1,"isWatching":true},"created":"2026-02-07T01:53:01.434+0100","customfield_10020":null,"customfield_10021":null,"customfield_10022":null,"customfield_10023":null,"customfield_10016":null,"customfield_10017":null,"customfield_10019":"0|i0150n:","updated":"2026-02-07T01:53:01.531+0100","customfield_10090":null,"timeoriginalestimate":null,"description":"\n\n\n\n\n\n\n\nA + group of Findings has been pushed to JIRA to be investigated and fixed:\n\nh2. + Group\n*Group*: [Findings in: Component A|http://localhost:8080/finding_group/79] + in [Security How-to|http://localhost:8080/product/2] / [1st Quarter Engagement|http://localhost:8080/engagement/1] + / [Generic Findings Import|http://localhost:8080/test/92]\n\nh2. Summary\n*Severity:* + Critical *Due Date:* Dec. 8, 2025 \n\nFindings matching the Active, Verified + and Severity criteria:\n|| Severity || CVE || CWE || Component || Version + || Title || Status ||\n|Critical|None|[0|]|Component A|None|[Critical|http://localhost:8080/finding/234]|Active, + Verified|\n|High|None|[0|]|Component A|None|[High|http://localhost:8080/finding/235]|Active, + Verified|\n\nFindings *not* matching the Active, Verified and Severity criteria:\n|| + Severity || CVE || CWE || Component || Version || Title || Status ||\n\n\n\n\n\n\n\n\n\n\nh1. + Findings\n\nh3. [Critical|http://localhost:8080/finding/234]\n*Defect Dojo + link:* http://localhost:8080/finding/234 (234)\n*Severity:* Critical\n *Due + Date:* Dec. 8, 2025 \n\n*CVE:* Unknown\n\n\n\n\n\n\n*Description*:\ntest\n\n\n\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n\n\n\nh1. Findings\n\nh3. [High|http://localhost:8080/finding/235]\n*Defect + Dojo link:* http://localhost:8080/finding/235 (235)\n*Severity:* High\n *Due + Date:* Dec. 31, 2025 \n\n*CVE:* Unknown\n\n\n\n\n\n\n*Description*:\ntest\n\n\n\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n","customfield_10010":null,"customfield_10014":null,"timetracking":{},"customfield_10015":null,"customfield_10005":null,"customfield_10006":null,"customfield_10007":null,"security":null,"customfield_10008":null,"attachment":[],"customfield_10009":null,"summary":"Findings + in: Component A","customfield_10001":null,"customfield_10002":[],"customfield_10123":null,"customfield_10003":null,"customfield_10004":null,"environment":null,"duedate":null,"comment":{"comments":[],"self":"https://defectdojo.atlassian.net/rest/api/2/issue/25285/comment","maxResults":0,"total":0,"startAt":0}}}' + headers: + Atl-Request-Id: + - 8415105a-f243-4ed3-af7e-9ea9270b6a68 + Atl-Traceid: + - 8415105af2434ed3af7e9ea9270b6a68 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 00:53:04 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=67,cdn-upstream-fbl;dur=344,atl-edge;dur=254,atl-edge-internal;dur=15,atl-edge-upstream;dur=238,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN53-P3",cdn-rid;desc="3H0DgVvz9r126kFZgRLL3i3Dy1VS0zpU1fm3_9rn1q_q53rL6SeH1Q==",cdn-downstream-fbl;dur=348 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 b35c566c5c237e7090b19170d36f7ad2.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - 3H0DgVvz9r126kFZgRLL3i3Dy1VS0zpU1fm3_9rn1q_q53rL6SeH1Q== + X-Amz-Cf-Pop: + - DEN53-P3 + X-Arequestid: + - a619b8041def9721a39257b38af5b41e + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '400' + X-Ratelimit-Remaining: + - '396' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/issue/createmeta?projectKeys=NTEST&issuetypeNames=Task&expand=projects.issuetypes.fields + response: + body: + string: '{"expand":"projects","projects":[{"expand":"issuetypes","self":"https://defectdojo.atlassian.net/rest/api/2/project/10000","id":"10000","key":"NTEST","name":"Unittests","avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=medium"},"issuetypes":[{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10002","id":"10002","description":"A + small, distinct piece of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","untranslatedName":"Task","subtask":false,"hierarchyLevel":0,"expand":"fields","fields":{"summary":{"required":true,"schema":{"type":"string","system":"summary"},"name":"Summary","key":"summary","hasDefaultValue":false,"operations":["set"]},"issuetype":{"required":true,"schema":{"type":"issuetype","system":"issuetype"},"name":"Issue + Type","key":"issuetype","hasDefaultValue":false,"operations":[],"allowedValues":[{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10002","id":"10002","description":"A + small, distinct piece of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","subtask":false,"avatarId":10318,"hierarchyLevel":0}]},"parent":{"required":false,"schema":{"type":"issuelink","system":"parent"},"name":"Parent","key":"parent","hasDefaultValue":false,"operations":["set"]},"components":{"required":false,"schema":{"type":"array","items":"component","system":"components"},"name":"Components","key":"components","hasDefaultValue":false,"operations":["add","set","remove"],"allowedValues":[]},"description":{"required":false,"schema":{"type":"string","system":"description"},"name":"Description","key":"description","hasDefaultValue":false,"operations":["set"]},"project":{"required":true,"schema":{"type":"project","system":"project"},"name":"Project","key":"project","hasDefaultValue":false,"operations":["set"],"allowedValues":[{"self":"https://defectdojo.atlassian.net/rest/api/2/project/10000","id":"10000","key":"NTEST","name":"Unittests","projectTypeKey":"software","simplified":false,"avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=medium"}}]},"fixVersions":{"required":false,"schema":{"type":"array","items":"version","system":"fixVersions"},"name":"Fix + versions","key":"fixVersions","hasDefaultValue":false,"operations":["set","add","remove"],"allowedValues":[]},"priority":{"required":false,"schema":{"type":"priority","system":"priority"},"name":"Priority","key":"priority","hasDefaultValue":true,"operations":["set"],"allowedValues":[{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/1","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/highest_new.svg","name":"Highest","id":"1"},{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/2","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/high_new.svg","name":"High","id":"2"},{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/3","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/medium_new.svg","name":"Medium","id":"3"},{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/4","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/low_new.svg","name":"Low","id":"4"},{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/5","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/lowest_new.svg","name":"Lowest","id":"5"}],"defaultValue":{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/3","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/medium_new.svg","name":"Medium","id":"3"}},"customfield_10014":{"required":false,"schema":{"type":"any","custom":"com.pyxis.greenhopper.jira:gh-epic-link","customId":10014},"name":"Epic + Link","key":"customfield_10014","hasDefaultValue":false,"operations":["set"]},"labels":{"required":false,"schema":{"type":"array","items":"string","system":"labels"},"name":"Labels","key":"labels","autoCompleteUrl":"https://defectdojo.atlassian.net/rest/api/1.0/labels/suggest?query=","hasDefaultValue":false,"operations":["add","set","remove"]},"attachment":{"required":false,"schema":{"type":"array","items":"attachment","system":"attachment"},"name":"Attachment","key":"attachment","hasDefaultValue":false,"operations":["set","copy"]},"issuelinks":{"required":false,"schema":{"type":"array","items":"issuelinks","system":"issuelinks"},"name":"Linked + Issues","key":"issuelinks","autoCompleteUrl":"https://defectdojo.atlassian.net/rest/api/2/issue/picker?currentProjectId=&showSubTaskParent=true&showSubTasks=true¤tIssueKey=null&query=","hasDefaultValue":false,"operations":["add","copy"]},"assignee":{"required":false,"schema":{"type":"user","system":"assignee"},"name":"Assignee","key":"assignee","autoCompleteUrl":"https://defectdojo.atlassian.net/rest/api/2/user/assignable/search?project=NTEST&query=","hasDefaultValue":false,"operations":["set"]}}}]}]}' + headers: + Atl-Request-Id: + - 761af3a8-9553-486d-a670-d3905d177813 + Atl-Traceid: + - 761af3a89553486da670d3905d177813 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 00:53:05 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=66,cdn-upstream-fbl;dur=390,atl-edge;dur=302,atl-edge-internal;dur=21,atl-edge-upstream;dur=280,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN52-P2",cdn-rid;desc="2H8Ne37w8DsuR3NakP-NJ_KFngb8t1L6w0wh2nJxydQEtxgfLoc37Q==",cdn-downstream-fbl;dur=394 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 88bce767af5e31f726ade38ea5253bd4.cloudfront.net (CloudFront) + Warning: + - 'The issue create meta endpoint has been deprecated. (Deprecation start date: + June 03, 2024)' + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - 2H8Ne37w8DsuR3NakP-NJ_KFngb8t1L6w0wh2nJxydQEtxgfLoc37Q== + X-Amz-Cf-Pop: + - DEN52-P2 + X-Arequestid: + - 9fdd66d46d198843dc586e463394e107 + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '350' + X-Ratelimit-Remaining: + - '349' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: '{"fields": {"project": {"key": "NTEST"}, "issuetype": {"name": "Task"}, + "summary": "Findings in: Component A", "description": "\n\n\n\n\n\n\n\nA group + of Findings has been pushed to JIRA to be investigated and fixed:\n\nh2. Group\n*Group*: + [Findings in: Component A|http://localhost:8080/finding_group/79] in [Security + How-to|http://localhost:8080/product/2] / [1st Quarter Engagement|http://localhost:8080/engagement/1] + / [Generic Findings Import|http://localhost:8080/test/92]\n\nh2. Summary\n*Severity:* + Critical *Due Date:* Dec. 8, 2025 \n\nFindings matching the Active, Verified + and Severity criteria:\n|| Severity || CVE || CWE || Component || Version || + Title || Status ||\n|Critical|None|[0|]|Component A|None|[Critical|http://localhost:8080/finding/234]|Active, + Verified|\n|High|None|[0|]|Component A|None|[High|http://localhost:8080/finding/235]|Active, + Verified|\n\nFindings *not* matching the Active, Verified and Severity criteria:\n|| + Severity || CVE || CWE || Component || Version || Title || Status ||\n\n\n\n\n\n\n\n\n\n\nh1. + Findings\n\nh3. [Critical|http://localhost:8080/finding/234]\n*Defect Dojo link:* + http://localhost:8080/finding/234 (234)\n*Severity:* Critical\n *Due Date:* + Dec. 8, 2025 \n\n*CVE:* Unknown\n\n\n\n\n\n\n*Description*:\ntest\n\n\n\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n\n\n\nh1. Findings\n\nh3. [High|http://localhost:8080/finding/235]\n*Defect + Dojo link:* http://localhost:8080/finding/235 (235)\n*Severity:* High\n *Due + Date:* Dec. 31, 2025 \n\n*CVE:* Unknown\n\n\n\n\n\n\n*Description*:\ntest\n\n\n\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n", "priority": {"name": "Highest"}}, "update": {}}' + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Length: + - '1663' + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: PUT + uri: https://defectdojo.atlassian.net/rest/api/2/issue/25285 + response: + body: + string: '' + headers: + Atl-Request-Id: + - 93812353-f05d-4aa8-b1af-aff8913aa588 + Atl-Traceid: + - 93812353f05d4aa8b1afaff8913aa588 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 00:53:05 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=67,cdn-upstream-fbl;dur=434,atl-edge;dur=342,atl-edge-internal;dur=19,atl-edge-upstream;dur=323,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN52-P2",cdn-rid;desc="VmWsAZ7ngM518j-hjWNLolVMWTEpvoMxnjnfAySrqUJMNFA0DD70Fw==",cdn-downstream-fbl;dur=439 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Vary: + - Accept-Encoding + Via: + - 1.1 9b688924e5b0f0b5e4c639d19cb145f0.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - VmWsAZ7ngM518j-hjWNLolVMWTEpvoMxnjnfAySrqUJMNFA0DD70Fw== + X-Amz-Cf-Pop: + - DEN52-P2 + X-Arequestid: + - 84d8d596762628506943ce0ecc4eba59 + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '300' + X-Ratelimit-Remaining: + - '299' + X-Xss-Protection: + - 1; mode=block + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/issue/25285 + response: + body: + string: '{"expand":"renderedFields,names,schema,operations,editmeta,changelog,versionedRepresentations,customfield_10010.requestTypePractice","id":"25285","self":"https://defectdojo.atlassian.net/rest/api/2/issue/25285","key":"NTEST-3244","fields":{"statuscategorychangedate":"2026-02-07T01:53:01.739+0100","fixVersions":[],"statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"},"resolution":null,"lastViewed":null,"customfield_10060":null,"customfield_10061":null,"customfield_10062":null,"customfield_10063":null,"customfield_10064":null,"customfield_10065":null,"customfield_10066":null,"priority":{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/1","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/highest_new.svg","name":"Highest","id":"1"},"labels":[],"timeestimate":null,"aggregatetimeoriginalestimate":null,"versions":[],"issuelinks":[],"assignee":null,"status":{"self":"https://defectdojo.atlassian.net/rest/api/2/status/10000","description":"","iconUrl":"https://defectdojo.atlassian.net/","name":"Backlog","id":"10000","statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"}},"components":[],"customfield_10050":null,"customfield_10051":null,"customfield_10053":null,"customfield_10055":null,"customfield_10056":null,"customfield_10057":null,"customfield_10058":null,"customfield_10059":null,"customfield_10049":null,"aggregatetimeestimate":null,"creator":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"subtasks":[],"customfield_10040":null,"customfield_10041":null,"customfield_10042":null,"reporter":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"customfield_10043":null,"aggregateprogress":{"progress":0,"total":0},"customfield_10044":null,"customfield_10045":null,"customfield_10046":null,"customfield_10047":null,"customfield_10048":null,"customfield_10038":null,"customfield_10039":null,"progress":{"progress":0,"total":0},"votes":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3244/votes","votes":0,"hasVoted":false},"worklog":{"startAt":0,"maxResults":20,"total":0,"worklogs":[]},"issuetype":{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10002","id":"10002","description":"A + small, distinct piece of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","subtask":false,"avatarId":10318,"hierarchyLevel":0},"timespent":null,"customfield_10030":null,"project":{"self":"https://defectdojo.atlassian.net/rest/api/2/project/10000","id":"10000","key":"NTEST","name":"Unittests","projectTypeKey":"software","simplified":false,"avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=medium"}},"customfield_10031":null,"customfield_10032":null,"customfield_10033":null,"aggregatetimespent":null,"customfield_10035":null,"customfield_10036":null,"customfield_10037":null,"customfield_10027":null,"customfield_10028":null,"customfield_10029":null,"resolutiondate":null,"workratio":-1,"watches":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3244/watchers","watchCount":1,"isWatching":true},"created":"2026-02-07T01:53:01.434+0100","customfield_10020":null,"customfield_10021":null,"customfield_10022":null,"customfield_10023":null,"customfield_10016":null,"customfield_10017":null,"customfield_10019":"0|i0150n:","updated":"2026-02-07T01:53:01.531+0100","customfield_10090":null,"timeoriginalestimate":null,"description":"\n\n\n\n\n\n\n\nA + group of Findings has been pushed to JIRA to be investigated and fixed:\n\nh2. + Group\n*Group*: [Findings in: Component A|http://localhost:8080/finding_group/79] + in [Security How-to|http://localhost:8080/product/2] / [1st Quarter Engagement|http://localhost:8080/engagement/1] + / [Generic Findings Import|http://localhost:8080/test/92]\n\nh2. Summary\n*Severity:* + Critical *Due Date:* Dec. 8, 2025 \n\nFindings matching the Active, Verified + and Severity criteria:\n|| Severity || CVE || CWE || Component || Version + || Title || Status ||\n|Critical|None|[0|]|Component A|None|[Critical|http://localhost:8080/finding/234]|Active, + Verified|\n|High|None|[0|]|Component A|None|[High|http://localhost:8080/finding/235]|Active, + Verified|\n\nFindings *not* matching the Active, Verified and Severity criteria:\n|| + Severity || CVE || CWE || Component || Version || Title || Status ||\n\n\n\n\n\n\n\n\n\n\nh1. + Findings\n\nh3. [Critical|http://localhost:8080/finding/234]\n*Defect Dojo + link:* http://localhost:8080/finding/234 (234)\n*Severity:* Critical\n *Due + Date:* Dec. 8, 2025 \n\n*CVE:* Unknown\n\n\n\n\n\n\n*Description*:\ntest\n\n\n\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n\n\n\nh1. Findings\n\nh3. [High|http://localhost:8080/finding/235]\n*Defect + Dojo link:* http://localhost:8080/finding/235 (235)\n*Severity:* High\n *Due + Date:* Dec. 31, 2025 \n\n*CVE:* Unknown\n\n\n\n\n\n\n*Description*:\ntest\n\n\n\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n","customfield_10010":null,"customfield_10014":null,"timetracking":{},"customfield_10015":null,"customfield_10005":null,"customfield_10006":null,"customfield_10007":null,"security":null,"customfield_10008":null,"attachment":[],"customfield_10009":null,"summary":"Findings + in: Component A","customfield_10001":null,"customfield_10002":[],"customfield_10123":null,"customfield_10003":null,"customfield_10004":null,"environment":null,"duedate":null,"comment":{"comments":[],"self":"https://defectdojo.atlassian.net/rest/api/2/issue/25285/comment","maxResults":0,"total":0,"startAt":0}}}' + headers: + Atl-Request-Id: + - 64a852d7-191a-4b98-992b-14b74aa94036 + Atl-Traceid: + - 64a852d7191a4b98992b14b74aa94036 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 00:53:06 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=65,cdn-upstream-fbl;dur=342,atl-edge;dur=255,atl-edge-internal;dur=16,atl-edge-upstream;dur=238,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN52-P1",cdn-rid;desc="2W2OMdoobJpjAc0r5hUBbJHpvmbSKKJ-5wANVun3YGuBse21T4wIkg==",cdn-downstream-fbl;dur=345 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 5a94950aa5895e56460f82b3086d0b0c.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - 2W2OMdoobJpjAc0r5hUBbJHpvmbSKKJ-5wANVun3YGuBse21T4wIkg== + X-Amz-Cf-Pop: + - DEN52-P1 + X-Arequestid: + - e94a3b477b65ae961b822afe0410ba4b + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '400' + X-Ratelimit-Remaining: + - '399' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/serverInfo + response: + body: + string: '{"baseUrl":"https://defectdojo.atlassian.net","displayUrl":"https://defectdojo.atlassian.net","displayUrlServicedeskHelpCenter":"https://defectdojo.atlassian.net","displayUrlCSMHelpSeeker":"https://defectdojo.atlassian.net","displayUrlConfluence":"https://defectdojo.atlassian.net","version":"1001.0.0-SNAPSHOT","versionNumbers":[1001,0,0],"deploymentType":"Cloud","buildNumber":100290,"buildDate":"2026-02-06T12:38:29.000+0100","serverTime":"2026-02-07T01:53:06.384+0100","scmInfo":"9d700605f271b9e38f3e73c4116a686dae8d11d7","serverTitle":"Jira","defaultLocale":{"locale":"en_US"},"serverTimeZone":"Etc/UTC"}' + headers: + Atl-Request-Id: + - 1ef8b082-db87-4626-bfec-45b02de7c55b + Atl-Traceid: + - 1ef8b082db874626bfec45b02de7c55b + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 00:53:06 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=0,cdn-upstream-fbl;dur=184,atl-edge;dur=161,atl-edge-internal;dur=11,atl-edge-upstream;dur=149,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN53-P1",cdn-rid;desc="0IYKNwXVVeP3s_jwiBRWtnE29OIF_mEywiM-0gU25KrP51HCjR_xFw==",cdn-downstream-fbl;dur=188 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 be287e7673276d1e72db92a6f145d6f0.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - 0IYKNwXVVeP3s_jwiBRWtnE29OIF_mEywiM-0gU25KrP51HCjR_xFw== + X-Amz-Cf-Pop: + - DEN53-P1 + X-Arequestid: + - dcdaa58427a48dced5a450f523c1ba11 + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '350' + X-Ratelimit-Remaining: + - '349' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/issue/25285 + response: + body: + string: '{"expand":"renderedFields,names,schema,operations,editmeta,changelog,versionedRepresentations,customfield_10010.requestTypePractice","id":"25285","self":"https://defectdojo.atlassian.net/rest/api/2/issue/25285","key":"NTEST-3244","fields":{"statuscategorychangedate":"2026-02-07T01:53:01.739+0100","fixVersions":[],"statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"},"resolution":null,"lastViewed":null,"customfield_10060":null,"customfield_10061":null,"customfield_10062":null,"customfield_10063":null,"customfield_10064":null,"customfield_10065":null,"customfield_10066":null,"priority":{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/1","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/highest_new.svg","name":"Highest","id":"1"},"labels":[],"timeestimate":null,"aggregatetimeoriginalestimate":null,"versions":[],"issuelinks":[],"assignee":null,"status":{"self":"https://defectdojo.atlassian.net/rest/api/2/status/10000","description":"","iconUrl":"https://defectdojo.atlassian.net/","name":"Backlog","id":"10000","statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"}},"components":[],"customfield_10050":null,"customfield_10051":null,"customfield_10053":null,"customfield_10055":null,"customfield_10056":null,"customfield_10057":null,"customfield_10058":null,"customfield_10059":null,"customfield_10049":null,"aggregatetimeestimate":null,"creator":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"subtasks":[],"customfield_10040":null,"customfield_10041":null,"customfield_10042":null,"reporter":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"customfield_10043":null,"aggregateprogress":{"progress":0,"total":0},"customfield_10044":null,"customfield_10045":null,"customfield_10046":null,"customfield_10047":null,"customfield_10048":null,"customfield_10038":null,"customfield_10039":null,"progress":{"progress":0,"total":0},"votes":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3244/votes","votes":0,"hasVoted":false},"worklog":{"startAt":0,"maxResults":20,"total":0,"worklogs":[]},"issuetype":{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10002","id":"10002","description":"A + small, distinct piece of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","subtask":false,"avatarId":10318,"hierarchyLevel":0},"timespent":null,"customfield_10030":null,"project":{"self":"https://defectdojo.atlassian.net/rest/api/2/project/10000","id":"10000","key":"NTEST","name":"Unittests","projectTypeKey":"software","simplified":false,"avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=medium"}},"customfield_10031":null,"customfield_10032":null,"customfield_10033":null,"aggregatetimespent":null,"customfield_10035":null,"customfield_10036":null,"customfield_10037":null,"customfield_10027":null,"customfield_10028":null,"customfield_10029":null,"resolutiondate":null,"workratio":-1,"watches":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3244/watchers","watchCount":1,"isWatching":true},"created":"2026-02-07T01:53:01.434+0100","customfield_10020":null,"customfield_10021":null,"customfield_10022":null,"customfield_10023":null,"customfield_10016":null,"customfield_10017":null,"customfield_10019":"0|i0150n:","updated":"2026-02-07T01:53:01.531+0100","customfield_10090":null,"timeoriginalestimate":null,"description":"\n\n\n\n\n\n\n\nA + group of Findings has been pushed to JIRA to be investigated and fixed:\n\nh2. + Group\n*Group*: [Findings in: Component A|http://localhost:8080/finding_group/79] + in [Security How-to|http://localhost:8080/product/2] / [1st Quarter Engagement|http://localhost:8080/engagement/1] + / [Generic Findings Import|http://localhost:8080/test/92]\n\nh2. Summary\n*Severity:* + Critical *Due Date:* Dec. 8, 2025 \n\nFindings matching the Active, Verified + and Severity criteria:\n|| Severity || CVE || CWE || Component || Version + || Title || Status ||\n|Critical|None|[0|]|Component A|None|[Critical|http://localhost:8080/finding/234]|Active, + Verified|\n|High|None|[0|]|Component A|None|[High|http://localhost:8080/finding/235]|Active, + Verified|\n\nFindings *not* matching the Active, Verified and Severity criteria:\n|| + Severity || CVE || CWE || Component || Version || Title || Status ||\n\n\n\n\n\n\n\n\n\n\nh1. + Findings\n\nh3. [Critical|http://localhost:8080/finding/234]\n*Defect Dojo + link:* http://localhost:8080/finding/234 (234)\n*Severity:* Critical\n *Due + Date:* Dec. 8, 2025 \n\n*CVE:* Unknown\n\n\n\n\n\n\n*Description*:\ntest\n\n\n\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n\n\n\nh1. Findings\n\nh3. [High|http://localhost:8080/finding/235]\n*Defect + Dojo link:* http://localhost:8080/finding/235 (235)\n*Severity:* High\n *Due + Date:* Dec. 31, 2025 \n\n*CVE:* Unknown\n\n\n\n\n\n\n*Description*:\ntest\n\n\n\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n","customfield_10010":null,"customfield_10014":null,"timetracking":{},"customfield_10015":null,"customfield_10005":null,"customfield_10006":null,"customfield_10007":null,"security":null,"customfield_10008":null,"attachment":[],"customfield_10009":null,"summary":"Findings + in: Component A","customfield_10001":null,"customfield_10002":[],"customfield_10123":null,"customfield_10003":null,"customfield_10004":null,"environment":null,"duedate":null,"comment":{"comments":[],"self":"https://defectdojo.atlassian.net/rest/api/2/issue/25285/comment","maxResults":0,"total":0,"startAt":0}}}' + headers: + Atl-Request-Id: + - 1f91ae6d-1878-45ba-87da-7d74c1468cd3 + Atl-Traceid: + - 1f91ae6d187845ba87da7d74c1468cd3 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 00:53:06 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=0,cdn-upstream-fbl;dur=264,atl-edge;dur=241,atl-edge-internal;dur=14,atl-edge-upstream;dur=225,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN53-P3",cdn-rid;desc="18ERnrb_hA4tI9uBSLjs8haG23-qe3wHzhUzbgHKr8vO83NgQzvlMA==",cdn-downstream-fbl;dur=268 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 1023ce3fdfbe06146e0996714c07ebcc.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - 18ERnrb_hA4tI9uBSLjs8haG23-qe3wHzhUzbgHKr8vO83NgQzvlMA== + X-Amz-Cf-Pop: + - DEN53-P3 + X-Arequestid: + - f68d61881d6b77d53c3df1ffd78f1386 + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '400' + X-Ratelimit-Remaining: + - '398' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/issue/createmeta?projectKeys=NTEST&issuetypeNames=Task&expand=projects.issuetypes.fields + response: + body: + string: '{"expand":"projects","projects":[{"expand":"issuetypes","self":"https://defectdojo.atlassian.net/rest/api/2/project/10000","id":"10000","key":"NTEST","name":"Unittests","avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=medium"},"issuetypes":[{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10002","id":"10002","description":"A + small, distinct piece of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","untranslatedName":"Task","subtask":false,"hierarchyLevel":0,"expand":"fields","fields":{"summary":{"required":true,"schema":{"type":"string","system":"summary"},"name":"Summary","key":"summary","hasDefaultValue":false,"operations":["set"]},"issuetype":{"required":true,"schema":{"type":"issuetype","system":"issuetype"},"name":"Issue + Type","key":"issuetype","hasDefaultValue":false,"operations":[],"allowedValues":[{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10002","id":"10002","description":"A + small, distinct piece of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","subtask":false,"avatarId":10318,"hierarchyLevel":0}]},"parent":{"required":false,"schema":{"type":"issuelink","system":"parent"},"name":"Parent","key":"parent","hasDefaultValue":false,"operations":["set"]},"components":{"required":false,"schema":{"type":"array","items":"component","system":"components"},"name":"Components","key":"components","hasDefaultValue":false,"operations":["add","set","remove"],"allowedValues":[]},"description":{"required":false,"schema":{"type":"string","system":"description"},"name":"Description","key":"description","hasDefaultValue":false,"operations":["set"]},"project":{"required":true,"schema":{"type":"project","system":"project"},"name":"Project","key":"project","hasDefaultValue":false,"operations":["set"],"allowedValues":[{"self":"https://defectdojo.atlassian.net/rest/api/2/project/10000","id":"10000","key":"NTEST","name":"Unittests","projectTypeKey":"software","simplified":false,"avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=medium"}}]},"fixVersions":{"required":false,"schema":{"type":"array","items":"version","system":"fixVersions"},"name":"Fix + versions","key":"fixVersions","hasDefaultValue":false,"operations":["set","add","remove"],"allowedValues":[]},"priority":{"required":false,"schema":{"type":"priority","system":"priority"},"name":"Priority","key":"priority","hasDefaultValue":true,"operations":["set"],"allowedValues":[{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/1","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/highest_new.svg","name":"Highest","id":"1"},{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/2","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/high_new.svg","name":"High","id":"2"},{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/3","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/medium_new.svg","name":"Medium","id":"3"},{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/4","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/low_new.svg","name":"Low","id":"4"},{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/5","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/lowest_new.svg","name":"Lowest","id":"5"}],"defaultValue":{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/3","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/medium_new.svg","name":"Medium","id":"3"}},"customfield_10014":{"required":false,"schema":{"type":"any","custom":"com.pyxis.greenhopper.jira:gh-epic-link","customId":10014},"name":"Epic + Link","key":"customfield_10014","hasDefaultValue":false,"operations":["set"]},"labels":{"required":false,"schema":{"type":"array","items":"string","system":"labels"},"name":"Labels","key":"labels","autoCompleteUrl":"https://defectdojo.atlassian.net/rest/api/1.0/labels/suggest?query=","hasDefaultValue":false,"operations":["add","set","remove"]},"attachment":{"required":false,"schema":{"type":"array","items":"attachment","system":"attachment"},"name":"Attachment","key":"attachment","hasDefaultValue":false,"operations":["set","copy"]},"issuelinks":{"required":false,"schema":{"type":"array","items":"issuelinks","system":"issuelinks"},"name":"Linked + Issues","key":"issuelinks","autoCompleteUrl":"https://defectdojo.atlassian.net/rest/api/2/issue/picker?currentProjectId=&showSubTaskParent=true&showSubTasks=true¤tIssueKey=null&query=","hasDefaultValue":false,"operations":["add","copy"]},"assignee":{"required":false,"schema":{"type":"user","system":"assignee"},"name":"Assignee","key":"assignee","autoCompleteUrl":"https://defectdojo.atlassian.net/rest/api/2/user/assignable/search?project=NTEST&query=","hasDefaultValue":false,"operations":["set"]}}}]}]}' + headers: + Atl-Request-Id: + - 2175377d-c9d9-4128-89cf-a67c97886e2e + Atl-Traceid: + - 2175377dc9d9412889cfa67c97886e2e + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 00:53:07 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=0,cdn-upstream-fbl;dur=367,atl-edge;dur=344,atl-edge-internal;dur=16,atl-edge-upstream;dur=328,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN53-P3",cdn-rid;desc="gdNlsBwX-ZVJUo-oiSMTFAd00LdphmJulHtcP7WkN0sUJKpqLRkYkg==",cdn-downstream-fbl;dur=371 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 d2ee90557b7dff69fea2eb2ff85880ec.cloudfront.net (CloudFront) + Warning: + - 'The issue create meta endpoint has been deprecated. (Deprecation start date: + June 03, 2024)' + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - gdNlsBwX-ZVJUo-oiSMTFAd00LdphmJulHtcP7WkN0sUJKpqLRkYkg== + X-Amz-Cf-Pop: + - DEN53-P3 + X-Arequestid: + - f16ac8de83e3817fa9a645143f41422e + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '350' + X-Ratelimit-Remaining: + - '349' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: '{"fields": {"project": {"key": "NTEST"}, "issuetype": {"name": "Task"}, + "summary": "Findings in: Component A", "description": "\n\n\n\n\n\n\n\nA group + of Findings has been pushed to JIRA to be investigated and fixed:\n\nh2. Group\n*Group*: + [Findings in: Component A|http://localhost:8080/finding_group/79] in [Security + How-to|http://localhost:8080/product/2] / [1st Quarter Engagement|http://localhost:8080/engagement/1] + / [Generic Findings Import|http://localhost:8080/test/92]\n\nh2. Summary\n*Severity:* + Critical *Due Date:* Dec. 8, 2025 \n\nFindings matching the Active, Verified + and Severity criteria:\n|| Severity || CVE || CWE || Component || Version || + Title || Status ||\n|Critical|None|[0|]|Component A|None|[Critical|http://localhost:8080/finding/234]|Active, + Verified|\n|High|None|[0|]|Component A|None|[High|http://localhost:8080/finding/235]|Active, + Verified|\n\nFindings *not* matching the Active, Verified and Severity criteria:\n|| + Severity || CVE || CWE || Component || Version || Title || Status ||\n\n\n\n\n\n\n\n\n\n\nh1. + Findings\n\nh3. [Critical|http://localhost:8080/finding/234]\n*Defect Dojo link:* + http://localhost:8080/finding/234 (234)\n*Severity:* Critical\n *Due Date:* + Dec. 8, 2025 \n\n*CVE:* Unknown\n\n\n\n\n\n\n*Description*:\ntest\n\n\n\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n\n\n\nh1. Findings\n\nh3. [High|http://localhost:8080/finding/235]\n*Defect + Dojo link:* http://localhost:8080/finding/235 (235)\n*Severity:* High\n *Due + Date:* Dec. 31, 2025 \n\n*CVE:* Unknown\n\n\n\n\n\n\n*Description*:\ntest\n\n\n\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n", "priority": {"name": "Highest"}}, "update": {}}' + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Length: + - '1663' + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: PUT + uri: https://defectdojo.atlassian.net/rest/api/2/issue/25285 + response: + body: + string: '' + headers: + Atl-Request-Id: + - 848a8591-b934-4033-ab22-c55af6fdfda7 + Atl-Traceid: + - 848a8591b9344033ab22c55af6fdfda7 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 00:53:07 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=0,cdn-upstream-fbl;dur=386,atl-edge;dur=363,atl-edge-internal;dur=17,atl-edge-upstream;dur=346,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN53-P2",cdn-rid;desc="cYykoOO8mm_GKpK1ZvlarkqKA4-NCDuWYjVw2YGja_tg6AW36jVMgA==",cdn-downstream-fbl;dur=391 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Vary: + - Accept-Encoding + Via: + - 1.1 92deee8348203aa783cce35d78bd0efe.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - cYykoOO8mm_GKpK1ZvlarkqKA4-NCDuWYjVw2YGja_tg6AW36jVMgA== + X-Amz-Cf-Pop: + - DEN53-P2 + X-Arequestid: + - cff447795f1fa9cc0129e0ab8addcf8a + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '300' + X-Ratelimit-Remaining: + - '299' + X-Xss-Protection: + - 1; mode=block + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/issue/25285 + response: + body: + string: '{"expand":"renderedFields,names,schema,operations,editmeta,changelog,versionedRepresentations,customfield_10010.requestTypePractice","id":"25285","self":"https://defectdojo.atlassian.net/rest/api/2/issue/25285","key":"NTEST-3244","fields":{"statuscategorychangedate":"2026-02-07T01:53:01.739+0100","fixVersions":[],"statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"},"resolution":null,"lastViewed":null,"customfield_10060":null,"customfield_10061":null,"customfield_10062":null,"customfield_10063":null,"customfield_10064":null,"customfield_10065":null,"customfield_10066":null,"priority":{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/1","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/highest_new.svg","name":"Highest","id":"1"},"labels":[],"timeestimate":null,"aggregatetimeoriginalestimate":null,"versions":[],"issuelinks":[],"assignee":null,"status":{"self":"https://defectdojo.atlassian.net/rest/api/2/status/10000","description":"","iconUrl":"https://defectdojo.atlassian.net/","name":"Backlog","id":"10000","statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"}},"components":[],"customfield_10050":null,"customfield_10051":null,"customfield_10053":null,"customfield_10055":null,"customfield_10056":null,"customfield_10057":null,"customfield_10058":null,"customfield_10059":null,"customfield_10049":null,"aggregatetimeestimate":null,"creator":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"subtasks":[],"customfield_10040":null,"customfield_10041":null,"customfield_10042":null,"reporter":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"customfield_10043":null,"aggregateprogress":{"progress":0,"total":0},"customfield_10044":null,"customfield_10045":null,"customfield_10046":null,"customfield_10047":null,"customfield_10048":null,"customfield_10038":null,"customfield_10039":null,"progress":{"progress":0,"total":0},"votes":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3244/votes","votes":0,"hasVoted":false},"worklog":{"startAt":0,"maxResults":20,"total":0,"worklogs":[]},"issuetype":{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10002","id":"10002","description":"A + small, distinct piece of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","subtask":false,"avatarId":10318,"hierarchyLevel":0},"timespent":null,"customfield_10030":null,"project":{"self":"https://defectdojo.atlassian.net/rest/api/2/project/10000","id":"10000","key":"NTEST","name":"Unittests","projectTypeKey":"software","simplified":false,"avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=medium"}},"customfield_10031":null,"customfield_10032":null,"customfield_10033":null,"aggregatetimespent":null,"customfield_10035":null,"customfield_10036":null,"customfield_10037":null,"customfield_10027":null,"customfield_10028":null,"customfield_10029":null,"resolutiondate":null,"workratio":-1,"watches":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3244/watchers","watchCount":1,"isWatching":true},"created":"2026-02-07T01:53:01.434+0100","customfield_10020":null,"customfield_10021":null,"customfield_10022":null,"customfield_10023":null,"customfield_10016":null,"customfield_10017":null,"customfield_10019":"0|i0150n:","updated":"2026-02-07T01:53:01.531+0100","customfield_10090":null,"timeoriginalestimate":null,"description":"\n\n\n\n\n\n\n\nA + group of Findings has been pushed to JIRA to be investigated and fixed:\n\nh2. + Group\n*Group*: [Findings in: Component A|http://localhost:8080/finding_group/79] + in [Security How-to|http://localhost:8080/product/2] / [1st Quarter Engagement|http://localhost:8080/engagement/1] + / [Generic Findings Import|http://localhost:8080/test/92]\n\nh2. Summary\n*Severity:* + Critical *Due Date:* Dec. 8, 2025 \n\nFindings matching the Active, Verified + and Severity criteria:\n|| Severity || CVE || CWE || Component || Version + || Title || Status ||\n|Critical|None|[0|]|Component A|None|[Critical|http://localhost:8080/finding/234]|Active, + Verified|\n|High|None|[0|]|Component A|None|[High|http://localhost:8080/finding/235]|Active, + Verified|\n\nFindings *not* matching the Active, Verified and Severity criteria:\n|| + Severity || CVE || CWE || Component || Version || Title || Status ||\n\n\n\n\n\n\n\n\n\n\nh1. + Findings\n\nh3. [Critical|http://localhost:8080/finding/234]\n*Defect Dojo + link:* http://localhost:8080/finding/234 (234)\n*Severity:* Critical\n *Due + Date:* Dec. 8, 2025 \n\n*CVE:* Unknown\n\n\n\n\n\n\n*Description*:\ntest\n\n\n\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n\n\n\nh1. Findings\n\nh3. [High|http://localhost:8080/finding/235]\n*Defect + Dojo link:* http://localhost:8080/finding/235 (235)\n*Severity:* High\n *Due + Date:* Dec. 31, 2025 \n\n*CVE:* Unknown\n\n\n\n\n\n\n*Description*:\ntest\n\n\n\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n","customfield_10010":null,"customfield_10014":null,"timetracking":{},"customfield_10015":null,"customfield_10005":null,"customfield_10006":null,"customfield_10007":null,"security":null,"customfield_10008":null,"attachment":[],"customfield_10009":null,"summary":"Findings + in: Component A","customfield_10001":null,"customfield_10002":[],"customfield_10123":null,"customfield_10003":null,"customfield_10004":null,"environment":null,"duedate":null,"comment":{"comments":[],"self":"https://defectdojo.atlassian.net/rest/api/2/issue/25285/comment","maxResults":0,"total":0,"startAt":0}}}' + headers: + Atl-Request-Id: + - 23fc3bf3-ec74-4238-8c2d-06f7dc898f5a + Atl-Traceid: + - 23fc3bf3ec7442388c2d06f7dc898f5a + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 00:53:08 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=66,cdn-upstream-fbl;dur=311,atl-edge;dur=222,atl-edge-internal;dur=17,atl-edge-upstream;dur=205,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN52-P3",cdn-rid;desc="mAAYD9ylYgXf1UhrbykGtJTaC_vdqIbPj0Y25V5AGpsFbPun_CJT-Q==",cdn-downstream-fbl;dur=315 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 3f8295ce0024dc68ca43a1b1a38c5bd6.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - mAAYD9ylYgXf1UhrbykGtJTaC_vdqIbPj0Y25V5AGpsFbPun_CJT-Q== + X-Amz-Cf-Pop: + - DEN52-P3 + X-Arequestid: + - 0c9d061348a3778aed00946c9630b8bb + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '400' + X-Ratelimit-Remaining: + - '399' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/serverInfo + response: + body: + string: '{"baseUrl":"https://defectdojo.atlassian.net","displayUrl":"https://defectdojo.atlassian.net","displayUrlServicedeskHelpCenter":"https://defectdojo.atlassian.net","displayUrlCSMHelpSeeker":"https://defectdojo.atlassian.net","displayUrlConfluence":"https://defectdojo.atlassian.net","version":"1001.0.0-SNAPSHOT","versionNumbers":[1001,0,0],"deploymentType":"Cloud","buildNumber":100290,"buildDate":"2026-02-06T12:38:29.000+0100","serverTime":"2026-02-07T01:53:08.265+0100","scmInfo":"9d700605f271b9e38f3e73c4116a686dae8d11d7","serverTitle":"Jira","defaultLocale":{"locale":"en_US"},"serverTimeZone":"Etc/UTC"}' + headers: + Atl-Request-Id: + - 7093c3bf-4e37-48f0-bd47-024222fffda1 + Atl-Traceid: + - 7093c3bf4e3748f0bd47024222fffda1 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 00:53:08 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=0,cdn-upstream-fbl;dur=188,atl-edge;dur=165,atl-edge-internal;dur=12,atl-edge-upstream;dur=152,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN52-P2",cdn-rid;desc="CMHxBVUSIltTc-5pYAO4FqCTZo7qexukrXVHjwTMt63x3znY_Vrbkg==",cdn-downstream-fbl;dur=192 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 d898fedd2c97412525c0a8011787cf32.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - CMHxBVUSIltTc-5pYAO4FqCTZo7qexukrXVHjwTMt63x3znY_Vrbkg== + X-Amz-Cf-Pop: + - DEN52-P2 + X-Arequestid: + - 33d9ca93b6baebfb8b0d9436738f413d + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '350' + X-Ratelimit-Remaining: + - '349' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/issue/25285 + response: + body: + string: '{"expand":"renderedFields,names,schema,operations,editmeta,changelog,versionedRepresentations,customfield_10010.requestTypePractice","id":"25285","self":"https://defectdojo.atlassian.net/rest/api/2/issue/25285","key":"NTEST-3244","fields":{"statuscategorychangedate":"2026-02-07T01:53:01.739+0100","fixVersions":[],"statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"},"resolution":null,"lastViewed":null,"customfield_10060":null,"customfield_10061":null,"customfield_10062":null,"customfield_10063":null,"customfield_10064":null,"customfield_10065":null,"customfield_10066":null,"priority":{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/1","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/highest_new.svg","name":"Highest","id":"1"},"labels":[],"timeestimate":null,"aggregatetimeoriginalestimate":null,"versions":[],"issuelinks":[],"assignee":null,"status":{"self":"https://defectdojo.atlassian.net/rest/api/2/status/10000","description":"","iconUrl":"https://defectdojo.atlassian.net/","name":"Backlog","id":"10000","statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"}},"components":[],"customfield_10050":null,"customfield_10051":null,"customfield_10053":null,"customfield_10055":null,"customfield_10056":null,"customfield_10057":null,"customfield_10058":null,"customfield_10059":null,"customfield_10049":null,"aggregatetimeestimate":null,"creator":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"subtasks":[],"customfield_10040":null,"customfield_10041":null,"customfield_10042":null,"reporter":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"customfield_10043":null,"aggregateprogress":{"progress":0,"total":0},"customfield_10044":null,"customfield_10045":null,"customfield_10046":null,"customfield_10047":null,"customfield_10048":null,"customfield_10038":null,"customfield_10039":null,"progress":{"progress":0,"total":0},"votes":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3244/votes","votes":0,"hasVoted":false},"worklog":{"startAt":0,"maxResults":20,"total":0,"worklogs":[]},"issuetype":{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10002","id":"10002","description":"A + small, distinct piece of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","subtask":false,"avatarId":10318,"hierarchyLevel":0},"timespent":null,"customfield_10030":null,"project":{"self":"https://defectdojo.atlassian.net/rest/api/2/project/10000","id":"10000","key":"NTEST","name":"Unittests","projectTypeKey":"software","simplified":false,"avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=medium"}},"customfield_10031":null,"customfield_10032":null,"customfield_10033":null,"aggregatetimespent":null,"customfield_10035":null,"customfield_10036":null,"customfield_10037":null,"customfield_10027":null,"customfield_10028":null,"customfield_10029":null,"resolutiondate":null,"workratio":-1,"watches":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3244/watchers","watchCount":1,"isWatching":true},"created":"2026-02-07T01:53:01.434+0100","customfield_10020":null,"customfield_10021":null,"customfield_10022":null,"customfield_10023":null,"customfield_10016":null,"customfield_10017":null,"customfield_10019":"0|i0150n:","updated":"2026-02-07T01:53:01.531+0100","customfield_10090":null,"timeoriginalestimate":null,"description":"\n\n\n\n\n\n\n\nA + group of Findings has been pushed to JIRA to be investigated and fixed:\n\nh2. + Group\n*Group*: [Findings in: Component A|http://localhost:8080/finding_group/79] + in [Security How-to|http://localhost:8080/product/2] / [1st Quarter Engagement|http://localhost:8080/engagement/1] + / [Generic Findings Import|http://localhost:8080/test/92]\n\nh2. Summary\n*Severity:* + Critical *Due Date:* Dec. 8, 2025 \n\nFindings matching the Active, Verified + and Severity criteria:\n|| Severity || CVE || CWE || Component || Version + || Title || Status ||\n|Critical|None|[0|]|Component A|None|[Critical|http://localhost:8080/finding/234]|Active, + Verified|\n|High|None|[0|]|Component A|None|[High|http://localhost:8080/finding/235]|Active, + Verified|\n\nFindings *not* matching the Active, Verified and Severity criteria:\n|| + Severity || CVE || CWE || Component || Version || Title || Status ||\n\n\n\n\n\n\n\n\n\n\nh1. + Findings\n\nh3. [Critical|http://localhost:8080/finding/234]\n*Defect Dojo + link:* http://localhost:8080/finding/234 (234)\n*Severity:* Critical\n *Due + Date:* Dec. 8, 2025 \n\n*CVE:* Unknown\n\n\n\n\n\n\n*Description*:\ntest\n\n\n\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n\n\n\nh1. Findings\n\nh3. [High|http://localhost:8080/finding/235]\n*Defect + Dojo link:* http://localhost:8080/finding/235 (235)\n*Severity:* High\n *Due + Date:* Dec. 31, 2025 \n\n*CVE:* Unknown\n\n\n\n\n\n\n*Description*:\ntest\n\n\n\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n","customfield_10010":null,"customfield_10014":null,"timetracking":{},"customfield_10015":null,"customfield_10005":null,"customfield_10006":null,"customfield_10007":null,"security":null,"customfield_10008":null,"attachment":[],"customfield_10009":null,"summary":"Findings + in: Component A","customfield_10001":null,"customfield_10002":[],"customfield_10123":null,"customfield_10003":null,"customfield_10004":null,"environment":null,"duedate":null,"comment":{"comments":[],"self":"https://defectdojo.atlassian.net/rest/api/2/issue/25285/comment","maxResults":0,"total":0,"startAt":0}}}' + headers: + Atl-Request-Id: + - c10917b0-1ed7-45d7-9e4b-6d660108a217 + Atl-Traceid: + - c10917b01ed745d79e4b6d660108a217 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 00:53:08 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=66,cdn-upstream-fbl;dur=372,atl-edge;dur=282,atl-edge-internal;dur=17,atl-edge-upstream;dur=265,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN53-P2",cdn-rid;desc="kJANG3WLYje9BEtCk__olOxw2lbLsF245qa8uSDlOYxQnRgTCiTYZw==",cdn-downstream-fbl;dur=376 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 3681f5bfbccc8d8a2e6e6b4b8c018b92.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - kJANG3WLYje9BEtCk__olOxw2lbLsF245qa8uSDlOYxQnRgTCiTYZw== + X-Amz-Cf-Pop: + - DEN53-P2 + X-Arequestid: + - d8afb30c423ae5b5dfd5c88693f44754 + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '400' + X-Ratelimit-Remaining: + - '398' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/issue/createmeta?projectKeys=NTEST&issuetypeNames=Task&expand=projects.issuetypes.fields + response: + body: + string: '{"expand":"projects","projects":[{"expand":"issuetypes","self":"https://defectdojo.atlassian.net/rest/api/2/project/10000","id":"10000","key":"NTEST","name":"Unittests","avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=medium"},"issuetypes":[{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10002","id":"10002","description":"A + small, distinct piece of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","untranslatedName":"Task","subtask":false,"hierarchyLevel":0,"expand":"fields","fields":{"summary":{"required":true,"schema":{"type":"string","system":"summary"},"name":"Summary","key":"summary","hasDefaultValue":false,"operations":["set"]},"issuetype":{"required":true,"schema":{"type":"issuetype","system":"issuetype"},"name":"Issue + Type","key":"issuetype","hasDefaultValue":false,"operations":[],"allowedValues":[{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10002","id":"10002","description":"A + small, distinct piece of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","subtask":false,"avatarId":10318,"hierarchyLevel":0}]},"parent":{"required":false,"schema":{"type":"issuelink","system":"parent"},"name":"Parent","key":"parent","hasDefaultValue":false,"operations":["set"]},"components":{"required":false,"schema":{"type":"array","items":"component","system":"components"},"name":"Components","key":"components","hasDefaultValue":false,"operations":["add","set","remove"],"allowedValues":[]},"description":{"required":false,"schema":{"type":"string","system":"description"},"name":"Description","key":"description","hasDefaultValue":false,"operations":["set"]},"project":{"required":true,"schema":{"type":"project","system":"project"},"name":"Project","key":"project","hasDefaultValue":false,"operations":["set"],"allowedValues":[{"self":"https://defectdojo.atlassian.net/rest/api/2/project/10000","id":"10000","key":"NTEST","name":"Unittests","projectTypeKey":"software","simplified":false,"avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=medium"}}]},"fixVersions":{"required":false,"schema":{"type":"array","items":"version","system":"fixVersions"},"name":"Fix + versions","key":"fixVersions","hasDefaultValue":false,"operations":["set","add","remove"],"allowedValues":[]},"priority":{"required":false,"schema":{"type":"priority","system":"priority"},"name":"Priority","key":"priority","hasDefaultValue":true,"operations":["set"],"allowedValues":[{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/1","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/highest_new.svg","name":"Highest","id":"1"},{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/2","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/high_new.svg","name":"High","id":"2"},{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/3","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/medium_new.svg","name":"Medium","id":"3"},{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/4","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/low_new.svg","name":"Low","id":"4"},{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/5","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/lowest_new.svg","name":"Lowest","id":"5"}],"defaultValue":{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/3","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/medium_new.svg","name":"Medium","id":"3"}},"customfield_10014":{"required":false,"schema":{"type":"any","custom":"com.pyxis.greenhopper.jira:gh-epic-link","customId":10014},"name":"Epic + Link","key":"customfield_10014","hasDefaultValue":false,"operations":["set"]},"labels":{"required":false,"schema":{"type":"array","items":"string","system":"labels"},"name":"Labels","key":"labels","autoCompleteUrl":"https://defectdojo.atlassian.net/rest/api/1.0/labels/suggest?query=","hasDefaultValue":false,"operations":["add","set","remove"]},"attachment":{"required":false,"schema":{"type":"array","items":"attachment","system":"attachment"},"name":"Attachment","key":"attachment","hasDefaultValue":false,"operations":["set","copy"]},"issuelinks":{"required":false,"schema":{"type":"array","items":"issuelinks","system":"issuelinks"},"name":"Linked + Issues","key":"issuelinks","autoCompleteUrl":"https://defectdojo.atlassian.net/rest/api/2/issue/picker?currentProjectId=&showSubTaskParent=true&showSubTasks=true¤tIssueKey=null&query=","hasDefaultValue":false,"operations":["add","copy"]},"assignee":{"required":false,"schema":{"type":"user","system":"assignee"},"name":"Assignee","key":"assignee","autoCompleteUrl":"https://defectdojo.atlassian.net/rest/api/2/user/assignable/search?project=NTEST&query=","hasDefaultValue":false,"operations":["set"]}}}]}]}' + headers: + Atl-Request-Id: + - c1ee9f62-d117-4d60-9ac1-8b18e10649b7 + Atl-Traceid: + - c1ee9f62d1174d609ac18b18e10649b7 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 00:53:09 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=66,cdn-upstream-fbl;dur=450,atl-edge;dur=360,atl-edge-internal;dur=17,atl-edge-upstream;dur=343,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN52-P3",cdn-rid;desc="5A6HkiLUjbaSHlFN1I3tG-PuCyszhVzt9x9kjLb4j6Tme_Z7_uWH-g==",cdn-downstream-fbl;dur=454 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 2049902380178fd7b885115d80ccf966.cloudfront.net (CloudFront) + Warning: + - 'The issue create meta endpoint has been deprecated. (Deprecation start date: + June 03, 2024)' + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - 5A6HkiLUjbaSHlFN1I3tG-PuCyszhVzt9x9kjLb4j6Tme_Z7_uWH-g== + X-Amz-Cf-Pop: + - DEN52-P3 + X-Arequestid: + - 7457669c9249a55c44c0224ac5c53417 + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '350' + X-Ratelimit-Remaining: + - '349' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: '{"fields": {"project": {"key": "NTEST"}, "issuetype": {"name": "Task"}, + "summary": "Findings in: Component A", "description": "\n\n\n\n\n\n\n\nA group + of Findings has been pushed to JIRA to be investigated and fixed:\n\nh2. Group\n*Group*: + [Findings in: Component A|http://localhost:8080/finding_group/79] in [Security + How-to|http://localhost:8080/product/2] / [1st Quarter Engagement|http://localhost:8080/engagement/1] + / [Generic Findings Import|http://localhost:8080/test/92]\n\nh2. Summary\n*Severity:* + Critical *Due Date:* Dec. 31, 2025 \n\nFindings matching the Active, Verified + and Severity criteria:\n|| Severity || CVE || CWE || Component || Version || + Title || Status ||\n|High|None|[0|]|Component A|None|[High|http://localhost:8080/finding/235]|Active, + Verified|\n\nFindings *not* matching the Active, Verified and Severity criteria:\n|| + Severity || CVE || CWE || Component || Version || Title || Status ||\n|Critical|None|[0|]|Component + A|None|[Critical|http://localhost:8080/finding/234]|Inactive, Verified, Mitigated|\n\n\n\n\n\n\n\n\n\n\nh1. + Findings\n\nh3. [Critical|http://localhost:8080/finding/234]\n*Defect Dojo link:* + http://localhost:8080/finding/234 (234)\n*Severity:* Critical\n *Due Date:* + Dec. 8, 2025 \n\n*CVE:* Unknown\n\n\n\n\n\n\n*Description*:\ntest\n\n\n\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n\n\n\nh1. Findings\n\nh3. [High|http://localhost:8080/finding/235]\n*Defect + Dojo link:* http://localhost:8080/finding/235 (235)\n*Severity:* High\n *Due + Date:* Dec. 31, 2025 \n\n*CVE:* Unknown\n\n\n\n\n\n\n*Description*:\ntest\n\n\n\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n", "priority": {"name": "High"}}, "update": {}}' + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Length: + - '1674' + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: PUT + uri: https://defectdojo.atlassian.net/rest/api/2/issue/25285 + response: + body: + string: '' + headers: + Atl-Request-Id: + - 1abe43f5-643b-4da1-a2b7-e2fcf6b59a91 + Atl-Traceid: + - 1abe43f5643b4da1a2b7e2fcf6b59a91 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 00:53:09 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=67,cdn-upstream-fbl;dur=591,atl-edge;dur=499,atl-edge-internal;dur=18,atl-edge-upstream;dur=481,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN53-P2",cdn-rid;desc="sbjEEq10cxZ94fP_kNlXC9hVJROqG69cyihgNGObabM4t2orsbrwvA==",cdn-downstream-fbl;dur=595 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Vary: + - Accept-Encoding + Via: + - 1.1 c7b824e75cbf9cd365bcdd74ef25829a.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - sbjEEq10cxZ94fP_kNlXC9hVJROqG69cyihgNGObabM4t2orsbrwvA== + X-Amz-Cf-Pop: + - DEN53-P2 + X-Arequestid: + - 0ef6fd0d5bbebb529f3d08ea2f90b7cd + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '300' + X-Ratelimit-Remaining: + - '299' + X-Xss-Protection: + - 1; mode=block + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/issue/25285 + response: + body: + string: '{"expand":"renderedFields,names,schema,operations,editmeta,changelog,versionedRepresentations,customfield_10010.requestTypePractice","id":"25285","self":"https://defectdojo.atlassian.net/rest/api/2/issue/25285","key":"NTEST-3244","fields":{"statuscategorychangedate":"2026-02-07T01:53:01.739+0100","fixVersions":[],"statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"},"resolution":null,"lastViewed":null,"customfield_10060":null,"customfield_10061":null,"customfield_10062":null,"customfield_10063":null,"customfield_10064":null,"customfield_10065":null,"customfield_10066":null,"priority":{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/2","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/high_new.svg","name":"High","id":"2"},"labels":[],"timeestimate":null,"aggregatetimeoriginalestimate":null,"versions":[],"issuelinks":[],"assignee":null,"status":{"self":"https://defectdojo.atlassian.net/rest/api/2/status/10000","description":"","iconUrl":"https://defectdojo.atlassian.net/","name":"Backlog","id":"10000","statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"}},"components":[],"customfield_10050":null,"customfield_10051":null,"customfield_10053":null,"customfield_10055":null,"customfield_10056":null,"customfield_10057":null,"customfield_10058":null,"customfield_10059":null,"customfield_10049":null,"aggregatetimeestimate":null,"creator":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"subtasks":[],"customfield_10040":null,"customfield_10041":null,"customfield_10042":null,"reporter":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"customfield_10043":null,"aggregateprogress":{"progress":0,"total":0},"customfield_10044":null,"customfield_10045":null,"customfield_10046":null,"customfield_10047":null,"customfield_10048":null,"customfield_10038":null,"customfield_10039":null,"progress":{"progress":0,"total":0},"votes":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3244/votes","votes":0,"hasVoted":false},"worklog":{"startAt":0,"maxResults":20,"total":0,"worklogs":[]},"issuetype":{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10002","id":"10002","description":"A + small, distinct piece of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","subtask":false,"avatarId":10318,"hierarchyLevel":0},"timespent":null,"customfield_10030":null,"project":{"self":"https://defectdojo.atlassian.net/rest/api/2/project/10000","id":"10000","key":"NTEST","name":"Unittests","projectTypeKey":"software","simplified":false,"avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=medium"}},"customfield_10031":null,"customfield_10032":null,"customfield_10033":null,"aggregatetimespent":null,"customfield_10035":null,"customfield_10036":null,"customfield_10037":null,"customfield_10027":null,"customfield_10028":null,"customfield_10029":null,"resolutiondate":null,"workratio":-1,"watches":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3244/watchers","watchCount":1,"isWatching":true},"created":"2026-02-07T01:53:01.434+0100","customfield_10020":null,"customfield_10021":null,"customfield_10022":null,"customfield_10023":null,"customfield_10016":null,"customfield_10017":null,"customfield_10019":"0|i0150n:","updated":"2026-02-07T01:53:09.712+0100","customfield_10090":null,"timeoriginalestimate":null,"description":"\n\n\n\n\n\n\n\nA + group of Findings has been pushed to JIRA to be investigated and fixed:\n\nh2. + Group\n*Group*: [Findings in: Component A|http://localhost:8080/finding_group/79] + in [Security How-to|http://localhost:8080/product/2] / [1st Quarter Engagement|http://localhost:8080/engagement/1] + / [Generic Findings Import|http://localhost:8080/test/92]\n\nh2. Summary\n*Severity:* + Critical *Due Date:* Dec. 31, 2025 \n\nFindings matching the Active, Verified + and Severity criteria:\n|| Severity || CVE || CWE || Component || Version + || Title || Status ||\n|High|None|[0|]|Component A|None|[High|http://localhost:8080/finding/235]|Active, + Verified|\n\nFindings *not* matching the Active, Verified and Severity criteria:\n|| + Severity || CVE || CWE || Component || Version || Title || Status ||\n|Critical|None|[0|]|Component + A|None|[Critical|http://localhost:8080/finding/234]|Inactive, Verified, Mitigated|\n\n\n\n\n\n\n\n\n\n\nh1. + Findings\n\nh3. [Critical|http://localhost:8080/finding/234]\n*Defect Dojo + link:* http://localhost:8080/finding/234 (234)\n*Severity:* Critical\n *Due + Date:* Dec. 8, 2025 \n\n*CVE:* Unknown\n\n\n\n\n\n\n*Description*:\ntest\n\n\n\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n\n\n\nh1. Findings\n\nh3. [High|http://localhost:8080/finding/235]\n*Defect + Dojo link:* http://localhost:8080/finding/235 (235)\n*Severity:* High\n *Due + Date:* Dec. 31, 2025 \n\n*CVE:* Unknown\n\n\n\n\n\n\n*Description*:\ntest\n\n\n\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n","customfield_10010":null,"customfield_10014":null,"timetracking":{},"customfield_10015":null,"customfield_10005":null,"customfield_10006":null,"customfield_10007":null,"security":null,"customfield_10008":null,"attachment":[],"customfield_10009":null,"summary":"Findings + in: Component A","customfield_10001":null,"customfield_10002":[],"customfield_10123":null,"customfield_10003":null,"customfield_10004":null,"environment":null,"duedate":null,"comment":{"comments":[],"self":"https://defectdojo.atlassian.net/rest/api/2/issue/25285/comment","maxResults":0,"total":0,"startAt":0}}}' + headers: + Atl-Request-Id: + - 4980d267-8b98-43bb-9122-b9669a377466 + Atl-Traceid: + - 4980d2678b9843bb9122b9669a377466 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 00:53:10 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=67,cdn-upstream-fbl;dur=340,atl-edge;dur=249,atl-edge-internal;dur=17,atl-edge-upstream;dur=232,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN52-P3",cdn-rid;desc="5AixmPhIqJsi6kZNlZpUyZ5gFCHq2jma58Lf9ZjIPSa1GZPCbXU9Ug==",cdn-downstream-fbl;dur=343 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 64544648f8289d0bd61ef02997afb698.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - 5AixmPhIqJsi6kZNlZpUyZ5gFCHq2jma58Lf9ZjIPSa1GZPCbXU9Ug== + X-Amz-Cf-Pop: + - DEN52-P3 + X-Arequestid: + - 56a123dedd7a64b0f053b795b6fcc567 + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '400' + X-Ratelimit-Remaining: + - '399' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: '{"description": "Event scan_added has occurred.", "title": "Created/Updated + 1 findings for Security How-to: 1st Quarter Engagement: Generic Findings Import", + "user": null, "url_ui": "http://localhost:8080/test/92", "url_api": "http://localhost:8080/api/v2/tests/92/", + "product_type": {"name": "ebooks", "id": 2, "url_ui": "http://localhost:8080/product/type/2", + "url_api": "http://localhost:8080/api/v2/product_types/2/"}, "product": {"name": + "Security How-to", "id": 2, "url_ui": "http://localhost:8080/product/2", "url_api": + "http://localhost:8080/api/v2/products/2/"}, "engagement": {"name": "1st Quarter + Engagement", "id": 1, "url_ui": "http://localhost:8080/engagement/1", "url_api": + "http://localhost:8080/api/v2/engagements/1/"}, "test": {"title": null, "id": + 92, "url_ui": "http://localhost:8080/test/92", "url_api": "http://localhost:8080/api/v2/tests/92/"}, + "finding_count": 1, "findings": {"new": [], "reactivated": [], "mitigated": + [{"id": 234, "title": "Critical", "severity": "Critical", "url_ui": "http://localhost:8080/finding/234", + "url_api": "http://localhost:8080/api/v2/findings/234/"}], "untouched": [{"id": + 235, "title": "High", "severity": "High", "url_ui": "http://localhost:8080/finding/235", + "url_api": "http://localhost:8080/api/v2/findings/235/"}]}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Auth: + - Token xxx + Connection: + - keep-alive + Content-Length: + - '1277' + Content-Type: + - application/json + User-Agent: + - DefectDojo-2.55.1 + X-DefectDojo-Event: + - scan_added + X-DefectDojo-Instance: + - http://localhost:8080 + method: POST + uri: http://webhook.endpoint:8080/post + response: + body: + string: "{\n \"args\": {},\n \"headers\": {\n \"Accept\": [\n \"application/json\"\n + \ ],\n \"Accept-Encoding\": [\n \"gzip, deflate\"\n ],\n \"Auth\": + [\n \"Token xxx\"\n ],\n \"Connection\": [\n \"keep-alive\"\n + \ ],\n \"Content-Length\": [\n \"1277\"\n ],\n \"Content-Type\": + [\n \"application/json\"\n ],\n \"Host\": [\n \"webhook.endpoint:8080\"\n + \ ],\n \"User-Agent\": [\n \"DefectDojo-2.55.1\"\n ],\n \"X-Defectdojo-Event\": + [\n \"scan_added\"\n ],\n \"X-Defectdojo-Instance\": [\n \"http://localhost:8080\"\n + \ ]\n },\n \"method\": \"POST\",\n \"origin\": \"172.18.0.8\",\n \"url\": + \"http://webhook.endpoint:8080/post\",\n \"data\": \"{\\\"description\\\": + \\\"Event scan_added has occurred.\\\", \\\"title\\\": \\\"Created/Updated + 1 findings for Security How-to: 1st Quarter Engagement: Generic Findings Import\\\", + \\\"user\\\": null, \\\"url_ui\\\": \\\"http://localhost:8080/test/92\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/tests/92/\\\", \\\"product_type\\\": + {\\\"name\\\": \\\"ebooks\\\", \\\"id\\\": 2, \\\"url_ui\\\": \\\"http://localhost:8080/product/type/2\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/product_types/2/\\\"}, \\\"product\\\": + {\\\"name\\\": \\\"Security How-to\\\", \\\"id\\\": 2, \\\"url_ui\\\": \\\"http://localhost:8080/product/2\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/products/2/\\\"}, \\\"engagement\\\": + {\\\"name\\\": \\\"1st Quarter Engagement\\\", \\\"id\\\": 1, \\\"url_ui\\\": + \\\"http://localhost:8080/engagement/1\\\", \\\"url_api\\\": \\\"http://localhost:8080/api/v2/engagements/1/\\\"}, + \\\"test\\\": {\\\"title\\\": null, \\\"id\\\": 92, \\\"url_ui\\\": \\\"http://localhost:8080/test/92\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/tests/92/\\\"}, \\\"finding_count\\\": + 1, \\\"findings\\\": {\\\"new\\\": [], \\\"reactivated\\\": [], \\\"mitigated\\\": + [{\\\"id\\\": 234, \\\"title\\\": \\\"Critical\\\", \\\"severity\\\": \\\"Critical\\\", + \\\"url_ui\\\": \\\"http://localhost:8080/finding/234\\\", \\\"url_api\\\": + \\\"http://localhost:8080/api/v2/findings/234/\\\"}], \\\"untouched\\\": [{\\\"id\\\": + 235, \\\"title\\\": \\\"High\\\", \\\"severity\\\": \\\"High\\\", \\\"url_ui\\\": + \\\"http://localhost:8080/finding/235\\\", \\\"url_api\\\": \\\"http://localhost:8080/api/v2/findings/235/\\\"}]}}\",\n + \ \"files\": {},\n \"form\": {},\n \"json\": {\n \"description\": \"Event + scan_added has occurred.\",\n \"engagement\": {\n \"id\": 1,\n \"name\": + \"1st Quarter Engagement\",\n \"url_api\": \"http://localhost:8080/api/v2/engagements/1/\",\n + \ \"url_ui\": \"http://localhost:8080/engagement/1\"\n },\n \"finding_count\": + 1,\n \"findings\": {\n \"mitigated\": [\n {\n \"id\": + 234,\n \"severity\": \"Critical\",\n \"title\": \"Critical\",\n + \ \"url_api\": \"http://localhost:8080/api/v2/findings/234/\",\n \"url_ui\": + \"http://localhost:8080/finding/234\"\n }\n ],\n \"new\": + [],\n \"reactivated\": [],\n \"untouched\": [\n {\n \"id\": + 235,\n \"severity\": \"High\",\n \"title\": \"High\",\n + \ \"url_api\": \"http://localhost:8080/api/v2/findings/235/\",\n \"url_ui\": + \"http://localhost:8080/finding/235\"\n }\n ]\n },\n \"product\": + {\n \"id\": 2,\n \"name\": \"Security How-to\",\n \"url_api\": + \"http://localhost:8080/api/v2/products/2/\",\n \"url_ui\": \"http://localhost:8080/product/2\"\n + \ },\n \"product_type\": {\n \"id\": 2,\n \"name\": \"ebooks\",\n + \ \"url_api\": \"http://localhost:8080/api/v2/product_types/2/\",\n \"url_ui\": + \"http://localhost:8080/product/type/2\"\n },\n \"test\": {\n \"id\": + 92,\n \"title\": null,\n \"url_api\": \"http://localhost:8080/api/v2/tests/92/\",\n + \ \"url_ui\": \"http://localhost:8080/test/92\"\n },\n \"title\": + \"Created/Updated 1 findings for Security How-to: 1st Quarter Engagement: + Generic Findings Import\",\n \"url_api\": \"http://localhost:8080/api/v2/tests/92/\",\n + \ \"url_ui\": \"http://localhost:8080/test/92\",\n \"user\": null\n }\n}\n" + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Origin: + - '*' + Content-Type: + - application/json; charset=utf-8 + Date: + - Sat, 07 Feb 2026 00:53:10 GMT + Transfer-Encoding: + - chunked + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/serverInfo + response: + body: + string: '{"baseUrl":"https://defectdojo.atlassian.net","displayUrl":"https://defectdojo.atlassian.net","displayUrlServicedeskHelpCenter":"https://defectdojo.atlassian.net","displayUrlCSMHelpSeeker":"https://defectdojo.atlassian.net","displayUrlConfluence":"https://defectdojo.atlassian.net","version":"1001.0.0-SNAPSHOT","versionNumbers":[1001,0,0],"deploymentType":"Cloud","buildNumber":100290,"buildDate":"2026-02-06T12:38:29.000+0100","serverTime":"2026-02-07T01:53:10.639+0100","scmInfo":"9d700605f271b9e38f3e73c4116a686dae8d11d7","serverTitle":"Jira","defaultLocale":{"locale":"en_US"},"serverTimeZone":"Etc/UTC"}' + headers: + Atl-Request-Id: + - 253a56a2-112c-4110-b686-301e2b32c194 + Atl-Traceid: + - 253a56a2112c4110b686301e2b32c194 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 00:53:10 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=0,cdn-upstream-fbl;dur=186,atl-edge;dur=164,atl-edge-internal;dur=15,atl-edge-upstream;dur=148,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN52-P2",cdn-rid;desc="R3I8-rU1OJ0fa-FegyQS7jYrt4_WRsvnm6-DkFx2tRAihg7zmjVTRQ==",cdn-downstream-fbl;dur=190 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 f9a5caa2a18f480171fad57618db559e.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - R3I8-rU1OJ0fa-FegyQS7jYrt4_WRsvnm6-DkFx2tRAihg7zmjVTRQ== + X-Amz-Cf-Pop: + - DEN52-P2 + X-Arequestid: + - 479092324971ce5c1ceb809cda7996ac + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '350' + X-Ratelimit-Remaining: + - '349' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/issue/25285 + response: + body: + string: '{"expand":"renderedFields,names,schema,operations,editmeta,changelog,versionedRepresentations,customfield_10010.requestTypePractice","id":"25285","self":"https://defectdojo.atlassian.net/rest/api/2/issue/25285","key":"NTEST-3244","fields":{"statuscategorychangedate":"2026-02-07T01:53:01.739+0100","fixVersions":[],"statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"},"resolution":null,"lastViewed":null,"customfield_10060":null,"customfield_10061":null,"customfield_10062":null,"customfield_10063":null,"customfield_10064":null,"customfield_10065":null,"customfield_10066":null,"priority":{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/2","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/high_new.svg","name":"High","id":"2"},"labels":[],"timeestimate":null,"aggregatetimeoriginalestimate":null,"versions":[],"issuelinks":[],"assignee":null,"status":{"self":"https://defectdojo.atlassian.net/rest/api/2/status/10000","description":"","iconUrl":"https://defectdojo.atlassian.net/","name":"Backlog","id":"10000","statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"}},"components":[],"customfield_10050":null,"customfield_10051":null,"customfield_10053":null,"customfield_10055":null,"customfield_10056":null,"customfield_10057":null,"customfield_10058":null,"customfield_10059":null,"customfield_10049":null,"aggregatetimeestimate":null,"creator":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"subtasks":[],"customfield_10040":null,"customfield_10041":null,"customfield_10042":null,"reporter":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"customfield_10043":null,"aggregateprogress":{"progress":0,"total":0},"customfield_10044":null,"customfield_10045":null,"customfield_10046":null,"customfield_10047":null,"customfield_10048":null,"customfield_10038":null,"customfield_10039":null,"progress":{"progress":0,"total":0},"votes":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3244/votes","votes":0,"hasVoted":false},"worklog":{"startAt":0,"maxResults":20,"total":0,"worklogs":[]},"issuetype":{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10002","id":"10002","description":"A + small, distinct piece of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","subtask":false,"avatarId":10318,"hierarchyLevel":0},"timespent":null,"customfield_10030":null,"project":{"self":"https://defectdojo.atlassian.net/rest/api/2/project/10000","id":"10000","key":"NTEST","name":"Unittests","projectTypeKey":"software","simplified":false,"avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=medium"}},"customfield_10031":null,"customfield_10032":null,"customfield_10033":null,"aggregatetimespent":null,"customfield_10035":null,"customfield_10036":null,"customfield_10037":null,"customfield_10027":null,"customfield_10028":null,"customfield_10029":null,"resolutiondate":null,"workratio":-1,"watches":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3244/watchers","watchCount":1,"isWatching":true},"created":"2026-02-07T01:53:01.434+0100","customfield_10020":null,"customfield_10021":null,"customfield_10022":null,"customfield_10023":null,"customfield_10016":null,"customfield_10017":null,"customfield_10019":"0|i0150n:","updated":"2026-02-07T01:53:09.712+0100","customfield_10090":null,"timeoriginalestimate":null,"description":"\n\n\n\n\n\n\n\nA + group of Findings has been pushed to JIRA to be investigated and fixed:\n\nh2. + Group\n*Group*: [Findings in: Component A|http://localhost:8080/finding_group/79] + in [Security How-to|http://localhost:8080/product/2] / [1st Quarter Engagement|http://localhost:8080/engagement/1] + / [Generic Findings Import|http://localhost:8080/test/92]\n\nh2. Summary\n*Severity:* + Critical *Due Date:* Dec. 31, 2025 \n\nFindings matching the Active, Verified + and Severity criteria:\n|| Severity || CVE || CWE || Component || Version + || Title || Status ||\n|High|None|[0|]|Component A|None|[High|http://localhost:8080/finding/235]|Active, + Verified|\n\nFindings *not* matching the Active, Verified and Severity criteria:\n|| + Severity || CVE || CWE || Component || Version || Title || Status ||\n|Critical|None|[0|]|Component + A|None|[Critical|http://localhost:8080/finding/234]|Inactive, Verified, Mitigated|\n\n\n\n\n\n\n\n\n\n\nh1. + Findings\n\nh3. [Critical|http://localhost:8080/finding/234]\n*Defect Dojo + link:* http://localhost:8080/finding/234 (234)\n*Severity:* Critical\n *Due + Date:* Dec. 8, 2025 \n\n*CVE:* Unknown\n\n\n\n\n\n\n*Description*:\ntest\n\n\n\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n\n\n\nh1. Findings\n\nh3. [High|http://localhost:8080/finding/235]\n*Defect + Dojo link:* http://localhost:8080/finding/235 (235)\n*Severity:* High\n *Due + Date:* Dec. 31, 2025 \n\n*CVE:* Unknown\n\n\n\n\n\n\n*Description*:\ntest\n\n\n\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n","customfield_10010":null,"customfield_10014":null,"timetracking":{},"customfield_10015":null,"customfield_10005":null,"customfield_10006":null,"customfield_10007":null,"security":null,"customfield_10008":null,"attachment":[],"customfield_10009":null,"summary":"Findings + in: Component A","customfield_10001":null,"customfield_10002":[],"customfield_10123":null,"customfield_10003":null,"customfield_10004":null,"environment":null,"duedate":null,"comment":{"comments":[],"self":"https://defectdojo.atlassian.net/rest/api/2/issue/25285/comment","maxResults":0,"total":0,"startAt":0}}}' + headers: + Atl-Request-Id: + - b6fb56b8-86ba-4927-a032-c476c77dde16 + Atl-Traceid: + - b6fb56b886ba4927a032c476c77dde16 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 00:53:11 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=68,cdn-upstream-fbl;dur=333,atl-edge;dur=242,atl-edge-internal;dur=17,atl-edge-upstream;dur=224,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN53-P2",cdn-rid;desc="NM9qhv5hrdZVdX-Ksgrl_bm7SmOxtrxjt-nK01QF_-Bh4WCW6oKQig==",cdn-downstream-fbl;dur=339 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 da745b01c27611dac38d175371cb7b54.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - NM9qhv5hrdZVdX-Ksgrl_bm7SmOxtrxjt-nK01QF_-Bh4WCW6oKQig== + X-Amz-Cf-Pop: + - DEN53-P2 + X-Arequestid: + - a181e7ce16261b6d6d0a532da84be3a3 + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '400' + X-Ratelimit-Remaining: + - '398' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +version: 1 diff --git a/unittests/vcr/jira/JIRAImportAndPushTestApi.test_keep_sync_push_finding_groups_then_reimport_empty_file_with_no_push_change_status.yaml b/unittests/vcr/jira/JIRAImportAndPushTestApi.test_keep_sync_push_finding_groups_then_reimport_empty_file_with_no_push_change_status.yaml new file mode 100644 index 00000000000..aa2eb75835e --- /dev/null +++ b/unittests/vcr/jira/JIRAImportAndPushTestApi.test_keep_sync_push_finding_groups_then_reimport_empty_file_with_no_push_change_status.yaml @@ -0,0 +1,1631 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/serverInfo + response: + body: + string: '{"baseUrl":"https://defectdojo.atlassian.net","displayUrl":"https://defectdojo.atlassian.net","displayUrlServicedeskHelpCenter":"https://defectdojo.atlassian.net","displayUrlCSMHelpSeeker":"https://defectdojo.atlassian.net","displayUrlConfluence":"https://defectdojo.atlassian.net","version":"1001.0.0-SNAPSHOT","versionNumbers":[1001,0,0],"deploymentType":"Cloud","buildNumber":100290,"buildDate":"2026-02-06T12:38:29.000+0100","serverTime":"2026-02-07T01:53:36.502+0100","scmInfo":"9d700605f271b9e38f3e73c4116a686dae8d11d7","serverTitle":"Jira","defaultLocale":{"locale":"en_US"},"serverTimeZone":"Etc/UTC"}' + headers: + Atl-Request-Id: + - 60fb0760-563f-4ad7-aa06-c125bad687e5 + Atl-Traceid: + - 60fb0760563f4ad7aa06c125bad687e5 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 00:53:36 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=66,cdn-upstream-fbl;dur=258,atl-edge;dur=169,atl-edge-internal;dur=15,atl-edge-upstream;dur=154,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN52-P3",cdn-rid;desc="IjVGwN4Lo6uI4UM172fAahdo5e-BpA_8OG--aBEkdINyYgu1rgR2Lw==",cdn-downstream-fbl;dur=262 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 c1e0a7ac577ef4659f75bd73a73531f6.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - IjVGwN4Lo6uI4UM172fAahdo5e-BpA_8OG--aBEkdINyYgu1rgR2Lw== + X-Amz-Cf-Pop: + - DEN52-P3 + X-Arequestid: + - c7f7e61e3ef849dc0d043ce7a09c6743 + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '350' + X-Ratelimit-Remaining: + - '349' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/issue/createmeta?projectKeys=NTEST&issuetypeNames=Task&expand=projects.issuetypes.fields + response: + body: + string: '{"expand":"projects","projects":[{"expand":"issuetypes","self":"https://defectdojo.atlassian.net/rest/api/2/project/10000","id":"10000","key":"NTEST","name":"Unittests","avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=medium"},"issuetypes":[{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10002","id":"10002","description":"A + small, distinct piece of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","untranslatedName":"Task","subtask":false,"hierarchyLevel":0,"expand":"fields","fields":{"summary":{"required":true,"schema":{"type":"string","system":"summary"},"name":"Summary","key":"summary","hasDefaultValue":false,"operations":["set"]},"issuetype":{"required":true,"schema":{"type":"issuetype","system":"issuetype"},"name":"Issue + Type","key":"issuetype","hasDefaultValue":false,"operations":[],"allowedValues":[{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10002","id":"10002","description":"A + small, distinct piece of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","subtask":false,"avatarId":10318,"hierarchyLevel":0}]},"parent":{"required":false,"schema":{"type":"issuelink","system":"parent"},"name":"Parent","key":"parent","hasDefaultValue":false,"operations":["set"]},"components":{"required":false,"schema":{"type":"array","items":"component","system":"components"},"name":"Components","key":"components","hasDefaultValue":false,"operations":["add","set","remove"],"allowedValues":[]},"description":{"required":false,"schema":{"type":"string","system":"description"},"name":"Description","key":"description","hasDefaultValue":false,"operations":["set"]},"project":{"required":true,"schema":{"type":"project","system":"project"},"name":"Project","key":"project","hasDefaultValue":false,"operations":["set"],"allowedValues":[{"self":"https://defectdojo.atlassian.net/rest/api/2/project/10000","id":"10000","key":"NTEST","name":"Unittests","projectTypeKey":"software","simplified":false,"avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=medium"}}]},"fixVersions":{"required":false,"schema":{"type":"array","items":"version","system":"fixVersions"},"name":"Fix + versions","key":"fixVersions","hasDefaultValue":false,"operations":["set","add","remove"],"allowedValues":[]},"priority":{"required":false,"schema":{"type":"priority","system":"priority"},"name":"Priority","key":"priority","hasDefaultValue":true,"operations":["set"],"allowedValues":[{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/1","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/highest_new.svg","name":"Highest","id":"1"},{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/2","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/high_new.svg","name":"High","id":"2"},{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/3","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/medium_new.svg","name":"Medium","id":"3"},{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/4","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/low_new.svg","name":"Low","id":"4"},{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/5","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/lowest_new.svg","name":"Lowest","id":"5"}],"defaultValue":{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/3","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/medium_new.svg","name":"Medium","id":"3"}},"customfield_10014":{"required":false,"schema":{"type":"any","custom":"com.pyxis.greenhopper.jira:gh-epic-link","customId":10014},"name":"Epic + Link","key":"customfield_10014","hasDefaultValue":false,"operations":["set"]},"labels":{"required":false,"schema":{"type":"array","items":"string","system":"labels"},"name":"Labels","key":"labels","autoCompleteUrl":"https://defectdojo.atlassian.net/rest/api/1.0/labels/suggest?query=","hasDefaultValue":false,"operations":["add","set","remove"]},"attachment":{"required":false,"schema":{"type":"array","items":"attachment","system":"attachment"},"name":"Attachment","key":"attachment","hasDefaultValue":false,"operations":["set","copy"]},"issuelinks":{"required":false,"schema":{"type":"array","items":"issuelinks","system":"issuelinks"},"name":"Linked + Issues","key":"issuelinks","autoCompleteUrl":"https://defectdojo.atlassian.net/rest/api/2/issue/picker?currentProjectId=&showSubTaskParent=true&showSubTasks=true¤tIssueKey=null&query=","hasDefaultValue":false,"operations":["add","copy"]},"assignee":{"required":false,"schema":{"type":"user","system":"assignee"},"name":"Assignee","key":"assignee","autoCompleteUrl":"https://defectdojo.atlassian.net/rest/api/2/user/assignable/search?project=NTEST&query=","hasDefaultValue":false,"operations":["set"]}}}]}]}' + headers: + Atl-Request-Id: + - 7e3fb768-be4b-4799-be00-759bf06f3095 + Atl-Traceid: + - 7e3fb768be4b4799be00759bf06f3095 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 00:53:37 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=67,cdn-upstream-fbl;dur=444,atl-edge;dur=354,atl-edge-internal;dur=17,atl-edge-upstream;dur=337,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN53-P3",cdn-rid;desc="aos9PS6_9340ZR2U411rAysiGU0X8TqjgZHJrG_wckhl1Ds5WTgfLQ==",cdn-downstream-fbl;dur=448 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 0952fdd661cdbb703496fdb1bd8ea4a2.cloudfront.net (CloudFront) + Warning: + - 'The issue create meta endpoint has been deprecated. (Deprecation start date: + June 03, 2024)' + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - aos9PS6_9340ZR2U411rAysiGU0X8TqjgZHJrG_wckhl1Ds5WTgfLQ== + X-Amz-Cf-Pop: + - DEN53-P3 + X-Arequestid: + - 92cdebd1e6e96125bf367b61814edde7 + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '350' + X-Ratelimit-Remaining: + - '349' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: '{"fields": {"project": {"key": "NTEST"}, "issuetype": {"name": "Task"}, + "summary": "Findings in: Component A", "description": "\n\n\n\n\n\n\n\nA group + of Findings has been pushed to JIRA to be investigated and fixed:\n\nh2. Group\n*Group*: + [Findings in: Component A|http://localhost:8080/finding_group/80] in [Security + How-to|http://localhost:8080/product/2] / [1st Quarter Engagement|http://localhost:8080/engagement/1] + / [Generic Findings Import|http://localhost:8080/test/92]\n\nh2. Summary\n*Severity:* + Critical *Due Date:* Dec. 8, 2025 \n\nFindings matching the Active, Verified + and Severity criteria:\n|| Severity || CVE || CWE || Component || Version || + Title || Status ||\n|Critical|None|[0|]|Component A|None|[Critical|http://localhost:8080/finding/234]|Active, + Verified|\n|High|None|[0|]|Component A|None|[High|http://localhost:8080/finding/235]|Active, + Verified|\n\nFindings *not* matching the Active, Verified and Severity criteria:\n|| + Severity || CVE || CWE || Component || Version || Title || Status ||\n\n\n\n\n\n\n\n\n\n\nh1. + Findings\n\nh3. [Critical|http://localhost:8080/finding/234]\n*Defect Dojo link:* + http://localhost:8080/finding/234 (234)\n*Severity:* Critical\n *Due Date:* + Dec. 8, 2025 \n\n*CVE:* Unknown\n\n\n\n\n\n\n*Description*:\ntest\n\n\n\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n\n\n\nh1. Findings\n\nh3. [High|http://localhost:8080/finding/235]\n*Defect + Dojo link:* http://localhost:8080/finding/235 (235)\n*Severity:* High\n *Due + Date:* Dec. 31, 2025 \n\n*CVE:* Unknown\n\n\n\n\n\n\n*Description*:\ntest\n\n\n\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n", "priority": {"name": "Highest"}}}' + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Length: + - '1649' + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: POST + uri: https://defectdojo.atlassian.net/rest/api/2/issue + response: + body: + string: '{"id":"25286","key":"NTEST-3245","self":"https://defectdojo.atlassian.net/rest/api/2/issue/25286"}' + headers: + Atl-Request-Id: + - f1735d3c-8ac5-4d75-9f9a-df6fd5c40fd1 + Atl-Traceid: + - f1735d3c8ac54d759f9adf6fd5c40fd1 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 00:53:37 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=0,cdn-upstream-fbl;dur=642,atl-edge;dur=619,atl-edge-internal;dur=16,atl-edge-upstream;dur=603,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN53-P1",cdn-rid;desc="XMO9pMZJtFd4jy_968B5YDP4CB2fTRTvG6XllRHyaQSZkQV5C8L-Tw==",cdn-downstream-fbl;dur=646 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 fa6b9e1b41b3cd4347ebce8cef156f7a.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - XMO9pMZJtFd4jy_968B5YDP4CB2fTRTvG6XllRHyaQSZkQV5C8L-Tw== + X-Amz-Cf-Pop: + - DEN53-P1 + X-Arequestid: + - 3b9987871b3019c8743f0cbb9646ed94 + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '200' + X-Ratelimit-Remaining: + - '199' + X-Xss-Protection: + - 1; mode=block + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3245 + response: + body: + string: '{"expand":"renderedFields,names,schema,operations,editmeta,changelog,versionedRepresentations,customfield_10010.requestTypePractice","id":"25286","self":"https://defectdojo.atlassian.net/rest/api/2/issue/25286","key":"NTEST-3245","fields":{"statuscategorychangedate":"2026-02-07T01:53:37.616+0100","fixVersions":[],"statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"},"resolution":null,"lastViewed":null,"customfield_10060":null,"customfield_10061":null,"customfield_10062":null,"customfield_10063":null,"customfield_10064":null,"customfield_10065":null,"customfield_10066":null,"priority":{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/1","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/highest_new.svg","name":"Highest","id":"1"},"labels":[],"timeestimate":null,"aggregatetimeoriginalestimate":null,"versions":[],"issuelinks":[],"assignee":null,"status":{"self":"https://defectdojo.atlassian.net/rest/api/2/status/10000","description":"","iconUrl":"https://defectdojo.atlassian.net/","name":"Backlog","id":"10000","statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"}},"components":[],"customfield_10050":null,"customfield_10051":null,"customfield_10053":null,"customfield_10055":null,"customfield_10056":null,"customfield_10057":null,"customfield_10058":null,"customfield_10059":null,"customfield_10049":null,"aggregatetimeestimate":null,"creator":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"subtasks":[],"customfield_10040":null,"customfield_10041":null,"customfield_10042":null,"reporter":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"customfield_10043":null,"aggregateprogress":{"progress":0,"total":0},"customfield_10044":null,"customfield_10045":null,"customfield_10046":null,"customfield_10047":null,"customfield_10048":null,"customfield_10038":null,"customfield_10039":null,"progress":{"progress":0,"total":0},"votes":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3245/votes","votes":0,"hasVoted":false},"worklog":{"startAt":0,"maxResults":20,"total":0,"worklogs":[]},"issuetype":{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10002","id":"10002","description":"A + small, distinct piece of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","subtask":false,"avatarId":10318,"hierarchyLevel":0},"timespent":null,"customfield_10030":null,"project":{"self":"https://defectdojo.atlassian.net/rest/api/2/project/10000","id":"10000","key":"NTEST","name":"Unittests","projectTypeKey":"software","simplified":false,"avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=medium"}},"customfield_10031":null,"customfield_10032":null,"customfield_10033":null,"aggregatetimespent":null,"customfield_10035":null,"customfield_10036":null,"customfield_10037":null,"customfield_10027":null,"customfield_10028":null,"customfield_10029":null,"resolutiondate":null,"workratio":-1,"watches":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3245/watchers","watchCount":1,"isWatching":true},"created":"2026-02-07T01:53:37.451+0100","customfield_10020":null,"customfield_10021":null,"customfield_10022":null,"customfield_10023":null,"customfield_10016":null,"customfield_10017":null,"customfield_10019":"0|i0150v:","updated":"2026-02-07T01:53:37.509+0100","customfield_10090":null,"timeoriginalestimate":null,"description":"\n\n\n\n\n\n\n\nA + group of Findings has been pushed to JIRA to be investigated and fixed:\n\nh2. + Group\n*Group*: [Findings in: Component A|http://localhost:8080/finding_group/80] + in [Security How-to|http://localhost:8080/product/2] / [1st Quarter Engagement|http://localhost:8080/engagement/1] + / [Generic Findings Import|http://localhost:8080/test/92]\n\nh2. Summary\n*Severity:* + Critical *Due Date:* Dec. 8, 2025 \n\nFindings matching the Active, Verified + and Severity criteria:\n|| Severity || CVE || CWE || Component || Version + || Title || Status ||\n|Critical|None|[0|]|Component A|None|[Critical|http://localhost:8080/finding/234]|Active, + Verified|\n|High|None|[0|]|Component A|None|[High|http://localhost:8080/finding/235]|Active, + Verified|\n\nFindings *not* matching the Active, Verified and Severity criteria:\n|| + Severity || CVE || CWE || Component || Version || Title || Status ||\n\n\n\n\n\n\n\n\n\n\nh1. + Findings\n\nh3. [Critical|http://localhost:8080/finding/234]\n*Defect Dojo + link:* http://localhost:8080/finding/234 (234)\n*Severity:* Critical\n *Due + Date:* Dec. 8, 2025 \n\n*CVE:* Unknown\n\n\n\n\n\n\n*Description*:\ntest\n\n\n\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n\n\n\nh1. Findings\n\nh3. [High|http://localhost:8080/finding/235]\n*Defect + Dojo link:* http://localhost:8080/finding/235 (235)\n*Severity:* High\n *Due + Date:* Dec. 31, 2025 \n\n*CVE:* Unknown\n\n\n\n\n\n\n*Description*:\ntest\n\n\n\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n","customfield_10010":null,"customfield_10014":null,"timetracking":{},"customfield_10015":null,"customfield_10005":null,"customfield_10006":null,"customfield_10007":null,"security":null,"customfield_10008":null,"attachment":[],"customfield_10009":null,"summary":"Findings + in: Component A","customfield_10001":null,"customfield_10002":[],"customfield_10123":null,"customfield_10003":null,"customfield_10004":null,"environment":null,"duedate":null,"comment":{"comments":[],"self":"https://defectdojo.atlassian.net/rest/api/2/issue/25286/comment","maxResults":0,"total":0,"startAt":0}}}' + headers: + Atl-Request-Id: + - 54ae33a0-75d5-45a1-8de0-0c992166f871 + Atl-Traceid: + - 54ae33a075d545a18de00c992166f871 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 00:53:38 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=0,cdn-upstream-fbl;dur=262,atl-edge;dur=240,atl-edge-internal;dur=17,atl-edge-upstream;dur=222,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN52-P3",cdn-rid;desc="z5dCPs3n-1_MSOd1Wb32mPJ5cJvsagmerZLVRecFKK656knSy7pPUA==",cdn-downstream-fbl;dur=266 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 db94b8e3e5f45aab1e90db086a8debc0.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - z5dCPs3n-1_MSOd1Wb32mPJ5cJvsagmerZLVRecFKK656knSy7pPUA== + X-Amz-Cf-Pop: + - DEN52-P3 + X-Arequestid: + - b73d4023c22cc3b7b91ac180c137b450 + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '400' + X-Ratelimit-Remaining: + - '399' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/issue/25286 + response: + body: + string: '{"expand":"renderedFields,names,schema,operations,editmeta,changelog,versionedRepresentations,customfield_10010.requestTypePractice","id":"25286","self":"https://defectdojo.atlassian.net/rest/api/2/issue/25286","key":"NTEST-3245","fields":{"statuscategorychangedate":"2026-02-07T01:53:37.616+0100","fixVersions":[],"statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"},"resolution":null,"lastViewed":null,"customfield_10060":null,"customfield_10061":null,"customfield_10062":null,"customfield_10063":null,"customfield_10064":null,"customfield_10065":null,"customfield_10066":null,"priority":{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/1","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/highest_new.svg","name":"Highest","id":"1"},"labels":[],"timeestimate":null,"aggregatetimeoriginalestimate":null,"versions":[],"issuelinks":[],"assignee":null,"status":{"self":"https://defectdojo.atlassian.net/rest/api/2/status/10000","description":"","iconUrl":"https://defectdojo.atlassian.net/","name":"Backlog","id":"10000","statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"}},"components":[],"customfield_10050":null,"customfield_10051":null,"customfield_10053":null,"customfield_10055":null,"customfield_10056":null,"customfield_10057":null,"customfield_10058":null,"customfield_10059":null,"customfield_10049":null,"aggregatetimeestimate":null,"creator":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"subtasks":[],"customfield_10040":null,"customfield_10041":null,"customfield_10042":null,"reporter":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"customfield_10043":null,"aggregateprogress":{"progress":0,"total":0},"customfield_10044":null,"customfield_10045":null,"customfield_10046":null,"customfield_10047":null,"customfield_10048":null,"customfield_10038":null,"customfield_10039":null,"progress":{"progress":0,"total":0},"votes":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3245/votes","votes":0,"hasVoted":false},"worklog":{"startAt":0,"maxResults":20,"total":0,"worklogs":[]},"issuetype":{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10002","id":"10002","description":"A + small, distinct piece of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","subtask":false,"avatarId":10318,"hierarchyLevel":0},"timespent":null,"customfield_10030":null,"project":{"self":"https://defectdojo.atlassian.net/rest/api/2/project/10000","id":"10000","key":"NTEST","name":"Unittests","projectTypeKey":"software","simplified":false,"avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=medium"}},"customfield_10031":null,"customfield_10032":null,"customfield_10033":null,"aggregatetimespent":null,"customfield_10035":null,"customfield_10036":null,"customfield_10037":null,"customfield_10027":null,"customfield_10028":null,"customfield_10029":null,"resolutiondate":null,"workratio":-1,"watches":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3245/watchers","watchCount":1,"isWatching":true},"created":"2026-02-07T01:53:37.451+0100","customfield_10020":null,"customfield_10021":null,"customfield_10022":null,"customfield_10023":null,"customfield_10016":null,"customfield_10017":null,"customfield_10019":"0|i0150v:","updated":"2026-02-07T01:53:37.509+0100","customfield_10090":null,"timeoriginalestimate":null,"description":"\n\n\n\n\n\n\n\nA + group of Findings has been pushed to JIRA to be investigated and fixed:\n\nh2. + Group\n*Group*: [Findings in: Component A|http://localhost:8080/finding_group/80] + in [Security How-to|http://localhost:8080/product/2] / [1st Quarter Engagement|http://localhost:8080/engagement/1] + / [Generic Findings Import|http://localhost:8080/test/92]\n\nh2. Summary\n*Severity:* + Critical *Due Date:* Dec. 8, 2025 \n\nFindings matching the Active, Verified + and Severity criteria:\n|| Severity || CVE || CWE || Component || Version + || Title || Status ||\n|Critical|None|[0|]|Component A|None|[Critical|http://localhost:8080/finding/234]|Active, + Verified|\n|High|None|[0|]|Component A|None|[High|http://localhost:8080/finding/235]|Active, + Verified|\n\nFindings *not* matching the Active, Verified and Severity criteria:\n|| + Severity || CVE || CWE || Component || Version || Title || Status ||\n\n\n\n\n\n\n\n\n\n\nh1. + Findings\n\nh3. [Critical|http://localhost:8080/finding/234]\n*Defect Dojo + link:* http://localhost:8080/finding/234 (234)\n*Severity:* Critical\n *Due + Date:* Dec. 8, 2025 \n\n*CVE:* Unknown\n\n\n\n\n\n\n*Description*:\ntest\n\n\n\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n\n\n\nh1. Findings\n\nh3. [High|http://localhost:8080/finding/235]\n*Defect + Dojo link:* http://localhost:8080/finding/235 (235)\n*Severity:* High\n *Due + Date:* Dec. 31, 2025 \n\n*CVE:* Unknown\n\n\n\n\n\n\n*Description*:\ntest\n\n\n\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n","customfield_10010":null,"customfield_10014":null,"timetracking":{},"customfield_10015":null,"customfield_10005":null,"customfield_10006":null,"customfield_10007":null,"security":null,"customfield_10008":null,"attachment":[],"customfield_10009":null,"summary":"Findings + in: Component A","customfield_10001":null,"customfield_10002":[],"customfield_10123":null,"customfield_10003":null,"customfield_10004":null,"environment":null,"duedate":null,"comment":{"comments":[],"self":"https://defectdojo.atlassian.net/rest/api/2/issue/25286/comment","maxResults":0,"total":0,"startAt":0}}}' + headers: + Atl-Request-Id: + - 2b4408f8-d6e7-4d09-b74b-940789fcefe2 + Atl-Traceid: + - 2b4408f8d6e74d09b74b940789fcefe2 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 00:53:38 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=0,cdn-upstream-fbl;dur=281,atl-edge;dur=258,atl-edge-internal;dur=17,atl-edge-upstream;dur=241,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN53-P3",cdn-rid;desc="seFigvgspzze0YsDQ2JlEiySkl4IRBdYTSnM0uuoibYhBAb4DeFwSQ==",cdn-downstream-fbl;dur=286 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 73ad00d68a5eb9671b517ae19c83ae52.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - seFigvgspzze0YsDQ2JlEiySkl4IRBdYTSnM0uuoibYhBAb4DeFwSQ== + X-Amz-Cf-Pop: + - DEN53-P3 + X-Arequestid: + - 0334637f8537363e35b967715330d872 + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '400' + X-Ratelimit-Remaining: + - '398' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: '{"description": "Event test_added has occurred.", "title": "Test created + for Security How-to: 1st Quarter Engagement: Generic Findings Import", "user": + null, "url_ui": "http://localhost:8080/test/92", "url_api": "http://localhost:8080/api/v2/tests/92/", + "product_type": {"name": "ebooks", "id": 2, "url_ui": "http://localhost:8080/product/type/2", + "url_api": "http://localhost:8080/api/v2/product_types/2/"}, "product": {"name": + "Security How-to", "id": 2, "url_ui": "http://localhost:8080/product/2", "url_api": + "http://localhost:8080/api/v2/products/2/"}, "engagement": {"name": "1st Quarter + Engagement", "id": 1, "url_ui": "http://localhost:8080/engagement/1", "url_api": + "http://localhost:8080/api/v2/engagements/1/"}, "test": {"title": null, "id": + 92, "url_ui": "http://localhost:8080/test/92", "url_api": "http://localhost:8080/api/v2/tests/92/"}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Auth: + - Token xxx + Connection: + - keep-alive + Content-Length: + - '853' + Content-Type: + - application/json + User-Agent: + - DefectDojo-2.55.1 + X-DefectDojo-Event: + - test_added + X-DefectDojo-Instance: + - http://localhost:8080 + method: POST + uri: http://webhook.endpoint:8080/post + response: + body: + string: "{\n \"args\": {},\n \"headers\": {\n \"Accept\": [\n \"application/json\"\n + \ ],\n \"Accept-Encoding\": [\n \"gzip, deflate\"\n ],\n \"Auth\": + [\n \"Token xxx\"\n ],\n \"Connection\": [\n \"keep-alive\"\n + \ ],\n \"Content-Length\": [\n \"853\"\n ],\n \"Content-Type\": + [\n \"application/json\"\n ],\n \"Host\": [\n \"webhook.endpoint:8080\"\n + \ ],\n \"User-Agent\": [\n \"DefectDojo-2.55.1\"\n ],\n \"X-Defectdojo-Event\": + [\n \"test_added\"\n ],\n \"X-Defectdojo-Instance\": [\n \"http://localhost:8080\"\n + \ ]\n },\n \"method\": \"POST\",\n \"origin\": \"172.18.0.8\",\n \"url\": + \"http://webhook.endpoint:8080/post\",\n \"data\": \"{\\\"description\\\": + \\\"Event test_added has occurred.\\\", \\\"title\\\": \\\"Test created for + Security How-to: 1st Quarter Engagement: Generic Findings Import\\\", \\\"user\\\": + null, \\\"url_ui\\\": \\\"http://localhost:8080/test/92\\\", \\\"url_api\\\": + \\\"http://localhost:8080/api/v2/tests/92/\\\", \\\"product_type\\\": {\\\"name\\\": + \\\"ebooks\\\", \\\"id\\\": 2, \\\"url_ui\\\": \\\"http://localhost:8080/product/type/2\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/product_types/2/\\\"}, \\\"product\\\": + {\\\"name\\\": \\\"Security How-to\\\", \\\"id\\\": 2, \\\"url_ui\\\": \\\"http://localhost:8080/product/2\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/products/2/\\\"}, \\\"engagement\\\": + {\\\"name\\\": \\\"1st Quarter Engagement\\\", \\\"id\\\": 1, \\\"url_ui\\\": + \\\"http://localhost:8080/engagement/1\\\", \\\"url_api\\\": \\\"http://localhost:8080/api/v2/engagements/1/\\\"}, + \\\"test\\\": {\\\"title\\\": null, \\\"id\\\": 92, \\\"url_ui\\\": \\\"http://localhost:8080/test/92\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/tests/92/\\\"}}\",\n \"files\": + {},\n \"form\": {},\n \"json\": {\n \"description\": \"Event test_added + has occurred.\",\n \"engagement\": {\n \"id\": 1,\n \"name\": + \"1st Quarter Engagement\",\n \"url_api\": \"http://localhost:8080/api/v2/engagements/1/\",\n + \ \"url_ui\": \"http://localhost:8080/engagement/1\"\n },\n \"product\": + {\n \"id\": 2,\n \"name\": \"Security How-to\",\n \"url_api\": + \"http://localhost:8080/api/v2/products/2/\",\n \"url_ui\": \"http://localhost:8080/product/2\"\n + \ },\n \"product_type\": {\n \"id\": 2,\n \"name\": \"ebooks\",\n + \ \"url_api\": \"http://localhost:8080/api/v2/product_types/2/\",\n \"url_ui\": + \"http://localhost:8080/product/type/2\"\n },\n \"test\": {\n \"id\": + 92,\n \"title\": null,\n \"url_api\": \"http://localhost:8080/api/v2/tests/92/\",\n + \ \"url_ui\": \"http://localhost:8080/test/92\"\n },\n \"title\": + \"Test created for Security How-to: 1st Quarter Engagement: Generic Findings + Import\",\n \"url_api\": \"http://localhost:8080/api/v2/tests/92/\",\n + \ \"url_ui\": \"http://localhost:8080/test/92\",\n \"user\": null\n }\n}\n" + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Origin: + - '*' + Content-Type: + - application/json; charset=utf-8 + Date: + - Sat, 07 Feb 2026 00:53:38 GMT + Transfer-Encoding: + - chunked + status: + code: 200 + message: OK +- request: + body: '{"description": "Event scan_added has occurred.", "title": "Created/Updated + 2 findings for Security How-to: 1st Quarter Engagement: Generic Findings Import", + "user": null, "url_ui": "http://localhost:8080/test/92", "url_api": "http://localhost:8080/api/v2/tests/92/", + "product_type": {"name": "ebooks", "id": 2, "url_ui": "http://localhost:8080/product/type/2", + "url_api": "http://localhost:8080/api/v2/product_types/2/"}, "product": {"name": + "Security How-to", "id": 2, "url_ui": "http://localhost:8080/product/2", "url_api": + "http://localhost:8080/api/v2/products/2/"}, "engagement": {"name": "1st Quarter + Engagement", "id": 1, "url_ui": "http://localhost:8080/engagement/1", "url_api": + "http://localhost:8080/api/v2/engagements/1/"}, "test": {"title": null, "id": + 92, "url_ui": "http://localhost:8080/test/92", "url_api": "http://localhost:8080/api/v2/tests/92/"}, + "finding_count": 2, "findings": {"new": [{"id": 234, "title": "Critical", "severity": + "Critical", "url_ui": "http://localhost:8080/finding/234", "url_api": "http://localhost:8080/api/v2/findings/234/"}, + {"id": 235, "title": "High", "severity": "High", "url_ui": "http://localhost:8080/finding/235", + "url_api": "http://localhost:8080/api/v2/findings/235/"}], "reactivated": [], + "mitigated": [], "untouched": []}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Auth: + - Token xxx + Connection: + - keep-alive + Content-Length: + - '1279' + Content-Type: + - application/json + User-Agent: + - DefectDojo-2.55.1 + X-DefectDojo-Event: + - scan_added + X-DefectDojo-Instance: + - http://localhost:8080 + method: POST + uri: http://webhook.endpoint:8080/post + response: + body: + string: "{\n \"args\": {},\n \"headers\": {\n \"Accept\": [\n \"application/json\"\n + \ ],\n \"Accept-Encoding\": [\n \"gzip, deflate\"\n ],\n \"Auth\": + [\n \"Token xxx\"\n ],\n \"Connection\": [\n \"keep-alive\"\n + \ ],\n \"Content-Length\": [\n \"1279\"\n ],\n \"Content-Type\": + [\n \"application/json\"\n ],\n \"Host\": [\n \"webhook.endpoint:8080\"\n + \ ],\n \"User-Agent\": [\n \"DefectDojo-2.55.1\"\n ],\n \"X-Defectdojo-Event\": + [\n \"scan_added\"\n ],\n \"X-Defectdojo-Instance\": [\n \"http://localhost:8080\"\n + \ ]\n },\n \"method\": \"POST\",\n \"origin\": \"172.18.0.8\",\n \"url\": + \"http://webhook.endpoint:8080/post\",\n \"data\": \"{\\\"description\\\": + \\\"Event scan_added has occurred.\\\", \\\"title\\\": \\\"Created/Updated + 2 findings for Security How-to: 1st Quarter Engagement: Generic Findings Import\\\", + \\\"user\\\": null, \\\"url_ui\\\": \\\"http://localhost:8080/test/92\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/tests/92/\\\", \\\"product_type\\\": + {\\\"name\\\": \\\"ebooks\\\", \\\"id\\\": 2, \\\"url_ui\\\": \\\"http://localhost:8080/product/type/2\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/product_types/2/\\\"}, \\\"product\\\": + {\\\"name\\\": \\\"Security How-to\\\", \\\"id\\\": 2, \\\"url_ui\\\": \\\"http://localhost:8080/product/2\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/products/2/\\\"}, \\\"engagement\\\": + {\\\"name\\\": \\\"1st Quarter Engagement\\\", \\\"id\\\": 1, \\\"url_ui\\\": + \\\"http://localhost:8080/engagement/1\\\", \\\"url_api\\\": \\\"http://localhost:8080/api/v2/engagements/1/\\\"}, + \\\"test\\\": {\\\"title\\\": null, \\\"id\\\": 92, \\\"url_ui\\\": \\\"http://localhost:8080/test/92\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/tests/92/\\\"}, \\\"finding_count\\\": + 2, \\\"findings\\\": {\\\"new\\\": [{\\\"id\\\": 234, \\\"title\\\": \\\"Critical\\\", + \\\"severity\\\": \\\"Critical\\\", \\\"url_ui\\\": \\\"http://localhost:8080/finding/234\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/findings/234/\\\"}, {\\\"id\\\": + 235, \\\"title\\\": \\\"High\\\", \\\"severity\\\": \\\"High\\\", \\\"url_ui\\\": + \\\"http://localhost:8080/finding/235\\\", \\\"url_api\\\": \\\"http://localhost:8080/api/v2/findings/235/\\\"}], + \\\"reactivated\\\": [], \\\"mitigated\\\": [], \\\"untouched\\\": []}}\",\n + \ \"files\": {},\n \"form\": {},\n \"json\": {\n \"description\": \"Event + scan_added has occurred.\",\n \"engagement\": {\n \"id\": 1,\n \"name\": + \"1st Quarter Engagement\",\n \"url_api\": \"http://localhost:8080/api/v2/engagements/1/\",\n + \ \"url_ui\": \"http://localhost:8080/engagement/1\"\n },\n \"finding_count\": + 2,\n \"findings\": {\n \"mitigated\": [],\n \"new\": [\n {\n + \ \"id\": 234,\n \"severity\": \"Critical\",\n \"title\": + \"Critical\",\n \"url_api\": \"http://localhost:8080/api/v2/findings/234/\",\n + \ \"url_ui\": \"http://localhost:8080/finding/234\"\n },\n + \ {\n \"id\": 235,\n \"severity\": \"High\",\n \"title\": + \"High\",\n \"url_api\": \"http://localhost:8080/api/v2/findings/235/\",\n + \ \"url_ui\": \"http://localhost:8080/finding/235\"\n }\n ],\n + \ \"reactivated\": [],\n \"untouched\": []\n },\n \"product\": + {\n \"id\": 2,\n \"name\": \"Security How-to\",\n \"url_api\": + \"http://localhost:8080/api/v2/products/2/\",\n \"url_ui\": \"http://localhost:8080/product/2\"\n + \ },\n \"product_type\": {\n \"id\": 2,\n \"name\": \"ebooks\",\n + \ \"url_api\": \"http://localhost:8080/api/v2/product_types/2/\",\n \"url_ui\": + \"http://localhost:8080/product/type/2\"\n },\n \"test\": {\n \"id\": + 92,\n \"title\": null,\n \"url_api\": \"http://localhost:8080/api/v2/tests/92/\",\n + \ \"url_ui\": \"http://localhost:8080/test/92\"\n },\n \"title\": + \"Created/Updated 2 findings for Security How-to: 1st Quarter Engagement: + Generic Findings Import\",\n \"url_api\": \"http://localhost:8080/api/v2/tests/92/\",\n + \ \"url_ui\": \"http://localhost:8080/test/92\",\n \"user\": null\n }\n}\n" + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Origin: + - '*' + Content-Type: + - application/json; charset=utf-8 + Date: + - Sat, 07 Feb 2026 00:53:38 GMT + Transfer-Encoding: + - chunked + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/serverInfo + response: + body: + string: '{"baseUrl":"https://defectdojo.atlassian.net","displayUrl":"https://defectdojo.atlassian.net","displayUrlServicedeskHelpCenter":"https://defectdojo.atlassian.net","displayUrlCSMHelpSeeker":"https://defectdojo.atlassian.net","displayUrlConfluence":"https://defectdojo.atlassian.net","version":"1001.0.0-SNAPSHOT","versionNumbers":[1001,0,0],"deploymentType":"Cloud","buildNumber":100290,"buildDate":"2026-02-06T12:38:29.000+0100","serverTime":"2026-02-07T01:53:38.901+0100","scmInfo":"9d700605f271b9e38f3e73c4116a686dae8d11d7","serverTitle":"Jira","defaultLocale":{"locale":"en_US"},"serverTimeZone":"Etc/UTC"}' + headers: + Atl-Request-Id: + - e5b295f2-18d9-4858-9aa3-4854fe1bdb82 + Atl-Traceid: + - e5b295f218d948589aa34854fe1bdb82 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 00:53:38 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=0,cdn-upstream-fbl;dur=190,atl-edge;dur=168,atl-edge-internal;dur=14,atl-edge-upstream;dur=153,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN52-P2",cdn-rid;desc="ZJloBXaxuoIl1fL3oOAHKOpY7HcjQhBY8napIsV4RpLPzWgaTpWdJg==",cdn-downstream-fbl;dur=195 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 61ff1927788a811372346b5470412a78.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - ZJloBXaxuoIl1fL3oOAHKOpY7HcjQhBY8napIsV4RpLPzWgaTpWdJg== + X-Amz-Cf-Pop: + - DEN52-P2 + X-Arequestid: + - 5c53edc34ef32584c70a7b5f5948b581 + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '350' + X-Ratelimit-Remaining: + - '349' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/issue/25286 + response: + body: + string: '{"expand":"renderedFields,names,schema,operations,editmeta,changelog,versionedRepresentations,customfield_10010.requestTypePractice","id":"25286","self":"https://defectdojo.atlassian.net/rest/api/2/issue/25286","key":"NTEST-3245","fields":{"statuscategorychangedate":"2026-02-07T01:53:37.616+0100","fixVersions":[],"statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"},"resolution":null,"lastViewed":null,"customfield_10060":null,"customfield_10061":null,"customfield_10062":null,"customfield_10063":null,"customfield_10064":null,"customfield_10065":null,"customfield_10066":null,"priority":{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/1","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/highest_new.svg","name":"Highest","id":"1"},"labels":[],"timeestimate":null,"aggregatetimeoriginalestimate":null,"versions":[],"issuelinks":[],"assignee":null,"status":{"self":"https://defectdojo.atlassian.net/rest/api/2/status/10000","description":"","iconUrl":"https://defectdojo.atlassian.net/","name":"Backlog","id":"10000","statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"}},"components":[],"customfield_10050":null,"customfield_10051":null,"customfield_10053":null,"customfield_10055":null,"customfield_10056":null,"customfield_10057":null,"customfield_10058":null,"customfield_10059":null,"customfield_10049":null,"aggregatetimeestimate":null,"creator":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"subtasks":[],"customfield_10040":null,"customfield_10041":null,"customfield_10042":null,"reporter":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"customfield_10043":null,"aggregateprogress":{"progress":0,"total":0},"customfield_10044":null,"customfield_10045":null,"customfield_10046":null,"customfield_10047":null,"customfield_10048":null,"customfield_10038":null,"customfield_10039":null,"progress":{"progress":0,"total":0},"votes":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3245/votes","votes":0,"hasVoted":false},"worklog":{"startAt":0,"maxResults":20,"total":0,"worklogs":[]},"issuetype":{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10002","id":"10002","description":"A + small, distinct piece of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","subtask":false,"avatarId":10318,"hierarchyLevel":0},"timespent":null,"customfield_10030":null,"project":{"self":"https://defectdojo.atlassian.net/rest/api/2/project/10000","id":"10000","key":"NTEST","name":"Unittests","projectTypeKey":"software","simplified":false,"avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=medium"}},"customfield_10031":null,"customfield_10032":null,"customfield_10033":null,"aggregatetimespent":null,"customfield_10035":null,"customfield_10036":null,"customfield_10037":null,"customfield_10027":null,"customfield_10028":null,"customfield_10029":null,"resolutiondate":null,"workratio":-1,"watches":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3245/watchers","watchCount":1,"isWatching":true},"created":"2026-02-07T01:53:37.451+0100","customfield_10020":null,"customfield_10021":null,"customfield_10022":null,"customfield_10023":null,"customfield_10016":null,"customfield_10017":null,"customfield_10019":"0|i0150v:","updated":"2026-02-07T01:53:37.509+0100","customfield_10090":null,"timeoriginalestimate":null,"description":"\n\n\n\n\n\n\n\nA + group of Findings has been pushed to JIRA to be investigated and fixed:\n\nh2. + Group\n*Group*: [Findings in: Component A|http://localhost:8080/finding_group/80] + in [Security How-to|http://localhost:8080/product/2] / [1st Quarter Engagement|http://localhost:8080/engagement/1] + / [Generic Findings Import|http://localhost:8080/test/92]\n\nh2. Summary\n*Severity:* + Critical *Due Date:* Dec. 8, 2025 \n\nFindings matching the Active, Verified + and Severity criteria:\n|| Severity || CVE || CWE || Component || Version + || Title || Status ||\n|Critical|None|[0|]|Component A|None|[Critical|http://localhost:8080/finding/234]|Active, + Verified|\n|High|None|[0|]|Component A|None|[High|http://localhost:8080/finding/235]|Active, + Verified|\n\nFindings *not* matching the Active, Verified and Severity criteria:\n|| + Severity || CVE || CWE || Component || Version || Title || Status ||\n\n\n\n\n\n\n\n\n\n\nh1. + Findings\n\nh3. [Critical|http://localhost:8080/finding/234]\n*Defect Dojo + link:* http://localhost:8080/finding/234 (234)\n*Severity:* Critical\n *Due + Date:* Dec. 8, 2025 \n\n*CVE:* Unknown\n\n\n\n\n\n\n*Description*:\ntest\n\n\n\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n\n\n\nh1. Findings\n\nh3. [High|http://localhost:8080/finding/235]\n*Defect + Dojo link:* http://localhost:8080/finding/235 (235)\n*Severity:* High\n *Due + Date:* Dec. 31, 2025 \n\n*CVE:* Unknown\n\n\n\n\n\n\n*Description*:\ntest\n\n\n\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n","customfield_10010":null,"customfield_10014":null,"timetracking":{},"customfield_10015":null,"customfield_10005":null,"customfield_10006":null,"customfield_10007":null,"security":null,"customfield_10008":null,"attachment":[],"customfield_10009":null,"summary":"Findings + in: Component A","customfield_10001":null,"customfield_10002":[],"customfield_10123":null,"customfield_10003":null,"customfield_10004":null,"environment":null,"duedate":null,"comment":{"comments":[],"self":"https://defectdojo.atlassian.net/rest/api/2/issue/25286/comment","maxResults":0,"total":0,"startAt":0}}}' + headers: + Atl-Request-Id: + - 73fb58b8-cf91-40c2-860d-69274244f615 + Atl-Traceid: + - 73fb58b8cf9140c2860d69274244f615 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 00:53:39 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=0,cdn-upstream-fbl;dur=247,atl-edge;dur=223,atl-edge-internal;dur=16,atl-edge-upstream;dur=206,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN53-P2",cdn-rid;desc="RFl8gCTgImBxGBKl8IoWwCjlbi3lxqgpdkX8OseJdp-hBzRRnzzIwQ==",cdn-downstream-fbl;dur=251 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 74c42be4232cfdd1fdf03f9c73625110.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - RFl8gCTgImBxGBKl8IoWwCjlbi3lxqgpdkX8OseJdp-hBzRRnzzIwQ== + X-Amz-Cf-Pop: + - DEN53-P2 + X-Arequestid: + - 4e49681c2dee00b8f651854cb95cf10d + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '400' + X-Ratelimit-Remaining: + - '397' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/serverInfo + response: + body: + string: '{"baseUrl":"https://defectdojo.atlassian.net","displayUrl":"https://defectdojo.atlassian.net","displayUrlServicedeskHelpCenter":"https://defectdojo.atlassian.net","displayUrlCSMHelpSeeker":"https://defectdojo.atlassian.net","displayUrlConfluence":"https://defectdojo.atlassian.net","version":"1001.0.0-SNAPSHOT","versionNumbers":[1001,0,0],"deploymentType":"Cloud","buildNumber":100290,"buildDate":"2026-02-06T12:38:29.000+0100","serverTime":"2026-02-07T01:53:39.643+0100","scmInfo":"9d700605f271b9e38f3e73c4116a686dae8d11d7","serverTitle":"Jira","defaultLocale":{"locale":"en_US"},"serverTimeZone":"Etc/UTC"}' + headers: + Atl-Request-Id: + - a9f135af-13b0-4021-a376-2f66cbf7e0a5 + Atl-Traceid: + - a9f135af13b04021a3762f66cbf7e0a5 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 00:53:39 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=65,cdn-upstream-fbl;dur=246,atl-edge;dur=158,atl-edge-internal;dur=13,atl-edge-upstream;dur=145,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN53-P3",cdn-rid;desc="sBkak25OywvpZ4LgAYQTtm5UwIak0OT2_WnsL1LKsYllBPHkZNiCiA==",cdn-downstream-fbl;dur=251 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 0952fdd661cdbb703496fdb1bd8ea4a2.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - sBkak25OywvpZ4LgAYQTtm5UwIak0OT2_WnsL1LKsYllBPHkZNiCiA== + X-Amz-Cf-Pop: + - DEN53-P3 + X-Arequestid: + - 2019727ab35f02872fcc4c3509ec9f66 + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '350' + X-Ratelimit-Remaining: + - '348' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/issue/25286 + response: + body: + string: '{"expand":"renderedFields,names,schema,operations,editmeta,changelog,versionedRepresentations,customfield_10010.requestTypePractice","id":"25286","self":"https://defectdojo.atlassian.net/rest/api/2/issue/25286","key":"NTEST-3245","fields":{"statuscategorychangedate":"2026-02-07T01:53:37.616+0100","fixVersions":[],"statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"},"resolution":null,"lastViewed":null,"customfield_10060":null,"customfield_10061":null,"customfield_10062":null,"customfield_10063":null,"customfield_10064":null,"customfield_10065":null,"customfield_10066":null,"priority":{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/1","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/highest_new.svg","name":"Highest","id":"1"},"labels":[],"timeestimate":null,"aggregatetimeoriginalestimate":null,"versions":[],"issuelinks":[],"assignee":null,"status":{"self":"https://defectdojo.atlassian.net/rest/api/2/status/10000","description":"","iconUrl":"https://defectdojo.atlassian.net/","name":"Backlog","id":"10000","statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"}},"components":[],"customfield_10050":null,"customfield_10051":null,"customfield_10053":null,"customfield_10055":null,"customfield_10056":null,"customfield_10057":null,"customfield_10058":null,"customfield_10059":null,"customfield_10049":null,"aggregatetimeestimate":null,"creator":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"subtasks":[],"customfield_10040":null,"customfield_10041":null,"customfield_10042":null,"reporter":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"customfield_10043":null,"aggregateprogress":{"progress":0,"total":0},"customfield_10044":null,"customfield_10045":null,"customfield_10046":null,"customfield_10047":null,"customfield_10048":null,"customfield_10038":null,"customfield_10039":null,"progress":{"progress":0,"total":0},"votes":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3245/votes","votes":0,"hasVoted":false},"worklog":{"startAt":0,"maxResults":20,"total":0,"worklogs":[]},"issuetype":{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10002","id":"10002","description":"A + small, distinct piece of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","subtask":false,"avatarId":10318,"hierarchyLevel":0},"timespent":null,"customfield_10030":null,"project":{"self":"https://defectdojo.atlassian.net/rest/api/2/project/10000","id":"10000","key":"NTEST","name":"Unittests","projectTypeKey":"software","simplified":false,"avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=medium"}},"customfield_10031":null,"customfield_10032":null,"customfield_10033":null,"aggregatetimespent":null,"customfield_10035":null,"customfield_10036":null,"customfield_10037":null,"customfield_10027":null,"customfield_10028":null,"customfield_10029":null,"resolutiondate":null,"workratio":-1,"watches":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3245/watchers","watchCount":1,"isWatching":true},"created":"2026-02-07T01:53:37.451+0100","customfield_10020":null,"customfield_10021":null,"customfield_10022":null,"customfield_10023":null,"customfield_10016":null,"customfield_10017":null,"customfield_10019":"0|i0150v:","updated":"2026-02-07T01:53:37.509+0100","customfield_10090":null,"timeoriginalestimate":null,"description":"\n\n\n\n\n\n\n\nA + group of Findings has been pushed to JIRA to be investigated and fixed:\n\nh2. + Group\n*Group*: [Findings in: Component A|http://localhost:8080/finding_group/80] + in [Security How-to|http://localhost:8080/product/2] / [1st Quarter Engagement|http://localhost:8080/engagement/1] + / [Generic Findings Import|http://localhost:8080/test/92]\n\nh2. Summary\n*Severity:* + Critical *Due Date:* Dec. 8, 2025 \n\nFindings matching the Active, Verified + and Severity criteria:\n|| Severity || CVE || CWE || Component || Version + || Title || Status ||\n|Critical|None|[0|]|Component A|None|[Critical|http://localhost:8080/finding/234]|Active, + Verified|\n|High|None|[0|]|Component A|None|[High|http://localhost:8080/finding/235]|Active, + Verified|\n\nFindings *not* matching the Active, Verified and Severity criteria:\n|| + Severity || CVE || CWE || Component || Version || Title || Status ||\n\n\n\n\n\n\n\n\n\n\nh1. + Findings\n\nh3. [Critical|http://localhost:8080/finding/234]\n*Defect Dojo + link:* http://localhost:8080/finding/234 (234)\n*Severity:* Critical\n *Due + Date:* Dec. 8, 2025 \n\n*CVE:* Unknown\n\n\n\n\n\n\n*Description*:\ntest\n\n\n\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n\n\n\nh1. Findings\n\nh3. [High|http://localhost:8080/finding/235]\n*Defect + Dojo link:* http://localhost:8080/finding/235 (235)\n*Severity:* High\n *Due + Date:* Dec. 31, 2025 \n\n*CVE:* Unknown\n\n\n\n\n\n\n*Description*:\ntest\n\n\n\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n","customfield_10010":null,"customfield_10014":null,"timetracking":{},"customfield_10015":null,"customfield_10005":null,"customfield_10006":null,"customfield_10007":null,"security":null,"customfield_10008":null,"attachment":[],"customfield_10009":null,"summary":"Findings + in: Component A","customfield_10001":null,"customfield_10002":[],"customfield_10123":null,"customfield_10003":null,"customfield_10004":null,"environment":null,"duedate":null,"comment":{"comments":[],"self":"https://defectdojo.atlassian.net/rest/api/2/issue/25286/comment","maxResults":0,"total":0,"startAt":0}}}' + headers: + Atl-Request-Id: + - c6c3c3bd-6fbb-4539-932b-ecdbfb0013fd + Atl-Traceid: + - c6c3c3bd6fbb4539932becdbfb0013fd + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 00:53:40 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=0,cdn-upstream-fbl;dur=290,atl-edge;dur=266,atl-edge-internal;dur=17,atl-edge-upstream;dur=250,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN52-P1",cdn-rid;desc="xoVE3QqMMZCZDX0S7zbgHgJtPSvjQjsUBYTMjjFgLOKEcGaWwQlKew==",cdn-downstream-fbl;dur=294 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 e62d5638b40841e7b8480ae5876ef040.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - xoVE3QqMMZCZDX0S7zbgHgJtPSvjQjsUBYTMjjFgLOKEcGaWwQlKew== + X-Amz-Cf-Pop: + - DEN52-P1 + X-Arequestid: + - d3e6204a05766a4844ef1cf8334ea5e9 + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '400' + X-Ratelimit-Remaining: + - '396' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/issue/createmeta?projectKeys=NTEST&issuetypeNames=Task&expand=projects.issuetypes.fields + response: + body: + string: '{"expand":"projects","projects":[{"expand":"issuetypes","self":"https://defectdojo.atlassian.net/rest/api/2/project/10000","id":"10000","key":"NTEST","name":"Unittests","avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=medium"},"issuetypes":[{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10002","id":"10002","description":"A + small, distinct piece of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","untranslatedName":"Task","subtask":false,"hierarchyLevel":0,"expand":"fields","fields":{"summary":{"required":true,"schema":{"type":"string","system":"summary"},"name":"Summary","key":"summary","hasDefaultValue":false,"operations":["set"]},"issuetype":{"required":true,"schema":{"type":"issuetype","system":"issuetype"},"name":"Issue + Type","key":"issuetype","hasDefaultValue":false,"operations":[],"allowedValues":[{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10002","id":"10002","description":"A + small, distinct piece of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","subtask":false,"avatarId":10318,"hierarchyLevel":0}]},"parent":{"required":false,"schema":{"type":"issuelink","system":"parent"},"name":"Parent","key":"parent","hasDefaultValue":false,"operations":["set"]},"components":{"required":false,"schema":{"type":"array","items":"component","system":"components"},"name":"Components","key":"components","hasDefaultValue":false,"operations":["add","set","remove"],"allowedValues":[]},"description":{"required":false,"schema":{"type":"string","system":"description"},"name":"Description","key":"description","hasDefaultValue":false,"operations":["set"]},"project":{"required":true,"schema":{"type":"project","system":"project"},"name":"Project","key":"project","hasDefaultValue":false,"operations":["set"],"allowedValues":[{"self":"https://defectdojo.atlassian.net/rest/api/2/project/10000","id":"10000","key":"NTEST","name":"Unittests","projectTypeKey":"software","simplified":false,"avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=medium"}}]},"fixVersions":{"required":false,"schema":{"type":"array","items":"version","system":"fixVersions"},"name":"Fix + versions","key":"fixVersions","hasDefaultValue":false,"operations":["set","add","remove"],"allowedValues":[]},"priority":{"required":false,"schema":{"type":"priority","system":"priority"},"name":"Priority","key":"priority","hasDefaultValue":true,"operations":["set"],"allowedValues":[{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/1","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/highest_new.svg","name":"Highest","id":"1"},{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/2","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/high_new.svg","name":"High","id":"2"},{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/3","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/medium_new.svg","name":"Medium","id":"3"},{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/4","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/low_new.svg","name":"Low","id":"4"},{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/5","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/lowest_new.svg","name":"Lowest","id":"5"}],"defaultValue":{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/3","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/medium_new.svg","name":"Medium","id":"3"}},"customfield_10014":{"required":false,"schema":{"type":"any","custom":"com.pyxis.greenhopper.jira:gh-epic-link","customId":10014},"name":"Epic + Link","key":"customfield_10014","hasDefaultValue":false,"operations":["set"]},"labels":{"required":false,"schema":{"type":"array","items":"string","system":"labels"},"name":"Labels","key":"labels","autoCompleteUrl":"https://defectdojo.atlassian.net/rest/api/1.0/labels/suggest?query=","hasDefaultValue":false,"operations":["add","set","remove"]},"attachment":{"required":false,"schema":{"type":"array","items":"attachment","system":"attachment"},"name":"Attachment","key":"attachment","hasDefaultValue":false,"operations":["set","copy"]},"issuelinks":{"required":false,"schema":{"type":"array","items":"issuelinks","system":"issuelinks"},"name":"Linked + Issues","key":"issuelinks","autoCompleteUrl":"https://defectdojo.atlassian.net/rest/api/2/issue/picker?currentProjectId=&showSubTaskParent=true&showSubTasks=true¤tIssueKey=null&query=","hasDefaultValue":false,"operations":["add","copy"]},"assignee":{"required":false,"schema":{"type":"user","system":"assignee"},"name":"Assignee","key":"assignee","autoCompleteUrl":"https://defectdojo.atlassian.net/rest/api/2/user/assignable/search?project=NTEST&query=","hasDefaultValue":false,"operations":["set"]}}}]}]}' + headers: + Atl-Request-Id: + - 907f274c-e3ab-4892-b5f4-09a18bf3957f + Atl-Traceid: + - 907f274ce3ab4892b5f409a18bf3957f + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 00:53:40 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=0,cdn-upstream-fbl;dur=340,atl-edge;dur=317,atl-edge-internal;dur=15,atl-edge-upstream;dur=301,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN52-P1",cdn-rid;desc="t1KL7TjfKEIvVPhOpCJ0mCkM_QXOXSg-rY1hk7NghO_qyqnW-fsMSw==",cdn-downstream-fbl;dur=345 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 4727c17386dca598865fa547bcafadfa.cloudfront.net (CloudFront) + Warning: + - 'The issue create meta endpoint has been deprecated. (Deprecation start date: + June 03, 2024)' + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - t1KL7TjfKEIvVPhOpCJ0mCkM_QXOXSg-rY1hk7NghO_qyqnW-fsMSw== + X-Amz-Cf-Pop: + - DEN52-P1 + X-Arequestid: + - 1109fea4dcf726a77b6fb60317701063 + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '350' + X-Ratelimit-Remaining: + - '349' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: '{"fields": {"project": {"key": "NTEST"}, "issuetype": {"name": "Task"}, + "summary": "Findings in: Component A", "description": "\n\n\n\n\n\n\n\nA group + of Findings has been pushed to JIRA to be investigated and fixed:\n\nh2. Group\n*Group*: + [Findings in: Component A|http://localhost:8080/finding_group/80] in [Security + How-to|http://localhost:8080/product/2] / [1st Quarter Engagement|http://localhost:8080/engagement/1] + / [Generic Findings Import|http://localhost:8080/test/92]\n\nh2. Summary\n*Severity:* + Critical *Due Date:* None \n\nFindings matching the Active, Verified and Severity + criteria:\n|| Severity || CVE || CWE || Component || Version || Title || Status + ||\n\nFindings *not* matching the Active, Verified and Severity criteria:\n|| + Severity || CVE || CWE || Component || Version || Title || Status ||\n|Critical|None|[0|]|Component + A|None|[Critical|http://localhost:8080/finding/234]|Inactive, Verified, Mitigated|\n|High|None|[0|]|Component + A|None|[High|http://localhost:8080/finding/235]|Inactive, Verified, Mitigated|\n\n\n\n\n\n\n\n\n\n\nh1. + Findings\n\nh3. [Critical|http://localhost:8080/finding/234]\n*Defect Dojo link:* + http://localhost:8080/finding/234 (234)\n*Severity:* Critical\n *Due Date:* + Dec. 8, 2025 \n\n*CVE:* Unknown\n\n\n\n\n\n\n*Description*:\ntest\n\n\n\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n\n\n\nh1. Findings\n\nh3. [High|http://localhost:8080/finding/235]\n*Defect + Dojo link:* http://localhost:8080/finding/235 (235)\n*Severity:* High\n *Due + Date:* Dec. 31, 2025 \n\n*CVE:* Unknown\n\n\n\n\n\n\n*Description*:\ntest\n\n\n\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n", "priority": {"name": "Lowest"}}, "update": {}}' + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Length: + - '1680' + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: PUT + uri: https://defectdojo.atlassian.net/rest/api/2/issue/25286 + response: + body: + string: '' + headers: + Atl-Request-Id: + - e892c59d-bfda-4b2b-a7ff-d92f3fe68b7d + Atl-Traceid: + - e892c59dbfda4b2ba7ffd92f3fe68b7d + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 00:53:41 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=0,cdn-upstream-fbl;dur=638,atl-edge;dur=614,atl-edge-internal;dur=16,atl-edge-upstream;dur=598,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN52-P1",cdn-rid;desc="mCrljpknQ_-Fhyu3vMDiG9z9qtftogXZbLQbQCozbPep1M1oaDlAwA==",cdn-downstream-fbl;dur=643 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Vary: + - Accept-Encoding + Via: + - 1.1 d1f45df4933065053cea3fd574dc6f20.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - mCrljpknQ_-Fhyu3vMDiG9z9qtftogXZbLQbQCozbPep1M1oaDlAwA== + X-Amz-Cf-Pop: + - DEN52-P1 + X-Arequestid: + - e69afa702910ffced245cabaaa272ea1 + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '300' + X-Ratelimit-Remaining: + - '299' + X-Xss-Protection: + - 1; mode=block + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/issue/25286 + response: + body: + string: '{"expand":"renderedFields,names,schema,operations,editmeta,changelog,versionedRepresentations,customfield_10010.requestTypePractice","id":"25286","self":"https://defectdojo.atlassian.net/rest/api/2/issue/25286","key":"NTEST-3245","fields":{"statuscategorychangedate":"2026-02-07T01:53:37.616+0100","fixVersions":[],"statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"},"resolution":null,"lastViewed":null,"customfield_10060":null,"customfield_10061":null,"customfield_10062":null,"customfield_10063":null,"customfield_10064":null,"customfield_10065":null,"customfield_10066":null,"priority":{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/5","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/lowest_new.svg","name":"Lowest","id":"5"},"labels":[],"timeestimate":null,"aggregatetimeoriginalestimate":null,"versions":[],"issuelinks":[],"assignee":null,"status":{"self":"https://defectdojo.atlassian.net/rest/api/2/status/10000","description":"","iconUrl":"https://defectdojo.atlassian.net/","name":"Backlog","id":"10000","statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"}},"components":[],"customfield_10050":null,"customfield_10051":null,"customfield_10053":null,"customfield_10055":null,"customfield_10056":null,"customfield_10057":null,"customfield_10058":null,"customfield_10059":null,"customfield_10049":null,"aggregatetimeestimate":null,"creator":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"subtasks":[],"customfield_10040":null,"customfield_10041":null,"customfield_10042":null,"reporter":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"customfield_10043":null,"aggregateprogress":{"progress":0,"total":0},"customfield_10044":null,"customfield_10045":null,"customfield_10046":null,"customfield_10047":null,"customfield_10048":null,"customfield_10038":null,"customfield_10039":null,"progress":{"progress":0,"total":0},"votes":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3245/votes","votes":0,"hasVoted":false},"worklog":{"startAt":0,"maxResults":20,"total":0,"worklogs":[]},"issuetype":{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10002","id":"10002","description":"A + small, distinct piece of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","subtask":false,"avatarId":10318,"hierarchyLevel":0},"timespent":null,"customfield_10030":null,"project":{"self":"https://defectdojo.atlassian.net/rest/api/2/project/10000","id":"10000","key":"NTEST","name":"Unittests","projectTypeKey":"software","simplified":false,"avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=medium"}},"customfield_10031":null,"customfield_10032":null,"customfield_10033":null,"aggregatetimespent":null,"customfield_10035":null,"customfield_10036":null,"customfield_10037":null,"customfield_10027":null,"customfield_10028":null,"customfield_10029":null,"resolutiondate":null,"workratio":-1,"watches":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3245/watchers","watchCount":1,"isWatching":true},"created":"2026-02-07T01:53:37.451+0100","customfield_10020":null,"customfield_10021":null,"customfield_10022":null,"customfield_10023":null,"customfield_10016":null,"customfield_10017":null,"customfield_10019":"0|i0150v:","updated":"2026-02-07T01:53:40.832+0100","customfield_10090":null,"timeoriginalestimate":null,"description":"\n\n\n\n\n\n\n\nA + group of Findings has been pushed to JIRA to be investigated and fixed:\n\nh2. + Group\n*Group*: [Findings in: Component A|http://localhost:8080/finding_group/80] + in [Security How-to|http://localhost:8080/product/2] / [1st Quarter Engagement|http://localhost:8080/engagement/1] + / [Generic Findings Import|http://localhost:8080/test/92]\n\nh2. Summary\n*Severity:* + Critical *Due Date:* None \n\nFindings matching the Active, Verified and + Severity criteria:\n|| Severity || CVE || CWE || Component || Version || Title + || Status ||\n\nFindings *not* matching the Active, Verified and Severity + criteria:\n|| Severity || CVE || CWE || Component || Version || Title || Status + ||\n|Critical|None|[0|]|Component A|None|[Critical|http://localhost:8080/finding/234]|Inactive, + Verified, Mitigated|\n|High|None|[0|]|Component A|None|[High|http://localhost:8080/finding/235]|Inactive, + Verified, Mitigated|\n\n\n\n\n\n\n\n\n\n\nh1. Findings\n\nh3. [Critical|http://localhost:8080/finding/234]\n*Defect + Dojo link:* http://localhost:8080/finding/234 (234)\n*Severity:* Critical\n + *Due Date:* Dec. 8, 2025 \n\n*CVE:* Unknown\n\n\n\n\n\n\n*Description*:\ntest\n\n\n\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n\n\n\nh1. Findings\n\nh3. [High|http://localhost:8080/finding/235]\n*Defect + Dojo link:* http://localhost:8080/finding/235 (235)\n*Severity:* High\n *Due + Date:* Dec. 31, 2025 \n\n*CVE:* Unknown\n\n\n\n\n\n\n*Description*:\ntest\n\n\n\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n","customfield_10010":null,"customfield_10014":null,"timetracking":{},"customfield_10015":null,"customfield_10005":null,"customfield_10006":null,"customfield_10007":null,"security":null,"customfield_10008":null,"attachment":[],"customfield_10009":null,"summary":"Findings + in: Component A","customfield_10001":null,"customfield_10002":[],"customfield_10123":null,"customfield_10003":null,"customfield_10004":null,"environment":null,"duedate":null,"comment":{"comments":[],"self":"https://defectdojo.atlassian.net/rest/api/2/issue/25286/comment","maxResults":0,"total":0,"startAt":0}}}' + headers: + Atl-Request-Id: + - 8d252330-4086-4073-bb0f-a4c52cf2283d + Atl-Traceid: + - 8d25233040864073bb0fa4c52cf2283d + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 00:53:41 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=0,cdn-upstream-fbl;dur=272,atl-edge;dur=249,atl-edge-internal;dur=16,atl-edge-upstream;dur=232,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN53-P3",cdn-rid;desc="f9pcN86p8R7dkD-9lb-ryd2xX7akGpzHfEZFlBf0h5clWDwkxvu-Cw==",cdn-downstream-fbl;dur=276 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 d2ee90557b7dff69fea2eb2ff85880ec.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - f9pcN86p8R7dkD-9lb-ryd2xX7akGpzHfEZFlBf0h5clWDwkxvu-Cw== + X-Amz-Cf-Pop: + - DEN53-P3 + X-Arequestid: + - 299452f9c8af29bb9788840c56367365 + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '400' + X-Ratelimit-Remaining: + - '399' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: '{"transition": {"id": 41}, "fields": {}}' + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Length: + - '40' + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: POST + uri: https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3245/transitions + response: + body: + string: '' + headers: + Atl-Request-Id: + - 6043e334-0978-4771-9b21-0f331b4f7f0f + Atl-Traceid: + - 6043e334097847719b210f331b4f7f0f + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Type: + - text/html;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 00:53:42 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=0,cdn-upstream-fbl;dur=571,atl-edge;dur=547,atl-edge-internal;dur=17,atl-edge-upstream;dur=531,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN52-P3",cdn-rid;desc="0FBY8wdyYwu5_IZy_WOaeMcYKFseGecgxgEoj7pYdbvQaGBQUa11cQ==",cdn-downstream-fbl;dur=575 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Vary: + - Accept-Encoding + Via: + - 1.1 9367844cfa8aaebd6a8f032ea2e7d4ec.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - 0FBY8wdyYwu5_IZy_WOaeMcYKFseGecgxgEoj7pYdbvQaGBQUa11cQ== + X-Amz-Cf-Pop: + - DEN52-P3 + X-Arequestid: + - 8075db5bd198d3c6c70c52f41c98abb4 + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '200' + X-Ratelimit-Remaining: + - '199' + X-Xss-Protection: + - 1; mode=block + status: + code: 204 + message: No Content +- request: + body: '{"description": "Event scan_added has occurred.", "title": "Created/Updated + 4 findings for Security How-to: 1st Quarter Engagement: Generic Findings Import", + "user": null, "url_ui": "http://localhost:8080/test/92", "url_api": "http://localhost:8080/api/v2/tests/92/", + "product_type": {"name": "ebooks", "id": 2, "url_ui": "http://localhost:8080/product/type/2", + "url_api": "http://localhost:8080/api/v2/product_types/2/"}, "product": {"name": + "Security How-to", "id": 2, "url_ui": "http://localhost:8080/product/2", "url_api": + "http://localhost:8080/api/v2/products/2/"}, "engagement": {"name": "1st Quarter + Engagement", "id": 1, "url_ui": "http://localhost:8080/engagement/1", "url_api": + "http://localhost:8080/api/v2/engagements/1/"}, "test": {"title": null, "id": + 92, "url_ui": "http://localhost:8080/test/92", "url_api": "http://localhost:8080/api/v2/tests/92/"}, + "finding_count": 4, "findings": {"new": [{"id": 236, "title": "Test Title", + "severity": "Medium", "url_ui": "http://localhost:8080/finding/236", "url_api": + "http://localhost:8080/api/v2/findings/236/"}, {"id": 237, "title": "Test Title2", + "severity": "Medium", "url_ui": "http://localhost:8080/finding/237", "url_api": + "http://localhost:8080/api/v2/findings/237/"}], "reactivated": [], "mitigated": + [{"id": 234, "title": "Critical", "severity": "Critical", "url_ui": "http://localhost:8080/finding/234", + "url_api": "http://localhost:8080/api/v2/findings/234/"}, {"id": 235, "title": + "High", "severity": "High", "url_ui": "http://localhost:8080/finding/235", "url_api": + "http://localhost:8080/api/v2/findings/235/"}], "untouched": []}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Auth: + - Token xxx + Connection: + - keep-alive + Content-Length: + - '1602' + Content-Type: + - application/json + User-Agent: + - DefectDojo-2.55.1 + X-DefectDojo-Event: + - scan_added + X-DefectDojo-Instance: + - http://localhost:8080 + method: POST + uri: http://webhook.endpoint:8080/post + response: + body: + string: "{\n \"args\": {},\n \"headers\": {\n \"Accept\": [\n \"application/json\"\n + \ ],\n \"Accept-Encoding\": [\n \"gzip, deflate\"\n ],\n \"Auth\": + [\n \"Token xxx\"\n ],\n \"Connection\": [\n \"keep-alive\"\n + \ ],\n \"Content-Length\": [\n \"1602\"\n ],\n \"Content-Type\": + [\n \"application/json\"\n ],\n \"Host\": [\n \"webhook.endpoint:8080\"\n + \ ],\n \"User-Agent\": [\n \"DefectDojo-2.55.1\"\n ],\n \"X-Defectdojo-Event\": + [\n \"scan_added\"\n ],\n \"X-Defectdojo-Instance\": [\n \"http://localhost:8080\"\n + \ ]\n },\n \"method\": \"POST\",\n \"origin\": \"172.18.0.8\",\n \"url\": + \"http://webhook.endpoint:8080/post\",\n \"data\": \"{\\\"description\\\": + \\\"Event scan_added has occurred.\\\", \\\"title\\\": \\\"Created/Updated + 4 findings for Security How-to: 1st Quarter Engagement: Generic Findings Import\\\", + \\\"user\\\": null, \\\"url_ui\\\": \\\"http://localhost:8080/test/92\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/tests/92/\\\", \\\"product_type\\\": + {\\\"name\\\": \\\"ebooks\\\", \\\"id\\\": 2, \\\"url_ui\\\": \\\"http://localhost:8080/product/type/2\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/product_types/2/\\\"}, \\\"product\\\": + {\\\"name\\\": \\\"Security How-to\\\", \\\"id\\\": 2, \\\"url_ui\\\": \\\"http://localhost:8080/product/2\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/products/2/\\\"}, \\\"engagement\\\": + {\\\"name\\\": \\\"1st Quarter Engagement\\\", \\\"id\\\": 1, \\\"url_ui\\\": + \\\"http://localhost:8080/engagement/1\\\", \\\"url_api\\\": \\\"http://localhost:8080/api/v2/engagements/1/\\\"}, + \\\"test\\\": {\\\"title\\\": null, \\\"id\\\": 92, \\\"url_ui\\\": \\\"http://localhost:8080/test/92\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/tests/92/\\\"}, \\\"finding_count\\\": + 4, \\\"findings\\\": {\\\"new\\\": [{\\\"id\\\": 236, \\\"title\\\": \\\"Test + Title\\\", \\\"severity\\\": \\\"Medium\\\", \\\"url_ui\\\": \\\"http://localhost:8080/finding/236\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/findings/236/\\\"}, {\\\"id\\\": + 237, \\\"title\\\": \\\"Test Title2\\\", \\\"severity\\\": \\\"Medium\\\", + \\\"url_ui\\\": \\\"http://localhost:8080/finding/237\\\", \\\"url_api\\\": + \\\"http://localhost:8080/api/v2/findings/237/\\\"}], \\\"reactivated\\\": + [], \\\"mitigated\\\": [{\\\"id\\\": 234, \\\"title\\\": \\\"Critical\\\", + \\\"severity\\\": \\\"Critical\\\", \\\"url_ui\\\": \\\"http://localhost:8080/finding/234\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/findings/234/\\\"}, {\\\"id\\\": + 235, \\\"title\\\": \\\"High\\\", \\\"severity\\\": \\\"High\\\", \\\"url_ui\\\": + \\\"http://localhost:8080/finding/235\\\", \\\"url_api\\\": \\\"http://localhost:8080/api/v2/findings/235/\\\"}], + \\\"untouched\\\": []}}\",\n \"files\": {},\n \"form\": {},\n \"json\": + {\n \"description\": \"Event scan_added has occurred.\",\n \"engagement\": + {\n \"id\": 1,\n \"name\": \"1st Quarter Engagement\",\n \"url_api\": + \"http://localhost:8080/api/v2/engagements/1/\",\n \"url_ui\": \"http://localhost:8080/engagement/1\"\n + \ },\n \"finding_count\": 4,\n \"findings\": {\n \"mitigated\": + [\n {\n \"id\": 234,\n \"severity\": \"Critical\",\n + \ \"title\": \"Critical\",\n \"url_api\": \"http://localhost:8080/api/v2/findings/234/\",\n + \ \"url_ui\": \"http://localhost:8080/finding/234\"\n },\n + \ {\n \"id\": 235,\n \"severity\": \"High\",\n \"title\": + \"High\",\n \"url_api\": \"http://localhost:8080/api/v2/findings/235/\",\n + \ \"url_ui\": \"http://localhost:8080/finding/235\"\n }\n ],\n + \ \"new\": [\n {\n \"id\": 236,\n \"severity\": + \"Medium\",\n \"title\": \"Test Title\",\n \"url_api\": + \"http://localhost:8080/api/v2/findings/236/\",\n \"url_ui\": \"http://localhost:8080/finding/236\"\n + \ },\n {\n \"id\": 237,\n \"severity\": \"Medium\",\n + \ \"title\": \"Test Title2\",\n \"url_api\": \"http://localhost:8080/api/v2/findings/237/\",\n + \ \"url_ui\": \"http://localhost:8080/finding/237\"\n }\n ],\n + \ \"reactivated\": [],\n \"untouched\": []\n },\n \"product\": + {\n \"id\": 2,\n \"name\": \"Security How-to\",\n \"url_api\": + \"http://localhost:8080/api/v2/products/2/\",\n \"url_ui\": \"http://localhost:8080/product/2\"\n + \ },\n \"product_type\": {\n \"id\": 2,\n \"name\": \"ebooks\",\n + \ \"url_api\": \"http://localhost:8080/api/v2/product_types/2/\",\n \"url_ui\": + \"http://localhost:8080/product/type/2\"\n },\n \"test\": {\n \"id\": + 92,\n \"title\": null,\n \"url_api\": \"http://localhost:8080/api/v2/tests/92/\",\n + \ \"url_ui\": \"http://localhost:8080/test/92\"\n },\n \"title\": + \"Created/Updated 4 findings for Security How-to: 1st Quarter Engagement: + Generic Findings Import\",\n \"url_api\": \"http://localhost:8080/api/v2/tests/92/\",\n + \ \"url_ui\": \"http://localhost:8080/test/92\",\n \"user\": null\n }\n}\n" + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Origin: + - '*' + Content-Type: + - application/json; charset=utf-8 + Date: + - Sat, 07 Feb 2026 00:53:42 GMT + Transfer-Encoding: + - chunked + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/serverInfo + response: + body: + string: '{"baseUrl":"https://defectdojo.atlassian.net","displayUrl":"https://defectdojo.atlassian.net","displayUrlServicedeskHelpCenter":"https://defectdojo.atlassian.net","displayUrlCSMHelpSeeker":"https://defectdojo.atlassian.net","displayUrlConfluence":"https://defectdojo.atlassian.net","version":"1001.0.0-SNAPSHOT","versionNumbers":[1001,0,0],"deploymentType":"Cloud","buildNumber":100290,"buildDate":"2026-02-06T12:38:29.000+0100","serverTime":"2026-02-07T01:53:42.487+0100","scmInfo":"9d700605f271b9e38f3e73c4116a686dae8d11d7","serverTitle":"Jira","defaultLocale":{"locale":"en_US"},"serverTimeZone":"Etc/UTC"}' + headers: + Atl-Request-Id: + - c8543c56-ba74-427f-9341-f53df8d324e2 + Atl-Traceid: + - c8543c56ba74427f9341f53df8d324e2 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 00:53:42 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=66,cdn-upstream-fbl;dur=255,atl-edge;dur=166,atl-edge-internal;dur=16,atl-edge-upstream;dur=150,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN52-P2",cdn-rid;desc="iECd_MqvD44oIts1VCNY4wlk2GICSjobxxvdpELh-fBHfVV1turC2g==",cdn-downstream-fbl;dur=261 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 422414d66021e4e123bcb2b5087f7042.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - iECd_MqvD44oIts1VCNY4wlk2GICSjobxxvdpELh-fBHfVV1turC2g== + X-Amz-Cf-Pop: + - DEN52-P2 + X-Arequestid: + - 714db9fd63587aa9eb751e64fe54ca9a + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '350' + X-Ratelimit-Remaining: + - '349' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/issue/25286 + response: + body: + string: '{"expand":"renderedFields,names,schema,operations,editmeta,changelog,versionedRepresentations,customfield_10010.requestTypePractice","id":"25286","self":"https://defectdojo.atlassian.net/rest/api/2/issue/25286","key":"NTEST-3245","fields":{"statuscategorychangedate":"2026-02-07T01:53:41.844+0100","fixVersions":[],"statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/3","id":3,"key":"done","colorName":"green","name":"Done"},"resolution":{"self":"https://defectdojo.atlassian.net/rest/api/2/resolution/10000","id":"10000","description":"Work + has been completed on this issue.","name":"Done"},"lastViewed":null,"customfield_10060":null,"customfield_10061":null,"customfield_10062":null,"customfield_10063":null,"customfield_10064":null,"customfield_10065":null,"customfield_10066":null,"priority":{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/5","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/lowest_new.svg","name":"Lowest","id":"5"},"labels":[],"timeestimate":null,"aggregatetimeoriginalestimate":null,"versions":[],"issuelinks":[],"assignee":null,"status":{"self":"https://defectdojo.atlassian.net/rest/api/2/status/10002","description":"","iconUrl":"https://defectdojo.atlassian.net/","name":"Done","id":"10002","statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/3","id":3,"key":"done","colorName":"green","name":"Done"}},"components":[],"customfield_10050":null,"customfield_10051":null,"customfield_10053":null,"customfield_10055":null,"customfield_10056":null,"customfield_10057":null,"customfield_10058":null,"customfield_10059":null,"customfield_10049":null,"aggregatetimeestimate":null,"creator":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"subtasks":[],"customfield_10040":null,"customfield_10041":null,"customfield_10042":null,"reporter":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"customfield_10043":null,"aggregateprogress":{"progress":0,"total":0},"customfield_10044":null,"customfield_10045":null,"customfield_10046":null,"customfield_10047":null,"customfield_10048":null,"customfield_10038":null,"customfield_10039":null,"progress":{"progress":0,"total":0},"votes":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3245/votes","votes":0,"hasVoted":false},"worklog":{"startAt":0,"maxResults":20,"total":0,"worklogs":[]},"issuetype":{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10002","id":"10002","description":"A + small, distinct piece of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","subtask":false,"avatarId":10318,"hierarchyLevel":0},"timespent":null,"customfield_10030":null,"project":{"self":"https://defectdojo.atlassian.net/rest/api/2/project/10000","id":"10000","key":"NTEST","name":"Unittests","projectTypeKey":"software","simplified":false,"avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=medium"}},"customfield_10031":null,"customfield_10032":null,"customfield_10033":null,"aggregatetimespent":null,"customfield_10035":null,"customfield_10036":null,"customfield_10037":null,"customfield_10027":null,"customfield_10028":null,"customfield_10029":null,"resolutiondate":"2026-02-07T01:53:41.818+0100","workratio":-1,"watches":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3245/watchers","watchCount":1,"isWatching":true},"created":"2026-02-07T01:53:37.451+0100","customfield_10020":null,"customfield_10021":null,"customfield_10022":null,"customfield_10023":"10000_*:*_1_*:*_4392_*|*_10002_*:*_1_*:*_0","customfield_10016":null,"customfield_10017":null,"customfield_10019":"0|i0150v:","updated":"2026-02-07T01:53:41.843+0100","customfield_10090":null,"timeoriginalestimate":null,"description":"\n\n\n\n\n\n\n\nA + group of Findings has been pushed to JIRA to be investigated and fixed:\n\nh2. + Group\n*Group*: [Findings in: Component A|http://localhost:8080/finding_group/80] + in [Security How-to|http://localhost:8080/product/2] / [1st Quarter Engagement|http://localhost:8080/engagement/1] + / [Generic Findings Import|http://localhost:8080/test/92]\n\nh2. Summary\n*Severity:* + Critical *Due Date:* None \n\nFindings matching the Active, Verified and + Severity criteria:\n|| Severity || CVE || CWE || Component || Version || Title + || Status ||\n\nFindings *not* matching the Active, Verified and Severity + criteria:\n|| Severity || CVE || CWE || Component || Version || Title || Status + ||\n|Critical|None|[0|]|Component A|None|[Critical|http://localhost:8080/finding/234]|Inactive, + Verified, Mitigated|\n|High|None|[0|]|Component A|None|[High|http://localhost:8080/finding/235]|Inactive, + Verified, Mitigated|\n\n\n\n\n\n\n\n\n\n\nh1. Findings\n\nh3. [Critical|http://localhost:8080/finding/234]\n*Defect + Dojo link:* http://localhost:8080/finding/234 (234)\n*Severity:* Critical\n + *Due Date:* Dec. 8, 2025 \n\n*CVE:* Unknown\n\n\n\n\n\n\n*Description*:\ntest\n\n\n\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n\n\n\nh1. Findings\n\nh3. [High|http://localhost:8080/finding/235]\n*Defect + Dojo link:* http://localhost:8080/finding/235 (235)\n*Severity:* High\n *Due + Date:* Dec. 31, 2025 \n\n*CVE:* Unknown\n\n\n\n\n\n\n*Description*:\ntest\n\n\n\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n","customfield_10010":null,"customfield_10014":null,"timetracking":{},"customfield_10015":null,"customfield_10005":null,"customfield_10006":null,"customfield_10007":null,"security":null,"customfield_10008":null,"attachment":[],"customfield_10009":null,"summary":"Findings + in: Component A","customfield_10001":null,"customfield_10002":[],"customfield_10123":null,"customfield_10003":null,"customfield_10004":null,"environment":null,"duedate":null,"comment":{"comments":[],"self":"https://defectdojo.atlassian.net/rest/api/2/issue/25286/comment","maxResults":0,"total":0,"startAt":0}}}' + headers: + Atl-Request-Id: + - bbe6881e-6607-4a72-ba4e-49d2a8773606 + Atl-Traceid: + - bbe6881e66074a72ba4e49d2a8773606 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 00:53:42 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=0,cdn-upstream-fbl;dur=288,atl-edge;dur=265,atl-edge-internal;dur=17,atl-edge-upstream;dur=249,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN52-P2",cdn-rid;desc="5dUojNxzUdESWbI5XwIqP5TgKd2YSRaNjQi_UvAvJFEwJLtSrFW_hw==",cdn-downstream-fbl;dur=292 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 96971091469e558c8f8e351ccf0d7212.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - 5dUojNxzUdESWbI5XwIqP5TgKd2YSRaNjQi_UvAvJFEwJLtSrFW_hw== + X-Amz-Cf-Pop: + - DEN52-P2 + X-Arequestid: + - c6c89cc78abdbaadd5fdc7aca186dd89 + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '400' + X-Ratelimit-Remaining: + - '399' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +version: 1 diff --git a/unittests/vcr/jira/JIRAImportAndPushTestApi.test_keep_sync_push_finding_then_reimport_with_no_push.yaml b/unittests/vcr/jira/JIRAImportAndPushTestApi.test_keep_sync_push_finding_then_reimport_with_no_push.yaml new file mode 100644 index 00000000000..3296562525f --- /dev/null +++ b/unittests/vcr/jira/JIRAImportAndPushTestApi.test_keep_sync_push_finding_then_reimport_with_no_push.yaml @@ -0,0 +1,2366 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/serverInfo + response: + body: + string: '{"baseUrl":"https://defectdojo.atlassian.net","displayUrl":"https://defectdojo.atlassian.net","displayUrlServicedeskHelpCenter":"https://defectdojo.atlassian.net","displayUrlCSMHelpSeeker":"https://defectdojo.atlassian.net","displayUrlConfluence":"https://defectdojo.atlassian.net","version":"1001.0.0-SNAPSHOT","versionNumbers":[1001,0,0],"deploymentType":"Cloud","buildNumber":100290,"buildDate":"2026-02-06T12:38:29.000+0100","serverTime":"2026-02-07T07:26:55.864+0100","scmInfo":"9d700605f271b9e38f3e73c4116a686dae8d11d7","serverTitle":"Jira","defaultLocale":{"locale":"en_US"},"serverTimeZone":"Etc/UTC"}' + headers: + Atl-Request-Id: + - 92e3e9fa-8b83-493e-879c-8b0f49a0ed67 + Atl-Traceid: + - 92e3e9fa8b83493e879c8b0f49a0ed67 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 06:26:55 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=93,cdn-upstream-fbl;dur=312,atl-edge;dur=186,atl-edge-internal;dur=36,atl-edge-upstream;dur=150,atl-edge-pop;desc="aws-us-east-1",cdn-cache-miss,cdn-pop;desc="DFW56-P7",cdn-rid;desc="J68BgJzQSdl-BYtHtNO6GP1uxG3EXRLFtvgfnlhWkNzOxteGkeqSOQ==",cdn-downstream-fbl;dur=316 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 07f99fb61d10d997d86888bb80f97e6c.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - J68BgJzQSdl-BYtHtNO6GP1uxG3EXRLFtvgfnlhWkNzOxteGkeqSOQ== + X-Amz-Cf-Pop: + - DFW56-P7 + X-Arequestid: + - 4e03b6b7dc8e7ba1b141024701e3163b + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '350' + X-Ratelimit-Remaining: + - '348' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/issue/createmeta?projectKeys=NTEST&issuetypeNames=Task&expand=projects.issuetypes.fields + response: + body: + string: '{"expand":"projects","projects":[{"expand":"issuetypes","self":"https://defectdojo.atlassian.net/rest/api/2/project/10000","id":"10000","key":"NTEST","name":"Unittests","avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=medium"},"issuetypes":[{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10002","id":"10002","description":"A + small, distinct piece of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","untranslatedName":"Task","subtask":false,"hierarchyLevel":0,"expand":"fields","fields":{"summary":{"required":true,"schema":{"type":"string","system":"summary"},"name":"Summary","key":"summary","hasDefaultValue":false,"operations":["set"]},"issuetype":{"required":true,"schema":{"type":"issuetype","system":"issuetype"},"name":"Issue + Type","key":"issuetype","hasDefaultValue":false,"operations":[],"allowedValues":[{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10002","id":"10002","description":"A + small, distinct piece of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","subtask":false,"avatarId":10318,"hierarchyLevel":0}]},"parent":{"required":false,"schema":{"type":"issuelink","system":"parent"},"name":"Parent","key":"parent","hasDefaultValue":false,"operations":["set"]},"components":{"required":false,"schema":{"type":"array","items":"component","system":"components"},"name":"Components","key":"components","hasDefaultValue":false,"operations":["add","set","remove"],"allowedValues":[]},"description":{"required":false,"schema":{"type":"string","system":"description"},"name":"Description","key":"description","hasDefaultValue":false,"operations":["set"]},"project":{"required":true,"schema":{"type":"project","system":"project"},"name":"Project","key":"project","hasDefaultValue":false,"operations":["set"],"allowedValues":[{"self":"https://defectdojo.atlassian.net/rest/api/2/project/10000","id":"10000","key":"NTEST","name":"Unittests","projectTypeKey":"software","simplified":false,"avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=medium"}}]},"fixVersions":{"required":false,"schema":{"type":"array","items":"version","system":"fixVersions"},"name":"Fix + versions","key":"fixVersions","hasDefaultValue":false,"operations":["set","add","remove"],"allowedValues":[]},"priority":{"required":false,"schema":{"type":"priority","system":"priority"},"name":"Priority","key":"priority","hasDefaultValue":true,"operations":["set"],"allowedValues":[{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/1","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/highest_new.svg","name":"Highest","id":"1"},{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/2","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/high_new.svg","name":"High","id":"2"},{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/3","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/medium_new.svg","name":"Medium","id":"3"},{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/4","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/low_new.svg","name":"Low","id":"4"},{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/5","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/lowest_new.svg","name":"Lowest","id":"5"}],"defaultValue":{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/3","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/medium_new.svg","name":"Medium","id":"3"}},"customfield_10014":{"required":false,"schema":{"type":"any","custom":"com.pyxis.greenhopper.jira:gh-epic-link","customId":10014},"name":"Epic + Link","key":"customfield_10014","hasDefaultValue":false,"operations":["set"]},"labels":{"required":false,"schema":{"type":"array","items":"string","system":"labels"},"name":"Labels","key":"labels","autoCompleteUrl":"https://defectdojo.atlassian.net/rest/api/1.0/labels/suggest?query=","hasDefaultValue":false,"operations":["add","set","remove"]},"attachment":{"required":false,"schema":{"type":"array","items":"attachment","system":"attachment"},"name":"Attachment","key":"attachment","hasDefaultValue":false,"operations":["set","copy"]},"issuelinks":{"required":false,"schema":{"type":"array","items":"issuelinks","system":"issuelinks"},"name":"Linked + Issues","key":"issuelinks","autoCompleteUrl":"https://defectdojo.atlassian.net/rest/api/2/issue/picker?currentProjectId=&showSubTaskParent=true&showSubTasks=true¤tIssueKey=null&query=","hasDefaultValue":false,"operations":["add","copy"]},"assignee":{"required":false,"schema":{"type":"user","system":"assignee"},"name":"Assignee","key":"assignee","autoCompleteUrl":"https://defectdojo.atlassian.net/rest/api/2/user/assignable/search?project=NTEST&query=","hasDefaultValue":false,"operations":["set"]}}}]}]}' + headers: + Atl-Request-Id: + - 2dededef-7418-435f-9a8f-7f72d656639e + Atl-Traceid: + - 2dededef7418435f9a8f7f72d656639e + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 06:26:56 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=89,cdn-upstream-fbl;dur=895,atl-edge;dur=774,atl-edge-internal;dur=35,atl-edge-upstream;dur=738,atl-edge-pop;desc="aws-us-east-1",cdn-cache-miss,cdn-pop;desc="DFW59-P2",cdn-rid;desc="AbV1TXNUQdn-IFFZvUKORvU1QCIsG9LRX4Tq0UkDpKlNO7uXnhFyuA==",cdn-downstream-fbl;dur=899 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 a16960b22c9ec86bb65015699e459bd8.cloudfront.net (CloudFront) + Warning: + - 'The issue create meta endpoint has been deprecated. (Deprecation start date: + June 03, 2024)' + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - AbV1TXNUQdn-IFFZvUKORvU1QCIsG9LRX4Tq0UkDpKlNO7uXnhFyuA== + X-Amz-Cf-Pop: + - DFW59-P2 + X-Arequestid: + - 904d9d0b32778831a6e9390e5eb0ec4b + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '350' + X-Ratelimit-Remaining: + - '348' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: '{"fields": {"project": {"key": "NTEST"}, "issuetype": {"name": "Task"}, + "summary": "Critical", "description": "\n\n\n\n\n\n\n*Title*: [Critical|http://localhost:8080/finding/234]\n\n*Defect + Dojo link:* http://localhost:8080/finding/234 (234)\n\n*Severity:* Critical\n\n\n*Due + Date:* Dec. 8, 2025\n\n\n\n\n\n*CVE:* Unknown\n\n\n\n\n*Product/Engagement/Test:* + [Security How-to|http://localhost:8080/product/2] / [1st Quarter Engagement|http://localhost:8080/engagement/1] + / [Generic Findings Import|http://localhost:8080/test/92]\n\n\n\n\n\n\n\n\n\n\n\n*Vulnerable + Component*: Component A - None\n\n\n\n\n*Description*:\ntest\n\n\n\n\n*Impact*:\nNone\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n", "priority": {"name": "Highest"}}}' + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Length: + - '738' + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: POST + uri: https://defectdojo.atlassian.net/rest/api/2/issue + response: + body: + string: '{"id":"25324","key":"NTEST-3251","self":"https://defectdojo.atlassian.net/rest/api/2/issue/25324"}' + headers: + Atl-Request-Id: + - 33eaa72f-c6b1-44c2-ab25-0d3ef78a1e7d + Atl-Traceid: + - 33eaa72fc6b144c2ab250d3ef78a1e7d + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 06:26:58 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=93,cdn-upstream-fbl;dur=1393,atl-edge;dur=1268,atl-edge-internal;dur=17,atl-edge-upstream;dur=1251,atl-edge-pop;desc="aws-us-east-1",cdn-cache-miss,cdn-pop;desc="DFW57-P9",cdn-rid;desc="8opblEET3PyiCrv2oOjvzz6g0jesf7SbKQbiv-Wa95MLlVCBAjY3Fw==",cdn-downstream-fbl;dur=1397 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 dac715481713fd87ba1460d2185ab6e2.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - 8opblEET3PyiCrv2oOjvzz6g0jesf7SbKQbiv-Wa95MLlVCBAjY3Fw== + X-Amz-Cf-Pop: + - DFW57-P9 + X-Arequestid: + - 8de8bca895a792d28da31331c43996d2 + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '200' + X-Ratelimit-Remaining: + - '198' + X-Xss-Protection: + - 1; mode=block + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3251 + response: + body: + string: '{"expand":"renderedFields,names,schema,operations,editmeta,changelog,versionedRepresentations,customfield_10010.requestTypePractice","id":"25324","self":"https://defectdojo.atlassian.net/rest/api/2/issue/25324","key":"NTEST-3251","fields":{"statuscategorychangedate":"2026-02-07T07:26:58.401+0100","fixVersions":[],"statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"},"resolution":null,"lastViewed":null,"customfield_10060":null,"customfield_10061":null,"customfield_10062":null,"customfield_10063":null,"customfield_10064":null,"customfield_10065":null,"customfield_10066":null,"priority":{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/1","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/highest_new.svg","name":"Highest","id":"1"},"labels":[],"timeestimate":null,"aggregatetimeoriginalestimate":null,"versions":[],"issuelinks":[],"assignee":null,"status":{"self":"https://defectdojo.atlassian.net/rest/api/2/status/10000","description":"","iconUrl":"https://defectdojo.atlassian.net/","name":"Backlog","id":"10000","statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"}},"components":[],"customfield_10050":null,"customfield_10051":null,"customfield_10053":null,"customfield_10055":null,"customfield_10056":null,"customfield_10057":null,"customfield_10058":null,"customfield_10059":null,"customfield_10049":null,"aggregatetimeestimate":null,"creator":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"subtasks":[],"customfield_10040":null,"customfield_10041":null,"customfield_10042":null,"reporter":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"customfield_10043":null,"aggregateprogress":{"progress":0,"total":0},"customfield_10044":null,"customfield_10045":null,"customfield_10046":null,"customfield_10047":null,"customfield_10048":null,"customfield_10038":null,"customfield_10039":null,"progress":{"progress":0,"total":0},"votes":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3251/votes","votes":0,"hasVoted":false},"worklog":{"startAt":0,"maxResults":20,"total":0,"worklogs":[]},"issuetype":{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10002","id":"10002","description":"A + small, distinct piece of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","subtask":false,"avatarId":10318,"hierarchyLevel":0},"timespent":null,"customfield_10030":null,"project":{"self":"https://defectdojo.atlassian.net/rest/api/2/project/10000","id":"10000","key":"NTEST","name":"Unittests","projectTypeKey":"software","simplified":false,"avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=medium"}},"customfield_10031":null,"customfield_10032":null,"customfield_10033":null,"aggregatetimespent":null,"customfield_10035":null,"customfield_10036":null,"customfield_10037":null,"customfield_10027":null,"customfield_10028":null,"customfield_10029":null,"resolutiondate":null,"workratio":-1,"watches":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3251/watchers","watchCount":1,"isWatching":true},"created":"2026-02-07T07:26:57.729+0100","customfield_10020":null,"customfield_10021":null,"customfield_10022":null,"customfield_10023":null,"customfield_10016":null,"customfield_10017":null,"customfield_10019":"0|i01527:","updated":"2026-02-07T07:26:58.017+0100","customfield_10090":null,"timeoriginalestimate":null,"description":"\n\n\n\n\n\n\n*Title*: + [Critical|http://localhost:8080/finding/234]\n\n*Defect Dojo link:* http://localhost:8080/finding/234 + (234)\n\n*Severity:* Critical\n\n\n*Due Date:* Dec. 8, 2025\n\n\n\n\n\n*CVE:* + Unknown\n\n\n\n\n*Product/Engagement/Test:* [Security How-to|http://localhost:8080/product/2] + / [1st Quarter Engagement|http://localhost:8080/engagement/1] / [Generic Findings + Import|http://localhost:8080/test/92]\n\n\n\n\n\n\n\n\n\n\n\n*Vulnerable Component*: + Component A - None\n\n\n\n\n*Description*:\ntest\n\n\n\n\n*Impact*:\nNone\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n","customfield_10010":null,"customfield_10014":null,"timetracking":{},"customfield_10015":null,"customfield_10005":null,"customfield_10006":null,"customfield_10007":null,"security":null,"customfield_10008":null,"attachment":[],"customfield_10009":null,"summary":"Critical","customfield_10001":null,"customfield_10002":[],"customfield_10123":null,"customfield_10003":null,"customfield_10004":null,"environment":null,"duedate":null,"comment":{"comments":[],"self":"https://defectdojo.atlassian.net/rest/api/2/issue/25324/comment","maxResults":0,"total":0,"startAt":0}}}' + headers: + Atl-Request-Id: + - fd23da19-b5f8-4825-b97e-7ee02a02f035 + Atl-Traceid: + - fd23da19b5f84825b97e7ee02a02f035 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 06:26:59 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=91,cdn-upstream-fbl;dur=376,atl-edge;dur=253,atl-edge-internal;dur=27,atl-edge-upstream;dur=224,atl-edge-pop;desc="aws-us-east-1",cdn-cache-miss,cdn-pop;desc="DFW59-P7",cdn-rid;desc="LUGbPvPWWPxo0hm-K4eZZXIcBtLxvFka1vzYSYhM2jYrg0cuwmeifQ==",cdn-downstream-fbl;dur=381 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 7b20f970e787d67ae77f7af9dea94ba2.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - LUGbPvPWWPxo0hm-K4eZZXIcBtLxvFka1vzYSYhM2jYrg0cuwmeifQ== + X-Amz-Cf-Pop: + - DFW59-P7 + X-Arequestid: + - bb358c85f836f6aa3f038fbbdcd7152e + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '400' + X-Ratelimit-Remaining: + - '398' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/issue/25324 + response: + body: + string: '{"expand":"renderedFields,names,schema,operations,editmeta,changelog,versionedRepresentations,customfield_10010.requestTypePractice","id":"25324","self":"https://defectdojo.atlassian.net/rest/api/2/issue/25324","key":"NTEST-3251","fields":{"statuscategorychangedate":"2026-02-07T07:26:58.401+0100","fixVersions":[],"statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"},"resolution":null,"lastViewed":null,"customfield_10060":null,"customfield_10061":null,"customfield_10062":null,"customfield_10063":null,"customfield_10064":null,"customfield_10065":null,"customfield_10066":null,"priority":{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/1","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/highest_new.svg","name":"Highest","id":"1"},"labels":[],"timeestimate":null,"aggregatetimeoriginalestimate":null,"versions":[],"issuelinks":[],"assignee":null,"status":{"self":"https://defectdojo.atlassian.net/rest/api/2/status/10000","description":"","iconUrl":"https://defectdojo.atlassian.net/","name":"Backlog","id":"10000","statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"}},"components":[],"customfield_10050":null,"customfield_10051":null,"customfield_10053":null,"customfield_10055":null,"customfield_10056":null,"customfield_10057":null,"customfield_10058":null,"customfield_10059":null,"customfield_10049":null,"aggregatetimeestimate":null,"creator":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"subtasks":[],"customfield_10040":null,"customfield_10041":null,"customfield_10042":null,"reporter":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"customfield_10043":null,"aggregateprogress":{"progress":0,"total":0},"customfield_10044":null,"customfield_10045":null,"customfield_10046":null,"customfield_10047":null,"customfield_10048":null,"customfield_10038":null,"customfield_10039":null,"progress":{"progress":0,"total":0},"votes":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3251/votes","votes":0,"hasVoted":false},"worklog":{"startAt":0,"maxResults":20,"total":0,"worklogs":[]},"issuetype":{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10002","id":"10002","description":"A + small, distinct piece of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","subtask":false,"avatarId":10318,"hierarchyLevel":0},"timespent":null,"customfield_10030":null,"project":{"self":"https://defectdojo.atlassian.net/rest/api/2/project/10000","id":"10000","key":"NTEST","name":"Unittests","projectTypeKey":"software","simplified":false,"avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=medium"}},"customfield_10031":null,"customfield_10032":null,"customfield_10033":null,"aggregatetimespent":null,"customfield_10035":null,"customfield_10036":null,"customfield_10037":null,"customfield_10027":null,"customfield_10028":null,"customfield_10029":null,"resolutiondate":null,"workratio":-1,"watches":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3251/watchers","watchCount":1,"isWatching":true},"created":"2026-02-07T07:26:57.729+0100","customfield_10020":null,"customfield_10021":null,"customfield_10022":null,"customfield_10023":null,"customfield_10016":null,"customfield_10017":null,"customfield_10019":"0|i01527:","updated":"2026-02-07T07:26:58.017+0100","customfield_10090":null,"timeoriginalestimate":null,"description":"\n\n\n\n\n\n\n*Title*: + [Critical|http://localhost:8080/finding/234]\n\n*Defect Dojo link:* http://localhost:8080/finding/234 + (234)\n\n*Severity:* Critical\n\n\n*Due Date:* Dec. 8, 2025\n\n\n\n\n\n*CVE:* + Unknown\n\n\n\n\n*Product/Engagement/Test:* [Security How-to|http://localhost:8080/product/2] + / [1st Quarter Engagement|http://localhost:8080/engagement/1] / [Generic Findings + Import|http://localhost:8080/test/92]\n\n\n\n\n\n\n\n\n\n\n\n*Vulnerable Component*: + Component A - None\n\n\n\n\n*Description*:\ntest\n\n\n\n\n*Impact*:\nNone\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n","customfield_10010":null,"customfield_10014":null,"timetracking":{},"customfield_10015":null,"customfield_10005":null,"customfield_10006":null,"customfield_10007":null,"security":null,"customfield_10008":null,"attachment":[],"customfield_10009":null,"summary":"Critical","customfield_10001":null,"customfield_10002":[],"customfield_10123":null,"customfield_10003":null,"customfield_10004":null,"environment":null,"duedate":null,"comment":{"comments":[],"self":"https://defectdojo.atlassian.net/rest/api/2/issue/25324/comment","maxResults":0,"total":0,"startAt":0}}}' + headers: + Atl-Request-Id: + - 16a66225-07c1-4b39-8a95-23a227fd0b8d + Atl-Traceid: + - 16a6622507c14b398a9523a227fd0b8d + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 06:26:59 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=91,cdn-upstream-fbl;dur=332,atl-edge;dur=210,atl-edge-internal;dur=20,atl-edge-upstream;dur=189,atl-edge-pop;desc="aws-us-east-1",cdn-cache-miss,cdn-pop;desc="DFW59-P2",cdn-rid;desc="55p2KAOIVwL6ps6uy6gEu8OTB7W4MJyy454GTr1ouo2Tglvvi2yi3A==",cdn-downstream-fbl;dur=336 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 597c23204cb5e5b529d54a683a4fb7a2.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - 55p2KAOIVwL6ps6uy6gEu8OTB7W4MJyy454GTr1ouo2Tglvvi2yi3A== + X-Amz-Cf-Pop: + - DFW59-P2 + X-Arequestid: + - 1b3830a9186fe8a316301bcd6ab1819a + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '400' + X-Ratelimit-Remaining: + - '397' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/serverInfo + response: + body: + string: '{"baseUrl":"https://defectdojo.atlassian.net","displayUrl":"https://defectdojo.atlassian.net","displayUrlServicedeskHelpCenter":"https://defectdojo.atlassian.net","displayUrlCSMHelpSeeker":"https://defectdojo.atlassian.net","displayUrlConfluence":"https://defectdojo.atlassian.net","version":"1001.0.0-SNAPSHOT","versionNumbers":[1001,0,0],"deploymentType":"Cloud","buildNumber":100290,"buildDate":"2026-02-06T12:38:29.000+0100","serverTime":"2026-02-07T07:26:59.968+0100","scmInfo":"9d700605f271b9e38f3e73c4116a686dae8d11d7","serverTitle":"Jira","defaultLocale":{"locale":"en_US"},"serverTimeZone":"Etc/UTC"}' + headers: + Atl-Request-Id: + - fe5fd032-a330-467b-b0ea-1cb959948afb + Atl-Traceid: + - fe5fd032a330467bb0ea1cb959948afb + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 06:27:00 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=93,cdn-upstream-fbl;dur=242,atl-edge;dur=117,atl-edge-internal;dur=15,atl-edge-upstream;dur=101,atl-edge-pop;desc="aws-us-east-1",cdn-cache-miss,cdn-pop;desc="DFW56-P5",cdn-rid;desc="R_B_RHc-rTmB2VNNN7CYgyo86BtpsKpF8kmIERv6wf2mKhxO9t0-sw==",cdn-downstream-fbl;dur=246 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 b47da3ec0e7532d35176d3affb527e34.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - R_B_RHc-rTmB2VNNN7CYgyo86BtpsKpF8kmIERv6wf2mKhxO9t0-sw== + X-Amz-Cf-Pop: + - DFW56-P5 + X-Arequestid: + - 9f7643173a1f4c177a7f3341990bb7cd + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '350' + X-Ratelimit-Remaining: + - '349' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/issue/createmeta?projectKeys=NTEST&issuetypeNames=Task&expand=projects.issuetypes.fields + response: + body: + string: '{"expand":"projects","projects":[{"expand":"issuetypes","self":"https://defectdojo.atlassian.net/rest/api/2/project/10000","id":"10000","key":"NTEST","name":"Unittests","avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=medium"},"issuetypes":[{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10002","id":"10002","description":"A + small, distinct piece of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","untranslatedName":"Task","subtask":false,"hierarchyLevel":0,"expand":"fields","fields":{"summary":{"required":true,"schema":{"type":"string","system":"summary"},"name":"Summary","key":"summary","hasDefaultValue":false,"operations":["set"]},"issuetype":{"required":true,"schema":{"type":"issuetype","system":"issuetype"},"name":"Issue + Type","key":"issuetype","hasDefaultValue":false,"operations":[],"allowedValues":[{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10002","id":"10002","description":"A + small, distinct piece of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","subtask":false,"avatarId":10318,"hierarchyLevel":0}]},"parent":{"required":false,"schema":{"type":"issuelink","system":"parent"},"name":"Parent","key":"parent","hasDefaultValue":false,"operations":["set"]},"components":{"required":false,"schema":{"type":"array","items":"component","system":"components"},"name":"Components","key":"components","hasDefaultValue":false,"operations":["add","set","remove"],"allowedValues":[]},"description":{"required":false,"schema":{"type":"string","system":"description"},"name":"Description","key":"description","hasDefaultValue":false,"operations":["set"]},"project":{"required":true,"schema":{"type":"project","system":"project"},"name":"Project","key":"project","hasDefaultValue":false,"operations":["set"],"allowedValues":[{"self":"https://defectdojo.atlassian.net/rest/api/2/project/10000","id":"10000","key":"NTEST","name":"Unittests","projectTypeKey":"software","simplified":false,"avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=medium"}}]},"fixVersions":{"required":false,"schema":{"type":"array","items":"version","system":"fixVersions"},"name":"Fix + versions","key":"fixVersions","hasDefaultValue":false,"operations":["set","add","remove"],"allowedValues":[]},"priority":{"required":false,"schema":{"type":"priority","system":"priority"},"name":"Priority","key":"priority","hasDefaultValue":true,"operations":["set"],"allowedValues":[{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/1","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/highest_new.svg","name":"Highest","id":"1"},{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/2","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/high_new.svg","name":"High","id":"2"},{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/3","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/medium_new.svg","name":"Medium","id":"3"},{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/4","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/low_new.svg","name":"Low","id":"4"},{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/5","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/lowest_new.svg","name":"Lowest","id":"5"}],"defaultValue":{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/3","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/medium_new.svg","name":"Medium","id":"3"}},"customfield_10014":{"required":false,"schema":{"type":"any","custom":"com.pyxis.greenhopper.jira:gh-epic-link","customId":10014},"name":"Epic + Link","key":"customfield_10014","hasDefaultValue":false,"operations":["set"]},"labels":{"required":false,"schema":{"type":"array","items":"string","system":"labels"},"name":"Labels","key":"labels","autoCompleteUrl":"https://defectdojo.atlassian.net/rest/api/1.0/labels/suggest?query=","hasDefaultValue":false,"operations":["add","set","remove"]},"attachment":{"required":false,"schema":{"type":"array","items":"attachment","system":"attachment"},"name":"Attachment","key":"attachment","hasDefaultValue":false,"operations":["set","copy"]},"issuelinks":{"required":false,"schema":{"type":"array","items":"issuelinks","system":"issuelinks"},"name":"Linked + Issues","key":"issuelinks","autoCompleteUrl":"https://defectdojo.atlassian.net/rest/api/2/issue/picker?currentProjectId=&showSubTaskParent=true&showSubTasks=true¤tIssueKey=null&query=","hasDefaultValue":false,"operations":["add","copy"]},"assignee":{"required":false,"schema":{"type":"user","system":"assignee"},"name":"Assignee","key":"assignee","autoCompleteUrl":"https://defectdojo.atlassian.net/rest/api/2/user/assignable/search?project=NTEST&query=","hasDefaultValue":false,"operations":["set"]}}}]}]}' + headers: + Atl-Request-Id: + - 16684353-e2d1-41f8-b286-31b8e2dec7b0 + Atl-Traceid: + - 16684353e2d141f8b28631b8e2dec7b0 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 06:27:00 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=92,cdn-upstream-fbl;dur=374,atl-edge;dur=250,atl-edge-internal;dur=19,atl-edge-upstream;dur=232,atl-edge-pop;desc="aws-us-east-1",cdn-cache-miss,cdn-pop;desc="DFW57-P9",cdn-rid;desc="KXDbIk2d-atTT97bE3kHmVAAgZQCHzihXtksaSm7EKXXhWU2hoiFtg==",cdn-downstream-fbl;dur=378 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 46d6748e396507195da5b5844b3929bc.cloudfront.net (CloudFront) + Warning: + - 'The issue create meta endpoint has been deprecated. (Deprecation start date: + June 03, 2024)' + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - KXDbIk2d-atTT97bE3kHmVAAgZQCHzihXtksaSm7EKXXhWU2hoiFtg== + X-Amz-Cf-Pop: + - DFW57-P9 + X-Arequestid: + - 0bc84739ee9bf6e24bd79374e417096e + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '350' + X-Ratelimit-Remaining: + - '349' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: '{"fields": {"project": {"key": "NTEST"}, "issuetype": {"name": "Task"}, + "summary": "High", "description": "\n\n\n\n\n\n\n*Title*: [High|http://localhost:8080/finding/235]\n\n*Defect + Dojo link:* http://localhost:8080/finding/235 (235)\n\n*Severity:* High\n\n\n*Due + Date:* Dec. 31, 2025\n\n\n\n\n\n*CVE:* Unknown\n\n\n\n\n*Product/Engagement/Test:* + [Security How-to|http://localhost:8080/product/2] / [1st Quarter Engagement|http://localhost:8080/engagement/1] + / [Generic Findings Import|http://localhost:8080/test/92]\n\n\n\n\n\n\n\n\n\n\n\n*Vulnerable + Component*: Component A - None\n\n\n\n\n*Description*:\ntest\n\n\n\n\n*Impact*:\nNone\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n", "priority": {"name": "High"}}}' + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Length: + - '724' + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: POST + uri: https://defectdojo.atlassian.net/rest/api/2/issue + response: + body: + string: '{"id":"25325","key":"NTEST-3252","self":"https://defectdojo.atlassian.net/rest/api/2/issue/25325"}' + headers: + Atl-Request-Id: + - 4235b958-a2e6-48b2-a40a-bfb368f5b9de + Atl-Traceid: + - 4235b958a2e648b2a40abfb368f5b9de + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 06:27:01 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=92,cdn-upstream-fbl;dur=760,atl-edge;dur=636,atl-edge-internal;dur=20,atl-edge-upstream;dur=616,atl-edge-pop;desc="aws-us-east-1",cdn-cache-miss,cdn-pop;desc="DFW57-P5",cdn-rid;desc="p8ow3uekePQ0uVDGxyNKHo3Du1R3LROoesadFcke76xVmxp9fXwW2w==",cdn-downstream-fbl;dur=764 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 6731676908e2f9fd15d695e4cfc5dc0c.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - p8ow3uekePQ0uVDGxyNKHo3Du1R3LROoesadFcke76xVmxp9fXwW2w== + X-Amz-Cf-Pop: + - DFW57-P5 + X-Arequestid: + - 38db93470f00a97aa7c824e8e1d6709e + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '200' + X-Ratelimit-Remaining: + - '199' + X-Xss-Protection: + - 1; mode=block + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3252 + response: + body: + string: '{"expand":"renderedFields,names,schema,operations,editmeta,changelog,versionedRepresentations,customfield_10010.requestTypePractice","id":"25325","self":"https://defectdojo.atlassian.net/rest/api/2/issue/25325","key":"NTEST-3252","fields":{"statuscategorychangedate":"2026-02-07T07:27:01.209+0100","fixVersions":[],"statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"},"resolution":null,"lastViewed":null,"customfield_10060":null,"customfield_10061":null,"customfield_10062":null,"customfield_10063":null,"customfield_10064":null,"customfield_10065":null,"customfield_10066":null,"priority":{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/2","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/high_new.svg","name":"High","id":"2"},"labels":[],"timeestimate":null,"aggregatetimeoriginalestimate":null,"versions":[],"issuelinks":[],"assignee":null,"status":{"self":"https://defectdojo.atlassian.net/rest/api/2/status/10000","description":"","iconUrl":"https://defectdojo.atlassian.net/","name":"Backlog","id":"10000","statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"}},"components":[],"customfield_10050":null,"customfield_10051":null,"customfield_10053":null,"customfield_10055":null,"customfield_10056":null,"customfield_10057":null,"customfield_10058":null,"customfield_10059":null,"customfield_10049":null,"aggregatetimeestimate":null,"creator":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"subtasks":[],"customfield_10040":null,"customfield_10041":null,"customfield_10042":null,"reporter":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"customfield_10043":null,"aggregateprogress":{"progress":0,"total":0},"customfield_10044":null,"customfield_10045":null,"customfield_10046":null,"customfield_10047":null,"customfield_10048":null,"customfield_10038":null,"customfield_10039":null,"progress":{"progress":0,"total":0},"votes":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3252/votes","votes":0,"hasVoted":false},"worklog":{"startAt":0,"maxResults":20,"total":0,"worklogs":[]},"issuetype":{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10002","id":"10002","description":"A + small, distinct piece of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","subtask":false,"avatarId":10318,"hierarchyLevel":0},"timespent":null,"customfield_10030":null,"project":{"self":"https://defectdojo.atlassian.net/rest/api/2/project/10000","id":"10000","key":"NTEST","name":"Unittests","projectTypeKey":"software","simplified":false,"avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=medium"}},"customfield_10031":null,"customfield_10032":null,"customfield_10033":null,"aggregatetimespent":null,"customfield_10035":null,"customfield_10036":null,"customfield_10037":null,"customfield_10027":null,"customfield_10028":null,"customfield_10029":null,"resolutiondate":null,"workratio":-1,"watches":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3252/watchers","watchCount":1,"isWatching":true},"created":"2026-02-07T07:27:00.987+0100","customfield_10020":null,"customfield_10021":null,"customfield_10022":null,"customfield_10023":null,"customfield_10016":null,"customfield_10017":null,"customfield_10019":"0|i0152f:","updated":"2026-02-07T07:27:01.060+0100","customfield_10090":null,"timeoriginalestimate":null,"description":"\n\n\n\n\n\n\n*Title*: + [High|http://localhost:8080/finding/235]\n\n*Defect Dojo link:* http://localhost:8080/finding/235 + (235)\n\n*Severity:* High\n\n\n*Due Date:* Dec. 31, 2025\n\n\n\n\n\n*CVE:* + Unknown\n\n\n\n\n*Product/Engagement/Test:* [Security How-to|http://localhost:8080/product/2] + / [1st Quarter Engagement|http://localhost:8080/engagement/1] / [Generic Findings + Import|http://localhost:8080/test/92]\n\n\n\n\n\n\n\n\n\n\n\n*Vulnerable Component*: + Component A - None\n\n\n\n\n*Description*:\ntest\n\n\n\n\n*Impact*:\nNone\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n","customfield_10010":null,"customfield_10014":null,"timetracking":{},"customfield_10015":null,"customfield_10005":null,"customfield_10006":null,"customfield_10007":null,"security":null,"customfield_10008":null,"attachment":[],"customfield_10009":null,"summary":"High","customfield_10001":null,"customfield_10002":[],"customfield_10123":null,"customfield_10003":null,"customfield_10004":null,"environment":null,"duedate":null,"comment":{"comments":[],"self":"https://defectdojo.atlassian.net/rest/api/2/issue/25325/comment","maxResults":0,"total":0,"startAt":0}}}' + headers: + Atl-Request-Id: + - d19e209b-207f-44a4-a3f3-dc1e9c52efd6 + Atl-Traceid: + - d19e209b207f44a4a3f3dc1e9c52efd6 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 06:27:01 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=95,cdn-upstream-fbl;dur=351,atl-edge;dur=223,atl-edge-internal;dur=32,atl-edge-upstream;dur=189,atl-edge-pop;desc="aws-us-east-1",cdn-cache-miss,cdn-pop;desc="DFW56-P2",cdn-rid;desc="jJBNs7EA-fNaN0weXnQd8bAaZf9QZD8V97BkJkxIGVza1MUIXq6F5Q==",cdn-downstream-fbl;dur=356 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 f10aac07ec1e31d8b40ee8ef5feed6e6.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - jJBNs7EA-fNaN0weXnQd8bAaZf9QZD8V97BkJkxIGVza1MUIXq6F5Q== + X-Amz-Cf-Pop: + - DFW56-P2 + X-Arequestid: + - a6ef71e481f02ca9258ca9e871d57bd2 + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '400' + X-Ratelimit-Remaining: + - '399' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/issue/25325 + response: + body: + string: '{"expand":"renderedFields,names,schema,operations,editmeta,changelog,versionedRepresentations,customfield_10010.requestTypePractice","id":"25325","self":"https://defectdojo.atlassian.net/rest/api/2/issue/25325","key":"NTEST-3252","fields":{"statuscategorychangedate":"2026-02-07T07:27:01.209+0100","fixVersions":[],"statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"},"resolution":null,"lastViewed":null,"customfield_10060":null,"customfield_10061":null,"customfield_10062":null,"customfield_10063":null,"customfield_10064":null,"customfield_10065":null,"customfield_10066":null,"priority":{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/2","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/high_new.svg","name":"High","id":"2"},"labels":[],"timeestimate":null,"aggregatetimeoriginalestimate":null,"versions":[],"issuelinks":[],"assignee":null,"status":{"self":"https://defectdojo.atlassian.net/rest/api/2/status/10000","description":"","iconUrl":"https://defectdojo.atlassian.net/","name":"Backlog","id":"10000","statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"}},"components":[],"customfield_10050":null,"customfield_10051":null,"customfield_10053":null,"customfield_10055":null,"customfield_10056":null,"customfield_10057":null,"customfield_10058":null,"customfield_10059":null,"customfield_10049":null,"aggregatetimeestimate":null,"creator":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"subtasks":[],"customfield_10040":null,"customfield_10041":null,"customfield_10042":null,"reporter":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"customfield_10043":null,"aggregateprogress":{"progress":0,"total":0},"customfield_10044":null,"customfield_10045":null,"customfield_10046":null,"customfield_10047":null,"customfield_10048":null,"customfield_10038":null,"customfield_10039":null,"progress":{"progress":0,"total":0},"votes":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3252/votes","votes":0,"hasVoted":false},"worklog":{"startAt":0,"maxResults":20,"total":0,"worklogs":[]},"issuetype":{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10002","id":"10002","description":"A + small, distinct piece of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","subtask":false,"avatarId":10318,"hierarchyLevel":0},"timespent":null,"customfield_10030":null,"project":{"self":"https://defectdojo.atlassian.net/rest/api/2/project/10000","id":"10000","key":"NTEST","name":"Unittests","projectTypeKey":"software","simplified":false,"avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=medium"}},"customfield_10031":null,"customfield_10032":null,"customfield_10033":null,"aggregatetimespent":null,"customfield_10035":null,"customfield_10036":null,"customfield_10037":null,"customfield_10027":null,"customfield_10028":null,"customfield_10029":null,"resolutiondate":null,"workratio":-1,"watches":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3252/watchers","watchCount":1,"isWatching":true},"created":"2026-02-07T07:27:00.987+0100","customfield_10020":null,"customfield_10021":null,"customfield_10022":null,"customfield_10023":null,"customfield_10016":null,"customfield_10017":null,"customfield_10019":"0|i0152f:","updated":"2026-02-07T07:27:01.060+0100","customfield_10090":null,"timeoriginalestimate":null,"description":"\n\n\n\n\n\n\n*Title*: + [High|http://localhost:8080/finding/235]\n\n*Defect Dojo link:* http://localhost:8080/finding/235 + (235)\n\n*Severity:* High\n\n\n*Due Date:* Dec. 31, 2025\n\n\n\n\n\n*CVE:* + Unknown\n\n\n\n\n*Product/Engagement/Test:* [Security How-to|http://localhost:8080/product/2] + / [1st Quarter Engagement|http://localhost:8080/engagement/1] / [Generic Findings + Import|http://localhost:8080/test/92]\n\n\n\n\n\n\n\n\n\n\n\n*Vulnerable Component*: + Component A - None\n\n\n\n\n*Description*:\ntest\n\n\n\n\n*Impact*:\nNone\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n","customfield_10010":null,"customfield_10014":null,"timetracking":{},"customfield_10015":null,"customfield_10005":null,"customfield_10006":null,"customfield_10007":null,"security":null,"customfield_10008":null,"attachment":[],"customfield_10009":null,"summary":"High","customfield_10001":null,"customfield_10002":[],"customfield_10123":null,"customfield_10003":null,"customfield_10004":null,"environment":null,"duedate":null,"comment":{"comments":[],"self":"https://defectdojo.atlassian.net/rest/api/2/issue/25325/comment","maxResults":0,"total":0,"startAt":0}}}' + headers: + Atl-Request-Id: + - c51a2721-a519-4ff8-a081-7578ab817b85 + Atl-Traceid: + - c51a2721a5194ff8a0817578ab817b85 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 06:27:02 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=91,cdn-upstream-fbl;dur=310,atl-edge;dur=187,atl-edge-internal;dur=18,atl-edge-upstream;dur=169,atl-edge-pop;desc="aws-us-east-1",cdn-cache-miss,cdn-pop;desc="DFW57-P1",cdn-rid;desc="b3YHDvJn82BTYLF9nG5hc5hVtm4cN8KP0370Xosc7r0MLKdNbtkzng==",cdn-downstream-fbl;dur=315 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 1918cab433d8a05c792c3cff85897f3c.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - b3YHDvJn82BTYLF9nG5hc5hVtm4cN8KP0370Xosc7r0MLKdNbtkzng== + X-Amz-Cf-Pop: + - DFW57-P1 + X-Arequestid: + - 35331ca982119cccba9d67dab9e861d6 + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '400' + X-Ratelimit-Remaining: + - '398' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: '{"description": "Event test_added has occurred.", "title": "Test created + for Security How-to: 1st Quarter Engagement: Generic Findings Import", "user": + null, "url_ui": "http://localhost:8080/test/92", "url_api": "http://localhost:8080/api/v2/tests/92/", + "product_type": {"name": "ebooks", "id": 2, "url_ui": "http://localhost:8080/product/type/2", + "url_api": "http://localhost:8080/api/v2/product_types/2/"}, "product": {"name": + "Security How-to", "id": 2, "url_ui": "http://localhost:8080/product/2", "url_api": + "http://localhost:8080/api/v2/products/2/"}, "engagement": {"name": "1st Quarter + Engagement", "id": 1, "url_ui": "http://localhost:8080/engagement/1", "url_api": + "http://localhost:8080/api/v2/engagements/1/"}, "test": {"title": null, "id": + 92, "url_ui": "http://localhost:8080/test/92", "url_api": "http://localhost:8080/api/v2/tests/92/"}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Auth: + - Token xxx + Connection: + - keep-alive + Content-Length: + - '853' + Content-Type: + - application/json + User-Agent: + - DefectDojo-2.55.1 + X-DefectDojo-Event: + - test_added + X-DefectDojo-Instance: + - http://localhost:8080 + method: POST + uri: http://webhook.endpoint:8080/post + response: + body: + string: "{\n \"args\": {},\n \"headers\": {\n \"Accept\": [\n \"application/json\"\n + \ ],\n \"Accept-Encoding\": [\n \"gzip, deflate\"\n ],\n \"Auth\": + [\n \"Token xxx\"\n ],\n \"Connection\": [\n \"keep-alive\"\n + \ ],\n \"Content-Length\": [\n \"853\"\n ],\n \"Content-Type\": + [\n \"application/json\"\n ],\n \"Host\": [\n \"webhook.endpoint:8080\"\n + \ ],\n \"User-Agent\": [\n \"DefectDojo-2.55.1\"\n ],\n \"X-Defectdojo-Event\": + [\n \"test_added\"\n ],\n \"X-Defectdojo-Instance\": [\n \"http://localhost:8080\"\n + \ ]\n },\n \"method\": \"POST\",\n \"origin\": \"172.18.0.8\",\n \"url\": + \"http://webhook.endpoint:8080/post\",\n \"data\": \"{\\\"description\\\": + \\\"Event test_added has occurred.\\\", \\\"title\\\": \\\"Test created for + Security How-to: 1st Quarter Engagement: Generic Findings Import\\\", \\\"user\\\": + null, \\\"url_ui\\\": \\\"http://localhost:8080/test/92\\\", \\\"url_api\\\": + \\\"http://localhost:8080/api/v2/tests/92/\\\", \\\"product_type\\\": {\\\"name\\\": + \\\"ebooks\\\", \\\"id\\\": 2, \\\"url_ui\\\": \\\"http://localhost:8080/product/type/2\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/product_types/2/\\\"}, \\\"product\\\": + {\\\"name\\\": \\\"Security How-to\\\", \\\"id\\\": 2, \\\"url_ui\\\": \\\"http://localhost:8080/product/2\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/products/2/\\\"}, \\\"engagement\\\": + {\\\"name\\\": \\\"1st Quarter Engagement\\\", \\\"id\\\": 1, \\\"url_ui\\\": + \\\"http://localhost:8080/engagement/1\\\", \\\"url_api\\\": \\\"http://localhost:8080/api/v2/engagements/1/\\\"}, + \\\"test\\\": {\\\"title\\\": null, \\\"id\\\": 92, \\\"url_ui\\\": \\\"http://localhost:8080/test/92\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/tests/92/\\\"}}\",\n \"files\": + {},\n \"form\": {},\n \"json\": {\n \"description\": \"Event test_added + has occurred.\",\n \"engagement\": {\n \"id\": 1,\n \"name\": + \"1st Quarter Engagement\",\n \"url_api\": \"http://localhost:8080/api/v2/engagements/1/\",\n + \ \"url_ui\": \"http://localhost:8080/engagement/1\"\n },\n \"product\": + {\n \"id\": 2,\n \"name\": \"Security How-to\",\n \"url_api\": + \"http://localhost:8080/api/v2/products/2/\",\n \"url_ui\": \"http://localhost:8080/product/2\"\n + \ },\n \"product_type\": {\n \"id\": 2,\n \"name\": \"ebooks\",\n + \ \"url_api\": \"http://localhost:8080/api/v2/product_types/2/\",\n \"url_ui\": + \"http://localhost:8080/product/type/2\"\n },\n \"test\": {\n \"id\": + 92,\n \"title\": null,\n \"url_api\": \"http://localhost:8080/api/v2/tests/92/\",\n + \ \"url_ui\": \"http://localhost:8080/test/92\"\n },\n \"title\": + \"Test created for Security How-to: 1st Quarter Engagement: Generic Findings + Import\",\n \"url_api\": \"http://localhost:8080/api/v2/tests/92/\",\n + \ \"url_ui\": \"http://localhost:8080/test/92\",\n \"user\": null\n }\n}\n" + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Origin: + - '*' + Content-Type: + - application/json; charset=utf-8 + Date: + - Sat, 07 Feb 2026 06:27:02 GMT + Transfer-Encoding: + - chunked + status: + code: 200 + message: OK +- request: + body: '{"description": "Event scan_added has occurred.", "title": "Created/Updated + 2 findings for Security How-to: 1st Quarter Engagement: Generic Findings Import", + "user": null, "url_ui": "http://localhost:8080/test/92", "url_api": "http://localhost:8080/api/v2/tests/92/", + "product_type": {"name": "ebooks", "id": 2, "url_ui": "http://localhost:8080/product/type/2", + "url_api": "http://localhost:8080/api/v2/product_types/2/"}, "product": {"name": + "Security How-to", "id": 2, "url_ui": "http://localhost:8080/product/2", "url_api": + "http://localhost:8080/api/v2/products/2/"}, "engagement": {"name": "1st Quarter + Engagement", "id": 1, "url_ui": "http://localhost:8080/engagement/1", "url_api": + "http://localhost:8080/api/v2/engagements/1/"}, "test": {"title": null, "id": + 92, "url_ui": "http://localhost:8080/test/92", "url_api": "http://localhost:8080/api/v2/tests/92/"}, + "finding_count": 2, "findings": {"new": [{"id": 234, "title": "Critical", "severity": + "Critical", "url_ui": "http://localhost:8080/finding/234", "url_api": "http://localhost:8080/api/v2/findings/234/"}, + {"id": 235, "title": "High", "severity": "High", "url_ui": "http://localhost:8080/finding/235", + "url_api": "http://localhost:8080/api/v2/findings/235/"}], "reactivated": [], + "mitigated": [], "untouched": []}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Auth: + - Token xxx + Connection: + - keep-alive + Content-Length: + - '1279' + Content-Type: + - application/json + User-Agent: + - DefectDojo-2.55.1 + X-DefectDojo-Event: + - scan_added + X-DefectDojo-Instance: + - http://localhost:8080 + method: POST + uri: http://webhook.endpoint:8080/post + response: + body: + string: "{\n \"args\": {},\n \"headers\": {\n \"Accept\": [\n \"application/json\"\n + \ ],\n \"Accept-Encoding\": [\n \"gzip, deflate\"\n ],\n \"Auth\": + [\n \"Token xxx\"\n ],\n \"Connection\": [\n \"keep-alive\"\n + \ ],\n \"Content-Length\": [\n \"1279\"\n ],\n \"Content-Type\": + [\n \"application/json\"\n ],\n \"Host\": [\n \"webhook.endpoint:8080\"\n + \ ],\n \"User-Agent\": [\n \"DefectDojo-2.55.1\"\n ],\n \"X-Defectdojo-Event\": + [\n \"scan_added\"\n ],\n \"X-Defectdojo-Instance\": [\n \"http://localhost:8080\"\n + \ ]\n },\n \"method\": \"POST\",\n \"origin\": \"172.18.0.8\",\n \"url\": + \"http://webhook.endpoint:8080/post\",\n \"data\": \"{\\\"description\\\": + \\\"Event scan_added has occurred.\\\", \\\"title\\\": \\\"Created/Updated + 2 findings for Security How-to: 1st Quarter Engagement: Generic Findings Import\\\", + \\\"user\\\": null, \\\"url_ui\\\": \\\"http://localhost:8080/test/92\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/tests/92/\\\", \\\"product_type\\\": + {\\\"name\\\": \\\"ebooks\\\", \\\"id\\\": 2, \\\"url_ui\\\": \\\"http://localhost:8080/product/type/2\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/product_types/2/\\\"}, \\\"product\\\": + {\\\"name\\\": \\\"Security How-to\\\", \\\"id\\\": 2, \\\"url_ui\\\": \\\"http://localhost:8080/product/2\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/products/2/\\\"}, \\\"engagement\\\": + {\\\"name\\\": \\\"1st Quarter Engagement\\\", \\\"id\\\": 1, \\\"url_ui\\\": + \\\"http://localhost:8080/engagement/1\\\", \\\"url_api\\\": \\\"http://localhost:8080/api/v2/engagements/1/\\\"}, + \\\"test\\\": {\\\"title\\\": null, \\\"id\\\": 92, \\\"url_ui\\\": \\\"http://localhost:8080/test/92\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/tests/92/\\\"}, \\\"finding_count\\\": + 2, \\\"findings\\\": {\\\"new\\\": [{\\\"id\\\": 234, \\\"title\\\": \\\"Critical\\\", + \\\"severity\\\": \\\"Critical\\\", \\\"url_ui\\\": \\\"http://localhost:8080/finding/234\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/findings/234/\\\"}, {\\\"id\\\": + 235, \\\"title\\\": \\\"High\\\", \\\"severity\\\": \\\"High\\\", \\\"url_ui\\\": + \\\"http://localhost:8080/finding/235\\\", \\\"url_api\\\": \\\"http://localhost:8080/api/v2/findings/235/\\\"}], + \\\"reactivated\\\": [], \\\"mitigated\\\": [], \\\"untouched\\\": []}}\",\n + \ \"files\": {},\n \"form\": {},\n \"json\": {\n \"description\": \"Event + scan_added has occurred.\",\n \"engagement\": {\n \"id\": 1,\n \"name\": + \"1st Quarter Engagement\",\n \"url_api\": \"http://localhost:8080/api/v2/engagements/1/\",\n + \ \"url_ui\": \"http://localhost:8080/engagement/1\"\n },\n \"finding_count\": + 2,\n \"findings\": {\n \"mitigated\": [],\n \"new\": [\n {\n + \ \"id\": 234,\n \"severity\": \"Critical\",\n \"title\": + \"Critical\",\n \"url_api\": \"http://localhost:8080/api/v2/findings/234/\",\n + \ \"url_ui\": \"http://localhost:8080/finding/234\"\n },\n + \ {\n \"id\": 235,\n \"severity\": \"High\",\n \"title\": + \"High\",\n \"url_api\": \"http://localhost:8080/api/v2/findings/235/\",\n + \ \"url_ui\": \"http://localhost:8080/finding/235\"\n }\n ],\n + \ \"reactivated\": [],\n \"untouched\": []\n },\n \"product\": + {\n \"id\": 2,\n \"name\": \"Security How-to\",\n \"url_api\": + \"http://localhost:8080/api/v2/products/2/\",\n \"url_ui\": \"http://localhost:8080/product/2\"\n + \ },\n \"product_type\": {\n \"id\": 2,\n \"name\": \"ebooks\",\n + \ \"url_api\": \"http://localhost:8080/api/v2/product_types/2/\",\n \"url_ui\": + \"http://localhost:8080/product/type/2\"\n },\n \"test\": {\n \"id\": + 92,\n \"title\": null,\n \"url_api\": \"http://localhost:8080/api/v2/tests/92/\",\n + \ \"url_ui\": \"http://localhost:8080/test/92\"\n },\n \"title\": + \"Created/Updated 2 findings for Security How-to: 1st Quarter Engagement: + Generic Findings Import\",\n \"url_api\": \"http://localhost:8080/api/v2/tests/92/\",\n + \ \"url_ui\": \"http://localhost:8080/test/92\",\n \"user\": null\n }\n}\n" + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Origin: + - '*' + Content-Type: + - application/json; charset=utf-8 + Date: + - Sat, 07 Feb 2026 06:27:02 GMT + Transfer-Encoding: + - chunked + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/serverInfo + response: + body: + string: '{"baseUrl":"https://defectdojo.atlassian.net","displayUrl":"https://defectdojo.atlassian.net","displayUrlServicedeskHelpCenter":"https://defectdojo.atlassian.net","displayUrlCSMHelpSeeker":"https://defectdojo.atlassian.net","displayUrlConfluence":"https://defectdojo.atlassian.net","version":"1001.0.0-SNAPSHOT","versionNumbers":[1001,0,0],"deploymentType":"Cloud","buildNumber":100290,"buildDate":"2026-02-06T12:38:29.000+0100","serverTime":"2026-02-07T07:27:02.721+0100","scmInfo":"9d700605f271b9e38f3e73c4116a686dae8d11d7","serverTitle":"Jira","defaultLocale":{"locale":"en_US"},"serverTimeZone":"Etc/UTC"}' + headers: + Atl-Request-Id: + - 83136a2d-933d-43ce-8a6c-5c1f1de39747 + Atl-Traceid: + - 83136a2d933d43ce8a6c5c1f1de39747 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 06:27:02 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=92,cdn-upstream-fbl;dur=243,atl-edge;dur=117,atl-edge-internal;dur=15,atl-edge-upstream;dur=102,atl-edge-pop;desc="aws-us-east-1",cdn-cache-miss,cdn-pop;desc="DFW59-P1",cdn-rid;desc="3WbJ_OBp0ho25g-q9sAZ-alK-5dpUbKNn_UUkpyMRirqWIVNThueRw==",cdn-downstream-fbl;dur=247 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 34705116ba9c0c81a3b4f5eca19b3508.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - 3WbJ_OBp0ho25g-q9sAZ-alK-5dpUbKNn_UUkpyMRirqWIVNThueRw== + X-Amz-Cf-Pop: + - DFW59-P1 + X-Arequestid: + - 75523f2c0c09c4d7e92ff00149813d4a + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '350' + X-Ratelimit-Remaining: + - '349' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/issue/25324 + response: + body: + string: '{"expand":"renderedFields,names,schema,operations,editmeta,changelog,versionedRepresentations,customfield_10010.requestTypePractice","id":"25324","self":"https://defectdojo.atlassian.net/rest/api/2/issue/25324","key":"NTEST-3251","fields":{"statuscategorychangedate":"2026-02-07T07:26:58.401+0100","fixVersions":[],"statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"},"resolution":null,"lastViewed":null,"customfield_10060":null,"customfield_10061":null,"customfield_10062":null,"customfield_10063":null,"customfield_10064":null,"customfield_10065":null,"customfield_10066":null,"priority":{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/1","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/highest_new.svg","name":"Highest","id":"1"},"labels":[],"timeestimate":null,"aggregatetimeoriginalestimate":null,"versions":[],"issuelinks":[],"assignee":null,"status":{"self":"https://defectdojo.atlassian.net/rest/api/2/status/10000","description":"","iconUrl":"https://defectdojo.atlassian.net/","name":"Backlog","id":"10000","statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"}},"components":[],"customfield_10050":null,"customfield_10051":null,"customfield_10053":null,"customfield_10055":null,"customfield_10056":null,"customfield_10057":null,"customfield_10058":null,"customfield_10059":null,"customfield_10049":null,"aggregatetimeestimate":null,"creator":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"subtasks":[],"customfield_10040":null,"customfield_10041":null,"customfield_10042":null,"reporter":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"customfield_10043":null,"aggregateprogress":{"progress":0,"total":0},"customfield_10044":null,"customfield_10045":null,"customfield_10046":null,"customfield_10047":null,"customfield_10048":null,"customfield_10038":null,"customfield_10039":null,"progress":{"progress":0,"total":0},"votes":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3251/votes","votes":0,"hasVoted":false},"worklog":{"startAt":0,"maxResults":20,"total":0,"worklogs":[]},"issuetype":{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10002","id":"10002","description":"A + small, distinct piece of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","subtask":false,"avatarId":10318,"hierarchyLevel":0},"timespent":null,"customfield_10030":null,"project":{"self":"https://defectdojo.atlassian.net/rest/api/2/project/10000","id":"10000","key":"NTEST","name":"Unittests","projectTypeKey":"software","simplified":false,"avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=medium"}},"customfield_10031":null,"customfield_10032":null,"customfield_10033":null,"aggregatetimespent":null,"customfield_10035":null,"customfield_10036":null,"customfield_10037":null,"customfield_10027":null,"customfield_10028":null,"customfield_10029":null,"resolutiondate":null,"workratio":-1,"watches":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3251/watchers","watchCount":1,"isWatching":true},"created":"2026-02-07T07:26:57.729+0100","customfield_10020":null,"customfield_10021":null,"customfield_10022":null,"customfield_10023":null,"customfield_10016":null,"customfield_10017":null,"customfield_10019":"0|i01527:","updated":"2026-02-07T07:26:58.017+0100","customfield_10090":null,"timeoriginalestimate":null,"description":"\n\n\n\n\n\n\n*Title*: + [Critical|http://localhost:8080/finding/234]\n\n*Defect Dojo link:* http://localhost:8080/finding/234 + (234)\n\n*Severity:* Critical\n\n\n*Due Date:* Dec. 8, 2025\n\n\n\n\n\n*CVE:* + Unknown\n\n\n\n\n*Product/Engagement/Test:* [Security How-to|http://localhost:8080/product/2] + / [1st Quarter Engagement|http://localhost:8080/engagement/1] / [Generic Findings + Import|http://localhost:8080/test/92]\n\n\n\n\n\n\n\n\n\n\n\n*Vulnerable Component*: + Component A - None\n\n\n\n\n*Description*:\ntest\n\n\n\n\n*Impact*:\nNone\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n","customfield_10010":null,"customfield_10014":null,"timetracking":{},"customfield_10015":null,"customfield_10005":null,"customfield_10006":null,"customfield_10007":null,"security":null,"customfield_10008":null,"attachment":[],"customfield_10009":null,"summary":"Critical","customfield_10001":null,"customfield_10002":[],"customfield_10123":null,"customfield_10003":null,"customfield_10004":null,"environment":null,"duedate":null,"comment":{"comments":[],"self":"https://defectdojo.atlassian.net/rest/api/2/issue/25324/comment","maxResults":0,"total":0,"startAt":0}}}' + headers: + Atl-Request-Id: + - b6b71472-1924-4f80-bc29-fe873d342c51 + Atl-Traceid: + - b6b7147219244f80bc29fe873d342c51 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 06:27:03 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=92,cdn-upstream-fbl;dur=320,atl-edge;dur=196,atl-edge-internal;dur=19,atl-edge-upstream;dur=176,atl-edge-pop;desc="aws-us-east-1",cdn-cache-miss,cdn-pop;desc="DFW59-P3",cdn-rid;desc="0W9FPGyVyjtTA2nII8A0xO1_mT_zM2H4LW5sKdh5K-zZyW0SQ1_o2A==",cdn-downstream-fbl;dur=324 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 bb113279b964e3a6f4249a83d24cd4ee.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - 0W9FPGyVyjtTA2nII8A0xO1_mT_zM2H4LW5sKdh5K-zZyW0SQ1_o2A== + X-Amz-Cf-Pop: + - DFW59-P3 + X-Arequestid: + - 2730027960f08ce79decbb37069920bb + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '400' + X-Ratelimit-Remaining: + - '397' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/serverInfo + response: + body: + string: '{"baseUrl":"https://defectdojo.atlassian.net","displayUrl":"https://defectdojo.atlassian.net","displayUrlServicedeskHelpCenter":"https://defectdojo.atlassian.net","displayUrlCSMHelpSeeker":"https://defectdojo.atlassian.net","displayUrlConfluence":"https://defectdojo.atlassian.net","version":"1001.0.0-SNAPSHOT","versionNumbers":[1001,0,0],"deploymentType":"Cloud","buildNumber":100290,"buildDate":"2026-02-06T12:38:29.000+0100","serverTime":"2026-02-07T07:27:03.510+0100","scmInfo":"9d700605f271b9e38f3e73c4116a686dae8d11d7","serverTitle":"Jira","defaultLocale":{"locale":"en_US"},"serverTimeZone":"Etc/UTC"}' + headers: + Atl-Request-Id: + - eebebd0e-aef7-4d59-aa51-152b47920d1c + Atl-Traceid: + - eebebd0eaef74d59aa51152b47920d1c + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 06:27:03 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=0,cdn-upstream-fbl;dur=146,atl-edge;dur=115,atl-edge-internal;dur=14,atl-edge-upstream;dur=101,atl-edge-pop;desc="aws-us-east-1",cdn-cache-miss,cdn-pop;desc="DFW59-P7",cdn-rid;desc="GiZ5NkHuhzHAiEuaw6Zj4_cOcJjG3RLGAI--9GWdagAjGQ2fH1iCEA==",cdn-downstream-fbl;dur=152 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 96ae4ae70eac91ff3f0c8c8c5f3aa326.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - GiZ5NkHuhzHAiEuaw6Zj4_cOcJjG3RLGAI--9GWdagAjGQ2fH1iCEA== + X-Amz-Cf-Pop: + - DFW59-P7 + X-Arequestid: + - 412f7ea02e2148b9d7718ab543f1f006 + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '350' + X-Ratelimit-Remaining: + - '348' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/issue/25325 + response: + body: + string: '{"expand":"renderedFields,names,schema,operations,editmeta,changelog,versionedRepresentations,customfield_10010.requestTypePractice","id":"25325","self":"https://defectdojo.atlassian.net/rest/api/2/issue/25325","key":"NTEST-3252","fields":{"statuscategorychangedate":"2026-02-07T07:27:01.209+0100","fixVersions":[],"statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"},"resolution":null,"lastViewed":null,"customfield_10060":null,"customfield_10061":null,"customfield_10062":null,"customfield_10063":null,"customfield_10064":null,"customfield_10065":null,"customfield_10066":null,"priority":{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/2","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/high_new.svg","name":"High","id":"2"},"labels":[],"timeestimate":null,"aggregatetimeoriginalestimate":null,"versions":[],"issuelinks":[],"assignee":null,"status":{"self":"https://defectdojo.atlassian.net/rest/api/2/status/10000","description":"","iconUrl":"https://defectdojo.atlassian.net/","name":"Backlog","id":"10000","statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"}},"components":[],"customfield_10050":null,"customfield_10051":null,"customfield_10053":null,"customfield_10055":null,"customfield_10056":null,"customfield_10057":null,"customfield_10058":null,"customfield_10059":null,"customfield_10049":null,"aggregatetimeestimate":null,"creator":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"subtasks":[],"customfield_10040":null,"customfield_10041":null,"customfield_10042":null,"reporter":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"customfield_10043":null,"aggregateprogress":{"progress":0,"total":0},"customfield_10044":null,"customfield_10045":null,"customfield_10046":null,"customfield_10047":null,"customfield_10048":null,"customfield_10038":null,"customfield_10039":null,"progress":{"progress":0,"total":0},"votes":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3252/votes","votes":0,"hasVoted":false},"worklog":{"startAt":0,"maxResults":20,"total":0,"worklogs":[]},"issuetype":{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10002","id":"10002","description":"A + small, distinct piece of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","subtask":false,"avatarId":10318,"hierarchyLevel":0},"timespent":null,"customfield_10030":null,"project":{"self":"https://defectdojo.atlassian.net/rest/api/2/project/10000","id":"10000","key":"NTEST","name":"Unittests","projectTypeKey":"software","simplified":false,"avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=medium"}},"customfield_10031":null,"customfield_10032":null,"customfield_10033":null,"aggregatetimespent":null,"customfield_10035":null,"customfield_10036":null,"customfield_10037":null,"customfield_10027":null,"customfield_10028":null,"customfield_10029":null,"resolutiondate":null,"workratio":-1,"watches":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3252/watchers","watchCount":1,"isWatching":true},"created":"2026-02-07T07:27:00.987+0100","customfield_10020":null,"customfield_10021":null,"customfield_10022":null,"customfield_10023":null,"customfield_10016":null,"customfield_10017":null,"customfield_10019":"0|i0152f:","updated":"2026-02-07T07:27:01.060+0100","customfield_10090":null,"timeoriginalestimate":null,"description":"\n\n\n\n\n\n\n*Title*: + [High|http://localhost:8080/finding/235]\n\n*Defect Dojo link:* http://localhost:8080/finding/235 + (235)\n\n*Severity:* High\n\n\n*Due Date:* Dec. 31, 2025\n\n\n\n\n\n*CVE:* + Unknown\n\n\n\n\n*Product/Engagement/Test:* [Security How-to|http://localhost:8080/product/2] + / [1st Quarter Engagement|http://localhost:8080/engagement/1] / [Generic Findings + Import|http://localhost:8080/test/92]\n\n\n\n\n\n\n\n\n\n\n\n*Vulnerable Component*: + Component A - None\n\n\n\n\n*Description*:\ntest\n\n\n\n\n*Impact*:\nNone\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n","customfield_10010":null,"customfield_10014":null,"timetracking":{},"customfield_10015":null,"customfield_10005":null,"customfield_10006":null,"customfield_10007":null,"security":null,"customfield_10008":null,"attachment":[],"customfield_10009":null,"summary":"High","customfield_10001":null,"customfield_10002":[],"customfield_10123":null,"customfield_10003":null,"customfield_10004":null,"environment":null,"duedate":null,"comment":{"comments":[],"self":"https://defectdojo.atlassian.net/rest/api/2/issue/25325/comment","maxResults":0,"total":0,"startAt":0}}}' + headers: + Atl-Request-Id: + - 6b457c09-1cbc-4fb7-a3e6-3f2ef4952ce0 + Atl-Traceid: + - 6b457c091cbc4fb7a3e63f2ef4952ce0 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 06:27:04 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=93,cdn-upstream-fbl;dur=495,atl-edge;dur=370,atl-edge-internal;dur=19,atl-edge-upstream;dur=349,atl-edge-pop;desc="aws-us-east-1",cdn-cache-miss,cdn-pop;desc="DFW56-P6",cdn-rid;desc="wp8gRHSkVZ1NYde4XrWIJ0Ba5mSBCwzg-YiXvfDLz42C17eYAmH5oQ==",cdn-downstream-fbl;dur=499 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 3c74e7f8124b048286a4af2725a98e6c.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - wp8gRHSkVZ1NYde4XrWIJ0Ba5mSBCwzg-YiXvfDLz42C17eYAmH5oQ== + X-Amz-Cf-Pop: + - DFW56-P6 + X-Arequestid: + - 7a3c4c551decb1776d97beca3b3b346b + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '400' + X-Ratelimit-Remaining: + - '396' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/issue/createmeta?projectKeys=NTEST&issuetypeNames=Task&expand=projects.issuetypes.fields + response: + body: + string: '{"expand":"projects","projects":[{"expand":"issuetypes","self":"https://defectdojo.atlassian.net/rest/api/2/project/10000","id":"10000","key":"NTEST","name":"Unittests","avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=medium"},"issuetypes":[{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10002","id":"10002","description":"A + small, distinct piece of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","untranslatedName":"Task","subtask":false,"hierarchyLevel":0,"expand":"fields","fields":{"summary":{"required":true,"schema":{"type":"string","system":"summary"},"name":"Summary","key":"summary","hasDefaultValue":false,"operations":["set"]},"issuetype":{"required":true,"schema":{"type":"issuetype","system":"issuetype"},"name":"Issue + Type","key":"issuetype","hasDefaultValue":false,"operations":[],"allowedValues":[{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10002","id":"10002","description":"A + small, distinct piece of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","subtask":false,"avatarId":10318,"hierarchyLevel":0}]},"parent":{"required":false,"schema":{"type":"issuelink","system":"parent"},"name":"Parent","key":"parent","hasDefaultValue":false,"operations":["set"]},"components":{"required":false,"schema":{"type":"array","items":"component","system":"components"},"name":"Components","key":"components","hasDefaultValue":false,"operations":["add","set","remove"],"allowedValues":[]},"description":{"required":false,"schema":{"type":"string","system":"description"},"name":"Description","key":"description","hasDefaultValue":false,"operations":["set"]},"project":{"required":true,"schema":{"type":"project","system":"project"},"name":"Project","key":"project","hasDefaultValue":false,"operations":["set"],"allowedValues":[{"self":"https://defectdojo.atlassian.net/rest/api/2/project/10000","id":"10000","key":"NTEST","name":"Unittests","projectTypeKey":"software","simplified":false,"avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=medium"}}]},"fixVersions":{"required":false,"schema":{"type":"array","items":"version","system":"fixVersions"},"name":"Fix + versions","key":"fixVersions","hasDefaultValue":false,"operations":["set","add","remove"],"allowedValues":[]},"priority":{"required":false,"schema":{"type":"priority","system":"priority"},"name":"Priority","key":"priority","hasDefaultValue":true,"operations":["set"],"allowedValues":[{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/1","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/highest_new.svg","name":"Highest","id":"1"},{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/2","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/high_new.svg","name":"High","id":"2"},{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/3","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/medium_new.svg","name":"Medium","id":"3"},{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/4","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/low_new.svg","name":"Low","id":"4"},{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/5","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/lowest_new.svg","name":"Lowest","id":"5"}],"defaultValue":{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/3","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/medium_new.svg","name":"Medium","id":"3"}},"customfield_10014":{"required":false,"schema":{"type":"any","custom":"com.pyxis.greenhopper.jira:gh-epic-link","customId":10014},"name":"Epic + Link","key":"customfield_10014","hasDefaultValue":false,"operations":["set"]},"labels":{"required":false,"schema":{"type":"array","items":"string","system":"labels"},"name":"Labels","key":"labels","autoCompleteUrl":"https://defectdojo.atlassian.net/rest/api/1.0/labels/suggest?query=","hasDefaultValue":false,"operations":["add","set","remove"]},"attachment":{"required":false,"schema":{"type":"array","items":"attachment","system":"attachment"},"name":"Attachment","key":"attachment","hasDefaultValue":false,"operations":["set","copy"]},"issuelinks":{"required":false,"schema":{"type":"array","items":"issuelinks","system":"issuelinks"},"name":"Linked + Issues","key":"issuelinks","autoCompleteUrl":"https://defectdojo.atlassian.net/rest/api/2/issue/picker?currentProjectId=&showSubTaskParent=true&showSubTasks=true¤tIssueKey=null&query=","hasDefaultValue":false,"operations":["add","copy"]},"assignee":{"required":false,"schema":{"type":"user","system":"assignee"},"name":"Assignee","key":"assignee","autoCompleteUrl":"https://defectdojo.atlassian.net/rest/api/2/user/assignable/search?project=NTEST&query=","hasDefaultValue":false,"operations":["set"]}}}]}]}' + headers: + Atl-Request-Id: + - 77146386-ddc5-4049-a371-f03caf1fd0c8 + Atl-Traceid: + - 77146386ddc54049a371f03caf1fd0c8 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 06:27:04 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=91,cdn-upstream-fbl;dur=382,atl-edge;dur=260,atl-edge-internal;dur=18,atl-edge-upstream;dur=239,atl-edge-pop;desc="aws-us-east-1",cdn-cache-miss,cdn-pop;desc="DFW57-P2",cdn-rid;desc="agAjXcyYyB4Vep1veQiqKiuR4T_qS6zPV0jQW7Gfht89PPRW9JxvJg==",cdn-downstream-fbl;dur=386 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 88cdde34d65a7ba1d8a858856a27cd2a.cloudfront.net (CloudFront) + Warning: + - 'The issue create meta endpoint has been deprecated. (Deprecation start date: + June 03, 2024)' + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - agAjXcyYyB4Vep1veQiqKiuR4T_qS6zPV0jQW7Gfht89PPRW9JxvJg== + X-Amz-Cf-Pop: + - DFW57-P2 + X-Arequestid: + - 7cd2fcaf195f39653010a05225a01bcc + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '350' + X-Ratelimit-Remaining: + - '349' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: '{"fields": {"project": {"key": "NTEST"}, "issuetype": {"name": "Task"}, + "summary": "High", "description": "\n\n\n\n\n\n\n*Title*: [High|http://localhost:8080/finding/235]\n\n*Defect + Dojo link:* http://localhost:8080/finding/235 (235)\n\n*Severity:* High\n\n\n*Due + Date:* Dec. 31, 2025\n\n\n\n\n\n*CVE:* Unknown\n\n\n\n\n*Product/Engagement/Test:* + [Security How-to|http://localhost:8080/product/2] / [1st Quarter Engagement|http://localhost:8080/engagement/1] + / [Generic Findings Import|http://localhost:8080/test/92]\n\n\n\n\n\n\n\n\n\n\n\n*Vulnerable + Component*: Component A - None\n\n\n\n\n*Description*:\ntest\n\n\n\n\n*Impact*:\nNone\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n"}, "update": {}}' + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Length: + - '708' + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: PUT + uri: https://defectdojo.atlassian.net/rest/api/2/issue/25325 + response: + body: + string: '' + headers: + Atl-Request-Id: + - f5364ba3-395d-4d7f-8cc3-52d248276e56 + Atl-Traceid: + - f5364ba3395d4d7f8cc352d248276e56 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 06:27:05 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=92,cdn-upstream-fbl;dur=438,atl-edge;dur=312,atl-edge-internal;dur=21,atl-edge-upstream;dur=289,atl-edge-pop;desc="aws-us-east-1",cdn-cache-miss,cdn-pop;desc="DFW57-P1",cdn-rid;desc="Vv1NpnEsQEQqn3XQymDa46QzAmbA71-VcDYen2_QQf9G-0f-SaOQgw==",cdn-downstream-fbl;dur=442 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Vary: + - Accept-Encoding + Via: + - 1.1 d45e064f8c3e1035d136019303749e0e.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - Vv1NpnEsQEQqn3XQymDa46QzAmbA71-VcDYen2_QQf9G-0f-SaOQgw== + X-Amz-Cf-Pop: + - DFW57-P1 + X-Arequestid: + - 5fbcc376b09c78d42bcca8b27fa80ef2 + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '300' + X-Ratelimit-Remaining: + - '298' + X-Xss-Protection: + - 1; mode=block + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/issue/25325 + response: + body: + string: '{"expand":"renderedFields,names,schema,operations,editmeta,changelog,versionedRepresentations,customfield_10010.requestTypePractice","id":"25325","self":"https://defectdojo.atlassian.net/rest/api/2/issue/25325","key":"NTEST-3252","fields":{"statuscategorychangedate":"2026-02-07T07:27:01.209+0100","fixVersions":[],"statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"},"resolution":null,"lastViewed":null,"customfield_10060":null,"customfield_10061":null,"customfield_10062":null,"customfield_10063":null,"customfield_10064":null,"customfield_10065":null,"customfield_10066":null,"priority":{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/2","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/high_new.svg","name":"High","id":"2"},"labels":[],"timeestimate":null,"aggregatetimeoriginalestimate":null,"versions":[],"issuelinks":[],"assignee":null,"status":{"self":"https://defectdojo.atlassian.net/rest/api/2/status/10000","description":"","iconUrl":"https://defectdojo.atlassian.net/","name":"Backlog","id":"10000","statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"}},"components":[],"customfield_10050":null,"customfield_10051":null,"customfield_10053":null,"customfield_10055":null,"customfield_10056":null,"customfield_10057":null,"customfield_10058":null,"customfield_10059":null,"customfield_10049":null,"aggregatetimeestimate":null,"creator":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"subtasks":[],"customfield_10040":null,"customfield_10041":null,"customfield_10042":null,"reporter":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"customfield_10043":null,"aggregateprogress":{"progress":0,"total":0},"customfield_10044":null,"customfield_10045":null,"customfield_10046":null,"customfield_10047":null,"customfield_10048":null,"customfield_10038":null,"customfield_10039":null,"progress":{"progress":0,"total":0},"votes":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3252/votes","votes":0,"hasVoted":false},"worklog":{"startAt":0,"maxResults":20,"total":0,"worklogs":[]},"issuetype":{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10002","id":"10002","description":"A + small, distinct piece of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","subtask":false,"avatarId":10318,"hierarchyLevel":0},"timespent":null,"customfield_10030":null,"project":{"self":"https://defectdojo.atlassian.net/rest/api/2/project/10000","id":"10000","key":"NTEST","name":"Unittests","projectTypeKey":"software","simplified":false,"avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=medium"}},"customfield_10031":null,"customfield_10032":null,"customfield_10033":null,"aggregatetimespent":null,"customfield_10035":null,"customfield_10036":null,"customfield_10037":null,"customfield_10027":null,"customfield_10028":null,"customfield_10029":null,"resolutiondate":null,"workratio":-1,"watches":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3252/watchers","watchCount":1,"isWatching":true},"created":"2026-02-07T07:27:00.987+0100","customfield_10020":null,"customfield_10021":null,"customfield_10022":null,"customfield_10023":null,"customfield_10016":null,"customfield_10017":null,"customfield_10019":"0|i0152f:","updated":"2026-02-07T07:27:01.060+0100","customfield_10090":null,"timeoriginalestimate":null,"description":"\n\n\n\n\n\n\n*Title*: + [High|http://localhost:8080/finding/235]\n\n*Defect Dojo link:* http://localhost:8080/finding/235 + (235)\n\n*Severity:* High\n\n\n*Due Date:* Dec. 31, 2025\n\n\n\n\n\n*CVE:* + Unknown\n\n\n\n\n*Product/Engagement/Test:* [Security How-to|http://localhost:8080/product/2] + / [1st Quarter Engagement|http://localhost:8080/engagement/1] / [Generic Findings + Import|http://localhost:8080/test/92]\n\n\n\n\n\n\n\n\n\n\n\n*Vulnerable Component*: + Component A - None\n\n\n\n\n*Description*:\ntest\n\n\n\n\n*Impact*:\nNone\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n","customfield_10010":null,"customfield_10014":null,"timetracking":{},"customfield_10015":null,"customfield_10005":null,"customfield_10006":null,"customfield_10007":null,"security":null,"customfield_10008":null,"attachment":[],"customfield_10009":null,"summary":"High","customfield_10001":null,"customfield_10002":[],"customfield_10123":null,"customfield_10003":null,"customfield_10004":null,"environment":null,"duedate":null,"comment":{"comments":[],"self":"https://defectdojo.atlassian.net/rest/api/2/issue/25325/comment","maxResults":0,"total":0,"startAt":0}}}' + headers: + Atl-Request-Id: + - 82e68d67-fab4-4064-b2b3-709cbedb9527 + Atl-Traceid: + - 82e68d67fab44064b2b3709cbedb9527 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 06:27:05 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=94,cdn-upstream-fbl;dur=360,atl-edge;dur=233,atl-edge-internal;dur=22,atl-edge-upstream;dur=210,atl-edge-pop;desc="aws-us-east-1",cdn-cache-miss,cdn-pop;desc="DFW56-P1",cdn-rid;desc="EvM_nB9a1TZfAyIkLI_-8uFQWA-iLKWvqgdKvZYUNhDAXsAt56Kaxg==",cdn-downstream-fbl;dur=363 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 71fd6d85e546c3f37a926f86b4e67b9c.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - EvM_nB9a1TZfAyIkLI_-8uFQWA-iLKWvqgdKvZYUNhDAXsAt56Kaxg== + X-Amz-Cf-Pop: + - DFW56-P1 + X-Arequestid: + - d117fc0706d98ac33aabf2693259f612 + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '400' + X-Ratelimit-Remaining: + - '399' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/serverInfo + response: + body: + string: '{"baseUrl":"https://defectdojo.atlassian.net","displayUrl":"https://defectdojo.atlassian.net","displayUrlServicedeskHelpCenter":"https://defectdojo.atlassian.net","displayUrlCSMHelpSeeker":"https://defectdojo.atlassian.net","displayUrlConfluence":"https://defectdojo.atlassian.net","version":"1001.0.0-SNAPSHOT","versionNumbers":[1001,0,0],"deploymentType":"Cloud","buildNumber":100290,"buildDate":"2026-02-06T12:38:29.000+0100","serverTime":"2026-02-07T07:27:05.974+0100","scmInfo":"9d700605f271b9e38f3e73c4116a686dae8d11d7","serverTitle":"Jira","defaultLocale":{"locale":"en_US"},"serverTimeZone":"Etc/UTC"}' + headers: + Atl-Request-Id: + - bfce8c21-e35d-4a98-8ced-ecc7f01d5460 + Atl-Traceid: + - bfce8c21e35d4a988cedecc7f01d5460 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 06:27:06 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=0,cdn-upstream-fbl;dur=142,atl-edge;dur=109,atl-edge-internal;dur=13,atl-edge-upstream;dur=96,atl-edge-pop;desc="aws-us-east-1",cdn-cache-miss,cdn-pop;desc="DFW56-P2",cdn-rid;desc="LZB4J4kAKJXDwjoFXGc4dVvPCBRKW6DL4NZZRH-QLmf2s2SEhqC3nw==",cdn-downstream-fbl;dur=146 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 e638b1bcc509fe9e412fd1a600d66bc6.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - LZB4J4kAKJXDwjoFXGc4dVvPCBRKW6DL4NZZRH-QLmf2s2SEhqC3nw== + X-Amz-Cf-Pop: + - DFW56-P2 + X-Arequestid: + - 225047bd770c3af9f99513aca2da67a7 + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '350' + X-Ratelimit-Remaining: + - '349' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/issue/25324 + response: + body: + string: '{"expand":"renderedFields,names,schema,operations,editmeta,changelog,versionedRepresentations,customfield_10010.requestTypePractice","id":"25324","self":"https://defectdojo.atlassian.net/rest/api/2/issue/25324","key":"NTEST-3251","fields":{"statuscategorychangedate":"2026-02-07T07:26:58.401+0100","fixVersions":[],"statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"},"resolution":null,"lastViewed":null,"customfield_10060":null,"customfield_10061":null,"customfield_10062":null,"customfield_10063":null,"customfield_10064":null,"customfield_10065":null,"customfield_10066":null,"priority":{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/1","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/highest_new.svg","name":"Highest","id":"1"},"labels":[],"timeestimate":null,"aggregatetimeoriginalestimate":null,"versions":[],"issuelinks":[],"assignee":null,"status":{"self":"https://defectdojo.atlassian.net/rest/api/2/status/10000","description":"","iconUrl":"https://defectdojo.atlassian.net/","name":"Backlog","id":"10000","statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"}},"components":[],"customfield_10050":null,"customfield_10051":null,"customfield_10053":null,"customfield_10055":null,"customfield_10056":null,"customfield_10057":null,"customfield_10058":null,"customfield_10059":null,"customfield_10049":null,"aggregatetimeestimate":null,"creator":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"subtasks":[],"customfield_10040":null,"customfield_10041":null,"customfield_10042":null,"reporter":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"customfield_10043":null,"aggregateprogress":{"progress":0,"total":0},"customfield_10044":null,"customfield_10045":null,"customfield_10046":null,"customfield_10047":null,"customfield_10048":null,"customfield_10038":null,"customfield_10039":null,"progress":{"progress":0,"total":0},"votes":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3251/votes","votes":0,"hasVoted":false},"worklog":{"startAt":0,"maxResults":20,"total":0,"worklogs":[]},"issuetype":{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10002","id":"10002","description":"A + small, distinct piece of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","subtask":false,"avatarId":10318,"hierarchyLevel":0},"timespent":null,"customfield_10030":null,"project":{"self":"https://defectdojo.atlassian.net/rest/api/2/project/10000","id":"10000","key":"NTEST","name":"Unittests","projectTypeKey":"software","simplified":false,"avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=medium"}},"customfield_10031":null,"customfield_10032":null,"customfield_10033":null,"aggregatetimespent":null,"customfield_10035":null,"customfield_10036":null,"customfield_10037":null,"customfield_10027":null,"customfield_10028":null,"customfield_10029":null,"resolutiondate":null,"workratio":-1,"watches":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3251/watchers","watchCount":1,"isWatching":true},"created":"2026-02-07T07:26:57.729+0100","customfield_10020":null,"customfield_10021":null,"customfield_10022":null,"customfield_10023":null,"customfield_10016":null,"customfield_10017":null,"customfield_10019":"0|i01527:","updated":"2026-02-07T07:26:58.017+0100","customfield_10090":null,"timeoriginalestimate":null,"description":"\n\n\n\n\n\n\n*Title*: + [Critical|http://localhost:8080/finding/234]\n\n*Defect Dojo link:* http://localhost:8080/finding/234 + (234)\n\n*Severity:* Critical\n\n\n*Due Date:* Dec. 8, 2025\n\n\n\n\n\n*CVE:* + Unknown\n\n\n\n\n*Product/Engagement/Test:* [Security How-to|http://localhost:8080/product/2] + / [1st Quarter Engagement|http://localhost:8080/engagement/1] / [Generic Findings + Import|http://localhost:8080/test/92]\n\n\n\n\n\n\n\n\n\n\n\n*Vulnerable Component*: + Component A - None\n\n\n\n\n*Description*:\ntest\n\n\n\n\n*Impact*:\nNone\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n","customfield_10010":null,"customfield_10014":null,"timetracking":{},"customfield_10015":null,"customfield_10005":null,"customfield_10006":null,"customfield_10007":null,"security":null,"customfield_10008":null,"attachment":[],"customfield_10009":null,"summary":"Critical","customfield_10001":null,"customfield_10002":[],"customfield_10123":null,"customfield_10003":null,"customfield_10004":null,"environment":null,"duedate":null,"comment":{"comments":[],"self":"https://defectdojo.atlassian.net/rest/api/2/issue/25324/comment","maxResults":0,"total":0,"startAt":0}}}' + headers: + Atl-Request-Id: + - a914234b-70da-45ab-b634-5a46f6f867ef + Atl-Traceid: + - a914234b70da45abb6345a46f6f867ef + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 06:27:06 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=92,cdn-upstream-fbl;dur=340,atl-edge;dur=216,atl-edge-internal;dur=19,atl-edge-upstream;dur=197,atl-edge-pop;desc="aws-us-east-1",cdn-cache-miss,cdn-pop;desc="DFW57-P4",cdn-rid;desc="tAZXtLbBmhkRz7FzH6ZkiiBBUL6YabVP658O1S8-vs6wh1HBY1JcmA==",cdn-downstream-fbl;dur=344 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 4733a27005886c7a56300605d93ad9a0.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - tAZXtLbBmhkRz7FzH6ZkiiBBUL6YabVP658O1S8-vs6wh1HBY1JcmA== + X-Amz-Cf-Pop: + - DFW57-P4 + X-Arequestid: + - f535254530373b0a5f99c9a203446868 + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '400' + X-Ratelimit-Remaining: + - '398' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/issue/createmeta?projectKeys=NTEST&issuetypeNames=Task&expand=projects.issuetypes.fields + response: + body: + string: '{"expand":"projects","projects":[{"expand":"issuetypes","self":"https://defectdojo.atlassian.net/rest/api/2/project/10000","id":"10000","key":"NTEST","name":"Unittests","avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=medium"},"issuetypes":[{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10002","id":"10002","description":"A + small, distinct piece of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","untranslatedName":"Task","subtask":false,"hierarchyLevel":0,"expand":"fields","fields":{"summary":{"required":true,"schema":{"type":"string","system":"summary"},"name":"Summary","key":"summary","hasDefaultValue":false,"operations":["set"]},"issuetype":{"required":true,"schema":{"type":"issuetype","system":"issuetype"},"name":"Issue + Type","key":"issuetype","hasDefaultValue":false,"operations":[],"allowedValues":[{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10002","id":"10002","description":"A + small, distinct piece of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","subtask":false,"avatarId":10318,"hierarchyLevel":0}]},"parent":{"required":false,"schema":{"type":"issuelink","system":"parent"},"name":"Parent","key":"parent","hasDefaultValue":false,"operations":["set"]},"components":{"required":false,"schema":{"type":"array","items":"component","system":"components"},"name":"Components","key":"components","hasDefaultValue":false,"operations":["add","set","remove"],"allowedValues":[]},"description":{"required":false,"schema":{"type":"string","system":"description"},"name":"Description","key":"description","hasDefaultValue":false,"operations":["set"]},"project":{"required":true,"schema":{"type":"project","system":"project"},"name":"Project","key":"project","hasDefaultValue":false,"operations":["set"],"allowedValues":[{"self":"https://defectdojo.atlassian.net/rest/api/2/project/10000","id":"10000","key":"NTEST","name":"Unittests","projectTypeKey":"software","simplified":false,"avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=medium"}}]},"fixVersions":{"required":false,"schema":{"type":"array","items":"version","system":"fixVersions"},"name":"Fix + versions","key":"fixVersions","hasDefaultValue":false,"operations":["set","add","remove"],"allowedValues":[]},"priority":{"required":false,"schema":{"type":"priority","system":"priority"},"name":"Priority","key":"priority","hasDefaultValue":true,"operations":["set"],"allowedValues":[{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/1","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/highest_new.svg","name":"Highest","id":"1"},{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/2","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/high_new.svg","name":"High","id":"2"},{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/3","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/medium_new.svg","name":"Medium","id":"3"},{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/4","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/low_new.svg","name":"Low","id":"4"},{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/5","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/lowest_new.svg","name":"Lowest","id":"5"}],"defaultValue":{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/3","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/medium_new.svg","name":"Medium","id":"3"}},"customfield_10014":{"required":false,"schema":{"type":"any","custom":"com.pyxis.greenhopper.jira:gh-epic-link","customId":10014},"name":"Epic + Link","key":"customfield_10014","hasDefaultValue":false,"operations":["set"]},"labels":{"required":false,"schema":{"type":"array","items":"string","system":"labels"},"name":"Labels","key":"labels","autoCompleteUrl":"https://defectdojo.atlassian.net/rest/api/1.0/labels/suggest?query=","hasDefaultValue":false,"operations":["add","set","remove"]},"attachment":{"required":false,"schema":{"type":"array","items":"attachment","system":"attachment"},"name":"Attachment","key":"attachment","hasDefaultValue":false,"operations":["set","copy"]},"issuelinks":{"required":false,"schema":{"type":"array","items":"issuelinks","system":"issuelinks"},"name":"Linked + Issues","key":"issuelinks","autoCompleteUrl":"https://defectdojo.atlassian.net/rest/api/2/issue/picker?currentProjectId=&showSubTaskParent=true&showSubTasks=true¤tIssueKey=null&query=","hasDefaultValue":false,"operations":["add","copy"]},"assignee":{"required":false,"schema":{"type":"user","system":"assignee"},"name":"Assignee","key":"assignee","autoCompleteUrl":"https://defectdojo.atlassian.net/rest/api/2/user/assignable/search?project=NTEST&query=","hasDefaultValue":false,"operations":["set"]}}}]}]}' + headers: + Atl-Request-Id: + - ec08a07b-61b0-48f8-8177-a43daeb095db + Atl-Traceid: + - ec08a07b61b048f88177a43daeb095db + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 06:27:06 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=0,cdn-upstream-fbl;dur=304,atl-edge;dur=273,atl-edge-internal;dur=16,atl-edge-upstream;dur=257,atl-edge-pop;desc="aws-us-east-1",cdn-cache-miss,cdn-pop;desc="DFW56-P6",cdn-rid;desc="g21v-h1m3nGM-N5M2wxau6LtBkHDh-31YghLDiQf_vsGBOiF4-hyBg==",cdn-downstream-fbl;dur=309 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 02e11f30a1bbd1356e7d6af8cc06a576.cloudfront.net (CloudFront) + Warning: + - 'The issue create meta endpoint has been deprecated. (Deprecation start date: + June 03, 2024)' + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - g21v-h1m3nGM-N5M2wxau6LtBkHDh-31YghLDiQf_vsGBOiF4-hyBg== + X-Amz-Cf-Pop: + - DFW56-P6 + X-Arequestid: + - f99e2f0935696fa013c64cc961dcc793 + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '350' + X-Ratelimit-Remaining: + - '349' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: '{"fields": {"project": {"key": "NTEST"}, "issuetype": {"name": "Task"}, + "summary": "Critical", "description": "\n\n\n\n\n\n\n*Title*: [Critical|http://localhost:8080/finding/234]\n\n*Defect + Dojo link:* http://localhost:8080/finding/234 (234)\n\n*Severity:* Critical\n\n\n*Due + Date:* Dec. 8, 2025\n\n\n\n\n\n*CVE:* Unknown\n\n\n\n\n*Product/Engagement/Test:* + [Security How-to|http://localhost:8080/product/2] / [1st Quarter Engagement|http://localhost:8080/engagement/1] + / [Generic Findings Import|http://localhost:8080/test/92]\n\n\n\n\n\n\n\n\n\n\n\n*Vulnerable + Component*: Component A - None\n\n\n\n\n*Description*:\ntest\n\n\n\n\n*Impact*:\nNone\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n"}, "update": {}}' + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Length: + - '719' + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: PUT + uri: https://defectdojo.atlassian.net/rest/api/2/issue/25324 + response: + body: + string: '' + headers: + Atl-Request-Id: + - cca55e69-1c5c-48cf-9563-acd9f00ad454 + Atl-Traceid: + - cca55e691c5c48cf9563acd9f00ad454 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 06:27:07 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=94,cdn-upstream-fbl;dur=404,atl-edge;dur=277,atl-edge-internal;dur=17,atl-edge-upstream;dur=260,atl-edge-pop;desc="aws-us-east-1",cdn-cache-miss,cdn-pop;desc="DFW56-P4",cdn-rid;desc="FdIL49Lcf2UHZatBeB3BkjWfhWGfEoPMRL_jGIjtsdrcbVB6MnIKMA==",cdn-downstream-fbl;dur=408 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Vary: + - Accept-Encoding + Via: + - 1.1 dc943bec218368c3a3e4381cc3b94f5a.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - FdIL49Lcf2UHZatBeB3BkjWfhWGfEoPMRL_jGIjtsdrcbVB6MnIKMA== + X-Amz-Cf-Pop: + - DFW56-P4 + X-Arequestid: + - 4e0f112fae731dfc47f86d4061ee221c + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '300' + X-Ratelimit-Remaining: + - '299' + X-Xss-Protection: + - 1; mode=block + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/issue/25324 + response: + body: + string: '{"expand":"renderedFields,names,schema,operations,editmeta,changelog,versionedRepresentations,customfield_10010.requestTypePractice","id":"25324","self":"https://defectdojo.atlassian.net/rest/api/2/issue/25324","key":"NTEST-3251","fields":{"statuscategorychangedate":"2026-02-07T07:26:58.401+0100","fixVersions":[],"statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"},"resolution":null,"lastViewed":null,"customfield_10060":null,"customfield_10061":null,"customfield_10062":null,"customfield_10063":null,"customfield_10064":null,"customfield_10065":null,"customfield_10066":null,"priority":{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/1","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/highest_new.svg","name":"Highest","id":"1"},"labels":[],"timeestimate":null,"aggregatetimeoriginalestimate":null,"versions":[],"issuelinks":[],"assignee":null,"status":{"self":"https://defectdojo.atlassian.net/rest/api/2/status/10000","description":"","iconUrl":"https://defectdojo.atlassian.net/","name":"Backlog","id":"10000","statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"}},"components":[],"customfield_10050":null,"customfield_10051":null,"customfield_10053":null,"customfield_10055":null,"customfield_10056":null,"customfield_10057":null,"customfield_10058":null,"customfield_10059":null,"customfield_10049":null,"aggregatetimeestimate":null,"creator":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"subtasks":[],"customfield_10040":null,"customfield_10041":null,"customfield_10042":null,"reporter":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"customfield_10043":null,"aggregateprogress":{"progress":0,"total":0},"customfield_10044":null,"customfield_10045":null,"customfield_10046":null,"customfield_10047":null,"customfield_10048":null,"customfield_10038":null,"customfield_10039":null,"progress":{"progress":0,"total":0},"votes":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3251/votes","votes":0,"hasVoted":false},"worklog":{"startAt":0,"maxResults":20,"total":0,"worklogs":[]},"issuetype":{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10002","id":"10002","description":"A + small, distinct piece of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","subtask":false,"avatarId":10318,"hierarchyLevel":0},"timespent":null,"customfield_10030":null,"project":{"self":"https://defectdojo.atlassian.net/rest/api/2/project/10000","id":"10000","key":"NTEST","name":"Unittests","projectTypeKey":"software","simplified":false,"avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=medium"}},"customfield_10031":null,"customfield_10032":null,"customfield_10033":null,"aggregatetimespent":null,"customfield_10035":null,"customfield_10036":null,"customfield_10037":null,"customfield_10027":null,"customfield_10028":null,"customfield_10029":null,"resolutiondate":null,"workratio":-1,"watches":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3251/watchers","watchCount":1,"isWatching":true},"created":"2026-02-07T07:26:57.729+0100","customfield_10020":null,"customfield_10021":null,"customfield_10022":null,"customfield_10023":null,"customfield_10016":null,"customfield_10017":null,"customfield_10019":"0|i01527:","updated":"2026-02-07T07:26:58.017+0100","customfield_10090":null,"timeoriginalestimate":null,"description":"\n\n\n\n\n\n\n*Title*: + [Critical|http://localhost:8080/finding/234]\n\n*Defect Dojo link:* http://localhost:8080/finding/234 + (234)\n\n*Severity:* Critical\n\n\n*Due Date:* Dec. 8, 2025\n\n\n\n\n\n*CVE:* + Unknown\n\n\n\n\n*Product/Engagement/Test:* [Security How-to|http://localhost:8080/product/2] + / [1st Quarter Engagement|http://localhost:8080/engagement/1] / [Generic Findings + Import|http://localhost:8080/test/92]\n\n\n\n\n\n\n\n\n\n\n\n*Vulnerable Component*: + Component A - None\n\n\n\n\n*Description*:\ntest\n\n\n\n\n*Impact*:\nNone\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n","customfield_10010":null,"customfield_10014":null,"timetracking":{},"customfield_10015":null,"customfield_10005":null,"customfield_10006":null,"customfield_10007":null,"security":null,"customfield_10008":null,"attachment":[],"customfield_10009":null,"summary":"Critical","customfield_10001":null,"customfield_10002":[],"customfield_10123":null,"customfield_10003":null,"customfield_10004":null,"environment":null,"duedate":null,"comment":{"comments":[],"self":"https://defectdojo.atlassian.net/rest/api/2/issue/25324/comment","maxResults":0,"total":0,"startAt":0}}}' + headers: + Atl-Request-Id: + - 2cfa9ebe-ab5a-42b0-93ff-0bf80c715886 + Atl-Traceid: + - 2cfa9ebeab5a42b093ff0bf80c715886 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 06:27:07 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=0,cdn-upstream-fbl;dur=252,atl-edge;dur=220,atl-edge-internal;dur=23,atl-edge-upstream;dur=197,atl-edge-pop;desc="aws-us-east-1",cdn-cache-miss,cdn-pop;desc="DFW59-P1",cdn-rid;desc="ebmvybxPcf9WsLMb8LQzFySQ4W9zSUm8kDCeZU6lRr46WQF28Ps3qw==",cdn-downstream-fbl;dur=256 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 eb0343fe2e47ffed9f84cd3822fe74a8.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - ebmvybxPcf9WsLMb8LQzFySQ4W9zSUm8kDCeZU6lRr46WQF28Ps3qw== + X-Amz-Cf-Pop: + - DFW59-P1 + X-Arequestid: + - c2a0e09052a741192c82a1fe1e9d2922 + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '400' + X-Ratelimit-Remaining: + - '399' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: '{"transition": {"id": 41}, "fields": {}}' + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Length: + - '40' + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: POST + uri: https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3251/transitions + response: + body: + string: '' + headers: + Atl-Request-Id: + - db38647f-a502-4a9c-96a7-4a691ed51e03 + Atl-Traceid: + - db38647fa5024a9c96a74a691ed51e03 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Type: + - text/html;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 06:27:08 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=91,cdn-upstream-fbl;dur=675,atl-edge;dur=552,atl-edge-internal;dur=22,atl-edge-upstream;dur=530,atl-edge-pop;desc="aws-us-east-1",cdn-cache-miss,cdn-pop;desc="DFW59-P4",cdn-rid;desc="chla5y0pgbjrD4IX1HmUzFZ3ieVFbuzVS3t7efzY-XId6QH8PQY8vA==",cdn-downstream-fbl;dur=678 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Vary: + - Accept-Encoding + Via: + - 1.1 8e0cf019bae02eb5515c575453889754.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - chla5y0pgbjrD4IX1HmUzFZ3ieVFbuzVS3t7efzY-XId6QH8PQY8vA== + X-Amz-Cf-Pop: + - DFW59-P4 + X-Arequestid: + - 3773489ffea2f7a5cac4a4d7fd391575 + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '200' + X-Ratelimit-Remaining: + - '198' + X-Xss-Protection: + - 1; mode=block + status: + code: 204 + message: No Content +- request: + body: '{"description": "Event scan_added has occurred.", "title": "Created/Updated + 1 findings for Security How-to: 1st Quarter Engagement: Generic Findings Import", + "user": null, "url_ui": "http://localhost:8080/test/92", "url_api": "http://localhost:8080/api/v2/tests/92/", + "product_type": {"name": "ebooks", "id": 2, "url_ui": "http://localhost:8080/product/type/2", + "url_api": "http://localhost:8080/api/v2/product_types/2/"}, "product": {"name": + "Security How-to", "id": 2, "url_ui": "http://localhost:8080/product/2", "url_api": + "http://localhost:8080/api/v2/products/2/"}, "engagement": {"name": "1st Quarter + Engagement", "id": 1, "url_ui": "http://localhost:8080/engagement/1", "url_api": + "http://localhost:8080/api/v2/engagements/1/"}, "test": {"title": null, "id": + 92, "url_ui": "http://localhost:8080/test/92", "url_api": "http://localhost:8080/api/v2/tests/92/"}, + "finding_count": 1, "findings": {"new": [], "reactivated": [], "mitigated": + [{"id": 234, "title": "Critical", "severity": "Critical", "url_ui": "http://localhost:8080/finding/234", + "url_api": "http://localhost:8080/api/v2/findings/234/"}], "untouched": [{"id": + 235, "title": "High", "severity": "High", "url_ui": "http://localhost:8080/finding/235", + "url_api": "http://localhost:8080/api/v2/findings/235/"}]}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Auth: + - Token xxx + Connection: + - keep-alive + Content-Length: + - '1277' + Content-Type: + - application/json + User-Agent: + - DefectDojo-2.55.1 + X-DefectDojo-Event: + - scan_added + X-DefectDojo-Instance: + - http://localhost:8080 + method: POST + uri: http://webhook.endpoint:8080/post + response: + body: + string: "{\n \"args\": {},\n \"headers\": {\n \"Accept\": [\n \"application/json\"\n + \ ],\n \"Accept-Encoding\": [\n \"gzip, deflate\"\n ],\n \"Auth\": + [\n \"Token xxx\"\n ],\n \"Connection\": [\n \"keep-alive\"\n + \ ],\n \"Content-Length\": [\n \"1277\"\n ],\n \"Content-Type\": + [\n \"application/json\"\n ],\n \"Host\": [\n \"webhook.endpoint:8080\"\n + \ ],\n \"User-Agent\": [\n \"DefectDojo-2.55.1\"\n ],\n \"X-Defectdojo-Event\": + [\n \"scan_added\"\n ],\n \"X-Defectdojo-Instance\": [\n \"http://localhost:8080\"\n + \ ]\n },\n \"method\": \"POST\",\n \"origin\": \"172.18.0.8\",\n \"url\": + \"http://webhook.endpoint:8080/post\",\n \"data\": \"{\\\"description\\\": + \\\"Event scan_added has occurred.\\\", \\\"title\\\": \\\"Created/Updated + 1 findings for Security How-to: 1st Quarter Engagement: Generic Findings Import\\\", + \\\"user\\\": null, \\\"url_ui\\\": \\\"http://localhost:8080/test/92\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/tests/92/\\\", \\\"product_type\\\": + {\\\"name\\\": \\\"ebooks\\\", \\\"id\\\": 2, \\\"url_ui\\\": \\\"http://localhost:8080/product/type/2\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/product_types/2/\\\"}, \\\"product\\\": + {\\\"name\\\": \\\"Security How-to\\\", \\\"id\\\": 2, \\\"url_ui\\\": \\\"http://localhost:8080/product/2\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/products/2/\\\"}, \\\"engagement\\\": + {\\\"name\\\": \\\"1st Quarter Engagement\\\", \\\"id\\\": 1, \\\"url_ui\\\": + \\\"http://localhost:8080/engagement/1\\\", \\\"url_api\\\": \\\"http://localhost:8080/api/v2/engagements/1/\\\"}, + \\\"test\\\": {\\\"title\\\": null, \\\"id\\\": 92, \\\"url_ui\\\": \\\"http://localhost:8080/test/92\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/tests/92/\\\"}, \\\"finding_count\\\": + 1, \\\"findings\\\": {\\\"new\\\": [], \\\"reactivated\\\": [], \\\"mitigated\\\": + [{\\\"id\\\": 234, \\\"title\\\": \\\"Critical\\\", \\\"severity\\\": \\\"Critical\\\", + \\\"url_ui\\\": \\\"http://localhost:8080/finding/234\\\", \\\"url_api\\\": + \\\"http://localhost:8080/api/v2/findings/234/\\\"}], \\\"untouched\\\": [{\\\"id\\\": + 235, \\\"title\\\": \\\"High\\\", \\\"severity\\\": \\\"High\\\", \\\"url_ui\\\": + \\\"http://localhost:8080/finding/235\\\", \\\"url_api\\\": \\\"http://localhost:8080/api/v2/findings/235/\\\"}]}}\",\n + \ \"files\": {},\n \"form\": {},\n \"json\": {\n \"description\": \"Event + scan_added has occurred.\",\n \"engagement\": {\n \"id\": 1,\n \"name\": + \"1st Quarter Engagement\",\n \"url_api\": \"http://localhost:8080/api/v2/engagements/1/\",\n + \ \"url_ui\": \"http://localhost:8080/engagement/1\"\n },\n \"finding_count\": + 1,\n \"findings\": {\n \"mitigated\": [\n {\n \"id\": + 234,\n \"severity\": \"Critical\",\n \"title\": \"Critical\",\n + \ \"url_api\": \"http://localhost:8080/api/v2/findings/234/\",\n \"url_ui\": + \"http://localhost:8080/finding/234\"\n }\n ],\n \"new\": + [],\n \"reactivated\": [],\n \"untouched\": [\n {\n \"id\": + 235,\n \"severity\": \"High\",\n \"title\": \"High\",\n + \ \"url_api\": \"http://localhost:8080/api/v2/findings/235/\",\n \"url_ui\": + \"http://localhost:8080/finding/235\"\n }\n ]\n },\n \"product\": + {\n \"id\": 2,\n \"name\": \"Security How-to\",\n \"url_api\": + \"http://localhost:8080/api/v2/products/2/\",\n \"url_ui\": \"http://localhost:8080/product/2\"\n + \ },\n \"product_type\": {\n \"id\": 2,\n \"name\": \"ebooks\",\n + \ \"url_api\": \"http://localhost:8080/api/v2/product_types/2/\",\n \"url_ui\": + \"http://localhost:8080/product/type/2\"\n },\n \"test\": {\n \"id\": + 92,\n \"title\": null,\n \"url_api\": \"http://localhost:8080/api/v2/tests/92/\",\n + \ \"url_ui\": \"http://localhost:8080/test/92\"\n },\n \"title\": + \"Created/Updated 1 findings for Security How-to: 1st Quarter Engagement: + Generic Findings Import\",\n \"url_api\": \"http://localhost:8080/api/v2/tests/92/\",\n + \ \"url_ui\": \"http://localhost:8080/test/92\",\n \"user\": null\n }\n}\n" + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Origin: + - '*' + Content-Type: + - application/json; charset=utf-8 + Date: + - Sat, 07 Feb 2026 06:27:08 GMT + Transfer-Encoding: + - chunked + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/serverInfo + response: + body: + string: '{"baseUrl":"https://defectdojo.atlassian.net","displayUrl":"https://defectdojo.atlassian.net","displayUrlServicedeskHelpCenter":"https://defectdojo.atlassian.net","displayUrlCSMHelpSeeker":"https://defectdojo.atlassian.net","displayUrlConfluence":"https://defectdojo.atlassian.net","version":"1001.0.0-SNAPSHOT","versionNumbers":[1001,0,0],"deploymentType":"Cloud","buildNumber":100290,"buildDate":"2026-02-06T12:38:29.000+0100","serverTime":"2026-02-07T07:27:09.137+0100","scmInfo":"9d700605f271b9e38f3e73c4116a686dae8d11d7","serverTitle":"Jira","defaultLocale":{"locale":"en_US"},"serverTimeZone":"Etc/UTC"}' + headers: + Atl-Request-Id: + - 9069b8c3-c943-4917-8e54-ed0a1d228a8a + Atl-Traceid: + - 9069b8c3c94349178e54ed0a1d228a8a + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 06:27:09 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=91,cdn-upstream-fbl;dur=232,atl-edge;dur=108,atl-edge-internal;dur=13,atl-edge-upstream;dur=96,atl-edge-pop;desc="aws-us-east-1",cdn-cache-miss,cdn-pop;desc="DFW59-P1",cdn-rid;desc="-G0t5aikmVtU7Yn26KzY2UpxA8MmmyHT5MKZaHPW9sAfM0DmYeowUA==",cdn-downstream-fbl;dur=236 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 7d4aec5a0e591156e530d9b2067f6b50.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - -G0t5aikmVtU7Yn26KzY2UpxA8MmmyHT5MKZaHPW9sAfM0DmYeowUA== + X-Amz-Cf-Pop: + - DFW59-P1 + X-Arequestid: + - 4f26696136ab6815aa380fc48c22ceb1 + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '350' + X-Ratelimit-Remaining: + - '349' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/issue/25324 + response: + body: + string: '{"expand":"renderedFields,names,schema,operations,editmeta,changelog,versionedRepresentations,customfield_10010.requestTypePractice","id":"25324","self":"https://defectdojo.atlassian.net/rest/api/2/issue/25324","key":"NTEST-3251","fields":{"statuscategorychangedate":"2026-02-07T07:27:08.399+0100","fixVersions":[],"statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/3","id":3,"key":"done","colorName":"green","name":"Done"},"resolution":{"self":"https://defectdojo.atlassian.net/rest/api/2/resolution/10000","id":"10000","description":"Work + has been completed on this issue.","name":"Done"},"lastViewed":null,"customfield_10060":null,"customfield_10061":null,"customfield_10062":null,"customfield_10063":null,"customfield_10064":null,"customfield_10065":null,"customfield_10066":null,"priority":{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/1","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/highest_new.svg","name":"Highest","id":"1"},"labels":[],"timeestimate":null,"aggregatetimeoriginalestimate":null,"versions":[],"issuelinks":[],"assignee":null,"status":{"self":"https://defectdojo.atlassian.net/rest/api/2/status/10002","description":"","iconUrl":"https://defectdojo.atlassian.net/","name":"Done","id":"10002","statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/3","id":3,"key":"done","colorName":"green","name":"Done"}},"components":[],"customfield_10050":null,"customfield_10051":null,"customfield_10053":null,"customfield_10055":null,"customfield_10056":null,"customfield_10057":null,"customfield_10058":null,"customfield_10059":null,"customfield_10049":null,"aggregatetimeestimate":null,"creator":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"subtasks":[],"customfield_10040":null,"customfield_10041":null,"customfield_10042":null,"reporter":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"customfield_10043":null,"aggregateprogress":{"progress":0,"total":0},"customfield_10044":null,"customfield_10045":null,"customfield_10046":null,"customfield_10047":null,"customfield_10048":null,"customfield_10038":null,"customfield_10039":null,"progress":{"progress":0,"total":0},"votes":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3251/votes","votes":0,"hasVoted":false},"worklog":{"startAt":0,"maxResults":20,"total":0,"worklogs":[]},"issuetype":{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10002","id":"10002","description":"A + small, distinct piece of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","subtask":false,"avatarId":10318,"hierarchyLevel":0},"timespent":null,"customfield_10030":null,"project":{"self":"https://defectdojo.atlassian.net/rest/api/2/project/10000","id":"10000","key":"NTEST","name":"Unittests","projectTypeKey":"software","simplified":false,"avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=medium"}},"customfield_10031":null,"customfield_10032":null,"customfield_10033":null,"aggregatetimespent":null,"customfield_10035":null,"customfield_10036":null,"customfield_10037":null,"customfield_10027":null,"customfield_10028":null,"customfield_10029":null,"resolutiondate":"2026-02-07T07:27:08.374+0100","workratio":-1,"watches":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3251/watchers","watchCount":1,"isWatching":true},"created":"2026-02-07T07:26:57.729+0100","customfield_10020":null,"customfield_10021":null,"customfield_10022":null,"customfield_10023":"10000_*:*_1_*:*_10669_*|*_10002_*:*_1_*:*_0","customfield_10016":null,"customfield_10017":null,"customfield_10019":"0|i01527:","updated":"2026-02-07T07:27:08.398+0100","customfield_10090":null,"timeoriginalestimate":null,"description":"\n\n\n\n\n\n\n*Title*: + [Critical|http://localhost:8080/finding/234]\n\n*Defect Dojo link:* http://localhost:8080/finding/234 + (234)\n\n*Severity:* Critical\n\n\n*Due Date:* Dec. 8, 2025\n\n\n\n\n\n*CVE:* + Unknown\n\n\n\n\n*Product/Engagement/Test:* [Security How-to|http://localhost:8080/product/2] + / [1st Quarter Engagement|http://localhost:8080/engagement/1] / [Generic Findings + Import|http://localhost:8080/test/92]\n\n\n\n\n\n\n\n\n\n\n\n*Vulnerable Component*: + Component A - None\n\n\n\n\n*Description*:\ntest\n\n\n\n\n*Impact*:\nNone\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n","customfield_10010":null,"customfield_10014":null,"timetracking":{},"customfield_10015":null,"customfield_10005":null,"customfield_10006":null,"customfield_10007":null,"security":null,"customfield_10008":null,"attachment":[],"customfield_10009":null,"summary":"Critical","customfield_10001":null,"customfield_10002":[],"customfield_10123":null,"customfield_10003":null,"customfield_10004":null,"environment":null,"duedate":null,"comment":{"comments":[],"self":"https://defectdojo.atlassian.net/rest/api/2/issue/25324/comment","maxResults":0,"total":0,"startAt":0}}}' + headers: + Atl-Request-Id: + - 9d037f39-f37e-4abb-a242-ed648a0e069a + Atl-Traceid: + - 9d037f39f37e4abba242ed648a0e069a + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 06:27:09 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=92,cdn-upstream-fbl;dur=341,atl-edge;dur=217,atl-edge-internal;dur=19,atl-edge-upstream;dur=197,atl-edge-pop;desc="aws-us-east-1",cdn-cache-miss,cdn-pop;desc="DFW57-P5",cdn-rid;desc="DXTJ93-BC9fWmdntFa5391zWLutTMFs3D1iaqOq7CMSwVJa9Mbk0Xw==",cdn-downstream-fbl;dur=347 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 9d0b7a8454021cab4704c1ba4cb6c7c4.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - DXTJ93-BC9fWmdntFa5391zWLutTMFs3D1iaqOq7CMSwVJa9Mbk0Xw== + X-Amz-Cf-Pop: + - DFW57-P5 + X-Arequestid: + - 88069a830c111f87b0b7c05d000dd9f0 + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '400' + X-Ratelimit-Remaining: + - '399' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +version: 1 diff --git a/unittests/vcr/jira/JIRAImportAndPushTestApi.test_keep_sync_push_finding_then_update_individual_finding_with_no_push.yaml b/unittests/vcr/jira/JIRAImportAndPushTestApi.test_keep_sync_push_finding_then_update_individual_finding_with_no_push.yaml new file mode 100644 index 00000000000..96628736c23 --- /dev/null +++ b/unittests/vcr/jira/JIRAImportAndPushTestApi.test_keep_sync_push_finding_then_update_individual_finding_with_no_push.yaml @@ -0,0 +1,1419 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/serverInfo + response: + body: + string: '{"baseUrl":"https://defectdojo.atlassian.net","displayUrl":"https://defectdojo.atlassian.net","displayUrlServicedeskHelpCenter":"https://defectdojo.atlassian.net","displayUrlCSMHelpSeeker":"https://defectdojo.atlassian.net","displayUrlConfluence":"https://defectdojo.atlassian.net","version":"1001.0.0-SNAPSHOT","versionNumbers":[1001,0,0],"deploymentType":"Cloud","buildNumber":100290,"buildDate":"2026-02-06T12:38:29.000+0100","serverTime":"2026-02-07T01:55:40.711+0100","scmInfo":"9d700605f271b9e38f3e73c4116a686dae8d11d7","serverTitle":"Jira","defaultLocale":{"locale":"en_US"},"serverTimeZone":"Etc/UTC"}' + headers: + Atl-Request-Id: + - ffc03d58-91f4-42da-a6fe-cb657fa1de66 + Atl-Traceid: + - ffc03d5891f442daa6fecb657fa1de66 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 00:55:40 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=0,cdn-upstream-fbl;dur=230,atl-edge;dur=206,atl-edge-internal;dur=14,atl-edge-upstream;dur=192,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN53-P1",cdn-rid;desc="GSEoWF8VTcrhFVX1eT19Ysb-tejlzlT54tKXrPY-_Z2bVF6RoAZizw==",cdn-downstream-fbl;dur=234 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 382c1ac99264c38b9320835b20f5260e.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - GSEoWF8VTcrhFVX1eT19Ysb-tejlzlT54tKXrPY-_Z2bVF6RoAZizw== + X-Amz-Cf-Pop: + - DEN53-P1 + X-Arequestid: + - a05f7fbd48e0894142273a95b192bf9a + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '350' + X-Ratelimit-Remaining: + - '349' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/issue/createmeta?projectKeys=NTEST&issuetypeNames=Task&expand=projects.issuetypes.fields + response: + body: + string: '{"expand":"projects","projects":[{"expand":"issuetypes","self":"https://defectdojo.atlassian.net/rest/api/2/project/10000","id":"10000","key":"NTEST","name":"Unittests","avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=medium"},"issuetypes":[{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10002","id":"10002","description":"A + small, distinct piece of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","untranslatedName":"Task","subtask":false,"hierarchyLevel":0,"expand":"fields","fields":{"summary":{"required":true,"schema":{"type":"string","system":"summary"},"name":"Summary","key":"summary","hasDefaultValue":false,"operations":["set"]},"issuetype":{"required":true,"schema":{"type":"issuetype","system":"issuetype"},"name":"Issue + Type","key":"issuetype","hasDefaultValue":false,"operations":[],"allowedValues":[{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10002","id":"10002","description":"A + small, distinct piece of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","subtask":false,"avatarId":10318,"hierarchyLevel":0}]},"parent":{"required":false,"schema":{"type":"issuelink","system":"parent"},"name":"Parent","key":"parent","hasDefaultValue":false,"operations":["set"]},"components":{"required":false,"schema":{"type":"array","items":"component","system":"components"},"name":"Components","key":"components","hasDefaultValue":false,"operations":["add","set","remove"],"allowedValues":[]},"description":{"required":false,"schema":{"type":"string","system":"description"},"name":"Description","key":"description","hasDefaultValue":false,"operations":["set"]},"project":{"required":true,"schema":{"type":"project","system":"project"},"name":"Project","key":"project","hasDefaultValue":false,"operations":["set"],"allowedValues":[{"self":"https://defectdojo.atlassian.net/rest/api/2/project/10000","id":"10000","key":"NTEST","name":"Unittests","projectTypeKey":"software","simplified":false,"avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=medium"}}]},"fixVersions":{"required":false,"schema":{"type":"array","items":"version","system":"fixVersions"},"name":"Fix + versions","key":"fixVersions","hasDefaultValue":false,"operations":["set","add","remove"],"allowedValues":[]},"priority":{"required":false,"schema":{"type":"priority","system":"priority"},"name":"Priority","key":"priority","hasDefaultValue":true,"operations":["set"],"allowedValues":[{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/1","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/highest_new.svg","name":"Highest","id":"1"},{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/2","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/high_new.svg","name":"High","id":"2"},{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/3","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/medium_new.svg","name":"Medium","id":"3"},{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/4","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/low_new.svg","name":"Low","id":"4"},{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/5","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/lowest_new.svg","name":"Lowest","id":"5"}],"defaultValue":{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/3","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/medium_new.svg","name":"Medium","id":"3"}},"customfield_10014":{"required":false,"schema":{"type":"any","custom":"com.pyxis.greenhopper.jira:gh-epic-link","customId":10014},"name":"Epic + Link","key":"customfield_10014","hasDefaultValue":false,"operations":["set"]},"labels":{"required":false,"schema":{"type":"array","items":"string","system":"labels"},"name":"Labels","key":"labels","autoCompleteUrl":"https://defectdojo.atlassian.net/rest/api/1.0/labels/suggest?query=","hasDefaultValue":false,"operations":["add","set","remove"]},"attachment":{"required":false,"schema":{"type":"array","items":"attachment","system":"attachment"},"name":"Attachment","key":"attachment","hasDefaultValue":false,"operations":["set","copy"]},"issuelinks":{"required":false,"schema":{"type":"array","items":"issuelinks","system":"issuelinks"},"name":"Linked + Issues","key":"issuelinks","autoCompleteUrl":"https://defectdojo.atlassian.net/rest/api/2/issue/picker?currentProjectId=&showSubTaskParent=true&showSubTasks=true¤tIssueKey=null&query=","hasDefaultValue":false,"operations":["add","copy"]},"assignee":{"required":false,"schema":{"type":"user","system":"assignee"},"name":"Assignee","key":"assignee","autoCompleteUrl":"https://defectdojo.atlassian.net/rest/api/2/user/assignable/search?project=NTEST&query=","hasDefaultValue":false,"operations":["set"]}}}]}]}' + headers: + Atl-Request-Id: + - 6a5524d5-0ac1-47a0-a9f4-8a9c1920787e + Atl-Traceid: + - 6a5524d50ac147a0a9f48a9c1920787e + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 00:55:41 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=0,cdn-upstream-fbl;dur=316,atl-edge;dur=294,atl-edge-internal;dur=16,atl-edge-upstream;dur=278,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN53-P1",cdn-rid;desc="nMtKXdrqOjwqcOgJBIyiso2sdIU0k904Iwn1ezheEFiqQ3fyJYuj7A==",cdn-downstream-fbl;dur=326 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 db28001b9bfb563d1bfcaccd38c4436a.cloudfront.net (CloudFront) + Warning: + - 'The issue create meta endpoint has been deprecated. (Deprecation start date: + June 03, 2024)' + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - nMtKXdrqOjwqcOgJBIyiso2sdIU0k904Iwn1ezheEFiqQ3fyJYuj7A== + X-Amz-Cf-Pop: + - DEN53-P1 + X-Arequestid: + - d50ffd1724a8449832031428c0e8972f + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '350' + X-Ratelimit-Remaining: + - '349' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: '{"fields": {"project": {"key": "NTEST"}, "issuetype": {"name": "Task"}, + "summary": "High", "description": "\n\n\n\n\n\n\n*Title*: [High|http://localhost:8080/finding/234]\n\n*Defect + Dojo link:* http://localhost:8080/finding/234 (234)\n\n*Severity:* High\n\n\n*Due + Date:* Dec. 31, 2025\n\n\n\n\n\n*CVE:* Unknown\n\n\n\n\n*Product/Engagement/Test:* + [Security How-to|http://localhost:8080/product/2] / [1st Quarter Engagement|http://localhost:8080/engagement/1] + / [Generic Findings Import|http://localhost:8080/test/92]\n\n\n\n\n\n\n\n\n\n\n\n*Vulnerable + Component*: Component A - None\n\n\n\n\n*Description*:\ntest\n\n\n\n\n*Impact*:\nNone\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n", "priority": {"name": "High"}}}' + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Length: + - '724' + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: POST + uri: https://defectdojo.atlassian.net/rest/api/2/issue + response: + body: + string: '{"id":"25289","key":"NTEST-3248","self":"https://defectdojo.atlassian.net/rest/api/2/issue/25289"}' + headers: + Atl-Request-Id: + - f04896c4-4cf2-4b6d-ad48-8b0dfb1f1ec1 + Atl-Traceid: + - f04896c44cf24b6dad488b0dfb1f1ec1 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 00:55:42 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=0,cdn-upstream-fbl;dur=883,atl-edge;dur=860,atl-edge-internal;dur=15,atl-edge-upstream;dur=840,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN52-P1",cdn-rid;desc="aCCpQQ5SlEL68dcvH7piK4r9NO9aXgaTnxdq5hAykf4rdjF1plLrKQ==",cdn-downstream-fbl;dur=886 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 47bd30b1233fcd4bea962db4946b0ff2.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - aCCpQQ5SlEL68dcvH7piK4r9NO9aXgaTnxdq5hAykf4rdjF1plLrKQ== + X-Amz-Cf-Pop: + - DEN52-P1 + X-Arequestid: + - 35655526b88ec403e8d9064a885f7fdf + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '200' + X-Ratelimit-Remaining: + - '199' + X-Xss-Protection: + - 1; mode=block + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3248 + response: + body: + string: '{"expand":"renderedFields,names,schema,operations,editmeta,changelog,versionedRepresentations,customfield_10010.requestTypePractice","id":"25289","self":"https://defectdojo.atlassian.net/rest/api/2/issue/25289","key":"NTEST-3248","fields":{"statuscategorychangedate":"2026-02-07T01:55:41.962+0100","fixVersions":[],"statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"},"resolution":null,"lastViewed":null,"customfield_10060":null,"customfield_10061":null,"customfield_10062":null,"customfield_10063":null,"customfield_10064":null,"customfield_10065":null,"customfield_10066":null,"priority":{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/2","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/high_new.svg","name":"High","id":"2"},"labels":[],"timeestimate":null,"aggregatetimeoriginalestimate":null,"versions":[],"issuelinks":[],"assignee":null,"status":{"self":"https://defectdojo.atlassian.net/rest/api/2/status/10000","description":"","iconUrl":"https://defectdojo.atlassian.net/","name":"Backlog","id":"10000","statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"}},"components":[],"customfield_10050":null,"customfield_10051":null,"customfield_10053":null,"customfield_10055":null,"customfield_10056":null,"customfield_10057":null,"customfield_10058":null,"customfield_10059":null,"customfield_10049":null,"aggregatetimeestimate":null,"creator":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"subtasks":[],"customfield_10040":null,"customfield_10041":null,"customfield_10042":null,"reporter":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"customfield_10043":null,"aggregateprogress":{"progress":0,"total":0},"customfield_10044":null,"customfield_10045":null,"customfield_10046":null,"customfield_10047":null,"customfield_10048":null,"customfield_10038":null,"customfield_10039":null,"progress":{"progress":0,"total":0},"votes":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3248/votes","votes":0,"hasVoted":false},"worklog":{"startAt":0,"maxResults":20,"total":0,"worklogs":[]},"issuetype":{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10002","id":"10002","description":"A + small, distinct piece of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","subtask":false,"avatarId":10318,"hierarchyLevel":0},"timespent":null,"customfield_10030":null,"project":{"self":"https://defectdojo.atlassian.net/rest/api/2/project/10000","id":"10000","key":"NTEST","name":"Unittests","projectTypeKey":"software","simplified":false,"avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=medium"}},"customfield_10031":null,"customfield_10032":null,"customfield_10033":null,"aggregatetimespent":null,"customfield_10035":null,"customfield_10036":null,"customfield_10037":null,"customfield_10027":null,"customfield_10028":null,"customfield_10029":null,"resolutiondate":null,"workratio":-1,"watches":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3248/watchers","watchCount":1,"isWatching":true},"created":"2026-02-07T01:55:41.647+0100","customfield_10020":null,"customfield_10021":null,"customfield_10022":null,"customfield_10023":null,"customfield_10016":null,"customfield_10017":null,"customfield_10019":"0|i0151j:","updated":"2026-02-07T01:55:41.753+0100","customfield_10090":null,"timeoriginalestimate":null,"description":"\n\n\n\n\n\n\n*Title*: + [High|http://localhost:8080/finding/234]\n\n*Defect Dojo link:* http://localhost:8080/finding/234 + (234)\n\n*Severity:* High\n\n\n*Due Date:* Dec. 31, 2025\n\n\n\n\n\n*CVE:* + Unknown\n\n\n\n\n*Product/Engagement/Test:* [Security How-to|http://localhost:8080/product/2] + / [1st Quarter Engagement|http://localhost:8080/engagement/1] / [Generic Findings + Import|http://localhost:8080/test/92]\n\n\n\n\n\n\n\n\n\n\n\n*Vulnerable Component*: + Component A - None\n\n\n\n\n*Description*:\ntest\n\n\n\n\n*Impact*:\nNone\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n","customfield_10010":null,"customfield_10014":null,"timetracking":{},"customfield_10015":null,"customfield_10005":null,"customfield_10006":null,"customfield_10007":null,"security":null,"customfield_10008":null,"attachment":[],"customfield_10009":null,"summary":"High","customfield_10001":null,"customfield_10002":[],"customfield_10123":null,"customfield_10003":null,"customfield_10004":null,"environment":null,"duedate":null,"comment":{"comments":[],"self":"https://defectdojo.atlassian.net/rest/api/2/issue/25289/comment","maxResults":0,"total":0,"startAt":0}}}' + headers: + Atl-Request-Id: + - 5b1b5a48-663d-4892-8588-5fe2cc306054 + Atl-Traceid: + - 5b1b5a48663d489285885fe2cc306054 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 00:55:42 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=0,cdn-upstream-fbl;dur=271,atl-edge;dur=248,atl-edge-internal;dur=22,atl-edge-upstream;dur=226,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN52-P2",cdn-rid;desc="NVTUS7513tlaxg2ag7ZsVpMsbmsP54boWA6gx0mku5mwhxvdTUA7hQ==",cdn-downstream-fbl;dur=275 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 6b1026dc8b63f06fce4b4aec8b9a03d6.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - NVTUS7513tlaxg2ag7ZsVpMsbmsP54boWA6gx0mku5mwhxvdTUA7hQ== + X-Amz-Cf-Pop: + - DEN52-P2 + X-Arequestid: + - b1c3b24148394c8b0e41228770aaa6fd + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '400' + X-Ratelimit-Remaining: + - '399' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/issue/25289 + response: + body: + string: '{"expand":"renderedFields,names,schema,operations,editmeta,changelog,versionedRepresentations,customfield_10010.requestTypePractice","id":"25289","self":"https://defectdojo.atlassian.net/rest/api/2/issue/25289","key":"NTEST-3248","fields":{"statuscategorychangedate":"2026-02-07T01:55:41.962+0100","fixVersions":[],"statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"},"resolution":null,"lastViewed":null,"customfield_10060":null,"customfield_10061":null,"customfield_10062":null,"customfield_10063":null,"customfield_10064":null,"customfield_10065":null,"customfield_10066":null,"priority":{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/2","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/high_new.svg","name":"High","id":"2"},"labels":[],"timeestimate":null,"aggregatetimeoriginalestimate":null,"versions":[],"issuelinks":[],"assignee":null,"status":{"self":"https://defectdojo.atlassian.net/rest/api/2/status/10000","description":"","iconUrl":"https://defectdojo.atlassian.net/","name":"Backlog","id":"10000","statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"}},"components":[],"customfield_10050":null,"customfield_10051":null,"customfield_10053":null,"customfield_10055":null,"customfield_10056":null,"customfield_10057":null,"customfield_10058":null,"customfield_10059":null,"customfield_10049":null,"aggregatetimeestimate":null,"creator":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"subtasks":[],"customfield_10040":null,"customfield_10041":null,"customfield_10042":null,"reporter":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"customfield_10043":null,"aggregateprogress":{"progress":0,"total":0},"customfield_10044":null,"customfield_10045":null,"customfield_10046":null,"customfield_10047":null,"customfield_10048":null,"customfield_10038":null,"customfield_10039":null,"progress":{"progress":0,"total":0},"votes":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3248/votes","votes":0,"hasVoted":false},"worklog":{"startAt":0,"maxResults":20,"total":0,"worklogs":[]},"issuetype":{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10002","id":"10002","description":"A + small, distinct piece of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","subtask":false,"avatarId":10318,"hierarchyLevel":0},"timespent":null,"customfield_10030":null,"project":{"self":"https://defectdojo.atlassian.net/rest/api/2/project/10000","id":"10000","key":"NTEST","name":"Unittests","projectTypeKey":"software","simplified":false,"avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=medium"}},"customfield_10031":null,"customfield_10032":null,"customfield_10033":null,"aggregatetimespent":null,"customfield_10035":null,"customfield_10036":null,"customfield_10037":null,"customfield_10027":null,"customfield_10028":null,"customfield_10029":null,"resolutiondate":null,"workratio":-1,"watches":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3248/watchers","watchCount":1,"isWatching":true},"created":"2026-02-07T01:55:41.647+0100","customfield_10020":null,"customfield_10021":null,"customfield_10022":null,"customfield_10023":null,"customfield_10016":null,"customfield_10017":null,"customfield_10019":"0|i0151j:","updated":"2026-02-07T01:55:41.753+0100","customfield_10090":null,"timeoriginalestimate":null,"description":"\n\n\n\n\n\n\n*Title*: + [High|http://localhost:8080/finding/234]\n\n*Defect Dojo link:* http://localhost:8080/finding/234 + (234)\n\n*Severity:* High\n\n\n*Due Date:* Dec. 31, 2025\n\n\n\n\n\n*CVE:* + Unknown\n\n\n\n\n*Product/Engagement/Test:* [Security How-to|http://localhost:8080/product/2] + / [1st Quarter Engagement|http://localhost:8080/engagement/1] / [Generic Findings + Import|http://localhost:8080/test/92]\n\n\n\n\n\n\n\n\n\n\n\n*Vulnerable Component*: + Component A - None\n\n\n\n\n*Description*:\ntest\n\n\n\n\n*Impact*:\nNone\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n","customfield_10010":null,"customfield_10014":null,"timetracking":{},"customfield_10015":null,"customfield_10005":null,"customfield_10006":null,"customfield_10007":null,"security":null,"customfield_10008":null,"attachment":[],"customfield_10009":null,"summary":"High","customfield_10001":null,"customfield_10002":[],"customfield_10123":null,"customfield_10003":null,"customfield_10004":null,"environment":null,"duedate":null,"comment":{"comments":[],"self":"https://defectdojo.atlassian.net/rest/api/2/issue/25289/comment","maxResults":0,"total":0,"startAt":0}}}' + headers: + Atl-Request-Id: + - d24a5a37-fa68-4e00-adad-dbc9ba021113 + Atl-Traceid: + - d24a5a37fa684e00adaddbc9ba021113 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 00:55:42 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=66,cdn-upstream-fbl;dur=340,atl-edge;dur=250,atl-edge-internal;dur=15,atl-edge-upstream;dur=234,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN52-P1",cdn-rid;desc="UFS-wh8PbsV_goYG5sIFn9eSPB7bPcK6Ij0gr8KZciABmFxq8b5Ndw==",cdn-downstream-fbl;dur=345 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 9379390e7d447e1d911f7741c8ae2f24.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - UFS-wh8PbsV_goYG5sIFn9eSPB7bPcK6Ij0gr8KZciABmFxq8b5Ndw== + X-Amz-Cf-Pop: + - DEN52-P1 + X-Arequestid: + - 470ef39532233072b4853e04862539ab + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '400' + X-Ratelimit-Remaining: + - '398' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: '{"description": "Event test_added has occurred.", "title": "Test created + for Security How-to: 1st Quarter Engagement: Generic Findings Import", "user": + null, "url_ui": "http://localhost:8080/test/92", "url_api": "http://localhost:8080/api/v2/tests/92/", + "product_type": {"name": "ebooks", "id": 2, "url_ui": "http://localhost:8080/product/type/2", + "url_api": "http://localhost:8080/api/v2/product_types/2/"}, "product": {"name": + "Security How-to", "id": 2, "url_ui": "http://localhost:8080/product/2", "url_api": + "http://localhost:8080/api/v2/products/2/"}, "engagement": {"name": "1st Quarter + Engagement", "id": 1, "url_ui": "http://localhost:8080/engagement/1", "url_api": + "http://localhost:8080/api/v2/engagements/1/"}, "test": {"title": null, "id": + 92, "url_ui": "http://localhost:8080/test/92", "url_api": "http://localhost:8080/api/v2/tests/92/"}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Auth: + - Token xxx + Connection: + - keep-alive + Content-Length: + - '853' + Content-Type: + - application/json + User-Agent: + - DefectDojo-2.55.1 + X-DefectDojo-Event: + - test_added + X-DefectDojo-Instance: + - http://localhost:8080 + method: POST + uri: http://webhook.endpoint:8080/post + response: + body: + string: "{\n \"args\": {},\n \"headers\": {\n \"Accept\": [\n \"application/json\"\n + \ ],\n \"Accept-Encoding\": [\n \"gzip, deflate\"\n ],\n \"Auth\": + [\n \"Token xxx\"\n ],\n \"Connection\": [\n \"keep-alive\"\n + \ ],\n \"Content-Length\": [\n \"853\"\n ],\n \"Content-Type\": + [\n \"application/json\"\n ],\n \"Host\": [\n \"webhook.endpoint:8080\"\n + \ ],\n \"User-Agent\": [\n \"DefectDojo-2.55.1\"\n ],\n \"X-Defectdojo-Event\": + [\n \"test_added\"\n ],\n \"X-Defectdojo-Instance\": [\n \"http://localhost:8080\"\n + \ ]\n },\n \"method\": \"POST\",\n \"origin\": \"172.18.0.8\",\n \"url\": + \"http://webhook.endpoint:8080/post\",\n \"data\": \"{\\\"description\\\": + \\\"Event test_added has occurred.\\\", \\\"title\\\": \\\"Test created for + Security How-to: 1st Quarter Engagement: Generic Findings Import\\\", \\\"user\\\": + null, \\\"url_ui\\\": \\\"http://localhost:8080/test/92\\\", \\\"url_api\\\": + \\\"http://localhost:8080/api/v2/tests/92/\\\", \\\"product_type\\\": {\\\"name\\\": + \\\"ebooks\\\", \\\"id\\\": 2, \\\"url_ui\\\": \\\"http://localhost:8080/product/type/2\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/product_types/2/\\\"}, \\\"product\\\": + {\\\"name\\\": \\\"Security How-to\\\", \\\"id\\\": 2, \\\"url_ui\\\": \\\"http://localhost:8080/product/2\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/products/2/\\\"}, \\\"engagement\\\": + {\\\"name\\\": \\\"1st Quarter Engagement\\\", \\\"id\\\": 1, \\\"url_ui\\\": + \\\"http://localhost:8080/engagement/1\\\", \\\"url_api\\\": \\\"http://localhost:8080/api/v2/engagements/1/\\\"}, + \\\"test\\\": {\\\"title\\\": null, \\\"id\\\": 92, \\\"url_ui\\\": \\\"http://localhost:8080/test/92\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/tests/92/\\\"}}\",\n \"files\": + {},\n \"form\": {},\n \"json\": {\n \"description\": \"Event test_added + has occurred.\",\n \"engagement\": {\n \"id\": 1,\n \"name\": + \"1st Quarter Engagement\",\n \"url_api\": \"http://localhost:8080/api/v2/engagements/1/\",\n + \ \"url_ui\": \"http://localhost:8080/engagement/1\"\n },\n \"product\": + {\n \"id\": 2,\n \"name\": \"Security How-to\",\n \"url_api\": + \"http://localhost:8080/api/v2/products/2/\",\n \"url_ui\": \"http://localhost:8080/product/2\"\n + \ },\n \"product_type\": {\n \"id\": 2,\n \"name\": \"ebooks\",\n + \ \"url_api\": \"http://localhost:8080/api/v2/product_types/2/\",\n \"url_ui\": + \"http://localhost:8080/product/type/2\"\n },\n \"test\": {\n \"id\": + 92,\n \"title\": null,\n \"url_api\": \"http://localhost:8080/api/v2/tests/92/\",\n + \ \"url_ui\": \"http://localhost:8080/test/92\"\n },\n \"title\": + \"Test created for Security How-to: 1st Quarter Engagement: Generic Findings + Import\",\n \"url_api\": \"http://localhost:8080/api/v2/tests/92/\",\n + \ \"url_ui\": \"http://localhost:8080/test/92\",\n \"user\": null\n }\n}\n" + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Origin: + - '*' + Content-Type: + - application/json; charset=utf-8 + Date: + - Sat, 07 Feb 2026 00:55:42 GMT + Transfer-Encoding: + - chunked + status: + code: 200 + message: OK +- request: + body: '{"description": "Event scan_added has occurred.", "title": "Created/Updated + 1 findings for Security How-to: 1st Quarter Engagement: Generic Findings Import", + "user": null, "url_ui": "http://localhost:8080/test/92", "url_api": "http://localhost:8080/api/v2/tests/92/", + "product_type": {"name": "ebooks", "id": 2, "url_ui": "http://localhost:8080/product/type/2", + "url_api": "http://localhost:8080/api/v2/product_types/2/"}, "product": {"name": + "Security How-to", "id": 2, "url_ui": "http://localhost:8080/product/2", "url_api": + "http://localhost:8080/api/v2/products/2/"}, "engagement": {"name": "1st Quarter + Engagement", "id": 1, "url_ui": "http://localhost:8080/engagement/1", "url_api": + "http://localhost:8080/api/v2/engagements/1/"}, "test": {"title": null, "id": + 92, "url_ui": "http://localhost:8080/test/92", "url_api": "http://localhost:8080/api/v2/tests/92/"}, + "finding_count": 1, "findings": {"new": [{"id": 234, "title": "High", "severity": + "High", "url_ui": "http://localhost:8080/finding/234", "url_api": "http://localhost:8080/api/v2/findings/234/"}], + "reactivated": [], "mitigated": [], "untouched": []}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Auth: + - Token xxx + Connection: + - keep-alive + Content-Length: + - '1117' + Content-Type: + - application/json + User-Agent: + - DefectDojo-2.55.1 + X-DefectDojo-Event: + - scan_added + X-DefectDojo-Instance: + - http://localhost:8080 + method: POST + uri: http://webhook.endpoint:8080/post + response: + body: + string: "{\n \"args\": {},\n \"headers\": {\n \"Accept\": [\n \"application/json\"\n + \ ],\n \"Accept-Encoding\": [\n \"gzip, deflate\"\n ],\n \"Auth\": + [\n \"Token xxx\"\n ],\n \"Connection\": [\n \"keep-alive\"\n + \ ],\n \"Content-Length\": [\n \"1117\"\n ],\n \"Content-Type\": + [\n \"application/json\"\n ],\n \"Host\": [\n \"webhook.endpoint:8080\"\n + \ ],\n \"User-Agent\": [\n \"DefectDojo-2.55.1\"\n ],\n \"X-Defectdojo-Event\": + [\n \"scan_added\"\n ],\n \"X-Defectdojo-Instance\": [\n \"http://localhost:8080\"\n + \ ]\n },\n \"method\": \"POST\",\n \"origin\": \"172.18.0.8\",\n \"url\": + \"http://webhook.endpoint:8080/post\",\n \"data\": \"{\\\"description\\\": + \\\"Event scan_added has occurred.\\\", \\\"title\\\": \\\"Created/Updated + 1 findings for Security How-to: 1st Quarter Engagement: Generic Findings Import\\\", + \\\"user\\\": null, \\\"url_ui\\\": \\\"http://localhost:8080/test/92\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/tests/92/\\\", \\\"product_type\\\": + {\\\"name\\\": \\\"ebooks\\\", \\\"id\\\": 2, \\\"url_ui\\\": \\\"http://localhost:8080/product/type/2\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/product_types/2/\\\"}, \\\"product\\\": + {\\\"name\\\": \\\"Security How-to\\\", \\\"id\\\": 2, \\\"url_ui\\\": \\\"http://localhost:8080/product/2\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/products/2/\\\"}, \\\"engagement\\\": + {\\\"name\\\": \\\"1st Quarter Engagement\\\", \\\"id\\\": 1, \\\"url_ui\\\": + \\\"http://localhost:8080/engagement/1\\\", \\\"url_api\\\": \\\"http://localhost:8080/api/v2/engagements/1/\\\"}, + \\\"test\\\": {\\\"title\\\": null, \\\"id\\\": 92, \\\"url_ui\\\": \\\"http://localhost:8080/test/92\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/tests/92/\\\"}, \\\"finding_count\\\": + 1, \\\"findings\\\": {\\\"new\\\": [{\\\"id\\\": 234, \\\"title\\\": \\\"High\\\", + \\\"severity\\\": \\\"High\\\", \\\"url_ui\\\": \\\"http://localhost:8080/finding/234\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/findings/234/\\\"}], \\\"reactivated\\\": + [], \\\"mitigated\\\": [], \\\"untouched\\\": []}}\",\n \"files\": {},\n + \ \"form\": {},\n \"json\": {\n \"description\": \"Event scan_added has + occurred.\",\n \"engagement\": {\n \"id\": 1,\n \"name\": \"1st + Quarter Engagement\",\n \"url_api\": \"http://localhost:8080/api/v2/engagements/1/\",\n + \ \"url_ui\": \"http://localhost:8080/engagement/1\"\n },\n \"finding_count\": + 1,\n \"findings\": {\n \"mitigated\": [],\n \"new\": [\n {\n + \ \"id\": 234,\n \"severity\": \"High\",\n \"title\": + \"High\",\n \"url_api\": \"http://localhost:8080/api/v2/findings/234/\",\n + \ \"url_ui\": \"http://localhost:8080/finding/234\"\n }\n ],\n + \ \"reactivated\": [],\n \"untouched\": []\n },\n \"product\": + {\n \"id\": 2,\n \"name\": \"Security How-to\",\n \"url_api\": + \"http://localhost:8080/api/v2/products/2/\",\n \"url_ui\": \"http://localhost:8080/product/2\"\n + \ },\n \"product_type\": {\n \"id\": 2,\n \"name\": \"ebooks\",\n + \ \"url_api\": \"http://localhost:8080/api/v2/product_types/2/\",\n \"url_ui\": + \"http://localhost:8080/product/type/2\"\n },\n \"test\": {\n \"id\": + 92,\n \"title\": null,\n \"url_api\": \"http://localhost:8080/api/v2/tests/92/\",\n + \ \"url_ui\": \"http://localhost:8080/test/92\"\n },\n \"title\": + \"Created/Updated 1 findings for Security How-to: 1st Quarter Engagement: + Generic Findings Import\",\n \"url_api\": \"http://localhost:8080/api/v2/tests/92/\",\n + \ \"url_ui\": \"http://localhost:8080/test/92\",\n \"user\": null\n }\n}\n" + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Origin: + - '*' + Content-Type: + - application/json; charset=utf-8 + Date: + - Sat, 07 Feb 2026 00:55:42 GMT + Transfer-Encoding: + - chunked + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/serverInfo + response: + body: + string: '{"baseUrl":"https://defectdojo.atlassian.net","displayUrl":"https://defectdojo.atlassian.net","displayUrlServicedeskHelpCenter":"https://defectdojo.atlassian.net","displayUrlCSMHelpSeeker":"https://defectdojo.atlassian.net","displayUrlConfluence":"https://defectdojo.atlassian.net","version":"1001.0.0-SNAPSHOT","versionNumbers":[1001,0,0],"deploymentType":"Cloud","buildNumber":100290,"buildDate":"2026-02-06T12:38:29.000+0100","serverTime":"2026-02-07T01:55:43.165+0100","scmInfo":"9d700605f271b9e38f3e73c4116a686dae8d11d7","serverTitle":"Jira","defaultLocale":{"locale":"en_US"},"serverTimeZone":"Etc/UTC"}' + headers: + Atl-Request-Id: + - e30ccc6d-25d0-453e-a334-39e5db57e0ec + Atl-Traceid: + - e30ccc6d25d0453ea33439e5db57e0ec + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 00:55:43 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=0,cdn-upstream-fbl;dur=190,atl-edge;dur=167,atl-edge-internal;dur=13,atl-edge-upstream;dur=154,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN53-P3",cdn-rid;desc="5uQdyMm5jrT1a1YNfZOUheagNRaoBp7gwPBAcmo2vlNLiyb1_38TxQ==",cdn-downstream-fbl;dur=194 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 51185e40453f61916e037fc6db50766c.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - 5uQdyMm5jrT1a1YNfZOUheagNRaoBp7gwPBAcmo2vlNLiyb1_38TxQ== + X-Amz-Cf-Pop: + - DEN53-P3 + X-Arequestid: + - 0f899f1da08bd1ff04bbe63ebd8d74db + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '350' + X-Ratelimit-Remaining: + - '349' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/issue/25289 + response: + body: + string: '{"expand":"renderedFields,names,schema,operations,editmeta,changelog,versionedRepresentations,customfield_10010.requestTypePractice","id":"25289","self":"https://defectdojo.atlassian.net/rest/api/2/issue/25289","key":"NTEST-3248","fields":{"statuscategorychangedate":"2026-02-07T01:55:41.962+0100","fixVersions":[],"statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"},"resolution":null,"lastViewed":null,"customfield_10060":null,"customfield_10061":null,"customfield_10062":null,"customfield_10063":null,"customfield_10064":null,"customfield_10065":null,"customfield_10066":null,"priority":{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/2","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/high_new.svg","name":"High","id":"2"},"labels":[],"timeestimate":null,"aggregatetimeoriginalestimate":null,"versions":[],"issuelinks":[],"assignee":null,"status":{"self":"https://defectdojo.atlassian.net/rest/api/2/status/10000","description":"","iconUrl":"https://defectdojo.atlassian.net/","name":"Backlog","id":"10000","statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"}},"components":[],"customfield_10050":null,"customfield_10051":null,"customfield_10053":null,"customfield_10055":null,"customfield_10056":null,"customfield_10057":null,"customfield_10058":null,"customfield_10059":null,"customfield_10049":null,"aggregatetimeestimate":null,"creator":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"subtasks":[],"customfield_10040":null,"customfield_10041":null,"customfield_10042":null,"reporter":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"customfield_10043":null,"aggregateprogress":{"progress":0,"total":0},"customfield_10044":null,"customfield_10045":null,"customfield_10046":null,"customfield_10047":null,"customfield_10048":null,"customfield_10038":null,"customfield_10039":null,"progress":{"progress":0,"total":0},"votes":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3248/votes","votes":0,"hasVoted":false},"worklog":{"startAt":0,"maxResults":20,"total":0,"worklogs":[]},"issuetype":{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10002","id":"10002","description":"A + small, distinct piece of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","subtask":false,"avatarId":10318,"hierarchyLevel":0},"timespent":null,"customfield_10030":null,"project":{"self":"https://defectdojo.atlassian.net/rest/api/2/project/10000","id":"10000","key":"NTEST","name":"Unittests","projectTypeKey":"software","simplified":false,"avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=medium"}},"customfield_10031":null,"customfield_10032":null,"customfield_10033":null,"aggregatetimespent":null,"customfield_10035":null,"customfield_10036":null,"customfield_10037":null,"customfield_10027":null,"customfield_10028":null,"customfield_10029":null,"resolutiondate":null,"workratio":-1,"watches":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3248/watchers","watchCount":1,"isWatching":true},"created":"2026-02-07T01:55:41.647+0100","customfield_10020":null,"customfield_10021":null,"customfield_10022":null,"customfield_10023":null,"customfield_10016":null,"customfield_10017":null,"customfield_10019":"0|i0151j:","updated":"2026-02-07T01:55:41.753+0100","customfield_10090":null,"timeoriginalestimate":null,"description":"\n\n\n\n\n\n\n*Title*: + [High|http://localhost:8080/finding/234]\n\n*Defect Dojo link:* http://localhost:8080/finding/234 + (234)\n\n*Severity:* High\n\n\n*Due Date:* Dec. 31, 2025\n\n\n\n\n\n*CVE:* + Unknown\n\n\n\n\n*Product/Engagement/Test:* [Security How-to|http://localhost:8080/product/2] + / [1st Quarter Engagement|http://localhost:8080/engagement/1] / [Generic Findings + Import|http://localhost:8080/test/92]\n\n\n\n\n\n\n\n\n\n\n\n*Vulnerable Component*: + Component A - None\n\n\n\n\n*Description*:\ntest\n\n\n\n\n*Impact*:\nNone\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n","customfield_10010":null,"customfield_10014":null,"timetracking":{},"customfield_10015":null,"customfield_10005":null,"customfield_10006":null,"customfield_10007":null,"security":null,"customfield_10008":null,"attachment":[],"customfield_10009":null,"summary":"High","customfield_10001":null,"customfield_10002":[],"customfield_10123":null,"customfield_10003":null,"customfield_10004":null,"environment":null,"duedate":null,"comment":{"comments":[],"self":"https://defectdojo.atlassian.net/rest/api/2/issue/25289/comment","maxResults":0,"total":0,"startAt":0}}}' + headers: + Atl-Request-Id: + - 0ff8dc5e-f189-4bc5-ae80-90cde7fcd0a6 + Atl-Traceid: + - 0ff8dc5ef1894bc5ae8090cde7fcd0a6 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 00:55:43 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=0,cdn-upstream-fbl;dur=268,atl-edge;dur=244,atl-edge-internal;dur=15,atl-edge-upstream;dur=229,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN53-P3",cdn-rid;desc="gHL83ab78PuECwE5enVLHTVTXKEK6xxCfmkh1DFPaElDqGlTsh-0rQ==",cdn-downstream-fbl;dur=273 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 ffbfc85d825a264940b73c5e04566ff4.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - gHL83ab78PuECwE5enVLHTVTXKEK6xxCfmkh1DFPaElDqGlTsh-0rQ== + X-Amz-Cf-Pop: + - DEN53-P3 + X-Arequestid: + - 72259b8dd36f8a93c3b4343d0600a13a + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '400' + X-Ratelimit-Remaining: + - '397' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/serverInfo + response: + body: + string: '{"baseUrl":"https://defectdojo.atlassian.net","displayUrl":"https://defectdojo.atlassian.net","displayUrlServicedeskHelpCenter":"https://defectdojo.atlassian.net","displayUrlCSMHelpSeeker":"https://defectdojo.atlassian.net","displayUrlConfluence":"https://defectdojo.atlassian.net","version":"1001.0.0-SNAPSHOT","versionNumbers":[1001,0,0],"deploymentType":"Cloud","buildNumber":100290,"buildDate":"2026-02-06T12:38:29.000+0100","serverTime":"2026-02-07T01:55:43.790+0100","scmInfo":"9d700605f271b9e38f3e73c4116a686dae8d11d7","serverTitle":"Jira","defaultLocale":{"locale":"en_US"},"serverTimeZone":"Etc/UTC"}' + headers: + Atl-Request-Id: + - 8f16bb33-03e8-4ef7-9b07-688e29aabf29 + Atl-Traceid: + - 8f16bb3303e84ef79b07688e29aabf29 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 00:55:43 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=0,cdn-upstream-fbl;dur=194,atl-edge;dur=170,atl-edge-internal;dur=13,atl-edge-upstream;dur=156,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN52-P1",cdn-rid;desc="qxaudIvQcauIuKxkKbq4pTn9_P4XMwFvf-QkRZzUtrvHFec3sOUZzw==",cdn-downstream-fbl;dur=197 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 89771419757f75b08f6c8fd411f8ef54.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - qxaudIvQcauIuKxkKbq4pTn9_P4XMwFvf-QkRZzUtrvHFec3sOUZzw== + X-Amz-Cf-Pop: + - DEN52-P1 + X-Arequestid: + - 62befe8ad39a6ca3d9e98306c5e9fcad + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '350' + X-Ratelimit-Remaining: + - '348' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/issue/25289 + response: + body: + string: '{"expand":"renderedFields,names,schema,operations,editmeta,changelog,versionedRepresentations,customfield_10010.requestTypePractice","id":"25289","self":"https://defectdojo.atlassian.net/rest/api/2/issue/25289","key":"NTEST-3248","fields":{"statuscategorychangedate":"2026-02-07T01:55:41.962+0100","fixVersions":[],"statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"},"resolution":null,"lastViewed":null,"customfield_10060":null,"customfield_10061":null,"customfield_10062":null,"customfield_10063":null,"customfield_10064":null,"customfield_10065":null,"customfield_10066":null,"priority":{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/2","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/high_new.svg","name":"High","id":"2"},"labels":[],"timeestimate":null,"aggregatetimeoriginalestimate":null,"versions":[],"issuelinks":[],"assignee":null,"status":{"self":"https://defectdojo.atlassian.net/rest/api/2/status/10000","description":"","iconUrl":"https://defectdojo.atlassian.net/","name":"Backlog","id":"10000","statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"}},"components":[],"customfield_10050":null,"customfield_10051":null,"customfield_10053":null,"customfield_10055":null,"customfield_10056":null,"customfield_10057":null,"customfield_10058":null,"customfield_10059":null,"customfield_10049":null,"aggregatetimeestimate":null,"creator":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"subtasks":[],"customfield_10040":null,"customfield_10041":null,"customfield_10042":null,"reporter":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"customfield_10043":null,"aggregateprogress":{"progress":0,"total":0},"customfield_10044":null,"customfield_10045":null,"customfield_10046":null,"customfield_10047":null,"customfield_10048":null,"customfield_10038":null,"customfield_10039":null,"progress":{"progress":0,"total":0},"votes":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3248/votes","votes":0,"hasVoted":false},"worklog":{"startAt":0,"maxResults":20,"total":0,"worklogs":[]},"issuetype":{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10002","id":"10002","description":"A + small, distinct piece of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","subtask":false,"avatarId":10318,"hierarchyLevel":0},"timespent":null,"customfield_10030":null,"project":{"self":"https://defectdojo.atlassian.net/rest/api/2/project/10000","id":"10000","key":"NTEST","name":"Unittests","projectTypeKey":"software","simplified":false,"avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=medium"}},"customfield_10031":null,"customfield_10032":null,"customfield_10033":null,"aggregatetimespent":null,"customfield_10035":null,"customfield_10036":null,"customfield_10037":null,"customfield_10027":null,"customfield_10028":null,"customfield_10029":null,"resolutiondate":null,"workratio":-1,"watches":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3248/watchers","watchCount":1,"isWatching":true},"created":"2026-02-07T01:55:41.647+0100","customfield_10020":null,"customfield_10021":null,"customfield_10022":null,"customfield_10023":null,"customfield_10016":null,"customfield_10017":null,"customfield_10019":"0|i0151j:","updated":"2026-02-07T01:55:41.753+0100","customfield_10090":null,"timeoriginalestimate":null,"description":"\n\n\n\n\n\n\n*Title*: + [High|http://localhost:8080/finding/234]\n\n*Defect Dojo link:* http://localhost:8080/finding/234 + (234)\n\n*Severity:* High\n\n\n*Due Date:* Dec. 31, 2025\n\n\n\n\n\n*CVE:* + Unknown\n\n\n\n\n*Product/Engagement/Test:* [Security How-to|http://localhost:8080/product/2] + / [1st Quarter Engagement|http://localhost:8080/engagement/1] / [Generic Findings + Import|http://localhost:8080/test/92]\n\n\n\n\n\n\n\n\n\n\n\n*Vulnerable Component*: + Component A - None\n\n\n\n\n*Description*:\ntest\n\n\n\n\n*Impact*:\nNone\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n","customfield_10010":null,"customfield_10014":null,"timetracking":{},"customfield_10015":null,"customfield_10005":null,"customfield_10006":null,"customfield_10007":null,"security":null,"customfield_10008":null,"attachment":[],"customfield_10009":null,"summary":"High","customfield_10001":null,"customfield_10002":[],"customfield_10123":null,"customfield_10003":null,"customfield_10004":null,"environment":null,"duedate":null,"comment":{"comments":[],"self":"https://defectdojo.atlassian.net/rest/api/2/issue/25289/comment","maxResults":0,"total":0,"startAt":0}}}' + headers: + Atl-Request-Id: + - 440173be-fa60-481c-a898-a03fb4defa09 + Atl-Traceid: + - 440173befa60481ca898a03fb4defa09 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 00:55:44 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=0,cdn-upstream-fbl;dur=250,atl-edge;dur=228,atl-edge-internal;dur=15,atl-edge-upstream;dur=212,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN52-P1",cdn-rid;desc="ijDLP5lYVD6hzh6XEUEBr6g1lHetE_LITd1wxHoTf9eZtuWXJtMJdw==",cdn-downstream-fbl;dur=256 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 1d841c80bfe083de03dcc909a7c5fa9c.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - ijDLP5lYVD6hzh6XEUEBr6g1lHetE_LITd1wxHoTf9eZtuWXJtMJdw== + X-Amz-Cf-Pop: + - DEN52-P1 + X-Arequestid: + - 9f34923ee79a53eb4dc582b1c42b4ded + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '400' + X-Ratelimit-Remaining: + - '396' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/issue/createmeta?projectKeys=NTEST&issuetypeNames=Task&expand=projects.issuetypes.fields + response: + body: + string: '{"expand":"projects","projects":[{"expand":"issuetypes","self":"https://defectdojo.atlassian.net/rest/api/2/project/10000","id":"10000","key":"NTEST","name":"Unittests","avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=medium"},"issuetypes":[{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10002","id":"10002","description":"A + small, distinct piece of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","untranslatedName":"Task","subtask":false,"hierarchyLevel":0,"expand":"fields","fields":{"summary":{"required":true,"schema":{"type":"string","system":"summary"},"name":"Summary","key":"summary","hasDefaultValue":false,"operations":["set"]},"issuetype":{"required":true,"schema":{"type":"issuetype","system":"issuetype"},"name":"Issue + Type","key":"issuetype","hasDefaultValue":false,"operations":[],"allowedValues":[{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10002","id":"10002","description":"A + small, distinct piece of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","subtask":false,"avatarId":10318,"hierarchyLevel":0}]},"parent":{"required":false,"schema":{"type":"issuelink","system":"parent"},"name":"Parent","key":"parent","hasDefaultValue":false,"operations":["set"]},"components":{"required":false,"schema":{"type":"array","items":"component","system":"components"},"name":"Components","key":"components","hasDefaultValue":false,"operations":["add","set","remove"],"allowedValues":[]},"description":{"required":false,"schema":{"type":"string","system":"description"},"name":"Description","key":"description","hasDefaultValue":false,"operations":["set"]},"project":{"required":true,"schema":{"type":"project","system":"project"},"name":"Project","key":"project","hasDefaultValue":false,"operations":["set"],"allowedValues":[{"self":"https://defectdojo.atlassian.net/rest/api/2/project/10000","id":"10000","key":"NTEST","name":"Unittests","projectTypeKey":"software","simplified":false,"avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=medium"}}]},"fixVersions":{"required":false,"schema":{"type":"array","items":"version","system":"fixVersions"},"name":"Fix + versions","key":"fixVersions","hasDefaultValue":false,"operations":["set","add","remove"],"allowedValues":[]},"priority":{"required":false,"schema":{"type":"priority","system":"priority"},"name":"Priority","key":"priority","hasDefaultValue":true,"operations":["set"],"allowedValues":[{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/1","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/highest_new.svg","name":"Highest","id":"1"},{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/2","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/high_new.svg","name":"High","id":"2"},{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/3","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/medium_new.svg","name":"Medium","id":"3"},{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/4","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/low_new.svg","name":"Low","id":"4"},{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/5","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/lowest_new.svg","name":"Lowest","id":"5"}],"defaultValue":{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/3","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/medium_new.svg","name":"Medium","id":"3"}},"customfield_10014":{"required":false,"schema":{"type":"any","custom":"com.pyxis.greenhopper.jira:gh-epic-link","customId":10014},"name":"Epic + Link","key":"customfield_10014","hasDefaultValue":false,"operations":["set"]},"labels":{"required":false,"schema":{"type":"array","items":"string","system":"labels"},"name":"Labels","key":"labels","autoCompleteUrl":"https://defectdojo.atlassian.net/rest/api/1.0/labels/suggest?query=","hasDefaultValue":false,"operations":["add","set","remove"]},"attachment":{"required":false,"schema":{"type":"array","items":"attachment","system":"attachment"},"name":"Attachment","key":"attachment","hasDefaultValue":false,"operations":["set","copy"]},"issuelinks":{"required":false,"schema":{"type":"array","items":"issuelinks","system":"issuelinks"},"name":"Linked + Issues","key":"issuelinks","autoCompleteUrl":"https://defectdojo.atlassian.net/rest/api/2/issue/picker?currentProjectId=&showSubTaskParent=true&showSubTasks=true¤tIssueKey=null&query=","hasDefaultValue":false,"operations":["add","copy"]},"assignee":{"required":false,"schema":{"type":"user","system":"assignee"},"name":"Assignee","key":"assignee","autoCompleteUrl":"https://defectdojo.atlassian.net/rest/api/2/user/assignable/search?project=NTEST&query=","hasDefaultValue":false,"operations":["set"]}}}]}]}' + headers: + Atl-Request-Id: + - ac523d61-eba7-4f02-98a5-ee67ad5c3ec8 + Atl-Traceid: + - ac523d61eba74f0298a5ee67ad5c3ec8 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 00:55:44 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=65,cdn-upstream-fbl;dur=390,atl-edge;dur=302,atl-edge-internal;dur=16,atl-edge-upstream;dur=286,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN53-P2",cdn-rid;desc="CwEykkhOX5Pgc2231Hy7T6LrO9jeUhsMI7z25NppkcBxeYUNo-ir_A==",cdn-downstream-fbl;dur=394 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 92deee8348203aa783cce35d78bd0efe.cloudfront.net (CloudFront) + Warning: + - 'The issue create meta endpoint has been deprecated. (Deprecation start date: + June 03, 2024)' + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - CwEykkhOX5Pgc2231Hy7T6LrO9jeUhsMI7z25NppkcBxeYUNo-ir_A== + X-Amz-Cf-Pop: + - DEN53-P2 + X-Arequestid: + - 4e65638b47746b6811d5fa33d5683f48 + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '350' + X-Ratelimit-Remaining: + - '349' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: '{"fields": {"project": {"key": "NTEST"}, "issuetype": {"name": "Task"}, + "summary": "High", "description": "\n\n\n\n\n\n\n*Title*: [High|http://localhost:8080/finding/234]\n\n*Defect + Dojo link:* http://localhost:8080/finding/234 (234)\n\n*Severity:* High\n\n\n*Due + Date:* Dec. 31, 2025\n\n\n\n\n\n*CVE:* Unknown\n\n\n\n\n*Product/Engagement/Test:* + [Security How-to|http://localhost:8080/product/2] / [1st Quarter Engagement|http://localhost:8080/engagement/1] + / [Generic Findings Import|http://localhost:8080/test/92]\n\n\n\n\n\n\n\n\n\n\n\n*Vulnerable + Component*: Component A - None\n\n\n\n\n*Description*:\ntest\n\n\n\n\n*Impact*:\nNone\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n"}, "update": {}}' + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Length: + - '708' + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: PUT + uri: https://defectdojo.atlassian.net/rest/api/2/issue/25289 + response: + body: + string: '' + headers: + Atl-Request-Id: + - 2a8b5ae2-cc5c-40da-b716-fb3eafc46754 + Atl-Traceid: + - 2a8b5ae2cc5c40dab716fb3eafc46754 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 00:55:44 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=0,cdn-upstream-fbl;dur=325,atl-edge;dur=301,atl-edge-internal;dur=15,atl-edge-upstream;dur=284,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN52-P1",cdn-rid;desc="fTwmne5l4sSsKzLS_jCAhT1KegzTmJyoU1EU5LqrpQK8mA4e7yvBNw==",cdn-downstream-fbl;dur=329 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Vary: + - Accept-Encoding + Via: + - 1.1 cef95c13f18c85adb4a10ae72f19bf38.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - fTwmne5l4sSsKzLS_jCAhT1KegzTmJyoU1EU5LqrpQK8mA4e7yvBNw== + X-Amz-Cf-Pop: + - DEN52-P1 + X-Arequestid: + - 831aec0b0bcbaddff097e913b6498617 + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '300' + X-Ratelimit-Remaining: + - '299' + X-Xss-Protection: + - 1; mode=block + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/issue/25289 + response: + body: + string: '{"expand":"renderedFields,names,schema,operations,editmeta,changelog,versionedRepresentations,customfield_10010.requestTypePractice","id":"25289","self":"https://defectdojo.atlassian.net/rest/api/2/issue/25289","key":"NTEST-3248","fields":{"statuscategorychangedate":"2026-02-07T01:55:41.962+0100","fixVersions":[],"statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"},"resolution":null,"lastViewed":null,"customfield_10060":null,"customfield_10061":null,"customfield_10062":null,"customfield_10063":null,"customfield_10064":null,"customfield_10065":null,"customfield_10066":null,"priority":{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/2","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/high_new.svg","name":"High","id":"2"},"labels":[],"timeestimate":null,"aggregatetimeoriginalestimate":null,"versions":[],"issuelinks":[],"assignee":null,"status":{"self":"https://defectdojo.atlassian.net/rest/api/2/status/10000","description":"","iconUrl":"https://defectdojo.atlassian.net/","name":"Backlog","id":"10000","statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"}},"components":[],"customfield_10050":null,"customfield_10051":null,"customfield_10053":null,"customfield_10055":null,"customfield_10056":null,"customfield_10057":null,"customfield_10058":null,"customfield_10059":null,"customfield_10049":null,"aggregatetimeestimate":null,"creator":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"subtasks":[],"customfield_10040":null,"customfield_10041":null,"customfield_10042":null,"reporter":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"customfield_10043":null,"aggregateprogress":{"progress":0,"total":0},"customfield_10044":null,"customfield_10045":null,"customfield_10046":null,"customfield_10047":null,"customfield_10048":null,"customfield_10038":null,"customfield_10039":null,"progress":{"progress":0,"total":0},"votes":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3248/votes","votes":0,"hasVoted":false},"worklog":{"startAt":0,"maxResults":20,"total":0,"worklogs":[]},"issuetype":{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10002","id":"10002","description":"A + small, distinct piece of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","subtask":false,"avatarId":10318,"hierarchyLevel":0},"timespent":null,"customfield_10030":null,"project":{"self":"https://defectdojo.atlassian.net/rest/api/2/project/10000","id":"10000","key":"NTEST","name":"Unittests","projectTypeKey":"software","simplified":false,"avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=medium"}},"customfield_10031":null,"customfield_10032":null,"customfield_10033":null,"aggregatetimespent":null,"customfield_10035":null,"customfield_10036":null,"customfield_10037":null,"customfield_10027":null,"customfield_10028":null,"customfield_10029":null,"resolutiondate":null,"workratio":-1,"watches":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3248/watchers","watchCount":1,"isWatching":true},"created":"2026-02-07T01:55:41.647+0100","customfield_10020":null,"customfield_10021":null,"customfield_10022":null,"customfield_10023":null,"customfield_10016":null,"customfield_10017":null,"customfield_10019":"0|i0151j:","updated":"2026-02-07T01:55:41.753+0100","customfield_10090":null,"timeoriginalestimate":null,"description":"\n\n\n\n\n\n\n*Title*: + [High|http://localhost:8080/finding/234]\n\n*Defect Dojo link:* http://localhost:8080/finding/234 + (234)\n\n*Severity:* High\n\n\n*Due Date:* Dec. 31, 2025\n\n\n\n\n\n*CVE:* + Unknown\n\n\n\n\n*Product/Engagement/Test:* [Security How-to|http://localhost:8080/product/2] + / [1st Quarter Engagement|http://localhost:8080/engagement/1] / [Generic Findings + Import|http://localhost:8080/test/92]\n\n\n\n\n\n\n\n\n\n\n\n*Vulnerable Component*: + Component A - None\n\n\n\n\n*Description*:\ntest\n\n\n\n\n*Impact*:\nNone\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n","customfield_10010":null,"customfield_10014":null,"timetracking":{},"customfield_10015":null,"customfield_10005":null,"customfield_10006":null,"customfield_10007":null,"security":null,"customfield_10008":null,"attachment":[],"customfield_10009":null,"summary":"High","customfield_10001":null,"customfield_10002":[],"customfield_10123":null,"customfield_10003":null,"customfield_10004":null,"environment":null,"duedate":null,"comment":{"comments":[],"self":"https://defectdojo.atlassian.net/rest/api/2/issue/25289/comment","maxResults":0,"total":0,"startAt":0}}}' + headers: + Atl-Request-Id: + - 8d2e3700-d4aa-47e1-bec7-30533302f487 + Atl-Traceid: + - 8d2e3700d4aa47e1bec730533302f487 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 00:55:45 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=0,cdn-upstream-fbl;dur=283,atl-edge;dur=260,atl-edge-internal;dur=18,atl-edge-upstream;dur=242,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN53-P2",cdn-rid;desc="b42VK4TGx8fw5ey1cSD9-O_rtu1gsO4m0TulAgnWOLr6kwOR-7XhDg==",cdn-downstream-fbl;dur=287 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 0ec4ee481d2d7e134f4c87a9b9fc4e06.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - b42VK4TGx8fw5ey1cSD9-O_rtu1gsO4m0TulAgnWOLr6kwOR-7XhDg== + X-Amz-Cf-Pop: + - DEN53-P2 + X-Arequestid: + - 22c5abce04f37a1a86533a0f32e629e5 + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '400' + X-Ratelimit-Remaining: + - '399' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: '{"transition": {"id": 41}, "fields": {}}' + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Length: + - '40' + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: POST + uri: https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3248/transitions + response: + body: + string: '' + headers: + Atl-Request-Id: + - fa53697f-3f6c-4f99-b8dc-32ada9b1fc58 + Atl-Traceid: + - fa53697f3f6c4f99b8dc32ada9b1fc58 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Type: + - text/html;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 00:55:45 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=0,cdn-upstream-fbl;dur=481,atl-edge;dur=458,atl-edge-internal;dur=17,atl-edge-upstream;dur=441,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN52-P3",cdn-rid;desc="X0JMWm-X9nbdiHdf-YeE4e_7QCcLcZCpghbtlTKip6k1Szve85BoBA==",cdn-downstream-fbl;dur=485 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Vary: + - Accept-Encoding + Via: + - 1.1 0493ac96db17aa3c2303a0a81e1a1ec8.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - X0JMWm-X9nbdiHdf-YeE4e_7QCcLcZCpghbtlTKip6k1Szve85BoBA== + X-Amz-Cf-Pop: + - DEN52-P3 + X-Arequestid: + - 203e132882399dd2bdf007d6c0add735 + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '200' + X-Ratelimit-Remaining: + - '199' + X-Xss-Protection: + - 1; mode=block + status: + code: 204 + message: No Content +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/serverInfo + response: + body: + string: '{"baseUrl":"https://defectdojo.atlassian.net","displayUrl":"https://defectdojo.atlassian.net","displayUrlServicedeskHelpCenter":"https://defectdojo.atlassian.net","displayUrlCSMHelpSeeker":"https://defectdojo.atlassian.net","displayUrlConfluence":"https://defectdojo.atlassian.net","version":"1001.0.0-SNAPSHOT","versionNumbers":[1001,0,0],"deploymentType":"Cloud","buildNumber":100290,"buildDate":"2026-02-06T12:38:29.000+0100","serverTime":"2026-02-07T01:55:46.163+0100","scmInfo":"9d700605f271b9e38f3e73c4116a686dae8d11d7","serverTitle":"Jira","defaultLocale":{"locale":"en_US"},"serverTimeZone":"Etc/UTC"}' + headers: + Atl-Request-Id: + - 25508759-0cc1-445c-86d9-caea680053b3 + Atl-Traceid: + - 255087590cc1445c86d9caea680053b3 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 00:55:46 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=65,cdn-upstream-fbl;dur=278,atl-edge;dur=190,atl-edge-internal;dur=31,atl-edge-upstream;dur=155,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN53-P1",cdn-rid;desc="LKkCucXAKkaNHdYD0mh3u1Vyn5XW1oaRDL8f6ytZ-FJnzVP0tgD-9A==",cdn-downstream-fbl;dur=281 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 dcf66d063397a0f56f1520115d84eb20.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - LKkCucXAKkaNHdYD0mh3u1Vyn5XW1oaRDL8f6ytZ-FJnzVP0tgD-9A== + X-Amz-Cf-Pop: + - DEN53-P1 + X-Arequestid: + - 7b384dcb4c5bcd296248b07d289ca6ac + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '350' + X-Ratelimit-Remaining: + - '349' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/issue/25289 + response: + body: + string: '{"expand":"renderedFields,names,schema,operations,editmeta,changelog,versionedRepresentations,customfield_10010.requestTypePractice","id":"25289","self":"https://defectdojo.atlassian.net/rest/api/2/issue/25289","key":"NTEST-3248","fields":{"statuscategorychangedate":"2026-02-07T01:55:45.603+0100","fixVersions":[],"statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/3","id":3,"key":"done","colorName":"green","name":"Done"},"resolution":{"self":"https://defectdojo.atlassian.net/rest/api/2/resolution/10000","id":"10000","description":"Work + has been completed on this issue.","name":"Done"},"lastViewed":null,"customfield_10060":null,"customfield_10061":null,"customfield_10062":null,"customfield_10063":null,"customfield_10064":null,"customfield_10065":null,"customfield_10066":null,"priority":{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/2","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/high_new.svg","name":"High","id":"2"},"labels":[],"timeestimate":null,"aggregatetimeoriginalestimate":null,"versions":[],"issuelinks":[],"assignee":null,"status":{"self":"https://defectdojo.atlassian.net/rest/api/2/status/10002","description":"","iconUrl":"https://defectdojo.atlassian.net/","name":"Done","id":"10002","statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/3","id":3,"key":"done","colorName":"green","name":"Done"}},"components":[],"customfield_10050":null,"customfield_10051":null,"customfield_10053":null,"customfield_10055":null,"customfield_10056":null,"customfield_10057":null,"customfield_10058":null,"customfield_10059":null,"customfield_10049":null,"aggregatetimeestimate":null,"creator":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"subtasks":[],"customfield_10040":null,"customfield_10041":null,"customfield_10042":null,"reporter":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"customfield_10043":null,"aggregateprogress":{"progress":0,"total":0},"customfield_10044":null,"customfield_10045":null,"customfield_10046":null,"customfield_10047":null,"customfield_10048":null,"customfield_10038":null,"customfield_10039":null,"progress":{"progress":0,"total":0},"votes":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3248/votes","votes":0,"hasVoted":false},"worklog":{"startAt":0,"maxResults":20,"total":0,"worklogs":[]},"issuetype":{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10002","id":"10002","description":"A + small, distinct piece of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","subtask":false,"avatarId":10318,"hierarchyLevel":0},"timespent":null,"customfield_10030":null,"project":{"self":"https://defectdojo.atlassian.net/rest/api/2/project/10000","id":"10000","key":"NTEST","name":"Unittests","projectTypeKey":"software","simplified":false,"avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10407?size=medium"}},"customfield_10031":null,"customfield_10032":null,"customfield_10033":null,"aggregatetimespent":null,"customfield_10035":null,"customfield_10036":null,"customfield_10037":null,"customfield_10027":null,"customfield_10028":null,"customfield_10029":null,"resolutiondate":"2026-02-07T01:55:45.585+0100","workratio":-1,"watches":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/NTEST-3248/watchers","watchCount":1,"isWatching":true},"created":"2026-02-07T01:55:41.647+0100","customfield_10020":null,"customfield_10021":null,"customfield_10022":null,"customfield_10023":"10000_*:*_1_*:*_3955_*|*_10002_*:*_1_*:*_0","customfield_10016":null,"customfield_10017":null,"customfield_10019":"0|i0151j:","updated":"2026-02-07T01:55:45.602+0100","customfield_10090":null,"timeoriginalestimate":null,"description":"\n\n\n\n\n\n\n*Title*: + [High|http://localhost:8080/finding/234]\n\n*Defect Dojo link:* http://localhost:8080/finding/234 + (234)\n\n*Severity:* High\n\n\n*Due Date:* Dec. 31, 2025\n\n\n\n\n\n*CVE:* + Unknown\n\n\n\n\n*Product/Engagement/Test:* [Security How-to|http://localhost:8080/product/2] + / [1st Quarter Engagement|http://localhost:8080/engagement/1] / [Generic Findings + Import|http://localhost:8080/test/92]\n\n\n\n\n\n\n\n\n\n\n\n*Vulnerable Component*: + Component A - None\n\n\n\n\n*Description*:\ntest\n\n\n\n\n*Impact*:\nNone\n\n\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n","customfield_10010":null,"customfield_10014":null,"timetracking":{},"customfield_10015":null,"customfield_10005":null,"customfield_10006":null,"customfield_10007":null,"security":null,"customfield_10008":null,"attachment":[],"customfield_10009":null,"summary":"High","customfield_10001":null,"customfield_10002":[],"customfield_10123":null,"customfield_10003":null,"customfield_10004":null,"environment":null,"duedate":null,"comment":{"comments":[],"self":"https://defectdojo.atlassian.net/rest/api/2/issue/25289/comment","maxResults":0,"total":0,"startAt":0}}}' + headers: + Atl-Request-Id: + - 950ce17f-238f-4c06-a02e-6783fb00c219 + Atl-Traceid: + - 950ce17f238f4c06a02e6783fb00c219 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Sat, 07 Feb 2026 00:55:46 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=0,cdn-upstream-fbl;dur=485,atl-edge;dur=461,atl-edge-internal;dur=22,atl-edge-upstream;dur=436,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN53-P3",cdn-rid;desc="ItJnY4s7Y1Nv8EzlQj81ocNnne_4ezpjJxcM4EFgJUoGreH6zoChzA==",cdn-downstream-fbl;dur=488 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 708370555615eac6a25379c04fbdd8ea.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - ItJnY4s7Y1Nv8EzlQj81ocNnne_4ezpjJxcM4EFgJUoGreH6zoChzA== + X-Amz-Cf-Pop: + - DEN53-P3 + X-Arequestid: + - 877866e32c1194917e779b9afd1230ad + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '400' + X-Ratelimit-Remaining: + - '399' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +version: 1 diff --git a/unittests/vcr/jira/JIRAImportAndPushTestApi.test_reimport_auto_create_context_fetches_all_objects_for_push_to_jira.yaml b/unittests/vcr/jira/JIRAImportAndPushTestApi.test_reimport_auto_create_context_fetches_all_objects_for_push_to_jira.yaml new file mode 100644 index 00000000000..54a5771e9dd --- /dev/null +++ b/unittests/vcr/jira/JIRAImportAndPushTestApi.test_reimport_auto_create_context_fetches_all_objects_for_push_to_jira.yaml @@ -0,0 +1,1386 @@ +interactions: +- request: + body: '{"description": "Product Type Some Product Type has been created successfully.", + "title": "Some Product Type", "user": null, "url_ui": "http://localhost:8080/product/type/4", + "url_api": "http://localhost:8080/api/v2/product_types/4/", "product_type": + {"name": "Some Product Type", "id": 4, "url_ui": "http://localhost:8080/product/type/4", + "url_api": "http://localhost:8080/api/v2/product_types/4/"}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Auth: + - Token xxx + Connection: + - keep-alive + Content-Length: + - '400' + Content-Type: + - application/json + User-Agent: + - DefectDojo-2.55.1 + X-DefectDojo-Event: + - product_type_added + X-DefectDojo-Instance: + - http://localhost:8080 + method: POST + uri: http://webhook.endpoint:8080/post + response: + body: + string: "{\n \"args\": {},\n \"headers\": {\n \"Accept\": [\n \"application/json\"\n + \ ],\n \"Accept-Encoding\": [\n \"gzip, deflate\"\n ],\n \"Auth\": + [\n \"Token xxx\"\n ],\n \"Connection\": [\n \"keep-alive\"\n + \ ],\n \"Content-Length\": [\n \"400\"\n ],\n \"Content-Type\": + [\n \"application/json\"\n ],\n \"Host\": [\n \"webhook.endpoint:8080\"\n + \ ],\n \"User-Agent\": [\n \"DefectDojo-2.55.1\"\n ],\n \"X-Defectdojo-Event\": + [\n \"product_type_added\"\n ],\n \"X-Defectdojo-Instance\": [\n + \ \"http://localhost:8080\"\n ]\n },\n \"method\": \"POST\",\n \"origin\": + \"172.18.0.6\",\n \"url\": \"http://webhook.endpoint:8080/post\",\n \"data\": + \"{\\\"description\\\": \\\"Product Type Some Product Type has been created + successfully.\\\", \\\"title\\\": \\\"Some Product Type\\\", \\\"user\\\": + null, \\\"url_ui\\\": \\\"http://localhost:8080/product/type/4\\\", \\\"url_api\\\": + \\\"http://localhost:8080/api/v2/product_types/4/\\\", \\\"product_type\\\": + {\\\"name\\\": \\\"Some Product Type\\\", \\\"id\\\": 4, \\\"url_ui\\\": \\\"http://localhost:8080/product/type/4\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/product_types/4/\\\"}}\",\n + \ \"files\": {},\n \"form\": {},\n \"json\": {\n \"description\": \"Product + Type Some Product Type has been created successfully.\",\n \"product_type\": + {\n \"id\": 4,\n \"name\": \"Some Product Type\",\n \"url_api\": + \"http://localhost:8080/api/v2/product_types/4/\",\n \"url_ui\": \"http://localhost:8080/product/type/4\"\n + \ },\n \"title\": \"Some Product Type\",\n \"url_api\": \"http://localhost:8080/api/v2/product_types/4/\",\n + \ \"url_ui\": \"http://localhost:8080/product/type/4\",\n \"user\": null\n + \ }\n}\n" + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Origin: + - '*' + Content-Length: + - '1593' + Content-Type: + - application/json; charset=utf-8 + Date: + - Fri, 06 Feb 2026 18:56:33 GMT + status: + code: 200 + message: OK +- request: + body: '{"description": "Product Jira Product (Not Configured) has been created + successfully.", "title": "Jira Product (Not Configured)", "user": null, "url_ui": + "http://localhost:8080/product/4", "url_api": "http://localhost:8080/api/v2/products/4/", + "product_type": {"name": "Some Product Type", "id": 4, "url_ui": "http://localhost:8080/product/type/4", + "url_api": "http://localhost:8080/api/v2/product_types/4/"}, "product": {"name": + "Jira Product (Not Configured)", "id": 4, "url_ui": "http://localhost:8080/product/4", + "url_api": "http://localhost:8080/api/v2/products/4/"}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Auth: + - Token xxx + Connection: + - keep-alive + Content-Length: + - '572' + Content-Type: + - application/json + User-Agent: + - DefectDojo-2.55.1 + X-DefectDojo-Event: + - product_added + X-DefectDojo-Instance: + - http://localhost:8080 + method: POST + uri: http://webhook.endpoint:8080/post + response: + body: + string: "{\n \"args\": {},\n \"headers\": {\n \"Accept\": [\n \"application/json\"\n + \ ],\n \"Accept-Encoding\": [\n \"gzip, deflate\"\n ],\n \"Auth\": + [\n \"Token xxx\"\n ],\n \"Connection\": [\n \"keep-alive\"\n + \ ],\n \"Content-Length\": [\n \"572\"\n ],\n \"Content-Type\": + [\n \"application/json\"\n ],\n \"Host\": [\n \"webhook.endpoint:8080\"\n + \ ],\n \"User-Agent\": [\n \"DefectDojo-2.55.1\"\n ],\n \"X-Defectdojo-Event\": + [\n \"product_added\"\n ],\n \"X-Defectdojo-Instance\": [\n \"http://localhost:8080\"\n + \ ]\n },\n \"method\": \"POST\",\n \"origin\": \"172.18.0.6\",\n \"url\": + \"http://webhook.endpoint:8080/post\",\n \"data\": \"{\\\"description\\\": + \\\"Product Jira Product (Not Configured) has been created successfully.\\\", + \\\"title\\\": \\\"Jira Product (Not Configured)\\\", \\\"user\\\": null, + \\\"url_ui\\\": \\\"http://localhost:8080/product/4\\\", \\\"url_api\\\": + \\\"http://localhost:8080/api/v2/products/4/\\\", \\\"product_type\\\": {\\\"name\\\": + \\\"Some Product Type\\\", \\\"id\\\": 4, \\\"url_ui\\\": \\\"http://localhost:8080/product/type/4\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/product_types/4/\\\"}, \\\"product\\\": + {\\\"name\\\": \\\"Jira Product (Not Configured)\\\", \\\"id\\\": 4, \\\"url_ui\\\": + \\\"http://localhost:8080/product/4\\\", \\\"url_api\\\": \\\"http://localhost:8080/api/v2/products/4/\\\"}}\",\n + \ \"files\": {},\n \"form\": {},\n \"json\": {\n \"description\": \"Product + Jira Product (Not Configured) has been created successfully.\",\n \"product\": + {\n \"id\": 4,\n \"name\": \"Jira Product (Not Configured)\",\n + \ \"url_api\": \"http://localhost:8080/api/v2/products/4/\",\n \"url_ui\": + \"http://localhost:8080/product/4\"\n },\n \"product_type\": {\n \"id\": + 4,\n \"name\": \"Some Product Type\",\n \"url_api\": \"http://localhost:8080/api/v2/product_types/4/\",\n + \ \"url_ui\": \"http://localhost:8080/product/type/4\"\n },\n \"title\": + \"Jira Product (Not Configured)\",\n \"url_api\": \"http://localhost:8080/api/v2/products/4/\",\n + \ \"url_ui\": \"http://localhost:8080/product/4\",\n \"user\": null\n + \ }\n}\n" + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Origin: + - '*' + Content-Length: + - '1982' + Content-Type: + - application/json; charset=utf-8 + Date: + - Fri, 06 Feb 2026 18:56:33 GMT + status: + code: 200 + message: OK +- request: + body: '{"description": "Event engagement_added has occurred.", "title": "Engagement + created for \"Jira Product (Not Configured)\": Jira Engagement", "user": null, + "url_ui": "http://localhost:8080/engagement/7", "url_api": "http://localhost:8080/api/v2/engagements/7/", + "product_type": {"name": "Some Product Type", "id": 4, "url_ui": "http://localhost:8080/product/type/4", + "url_api": "http://localhost:8080/api/v2/product_types/4/"}, "product": {"name": + "Jira Product (Not Configured)", "id": 4, "url_ui": "http://localhost:8080/product/4", + "url_api": "http://localhost:8080/api/v2/products/4/"}, "engagement": {"name": + "Jira Engagement", "id": 7, "url_ui": "http://localhost:8080/engagement/7", + "url_api": "http://localhost:8080/api/v2/engagements/7/"}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Auth: + - Token xxx + Connection: + - keep-alive + Content-Length: + - '748' + Content-Type: + - application/json + User-Agent: + - DefectDojo-2.55.1 + X-DefectDojo-Event: + - engagement_added + X-DefectDojo-Instance: + - http://localhost:8080 + method: POST + uri: http://webhook.endpoint:8080/post + response: + body: + string: "{\n \"args\": {},\n \"headers\": {\n \"Accept\": [\n \"application/json\"\n + \ ],\n \"Accept-Encoding\": [\n \"gzip, deflate\"\n ],\n \"Auth\": + [\n \"Token xxx\"\n ],\n \"Connection\": [\n \"keep-alive\"\n + \ ],\n \"Content-Length\": [\n \"748\"\n ],\n \"Content-Type\": + [\n \"application/json\"\n ],\n \"Host\": [\n \"webhook.endpoint:8080\"\n + \ ],\n \"User-Agent\": [\n \"DefectDojo-2.55.1\"\n ],\n \"X-Defectdojo-Event\": + [\n \"engagement_added\"\n ],\n \"X-Defectdojo-Instance\": [\n + \ \"http://localhost:8080\"\n ]\n },\n \"method\": \"POST\",\n \"origin\": + \"172.18.0.6\",\n \"url\": \"http://webhook.endpoint:8080/post\",\n \"data\": + \"{\\\"description\\\": \\\"Event engagement_added has occurred.\\\", \\\"title\\\": + \\\"Engagement created for \\\\\\\"Jira Product (Not Configured)\\\\\\\": + Jira Engagement\\\", \\\"user\\\": null, \\\"url_ui\\\": \\\"http://localhost:8080/engagement/7\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/engagements/7/\\\", \\\"product_type\\\": + {\\\"name\\\": \\\"Some Product Type\\\", \\\"id\\\": 4, \\\"url_ui\\\": \\\"http://localhost:8080/product/type/4\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/product_types/4/\\\"}, \\\"product\\\": + {\\\"name\\\": \\\"Jira Product (Not Configured)\\\", \\\"id\\\": 4, \\\"url_ui\\\": + \\\"http://localhost:8080/product/4\\\", \\\"url_api\\\": \\\"http://localhost:8080/api/v2/products/4/\\\"}, + \\\"engagement\\\": {\\\"name\\\": \\\"Jira Engagement\\\", \\\"id\\\": 7, + \\\"url_ui\\\": \\\"http://localhost:8080/engagement/7\\\", \\\"url_api\\\": + \\\"http://localhost:8080/api/v2/engagements/7/\\\"}}\",\n \"files\": {},\n + \ \"form\": {},\n \"json\": {\n \"description\": \"Event engagement_added + has occurred.\",\n \"engagement\": {\n \"id\": 7,\n \"name\": + \"Jira Engagement\",\n \"url_api\": \"http://localhost:8080/api/v2/engagements/7/\",\n + \ \"url_ui\": \"http://localhost:8080/engagement/7\"\n },\n \"product\": + {\n \"id\": 4,\n \"name\": \"Jira Product (Not Configured)\",\n + \ \"url_api\": \"http://localhost:8080/api/v2/products/4/\",\n \"url_ui\": + \"http://localhost:8080/product/4\"\n },\n \"product_type\": {\n \"id\": + 4,\n \"name\": \"Some Product Type\",\n \"url_api\": \"http://localhost:8080/api/v2/product_types/4/\",\n + \ \"url_ui\": \"http://localhost:8080/product/type/4\"\n },\n \"title\": + \"Engagement created for \\\"Jira Product (Not Configured)\\\": Jira Engagement\",\n + \ \"url_api\": \"http://localhost:8080/api/v2/engagements/7/\",\n \"url_ui\": + \"http://localhost:8080/engagement/7\",\n \"user\": null\n }\n}\n" + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Origin: + - '*' + Content-Type: + - application/json; charset=utf-8 + Date: + - Fri, 06 Feb 2026 18:56:33 GMT + Transfer-Encoding: + - chunked + status: + code: 200 + message: OK +- request: + body: '{"description": "Event test_added has occurred.", "title": "Test created + for Jira Product (Not Configured): Jira Engagement: ZAP Scan", "user": null, + "url_ui": "http://localhost:8080/test/92", "url_api": "http://localhost:8080/api/v2/tests/92/", + "product_type": {"name": "Some Product Type", "id": 4, "url_ui": "http://localhost:8080/product/type/4", + "url_api": "http://localhost:8080/api/v2/product_types/4/"}, "product": {"name": + "Jira Product (Not Configured)", "id": 4, "url_ui": "http://localhost:8080/product/4", + "url_api": "http://localhost:8080/api/v2/products/4/"}, "engagement": {"name": + "Jira Engagement", "id": 7, "url_ui": "http://localhost:8080/engagement/7", + "url_api": "http://localhost:8080/api/v2/engagements/7/"}, "test": {"title": + null, "id": 92, "url_ui": "http://localhost:8080/test/92", "url_api": "http://localhost:8080/api/v2/tests/92/"}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Auth: + - Token xxx + Connection: + - keep-alive + Content-Length: + - '863' + Content-Type: + - application/json + User-Agent: + - DefectDojo-2.55.1 + X-DefectDojo-Event: + - test_added + X-DefectDojo-Instance: + - http://localhost:8080 + method: POST + uri: http://webhook.endpoint:8080/post + response: + body: + string: "{\n \"args\": {},\n \"headers\": {\n \"Accept\": [\n \"application/json\"\n + \ ],\n \"Accept-Encoding\": [\n \"gzip, deflate\"\n ],\n \"Auth\": + [\n \"Token xxx\"\n ],\n \"Connection\": [\n \"keep-alive\"\n + \ ],\n \"Content-Length\": [\n \"863\"\n ],\n \"Content-Type\": + [\n \"application/json\"\n ],\n \"Host\": [\n \"webhook.endpoint:8080\"\n + \ ],\n \"User-Agent\": [\n \"DefectDojo-2.55.1\"\n ],\n \"X-Defectdojo-Event\": + [\n \"test_added\"\n ],\n \"X-Defectdojo-Instance\": [\n \"http://localhost:8080\"\n + \ ]\n },\n \"method\": \"POST\",\n \"origin\": \"172.18.0.6\",\n \"url\": + \"http://webhook.endpoint:8080/post\",\n \"data\": \"{\\\"description\\\": + \\\"Event test_added has occurred.\\\", \\\"title\\\": \\\"Test created for + Jira Product (Not Configured): Jira Engagement: ZAP Scan\\\", \\\"user\\\": + null, \\\"url_ui\\\": \\\"http://localhost:8080/test/92\\\", \\\"url_api\\\": + \\\"http://localhost:8080/api/v2/tests/92/\\\", \\\"product_type\\\": {\\\"name\\\": + \\\"Some Product Type\\\", \\\"id\\\": 4, \\\"url_ui\\\": \\\"http://localhost:8080/product/type/4\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/product_types/4/\\\"}, \\\"product\\\": + {\\\"name\\\": \\\"Jira Product (Not Configured)\\\", \\\"id\\\": 4, \\\"url_ui\\\": + \\\"http://localhost:8080/product/4\\\", \\\"url_api\\\": \\\"http://localhost:8080/api/v2/products/4/\\\"}, + \\\"engagement\\\": {\\\"name\\\": \\\"Jira Engagement\\\", \\\"id\\\": 7, + \\\"url_ui\\\": \\\"http://localhost:8080/engagement/7\\\", \\\"url_api\\\": + \\\"http://localhost:8080/api/v2/engagements/7/\\\"}, \\\"test\\\": {\\\"title\\\": + null, \\\"id\\\": 92, \\\"url_ui\\\": \\\"http://localhost:8080/test/92\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/tests/92/\\\"}}\",\n \"files\": + {},\n \"form\": {},\n \"json\": {\n \"description\": \"Event test_added + has occurred.\",\n \"engagement\": {\n \"id\": 7,\n \"name\": + \"Jira Engagement\",\n \"url_api\": \"http://localhost:8080/api/v2/engagements/7/\",\n + \ \"url_ui\": \"http://localhost:8080/engagement/7\"\n },\n \"product\": + {\n \"id\": 4,\n \"name\": \"Jira Product (Not Configured)\",\n + \ \"url_api\": \"http://localhost:8080/api/v2/products/4/\",\n \"url_ui\": + \"http://localhost:8080/product/4\"\n },\n \"product_type\": {\n \"id\": + 4,\n \"name\": \"Some Product Type\",\n \"url_api\": \"http://localhost:8080/api/v2/product_types/4/\",\n + \ \"url_ui\": \"http://localhost:8080/product/type/4\"\n },\n \"test\": + {\n \"id\": 92,\n \"title\": null,\n \"url_api\": \"http://localhost:8080/api/v2/tests/92/\",\n + \ \"url_ui\": \"http://localhost:8080/test/92\"\n },\n \"title\": + \"Test created for Jira Product (Not Configured): Jira Engagement: ZAP Scan\",\n + \ \"url_api\": \"http://localhost:8080/api/v2/tests/92/\",\n \"url_ui\": + \"http://localhost:8080/test/92\",\n \"user\": null\n }\n}\n" + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Origin: + - '*' + Content-Type: + - application/json; charset=utf-8 + Date: + - Fri, 06 Feb 2026 18:56:33 GMT + Transfer-Encoding: + - chunked + status: + code: 200 + message: OK +- request: + body: '{"description": "Event scan_added has occurred.", "title": "Created/Updated + 2 findings for Jira Product (Not Configured): Jira Engagement: ZAP Scan", "user": + null, "url_ui": "http://localhost:8080/test/92", "url_api": "http://localhost:8080/api/v2/tests/92/", + "product_type": {"name": "Some Product Type", "id": 4, "url_ui": "http://localhost:8080/product/type/4", + "url_api": "http://localhost:8080/api/v2/product_types/4/"}, "product": {"name": + "Jira Product (Not Configured)", "id": 4, "url_ui": "http://localhost:8080/product/4", + "url_api": "http://localhost:8080/api/v2/products/4/"}, "engagement": {"name": + "Jira Engagement", "id": 7, "url_ui": "http://localhost:8080/engagement/7", + "url_api": "http://localhost:8080/api/v2/engagements/7/"}, "test": {"title": + null, "id": 92, "url_ui": "http://localhost:8080/test/92", "url_api": "http://localhost:8080/api/v2/tests/92/"}, + "finding_count": 2, "findings": {"new": [{"id": 234, "title": "Zap1: Cookie + Without Secure Flag", "severity": "Low", "url_ui": "http://localhost:8080/finding/234", + "url_api": "http://localhost:8080/api/v2/findings/234/"}, {"id": 235, "title": + "Zap2: Cookie Without Secure Flag", "severity": "Low", "url_ui": "http://localhost:8080/finding/235", + "url_api": "http://localhost:8080/api/v2/findings/235/"}], "reactivated": [], + "mitigated": [], "untouched": []}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Auth: + - Token xxx + Connection: + - keep-alive + Content-Length: + - '1335' + Content-Type: + - application/json + User-Agent: + - DefectDojo-2.55.1 + X-DefectDojo-Event: + - scan_added + X-DefectDojo-Instance: + - http://localhost:8080 + method: POST + uri: http://webhook.endpoint:8080/post + response: + body: + string: "{\n \"args\": {},\n \"headers\": {\n \"Accept\": [\n \"application/json\"\n + \ ],\n \"Accept-Encoding\": [\n \"gzip, deflate\"\n ],\n \"Auth\": + [\n \"Token xxx\"\n ],\n \"Connection\": [\n \"keep-alive\"\n + \ ],\n \"Content-Length\": [\n \"1335\"\n ],\n \"Content-Type\": + [\n \"application/json\"\n ],\n \"Host\": [\n \"webhook.endpoint:8080\"\n + \ ],\n \"User-Agent\": [\n \"DefectDojo-2.55.1\"\n ],\n \"X-Defectdojo-Event\": + [\n \"scan_added\"\n ],\n \"X-Defectdojo-Instance\": [\n \"http://localhost:8080\"\n + \ ]\n },\n \"method\": \"POST\",\n \"origin\": \"172.18.0.6\",\n \"url\": + \"http://webhook.endpoint:8080/post\",\n \"data\": \"{\\\"description\\\": + \\\"Event scan_added has occurred.\\\", \\\"title\\\": \\\"Created/Updated + 2 findings for Jira Product (Not Configured): Jira Engagement: ZAP Scan\\\", + \\\"user\\\": null, \\\"url_ui\\\": \\\"http://localhost:8080/test/92\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/tests/92/\\\", \\\"product_type\\\": + {\\\"name\\\": \\\"Some Product Type\\\", \\\"id\\\": 4, \\\"url_ui\\\": \\\"http://localhost:8080/product/type/4\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/product_types/4/\\\"}, \\\"product\\\": + {\\\"name\\\": \\\"Jira Product (Not Configured)\\\", \\\"id\\\": 4, \\\"url_ui\\\": + \\\"http://localhost:8080/product/4\\\", \\\"url_api\\\": \\\"http://localhost:8080/api/v2/products/4/\\\"}, + \\\"engagement\\\": {\\\"name\\\": \\\"Jira Engagement\\\", \\\"id\\\": 7, + \\\"url_ui\\\": \\\"http://localhost:8080/engagement/7\\\", \\\"url_api\\\": + \\\"http://localhost:8080/api/v2/engagements/7/\\\"}, \\\"test\\\": {\\\"title\\\": + null, \\\"id\\\": 92, \\\"url_ui\\\": \\\"http://localhost:8080/test/92\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/tests/92/\\\"}, \\\"finding_count\\\": + 2, \\\"findings\\\": {\\\"new\\\": [{\\\"id\\\": 234, \\\"title\\\": \\\"Zap1: + Cookie Without Secure Flag\\\", \\\"severity\\\": \\\"Low\\\", \\\"url_ui\\\": + \\\"http://localhost:8080/finding/234\\\", \\\"url_api\\\": \\\"http://localhost:8080/api/v2/findings/234/\\\"}, + {\\\"id\\\": 235, \\\"title\\\": \\\"Zap2: Cookie Without Secure Flag\\\", + \\\"severity\\\": \\\"Low\\\", \\\"url_ui\\\": \\\"http://localhost:8080/finding/235\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/findings/235/\\\"}], \\\"reactivated\\\": + [], \\\"mitigated\\\": [], \\\"untouched\\\": []}}\",\n \"files\": {},\n + \ \"form\": {},\n \"json\": {\n \"description\": \"Event scan_added has + occurred.\",\n \"engagement\": {\n \"id\": 7,\n \"name\": \"Jira + Engagement\",\n \"url_api\": \"http://localhost:8080/api/v2/engagements/7/\",\n + \ \"url_ui\": \"http://localhost:8080/engagement/7\"\n },\n \"finding_count\": + 2,\n \"findings\": {\n \"mitigated\": [],\n \"new\": [\n {\n + \ \"id\": 234,\n \"severity\": \"Low\",\n \"title\": + \"Zap1: Cookie Without Secure Flag\",\n \"url_api\": \"http://localhost:8080/api/v2/findings/234/\",\n + \ \"url_ui\": \"http://localhost:8080/finding/234\"\n },\n + \ {\n \"id\": 235,\n \"severity\": \"Low\",\n \"title\": + \"Zap2: Cookie Without Secure Flag\",\n \"url_api\": \"http://localhost:8080/api/v2/findings/235/\",\n + \ \"url_ui\": \"http://localhost:8080/finding/235\"\n }\n ],\n + \ \"reactivated\": [],\n \"untouched\": []\n },\n \"product\": + {\n \"id\": 4,\n \"name\": \"Jira Product (Not Configured)\",\n + \ \"url_api\": \"http://localhost:8080/api/v2/products/4/\",\n \"url_ui\": + \"http://localhost:8080/product/4\"\n },\n \"product_type\": {\n \"id\": + 4,\n \"name\": \"Some Product Type\",\n \"url_api\": \"http://localhost:8080/api/v2/product_types/4/\",\n + \ \"url_ui\": \"http://localhost:8080/product/type/4\"\n },\n \"test\": + {\n \"id\": 92,\n \"title\": null,\n \"url_api\": \"http://localhost:8080/api/v2/tests/92/\",\n + \ \"url_ui\": \"http://localhost:8080/test/92\"\n },\n \"title\": + \"Created/Updated 2 findings for Jira Product (Not Configured): Jira Engagement: + ZAP Scan\",\n \"url_api\": \"http://localhost:8080/api/v2/tests/92/\",\n + \ \"url_ui\": \"http://localhost:8080/test/92\",\n \"user\": null\n }\n}\n" + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Origin: + - '*' + Content-Type: + - application/json; charset=utf-8 + Date: + - Fri, 06 Feb 2026 18:56:33 GMT + Transfer-Encoding: + - chunked + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/serverInfo + response: + body: + string: '{"baseUrl":"https://defectdojo.atlassian.net","displayUrl":"https://defectdojo.atlassian.net","displayUrlServicedeskHelpCenter":"https://defectdojo.atlassian.net","displayUrlCSMHelpSeeker":"https://defectdojo.atlassian.net","displayUrlConfluence":"https://defectdojo.atlassian.net","version":"1001.0.0-SNAPSHOT","versionNumbers":[1001,0,0],"deploymentType":"Cloud","buildNumber":100290,"buildDate":"2026-02-06T12:38:29.000+0100","serverTime":"2026-02-06T19:56:34.419+0100","scmInfo":"9d700605f271b9e38f3e73c4116a686dae8d11d7","serverTitle":"Jira","defaultLocale":{"locale":"en_US"},"serverTimeZone":"Etc/UTC"}' + headers: + Atl-Request-Id: + - eaf41530-2fbb-4cf5-9188-a1afe96fab9e + Atl-Traceid: + - eaf415302fbb4cf59188a1afe96fab9e + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Fri, 06 Feb 2026 18:56:34 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=66,cdn-upstream-fbl;dur=316,atl-edge;dur=227,atl-edge-internal;dur=28,atl-edge-upstream;dur=200,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN53-P2",cdn-rid;desc="DcK7lv9kbdFbx-YS0608aD-PMPweIiF8KYB6SmwZoHLjfhjENy9dzA==",cdn-downstream-fbl;dur=320 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 0ec4ee481d2d7e134f4c87a9b9fc4e06.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - DcK7lv9kbdFbx-YS0608aD-PMPweIiF8KYB6SmwZoHLjfhjENy9dzA== + X-Amz-Cf-Pop: + - DEN53-P2 + X-Arequestid: + - d8cfca2cbdad1334f8afbc21163ae201 + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '350' + X-Ratelimit-Remaining: + - '349' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/issue/createmeta?projectKeys=TEST&issuetypeNames=Task&expand=projects.issuetypes.fields + response: + body: + string: '{"expand":"projects","projects":[{"expand":"issuetypes","self":"https://defectdojo.atlassian.net/rest/api/2/project/10223","id":"10223","key":"TEST","name":"test","avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425?size=medium"},"issuetypes":[{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10213","id":"10213","description":"Tasks + track small, distinct pieces of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","untranslatedName":"Task","subtask":false,"hierarchyLevel":0,"scope":{"type":"PROJECT","project":{"id":"10223"}},"expand":"fields","fields":{"summary":{"required":true,"schema":{"type":"string","system":"summary"},"name":"Summary","key":"summary","hasDefaultValue":false,"operations":["set"]},"issuetype":{"required":true,"schema":{"type":"issuetype","system":"issuetype"},"name":"Issue + Type","key":"issuetype","hasDefaultValue":false,"operations":[],"allowedValues":[{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10213","id":"10213","description":"Tasks + track small, distinct pieces of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","subtask":false,"avatarId":10318,"entityId":"2e566caf-2038-46a7-94c3-c0d1cc9479bd","hierarchyLevel":0}]},"issuerestriction":{"required":false,"schema":{"type":"issuerestriction","system":"issuerestriction"},"name":"Restrict + to","key":"issuerestriction","hasDefaultValue":false,"operations":["set"],"allowedValues":[]},"parent":{"required":false,"schema":{"type":"issuelink","system":"parent"},"name":"Parent","key":"parent","hasDefaultValue":false,"operations":["set"]},"description":{"required":false,"schema":{"type":"string","system":"description"},"name":"Description","key":"description","hasDefaultValue":false,"operations":["set"]},"project":{"required":true,"schema":{"type":"project","system":"project"},"name":"Project","key":"project","hasDefaultValue":false,"operations":["set"],"allowedValues":[{"self":"https://defectdojo.atlassian.net/rest/api/2/project/10223","id":"10223","key":"TEST","name":"test","projectTypeKey":"software","simplified":true,"avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425?size=medium"}}]},"customfield_10021":{"required":false,"schema":{"type":"array","items":"option","custom":"com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes","customId":10021},"name":"Flagged","key":"customfield_10021","hasDefaultValue":false,"operations":["add","set","remove"],"allowedValues":[{"self":"https://defectdojo.atlassian.net/rest/api/2/customFieldOption/10019","value":"Impediment","id":"10019"}]},"customfield_10000":{"required":false,"schema":{"type":"any","custom":"com.atlassian.jira.plugins.jira-development-integration-plugin:devsummarycf","customId":10000},"name":"Development","key":"customfield_10000","hasDefaultValue":false,"operations":["set"]},"customfield_10001":{"required":false,"schema":{"type":"team","custom":"com.atlassian.jira.plugin.system.customfieldtypes:atlassian-team","customId":10001,"configuration":{"com.atlassian.jira.plugin.system.customfieldtypes:atlassian-team":true}},"name":"Team","key":"customfield_10001","autoCompleteUrl":"https://defectdojo.atlassian.net/gateway/api/v1/recommendations","hasDefaultValue":false,"operations":["set"]},"labels":{"required":false,"schema":{"type":"array","items":"string","system":"labels"},"name":"Labels","key":"labels","autoCompleteUrl":"https://defectdojo.atlassian.net/rest/api/1.0/labels/suggest?query=","hasDefaultValue":false,"operations":["add","set","remove"]},"customfield_10015":{"required":false,"schema":{"type":"date","custom":"com.atlassian.jira.plugin.system.customfieldtypes:datepicker","customId":10015},"name":"Start + date","key":"customfield_10015","hasDefaultValue":false,"operations":["set"]},"customfield_10019":{"required":false,"schema":{"type":"any","custom":"com.pyxis.greenhopper.jira:gh-lexo-rank","customId":10019},"name":"Rank","key":"customfield_10019","hasDefaultValue":false,"operations":["set"]},"attachment":{"required":false,"schema":{"type":"array","items":"attachment","system":"attachment"},"name":"Attachment","key":"attachment","hasDefaultValue":false,"operations":["set","copy"]},"duedate":{"required":false,"schema":{"type":"date","system":"duedate"},"name":"Due + date","key":"duedate","hasDefaultValue":false,"operations":["set"]},"issuelinks":{"required":false,"schema":{"type":"array","items":"issuelinks","system":"issuelinks"},"name":"Linked + Issues","key":"issuelinks","autoCompleteUrl":"https://defectdojo.atlassian.net/rest/api/2/issue/picker?currentProjectId=&showSubTaskParent=true&showSubTasks=true¤tIssueKey=null&query=","hasDefaultValue":false,"operations":["add","copy"]},"assignee":{"required":false,"schema":{"type":"user","system":"assignee"},"name":"Assignee","key":"assignee","autoCompleteUrl":"https://defectdojo.atlassian.net/rest/api/2/user/assignable/search?project=TEST&query=","hasDefaultValue":false,"operations":["set"]}}}]}]}' + headers: + Atl-Request-Id: + - 866e4429-7cda-4b43-affa-921f387286f2 + Atl-Traceid: + - 866e44297cda4b43affa921f387286f2 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Fri, 06 Feb 2026 18:56:35 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=66,cdn-upstream-fbl;dur=506,atl-edge;dur=417,atl-edge-internal;dur=18,atl-edge-upstream;dur=398,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN53-P1",cdn-rid;desc="d-2YhdxUKNfbPOQbSj7_tBqlxUpPRXu00Fdv8Q4b6JIvDWYN0qqUZA==",cdn-downstream-fbl;dur=510 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 8e8ff6f69325d8196c02b63be536a6d0.cloudfront.net (CloudFront) + Warning: + - 'The issue create meta endpoint has been deprecated. (Deprecation start date: + June 03, 2024)' + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - d-2YhdxUKNfbPOQbSj7_tBqlxUpPRXu00Fdv8Q4b6JIvDWYN0qqUZA== + X-Amz-Cf-Pop: + - DEN53-P1 + X-Arequestid: + - 0142da21af5d929023d77baaa8274cca + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '350' + X-Ratelimit-Remaining: + - '349' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: '{"fields": {"project": {"key": "TEST"}, "issuetype": {"name": "Task"}, + "summary": "Zap1: Cookie Without Secure Flag", "description": "\n\n\n\n\n\n\n*Title*: + [Zap1: Cookie Without Secure Flag|http://localhost:8080/finding/234]\n\n*Defect + Dojo link:* http://localhost:8080/finding/234 (234)\n\n*Severity:* Low\n\n\n*Due + Date:* June 6, 2026\n\n\n\n*CWE:* [CWE-614|https://cwe.mitre.org/data/definitions/614.html]\n\n\n\n*CVE:* + Unknown\n\n\n\n\n*Product/Engagement/Test:* [Jira Product (Not Configured)|http://localhost:8080/product/4] + / [Jira Engagement|http://localhost:8080/engagement/7] / [ZAP Scan|http://localhost:8080/test/92]\n\n\n\n\n\n\n\n\n*Systems/Endpoints*:\n||System/Endpoint||Status||\n|https://mainsite.com/dashboard|Active|\n|https://mainsite.com|Active|\n\n\n\n\n\n\n\n\n*Description*:\nA + cookie has been set without the secure flag, which means that the cookie can\nbe + accessed via unencrypted connections.\n\n\n\n\n*Mitigation*:\nWhenever a cookie + contains sensitive information or is a session token, then\nit should always + be passed using an encrypted channel. Ensure that the secure\nflag is set for + cookies containing such sensitive information.\n\n\n\n\n\n*Impact*:\nNone\n\n\n\n\n\n*References*:\nhttp://www.owasp.org/index.php/Testing_for_cookies_attributes_(OWASP-SM-002)\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n", "duedate": "2026-06-06"}}' + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Length: + - '1374' + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: POST + uri: https://defectdojo.atlassian.net/rest/api/2/issue + response: + body: + string: '{"id":"25249","key":"TEST-5","self":"https://defectdojo.atlassian.net/rest/api/2/issue/25249"}' + headers: + Atl-Request-Id: + - 3b99ce5c-7f04-4cc4-a427-2c8b48a9179e + Atl-Traceid: + - 3b99ce5c7f044cc4a4272c8b48a9179e + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Type: + - application/json;charset=UTF-8 + Date: + - Fri, 06 Feb 2026 18:56:36 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=66,cdn-upstream-fbl;dur=959,atl-edge;dur=870,atl-edge-internal;dur=18,atl-edge-upstream;dur=851,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN52-P1",cdn-rid;desc="1o6W8t7rOnqCXVtnLDy0dVr1yLxqDTDu0V6BZLbEWQml5YHu5IHbSA==",cdn-downstream-fbl;dur=964 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 8cd822060c267532e9427046d86093de.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - 1o6W8t7rOnqCXVtnLDy0dVr1yLxqDTDu0V6BZLbEWQml5YHu5IHbSA== + X-Amz-Cf-Pop: + - DEN52-P1 + X-Arequestid: + - deee1a663298233b56c803c6e609ad81 + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '200' + X-Ratelimit-Remaining: + - '199' + X-Xss-Protection: + - 1; mode=block + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/issue/TEST-5 + response: + body: + string: '{"expand":"renderedFields,names,schema,operations,editmeta,changelog,versionedRepresentations","id":"25249","self":"https://defectdojo.atlassian.net/rest/api/2/issue/25249","key":"TEST-5","fields":{"statuscategorychangedate":"2026-02-06T19:56:35.917+0100","issuetype":{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10213","id":"10213","description":"Tasks + track small, distinct pieces of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","subtask":false,"avatarId":10318,"entityId":"2e566caf-2038-46a7-94c3-c0d1cc9479bd","hierarchyLevel":0},"components":[],"timespent":null,"timeoriginalestimate":null,"project":{"self":"https://defectdojo.atlassian.net/rest/api/2/project/10223","id":"10223","key":"TEST","name":"test","projectTypeKey":"software","simplified":true,"avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425?size=medium"}},"description":"\n\n\n\n\n\n\n*Title*: + [Zap1: Cookie Without Secure Flag|http://localhost:8080/finding/234]\n\n*Defect + Dojo link:* http://localhost:8080/finding/234 (234)\n\n*Severity:* Low\n\n\n*Due + Date:* June 6, 2026\n\n\n\n*CWE:* [CWE-614|https://cwe.mitre.org/data/definitions/614.html]\n\n\n\n*CVE:* + Unknown\n\n\n\n\n*Product/Engagement/Test:* [Jira Product (Not Configured)|http://localhost:8080/product/4] + / [Jira Engagement|http://localhost:8080/engagement/7] / [ZAP Scan|http://localhost:8080/test/92]\n\n\n\n\n\n\n\n\n*Systems/Endpoints*:\n||System/Endpoint||Status||\n|https://mainsite.com/dashboard|Active|\n|https://mainsite.com|Active|\n\n\n\n\n\n\n\n\n*Description*:\nA + cookie has been set without the secure flag, which means that the cookie can\nbe + accessed via unencrypted connections.\n\n\n\n\n*Mitigation*:\nWhenever a cookie + contains sensitive information or is a session token, then\nit should always + be passed using an encrypted channel. Ensure that the secure\nflag is set + for cookies containing such sensitive information.\n\n\n\n\n\n*Impact*:\nNone\n\n\n\n\n\n*References*:\nhttp://www.owasp.org/index.php/Testing_for_cookies_attributes_(OWASP-SM-002)\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n","fixVersions":[],"aggregatetimespent":null,"statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"},"resolution":null,"timetracking":{},"customfield_10015":null,"security":null,"attachment":[],"aggregatetimeestimate":null,"resolutiondate":null,"workratio":-1,"summary":"Zap1: + Cookie Without Secure Flag","issuerestriction":{"issuerestrictions":{},"shouldDisplay":true},"watches":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/TEST-5/watchers","watchCount":1,"isWatching":true},"lastViewed":null,"creator":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"subtasks":[],"created":"2026-02-06T19:56:35.604+0100","customfield_10021":null,"reporter":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"aggregateprogress":{"progress":0,"total":0},"priority":{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/3","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/medium_new.svg","name":"Medium","id":"3"},"customfield_10001":null,"labels":[],"environment":null,"customfield_10019":"0|i014sn:","timeestimate":null,"aggregatetimeoriginalestimate":null,"versions":[],"duedate":"2026-06-06","progress":{"progress":0,"total":0},"issuelinks":[],"votes":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/TEST-5/votes","votes":0,"hasVoted":false},"comment":{"comments":[],"self":"https://defectdojo.atlassian.net/rest/api/2/issue/25249/comment","maxResults":0,"total":0,"startAt":0},"assignee":null,"worklog":{"startAt":0,"maxResults":20,"total":0,"worklogs":[]},"updated":"2026-02-06T19:56:35.701+0100","status":{"self":"https://defectdojo.atlassian.net/rest/api/2/status/10271","description":"","iconUrl":"https://defectdojo.atlassian.net/","name":"To + Do","id":"10271","statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"}}}}' + headers: + Atl-Request-Id: + - 4b3b6262-fb8f-41fb-a139-86372ea69106 + Atl-Traceid: + - 4b3b6262fb8f41fba13986372ea69106 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Fri, 06 Feb 2026 18:56:36 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=66,cdn-upstream-fbl;dur=344,atl-edge;dur=255,atl-edge-internal;dur=22,atl-edge-upstream;dur=232,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN53-P2",cdn-rid;desc="vSNclfJuNXrRQTyWQlkH77yeMfyjRjsvuKQZn7xtufDq8UwfiK3rkA==",cdn-downstream-fbl;dur=348 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 185338419e21d148fae1747402a58e8a.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - vSNclfJuNXrRQTyWQlkH77yeMfyjRjsvuKQZn7xtufDq8UwfiK3rkA== + X-Amz-Cf-Pop: + - DEN53-P2 + X-Arequestid: + - 5ba5807bbac6db33250041b3532bfb5a + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '400' + X-Ratelimit-Remaining: + - '399' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/issue/25249 + response: + body: + string: '{"expand":"renderedFields,names,schema,operations,editmeta,changelog,versionedRepresentations","id":"25249","self":"https://defectdojo.atlassian.net/rest/api/2/issue/25249","key":"TEST-5","fields":{"statuscategorychangedate":"2026-02-06T19:56:35.917+0100","issuetype":{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10213","id":"10213","description":"Tasks + track small, distinct pieces of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","subtask":false,"avatarId":10318,"entityId":"2e566caf-2038-46a7-94c3-c0d1cc9479bd","hierarchyLevel":0},"components":[],"timespent":null,"timeoriginalestimate":null,"project":{"self":"https://defectdojo.atlassian.net/rest/api/2/project/10223","id":"10223","key":"TEST","name":"test","projectTypeKey":"software","simplified":true,"avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425?size=medium"}},"description":"\n\n\n\n\n\n\n*Title*: + [Zap1: Cookie Without Secure Flag|http://localhost:8080/finding/234]\n\n*Defect + Dojo link:* http://localhost:8080/finding/234 (234)\n\n*Severity:* Low\n\n\n*Due + Date:* June 6, 2026\n\n\n\n*CWE:* [CWE-614|https://cwe.mitre.org/data/definitions/614.html]\n\n\n\n*CVE:* + Unknown\n\n\n\n\n*Product/Engagement/Test:* [Jira Product (Not Configured)|http://localhost:8080/product/4] + / [Jira Engagement|http://localhost:8080/engagement/7] / [ZAP Scan|http://localhost:8080/test/92]\n\n\n\n\n\n\n\n\n*Systems/Endpoints*:\n||System/Endpoint||Status||\n|https://mainsite.com/dashboard|Active|\n|https://mainsite.com|Active|\n\n\n\n\n\n\n\n\n*Description*:\nA + cookie has been set without the secure flag, which means that the cookie can\nbe + accessed via unencrypted connections.\n\n\n\n\n*Mitigation*:\nWhenever a cookie + contains sensitive information or is a session token, then\nit should always + be passed using an encrypted channel. Ensure that the secure\nflag is set + for cookies containing such sensitive information.\n\n\n\n\n\n*Impact*:\nNone\n\n\n\n\n\n*References*:\nhttp://www.owasp.org/index.php/Testing_for_cookies_attributes_(OWASP-SM-002)\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n","fixVersions":[],"aggregatetimespent":null,"statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"},"resolution":null,"timetracking":{},"customfield_10015":null,"security":null,"attachment":[],"aggregatetimeestimate":null,"resolutiondate":null,"workratio":-1,"summary":"Zap1: + Cookie Without Secure Flag","issuerestriction":{"issuerestrictions":{},"shouldDisplay":true},"watches":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/TEST-5/watchers","watchCount":1,"isWatching":true},"lastViewed":null,"creator":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"subtasks":[],"created":"2026-02-06T19:56:35.604+0100","customfield_10021":null,"reporter":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"aggregateprogress":{"progress":0,"total":0},"priority":{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/3","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/medium_new.svg","name":"Medium","id":"3"},"customfield_10001":null,"labels":[],"environment":null,"customfield_10019":"0|i014sn:","timeestimate":null,"aggregatetimeoriginalestimate":null,"versions":[],"duedate":"2026-06-06","progress":{"progress":0,"total":0},"issuelinks":[],"votes":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/TEST-5/votes","votes":0,"hasVoted":false},"comment":{"comments":[],"self":"https://defectdojo.atlassian.net/rest/api/2/issue/25249/comment","maxResults":0,"total":0,"startAt":0},"assignee":null,"worklog":{"startAt":0,"maxResults":20,"total":0,"worklogs":[]},"updated":"2026-02-06T19:56:35.701+0100","status":{"self":"https://defectdojo.atlassian.net/rest/api/2/status/10271","description":"","iconUrl":"https://defectdojo.atlassian.net/","name":"To + Do","id":"10271","statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"}}}}' + headers: + Atl-Request-Id: + - d3e179d4-3b78-433f-a0bf-06a0156a6348 + Atl-Traceid: + - d3e179d43b78433fa0bf06a0156a6348 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Fri, 06 Feb 2026 18:56:37 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=67,cdn-upstream-fbl;dur=323,atl-edge;dur=233,atl-edge-internal;dur=20,atl-edge-upstream;dur=212,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN52-P1",cdn-rid;desc="urmL8Clzq9WleG44b08On0s8TOTO0bHJwhHTC6DtZFKR0QLy7eze6A==",cdn-downstream-fbl;dur=326 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 9379390e7d447e1d911f7741c8ae2f24.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - urmL8Clzq9WleG44b08On0s8TOTO0bHJwhHTC6DtZFKR0QLy7eze6A== + X-Amz-Cf-Pop: + - DEN52-P1 + X-Arequestid: + - 1917e1f81c8d6b8911f26c8eceee0d18 + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '400' + X-Ratelimit-Remaining: + - '398' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/serverInfo + response: + body: + string: '{"baseUrl":"https://defectdojo.atlassian.net","displayUrl":"https://defectdojo.atlassian.net","displayUrlServicedeskHelpCenter":"https://defectdojo.atlassian.net","displayUrlCSMHelpSeeker":"https://defectdojo.atlassian.net","displayUrlConfluence":"https://defectdojo.atlassian.net","version":"1001.0.0-SNAPSHOT","versionNumbers":[1001,0,0],"deploymentType":"Cloud","buildNumber":100290,"buildDate":"2026-02-06T12:38:29.000+0100","serverTime":"2026-02-06T19:56:37.559+0100","scmInfo":"9d700605f271b9e38f3e73c4116a686dae8d11d7","serverTitle":"Jira","defaultLocale":{"locale":"en_US"},"serverTimeZone":"Etc/UTC"}' + headers: + Atl-Request-Id: + - a5c3fae6-f438-4a8c-9c8d-86ffe3383a71 + Atl-Traceid: + - a5c3fae6f4384a8c9c8d86ffe3383a71 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Fri, 06 Feb 2026 18:56:37 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=66,cdn-upstream-fbl;dur=262,atl-edge;dur=172,atl-edge-internal;dur=19,atl-edge-upstream;dur=152,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN52-P2",cdn-rid;desc="w2ZKx_dhoKtwn6pbAUNV6QNcKNO1QXXZvxMNgVIBlm9Mp2Kn3tdsHA==",cdn-downstream-fbl;dur=265 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 5d351175d5947d478733fbecdab866f6.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - w2ZKx_dhoKtwn6pbAUNV6QNcKNO1QXXZvxMNgVIBlm9Mp2Kn3tdsHA== + X-Amz-Cf-Pop: + - DEN52-P2 + X-Arequestid: + - 07404da80d0d849b93fbdb8ad082af7a + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '350' + X-Ratelimit-Remaining: + - '349' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/issue/createmeta?projectKeys=TEST&issuetypeNames=Task&expand=projects.issuetypes.fields + response: + body: + string: '{"expand":"projects","projects":[{"expand":"issuetypes","self":"https://defectdojo.atlassian.net/rest/api/2/project/10223","id":"10223","key":"TEST","name":"test","avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425?size=medium"},"issuetypes":[{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10213","id":"10213","description":"Tasks + track small, distinct pieces of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","untranslatedName":"Task","subtask":false,"hierarchyLevel":0,"scope":{"type":"PROJECT","project":{"id":"10223"}},"expand":"fields","fields":{"summary":{"required":true,"schema":{"type":"string","system":"summary"},"name":"Summary","key":"summary","hasDefaultValue":false,"operations":["set"]},"issuetype":{"required":true,"schema":{"type":"issuetype","system":"issuetype"},"name":"Issue + Type","key":"issuetype","hasDefaultValue":false,"operations":[],"allowedValues":[{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10213","id":"10213","description":"Tasks + track small, distinct pieces of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","subtask":false,"avatarId":10318,"entityId":"2e566caf-2038-46a7-94c3-c0d1cc9479bd","hierarchyLevel":0}]},"issuerestriction":{"required":false,"schema":{"type":"issuerestriction","system":"issuerestriction"},"name":"Restrict + to","key":"issuerestriction","hasDefaultValue":false,"operations":["set"],"allowedValues":[]},"parent":{"required":false,"schema":{"type":"issuelink","system":"parent"},"name":"Parent","key":"parent","hasDefaultValue":false,"operations":["set"]},"description":{"required":false,"schema":{"type":"string","system":"description"},"name":"Description","key":"description","hasDefaultValue":false,"operations":["set"]},"project":{"required":true,"schema":{"type":"project","system":"project"},"name":"Project","key":"project","hasDefaultValue":false,"operations":["set"],"allowedValues":[{"self":"https://defectdojo.atlassian.net/rest/api/2/project/10223","id":"10223","key":"TEST","name":"test","projectTypeKey":"software","simplified":true,"avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425?size=medium"}}]},"customfield_10021":{"required":false,"schema":{"type":"array","items":"option","custom":"com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes","customId":10021},"name":"Flagged","key":"customfield_10021","hasDefaultValue":false,"operations":["add","set","remove"],"allowedValues":[{"self":"https://defectdojo.atlassian.net/rest/api/2/customFieldOption/10019","value":"Impediment","id":"10019"}]},"customfield_10000":{"required":false,"schema":{"type":"any","custom":"com.atlassian.jira.plugins.jira-development-integration-plugin:devsummarycf","customId":10000},"name":"Development","key":"customfield_10000","hasDefaultValue":false,"operations":["set"]},"customfield_10001":{"required":false,"schema":{"type":"team","custom":"com.atlassian.jira.plugin.system.customfieldtypes:atlassian-team","customId":10001,"configuration":{"com.atlassian.jira.plugin.system.customfieldtypes:atlassian-team":true}},"name":"Team","key":"customfield_10001","autoCompleteUrl":"https://defectdojo.atlassian.net/gateway/api/v1/recommendations","hasDefaultValue":false,"operations":["set"]},"labels":{"required":false,"schema":{"type":"array","items":"string","system":"labels"},"name":"Labels","key":"labels","autoCompleteUrl":"https://defectdojo.atlassian.net/rest/api/1.0/labels/suggest?query=","hasDefaultValue":false,"operations":["add","set","remove"]},"customfield_10015":{"required":false,"schema":{"type":"date","custom":"com.atlassian.jira.plugin.system.customfieldtypes:datepicker","customId":10015},"name":"Start + date","key":"customfield_10015","hasDefaultValue":false,"operations":["set"]},"customfield_10019":{"required":false,"schema":{"type":"any","custom":"com.pyxis.greenhopper.jira:gh-lexo-rank","customId":10019},"name":"Rank","key":"customfield_10019","hasDefaultValue":false,"operations":["set"]},"attachment":{"required":false,"schema":{"type":"array","items":"attachment","system":"attachment"},"name":"Attachment","key":"attachment","hasDefaultValue":false,"operations":["set","copy"]},"duedate":{"required":false,"schema":{"type":"date","system":"duedate"},"name":"Due + date","key":"duedate","hasDefaultValue":false,"operations":["set"]},"issuelinks":{"required":false,"schema":{"type":"array","items":"issuelinks","system":"issuelinks"},"name":"Linked + Issues","key":"issuelinks","autoCompleteUrl":"https://defectdojo.atlassian.net/rest/api/2/issue/picker?currentProjectId=&showSubTaskParent=true&showSubTasks=true¤tIssueKey=null&query=","hasDefaultValue":false,"operations":["add","copy"]},"assignee":{"required":false,"schema":{"type":"user","system":"assignee"},"name":"Assignee","key":"assignee","autoCompleteUrl":"https://defectdojo.atlassian.net/rest/api/2/user/assignable/search?project=TEST&query=","hasDefaultValue":false,"operations":["set"]}}}]}]}' + headers: + Atl-Request-Id: + - f175eb24-132c-41c6-b6a2-7b18b6d3ca48 + Atl-Traceid: + - f175eb24132c41c6b6a27b18b6d3ca48 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Fri, 06 Feb 2026 18:56:38 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=65,cdn-upstream-fbl;dur=442,atl-edge;dur=355,atl-edge-internal;dur=20,atl-edge-upstream;dur=334,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN53-P3",cdn-rid;desc="0q07o4SmJFiXXwpko1eGwyEwhTeZEl-zEYKLoL3FK3UhnAPfZ2sgyQ==",cdn-downstream-fbl;dur=446 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 51185e40453f61916e037fc6db50766c.cloudfront.net (CloudFront) + Warning: + - 'The issue create meta endpoint has been deprecated. (Deprecation start date: + June 03, 2024)' + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - 0q07o4SmJFiXXwpko1eGwyEwhTeZEl-zEYKLoL3FK3UhnAPfZ2sgyQ== + X-Amz-Cf-Pop: + - DEN53-P3 + X-Arequestid: + - 881dd7f1e96b2ae4b3677b4a323e82b7 + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '350' + X-Ratelimit-Remaining: + - '349' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: '{"fields": {"project": {"key": "TEST"}, "issuetype": {"name": "Task"}, + "summary": "Zap2: Cookie Without Secure Flag", "description": "\n\n\n\n\n\n\n*Title*: + [Zap2: Cookie Without Secure Flag|http://localhost:8080/finding/235]\n\n*Defect + Dojo link:* http://localhost:8080/finding/235 (235)\n\n*Severity:* Low\n\n\n*Due + Date:* June 6, 2026\n\n\n\n*CWE:* [CWE-614|https://cwe.mitre.org/data/definitions/614.html]\n\n\n\n*CVE:* + Unknown\n\n\n\n\n*Product/Engagement/Test:* [Jira Product (Not Configured)|http://localhost:8080/product/4] + / [Jira Engagement|http://localhost:8080/engagement/7] / [ZAP Scan|http://localhost:8080/test/92]\n\n\n\n\n\n\n\n\n*Systems/Endpoints*:\n||System/Endpoint||Status||\n|https://mainsite.com/dashboard|Active|\n|https://mainsite.com|Active|\n\n\n\n\n\n\n\n\n*Description*:\nA + cookie has been set without the secure flag, which means that the cookie can\nbe + accessed via unencrypted connections.\n\n\n\n\n*Mitigation*:\nWhenever a cookie + contains sensitive information or is a session token, then\nit should always + be passed using an encrypted channel. Ensure that the secure\nflag is set for + cookies containing such sensitive information.\n\n\n\n\n\n*Impact*:\nNone\n\n\n\n\n\n*References*:\nhttp://www.owasp.org/index.php/Testing_for_cookies_attributes_(OWASP-SM-002)\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n", "duedate": "2026-06-06"}}' + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Length: + - '1374' + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: POST + uri: https://defectdojo.atlassian.net/rest/api/2/issue + response: + body: + string: '{"id":"25250","key":"TEST-6","self":"https://defectdojo.atlassian.net/rest/api/2/issue/25250"}' + headers: + Atl-Request-Id: + - d6293ddf-9c97-451c-9f9e-5562470a0508 + Atl-Traceid: + - d6293ddf9c97451c9f9e5562470a0508 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Type: + - application/json;charset=UTF-8 + Date: + - Fri, 06 Feb 2026 18:56:39 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=0,cdn-upstream-fbl;dur=854,atl-edge;dur=831,atl-edge-internal;dur=18,atl-edge-upstream;dur=812,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN52-P2",cdn-rid;desc="vwODIcGSGtqoAGo-7mBqN9AxTj16K5Y36b77Up4iB62rZRprbToD5w==",cdn-downstream-fbl;dur=857 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 f6992241dd15e99fe1ce21d807856f16.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - vwODIcGSGtqoAGo-7mBqN9AxTj16K5Y36b77Up4iB62rZRprbToD5w== + X-Amz-Cf-Pop: + - DEN52-P2 + X-Arequestid: + - 8f91758f6fe1f52502f4a4bf055f14e9 + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '200' + X-Ratelimit-Remaining: + - '199' + X-Xss-Protection: + - 1; mode=block + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/issue/TEST-6 + response: + body: + string: '{"expand":"renderedFields,names,schema,operations,editmeta,changelog,versionedRepresentations","id":"25250","self":"https://defectdojo.atlassian.net/rest/api/2/issue/25250","key":"TEST-6","fields":{"statuscategorychangedate":"2026-02-06T19:56:38.957+0100","issuetype":{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10213","id":"10213","description":"Tasks + track small, distinct pieces of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","subtask":false,"avatarId":10318,"entityId":"2e566caf-2038-46a7-94c3-c0d1cc9479bd","hierarchyLevel":0},"components":[],"timespent":null,"timeoriginalestimate":null,"project":{"self":"https://defectdojo.atlassian.net/rest/api/2/project/10223","id":"10223","key":"TEST","name":"test","projectTypeKey":"software","simplified":true,"avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425?size=medium"}},"description":"\n\n\n\n\n\n\n*Title*: + [Zap2: Cookie Without Secure Flag|http://localhost:8080/finding/235]\n\n*Defect + Dojo link:* http://localhost:8080/finding/235 (235)\n\n*Severity:* Low\n\n\n*Due + Date:* June 6, 2026\n\n\n\n*CWE:* [CWE-614|https://cwe.mitre.org/data/definitions/614.html]\n\n\n\n*CVE:* + Unknown\n\n\n\n\n*Product/Engagement/Test:* [Jira Product (Not Configured)|http://localhost:8080/product/4] + / [Jira Engagement|http://localhost:8080/engagement/7] / [ZAP Scan|http://localhost:8080/test/92]\n\n\n\n\n\n\n\n\n*Systems/Endpoints*:\n||System/Endpoint||Status||\n|https://mainsite.com/dashboard|Active|\n|https://mainsite.com|Active|\n\n\n\n\n\n\n\n\n*Description*:\nA + cookie has been set without the secure flag, which means that the cookie can\nbe + accessed via unencrypted connections.\n\n\n\n\n*Mitigation*:\nWhenever a cookie + contains sensitive information or is a session token, then\nit should always + be passed using an encrypted channel. Ensure that the secure\nflag is set + for cookies containing such sensitive information.\n\n\n\n\n\n*Impact*:\nNone\n\n\n\n\n\n*References*:\nhttp://www.owasp.org/index.php/Testing_for_cookies_attributes_(OWASP-SM-002)\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n","fixVersions":[],"aggregatetimespent":null,"statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"},"resolution":null,"timetracking":{},"customfield_10015":null,"security":null,"attachment":[],"aggregatetimeestimate":null,"resolutiondate":null,"workratio":-1,"summary":"Zap2: + Cookie Without Secure Flag","issuerestriction":{"issuerestrictions":{},"shouldDisplay":true},"watches":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/TEST-6/watchers","watchCount":1,"isWatching":true},"lastViewed":null,"creator":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"subtasks":[],"created":"2026-02-06T19:56:38.687+0100","customfield_10021":null,"reporter":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"aggregateprogress":{"progress":0,"total":0},"priority":{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/3","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/medium_new.svg","name":"Medium","id":"3"},"customfield_10001":null,"labels":[],"environment":null,"customfield_10019":"0|i014sv:","timeestimate":null,"aggregatetimeoriginalestimate":null,"versions":[],"duedate":"2026-06-06","progress":{"progress":0,"total":0},"issuelinks":[],"votes":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/TEST-6/votes","votes":0,"hasVoted":false},"comment":{"comments":[],"self":"https://defectdojo.atlassian.net/rest/api/2/issue/25250/comment","maxResults":0,"total":0,"startAt":0},"assignee":null,"worklog":{"startAt":0,"maxResults":20,"total":0,"worklogs":[]},"updated":"2026-02-06T19:56:38.788+0100","status":{"self":"https://defectdojo.atlassian.net/rest/api/2/status/10271","description":"","iconUrl":"https://defectdojo.atlassian.net/","name":"To + Do","id":"10271","statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"}}}}' + headers: + Atl-Request-Id: + - 761426b0-aeb3-473d-b203-f04f62e8f6b6 + Atl-Traceid: + - 761426b0aeb3473db203f04f62e8f6b6 + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Fri, 06 Feb 2026 18:56:39 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=0,cdn-upstream-fbl;dur=285,atl-edge;dur=262,atl-edge-internal;dur=18,atl-edge-upstream;dur=244,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN53-P3",cdn-rid;desc="xPwlZ7ovHDb2Izkz1II-cGALQPJdb4u4nqakSgxuWZDGOGqxUv9sdg==",cdn-downstream-fbl;dur=289 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 eff74a7ae5e8f882896afa9f99bfa6e6.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - xPwlZ7ovHDb2Izkz1II-cGALQPJdb4u4nqakSgxuWZDGOGqxUv9sdg== + X-Amz-Cf-Pop: + - DEN53-P3 + X-Arequestid: + - e483dbac94ad3bf4cdafb6536660b16f + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '400' + X-Ratelimit-Remaining: + - '399' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json,*/*;q=0.9 + Accept-Encoding: + - gzip, deflate + Cache-Control: + - no-cache + Connection: + - keep-alive + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.5 + method: GET + uri: https://defectdojo.atlassian.net/rest/api/2/issue/25250 + response: + body: + string: '{"expand":"renderedFields,names,schema,operations,editmeta,changelog,versionedRepresentations","id":"25250","self":"https://defectdojo.atlassian.net/rest/api/2/issue/25250","key":"TEST-6","fields":{"statuscategorychangedate":"2026-02-06T19:56:38.957+0100","issuetype":{"self":"https://defectdojo.atlassian.net/rest/api/2/issuetype/10213","id":"10213","description":"Tasks + track small, distinct pieces of work.","iconUrl":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium","name":"Task","subtask":false,"avatarId":10318,"entityId":"2e566caf-2038-46a7-94c3-c0d1cc9479bd","hierarchyLevel":0},"components":[],"timespent":null,"timeoriginalestimate":null,"project":{"self":"https://defectdojo.atlassian.net/rest/api/2/project/10223","id":"10223","key":"TEST","name":"test","projectTypeKey":"software","simplified":true,"avatarUrls":{"48x48":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425","24x24":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425?size=small","16x16":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425?size=xsmall","32x32":"https://defectdojo.atlassian.net/rest/api/2/universal_avatar/view/type/project/avatar/10425?size=medium"}},"description":"\n\n\n\n\n\n\n*Title*: + [Zap2: Cookie Without Secure Flag|http://localhost:8080/finding/235]\n\n*Defect + Dojo link:* http://localhost:8080/finding/235 (235)\n\n*Severity:* Low\n\n\n*Due + Date:* June 6, 2026\n\n\n\n*CWE:* [CWE-614|https://cwe.mitre.org/data/definitions/614.html]\n\n\n\n*CVE:* + Unknown\n\n\n\n\n*Product/Engagement/Test:* [Jira Product (Not Configured)|http://localhost:8080/product/4] + / [Jira Engagement|http://localhost:8080/engagement/7] / [ZAP Scan|http://localhost:8080/test/92]\n\n\n\n\n\n\n\n\n*Systems/Endpoints*:\n||System/Endpoint||Status||\n|https://mainsite.com/dashboard|Active|\n|https://mainsite.com|Active|\n\n\n\n\n\n\n\n\n*Description*:\nA + cookie has been set without the secure flag, which means that the cookie can\nbe + accessed via unencrypted connections.\n\n\n\n\n*Mitigation*:\nWhenever a cookie + contains sensitive information or is a session token, then\nit should always + be passed using an encrypted channel. Ensure that the secure\nflag is set + for cookies containing such sensitive information.\n\n\n\n\n\n*Impact*:\nNone\n\n\n\n\n\n*References*:\nhttp://www.owasp.org/index.php/Testing_for_cookies_attributes_(OWASP-SM-002)\n\n\n\n\n\n\n\n*Reporter:* + [(admin) ()|mailto:]\n","fixVersions":[],"aggregatetimespent":null,"statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"},"resolution":null,"timetracking":{},"customfield_10015":null,"security":null,"attachment":[],"aggregatetimeestimate":null,"resolutiondate":null,"workratio":-1,"summary":"Zap2: + Cookie Without Secure Flag","issuerestriction":{"issuerestrictions":{},"shouldDisplay":true},"watches":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/TEST-6/watchers","watchCount":1,"isWatching":true},"lastViewed":null,"creator":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"subtasks":[],"created":"2026-02-06T19:56:38.687+0100","customfield_10021":null,"reporter":{"self":"https://defectdojo.atlassian.net/rest/api/2/user?accountId=5d3878b170e3c90c952f91f6","accountId":"5d3878b170e3c90c952f91f6","emailAddress":"cody@defectdojo.com","avatarUrls":{"48x48":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","24x24":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","16x16":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png","32x32":"https://secure.gravatar.com/avatar/4e018ad14467c87539bcb7052ffaef8c?d=https%3A%2F%2Favatar-management--avatars.us-west-2.prod.public.atl-paas.net%2Finitials%2FCM-0.png"},"displayName":"Cody + Maffucci","active":true,"timeZone":"Europe/Zurich","accountType":"atlassian"},"aggregateprogress":{"progress":0,"total":0},"priority":{"self":"https://defectdojo.atlassian.net/rest/api/2/priority/3","iconUrl":"https://defectdojo.atlassian.net/images/icons/priorities/medium_new.svg","name":"Medium","id":"3"},"customfield_10001":null,"labels":[],"environment":null,"customfield_10019":"0|i014sv:","timeestimate":null,"aggregatetimeoriginalestimate":null,"versions":[],"duedate":"2026-06-06","progress":{"progress":0,"total":0},"issuelinks":[],"votes":{"self":"https://defectdojo.atlassian.net/rest/api/2/issue/TEST-6/votes","votes":0,"hasVoted":false},"comment":{"comments":[],"self":"https://defectdojo.atlassian.net/rest/api/2/issue/25250/comment","maxResults":0,"total":0,"startAt":0},"assignee":null,"worklog":{"startAt":0,"maxResults":20,"total":0,"worklogs":[]},"updated":"2026-02-06T19:56:38.788+0100","status":{"self":"https://defectdojo.atlassian.net/rest/api/2/status/10271","description":"","iconUrl":"https://defectdojo.atlassian.net/","name":"To + Do","id":"10271","statusCategory":{"self":"https://defectdojo.atlassian.net/rest/api/2/statuscategory/2","id":2,"key":"new","colorName":"blue-gray","name":"To + Do"}}}}' + headers: + Atl-Request-Id: + - 29e51879-55ba-4251-95bc-715e44aa85fc + Atl-Traceid: + - 29e5187955ba425195bc715e44aa85fc + Cache-Control: + - no-cache, no-store, no-transform + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json;charset=UTF-8 + Date: + - Fri, 06 Feb 2026 18:56:39 GMT + Nel: + - '{"failure_fraction": 0.01, "include_subdomains": true, "max_age": 600, "report_to": + "endpoint-1"}' + Report-To: + - '{"endpoints": [{"url": "https://dz8aopenkvv6s.cloudfront.net"}], "group": + "endpoint-1", "include_subdomains": true, "max_age": 600}' + Server: + - AtlassianEdge + Server-Timing: + - cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=66,cdn-upstream-fbl;dur=321,atl-edge;dur=231,atl-edge-internal;dur=19,atl-edge-upstream;dur=212,atl-edge-pop;desc="aws-us-west-2",cdn-cache-miss,cdn-pop;desc="DEN52-P3",cdn-rid;desc="3tcYOnczrXvYOAurOgLKGp7ka-_plhMBaw-LTlbkDkIPp832Ae7yOQ==",cdn-downstream-fbl;dur=325 + Strict-Transport-Security: + - max-age=63072000; includeSubDomains; preload + Timing-Allow-Origin: + - '*' + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + Via: + - 1.1 fdb71c154448c5637ac452d623bb2ad6.cloudfront.net (CloudFront) + X-Aaccountid: + - 5d3878b170e3c90c952f91f6 + X-Amz-Cf-Id: + - 3tcYOnczrXvYOAurOgLKGp7ka-_plhMBaw-LTlbkDkIPp832Ae7yOQ== + X-Amz-Cf-Pop: + - DEN52-P3 + X-Arequestid: + - f70e0ddff06c9a3a7e3aef1de0a4c9eb + X-Cache: + - Miss from cloudfront + X-Content-Type-Options: + - nosniff + X-Ratelimit-Limit: + - '400' + X-Ratelimit-Remaining: + - '398' + X-Xss-Protection: + - 1; mode=block + status: + code: 200 + message: OK +- request: + body: '{"description": "Event scan_added_empty has occurred.", "title": "Created/Updated + 0 findings for Jira Product (Not Configured): Jira Engagement: ZAP Scan", "user": + null, "url_ui": "http://localhost:8080/test/92", "url_api": "http://localhost:8080/api/v2/tests/92/", + "product_type": {"name": "Some Product Type", "id": 4, "url_ui": "http://localhost:8080/product/type/4", + "url_api": "http://localhost:8080/api/v2/product_types/4/"}, "product": {"name": + "Jira Product (Not Configured)", "id": 4, "url_ui": "http://localhost:8080/product/4", + "url_api": "http://localhost:8080/api/v2/products/4/"}, "engagement": {"name": + "Jira Engagement", "id": 7, "url_ui": "http://localhost:8080/engagement/7", + "url_api": "http://localhost:8080/api/v2/engagements/7/"}, "test": {"title": + null, "id": 92, "url_ui": "http://localhost:8080/test/92", "url_api": "http://localhost:8080/api/v2/tests/92/"}, + "finding_count": 0, "findings": {"new": [], "reactivated": [], "mitigated": + [], "untouched": [{"id": 234, "title": "Zap1: Cookie Without Secure Flag", "severity": + "Low", "url_ui": "http://localhost:8080/finding/234", "url_api": "http://localhost:8080/api/v2/findings/234/"}, + {"id": 235, "title": "Zap2: Cookie Without Secure Flag", "severity": "Low", + "url_ui": "http://localhost:8080/finding/235", "url_api": "http://localhost:8080/api/v2/findings/235/"}]}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + Auth: + - Token xxx + Connection: + - keep-alive + Content-Length: + - '1341' + Content-Type: + - application/json + User-Agent: + - DefectDojo-2.55.1 + X-DefectDojo-Event: + - scan_added_empty + X-DefectDojo-Instance: + - http://localhost:8080 + method: POST + uri: http://webhook.endpoint:8080/post + response: + body: + string: "{\n \"args\": {},\n \"headers\": {\n \"Accept\": [\n \"application/json\"\n + \ ],\n \"Accept-Encoding\": [\n \"gzip, deflate\"\n ],\n \"Auth\": + [\n \"Token xxx\"\n ],\n \"Connection\": [\n \"keep-alive\"\n + \ ],\n \"Content-Length\": [\n \"1341\"\n ],\n \"Content-Type\": + [\n \"application/json\"\n ],\n \"Host\": [\n \"webhook.endpoint:8080\"\n + \ ],\n \"User-Agent\": [\n \"DefectDojo-2.55.1\"\n ],\n \"X-Defectdojo-Event\": + [\n \"scan_added_empty\"\n ],\n \"X-Defectdojo-Instance\": [\n + \ \"http://localhost:8080\"\n ]\n },\n \"method\": \"POST\",\n \"origin\": + \"172.18.0.6\",\n \"url\": \"http://webhook.endpoint:8080/post\",\n \"data\": + \"{\\\"description\\\": \\\"Event scan_added_empty has occurred.\\\", \\\"title\\\": + \\\"Created/Updated 0 findings for Jira Product (Not Configured): Jira Engagement: + ZAP Scan\\\", \\\"user\\\": null, \\\"url_ui\\\": \\\"http://localhost:8080/test/92\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/tests/92/\\\", \\\"product_type\\\": + {\\\"name\\\": \\\"Some Product Type\\\", \\\"id\\\": 4, \\\"url_ui\\\": \\\"http://localhost:8080/product/type/4\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/product_types/4/\\\"}, \\\"product\\\": + {\\\"name\\\": \\\"Jira Product (Not Configured)\\\", \\\"id\\\": 4, \\\"url_ui\\\": + \\\"http://localhost:8080/product/4\\\", \\\"url_api\\\": \\\"http://localhost:8080/api/v2/products/4/\\\"}, + \\\"engagement\\\": {\\\"name\\\": \\\"Jira Engagement\\\", \\\"id\\\": 7, + \\\"url_ui\\\": \\\"http://localhost:8080/engagement/7\\\", \\\"url_api\\\": + \\\"http://localhost:8080/api/v2/engagements/7/\\\"}, \\\"test\\\": {\\\"title\\\": + null, \\\"id\\\": 92, \\\"url_ui\\\": \\\"http://localhost:8080/test/92\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/tests/92/\\\"}, \\\"finding_count\\\": + 0, \\\"findings\\\": {\\\"new\\\": [], \\\"reactivated\\\": [], \\\"mitigated\\\": + [], \\\"untouched\\\": [{\\\"id\\\": 234, \\\"title\\\": \\\"Zap1: Cookie + Without Secure Flag\\\", \\\"severity\\\": \\\"Low\\\", \\\"url_ui\\\": \\\"http://localhost:8080/finding/234\\\", + \\\"url_api\\\": \\\"http://localhost:8080/api/v2/findings/234/\\\"}, {\\\"id\\\": + 235, \\\"title\\\": \\\"Zap2: Cookie Without Secure Flag\\\", \\\"severity\\\": + \\\"Low\\\", \\\"url_ui\\\": \\\"http://localhost:8080/finding/235\\\", \\\"url_api\\\": + \\\"http://localhost:8080/api/v2/findings/235/\\\"}]}}\",\n \"files\": {},\n + \ \"form\": {},\n \"json\": {\n \"description\": \"Event scan_added_empty + has occurred.\",\n \"engagement\": {\n \"id\": 7,\n \"name\": + \"Jira Engagement\",\n \"url_api\": \"http://localhost:8080/api/v2/engagements/7/\",\n + \ \"url_ui\": \"http://localhost:8080/engagement/7\"\n },\n \"finding_count\": + 0,\n \"findings\": {\n \"mitigated\": [],\n \"new\": [],\n \"reactivated\": + [],\n \"untouched\": [\n {\n \"id\": 234,\n \"severity\": + \"Low\",\n \"title\": \"Zap1: Cookie Without Secure Flag\",\n \"url_api\": + \"http://localhost:8080/api/v2/findings/234/\",\n \"url_ui\": \"http://localhost:8080/finding/234\"\n + \ },\n {\n \"id\": 235,\n \"severity\": \"Low\",\n + \ \"title\": \"Zap2: Cookie Without Secure Flag\",\n \"url_api\": + \"http://localhost:8080/api/v2/findings/235/\",\n \"url_ui\": \"http://localhost:8080/finding/235\"\n + \ }\n ]\n },\n \"product\": {\n \"id\": 4,\n \"name\": + \"Jira Product (Not Configured)\",\n \"url_api\": \"http://localhost:8080/api/v2/products/4/\",\n + \ \"url_ui\": \"http://localhost:8080/product/4\"\n },\n \"product_type\": + {\n \"id\": 4,\n \"name\": \"Some Product Type\",\n \"url_api\": + \"http://localhost:8080/api/v2/product_types/4/\",\n \"url_ui\": \"http://localhost:8080/product/type/4\"\n + \ },\n \"test\": {\n \"id\": 92,\n \"title\": null,\n \"url_api\": + \"http://localhost:8080/api/v2/tests/92/\",\n \"url_ui\": \"http://localhost:8080/test/92\"\n + \ },\n \"title\": \"Created/Updated 0 findings for Jira Product (Not + Configured): Jira Engagement: ZAP Scan\",\n \"url_api\": \"http://localhost:8080/api/v2/tests/92/\",\n + \ \"url_ui\": \"http://localhost:8080/test/92\",\n \"user\": null\n }\n}\n" + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Allow-Origin: + - '*' + Content-Type: + - application/json; charset=utf-8 + Date: + - Fri, 06 Feb 2026 18:56:39 GMT + Transfer-Encoding: + - chunked + status: + code: 200 + message: OK +version: 1