├── .dockerignore ├── .flake8 ├── .gitignore ├── .isort.cfg ├── .lgtm.yml ├── .pre-commit-config.yaml ├── .prettierignore ├── .yamllint ├── Acknowledgments.txt ├── ContributionInstructions.txt ├── Contributors.txt ├── LICENSE.txt ├── Makefile ├── README.md ├── assets ├── CIS_CSC_v8.csv ├── Penetration Testing Findings Repository 1.0.xlsx ├── acronyms.csv ├── known_exploited_vulnerabilities.json ├── mfa-types.csv ├── mfa-vendors.csv ├── mitreATTaCK.csv ├── narrative-block-steps.csv ├── narrative-blocks.csv ├── narrative-tools.csv └── security-solutions.csv ├── docker-compose.prod.yml ├── docker-compose.yml ├── docker ├── __init__.py ├── dev │ ├── Dockerfile.db │ ├── Dockerfile.web │ ├── env.txt │ ├── requirements.txt │ └── wait-for-it.sh ├── docker_api.py └── prod │ ├── Dockerfile.db │ ├── Dockerfile.web │ ├── env.txt │ ├── nginx │ ├── Dockerfile.nginx │ └── conf │ │ └── nginx.conf │ └── requirements.txt ├── help_templates ├── domains.csv ├── emails.csv └── payloads.csv ├── manage.py ├── node ├── .npmrc ├── dependencies │ ├── components-vue3 │ │ ├── README.md │ │ ├── dist │ │ │ ├── index.mjs │ │ │ ├── index.umd.js │ │ │ ├── style.css │ │ │ └── types │ │ │ │ ├── components │ │ │ │ ├── Autosuggest │ │ │ │ │ ├── Autosuggest.vue.d.ts │ │ │ │ │ └── index.d.ts │ │ │ │ ├── Badge │ │ │ │ │ ├── Badge.vue.d.ts │ │ │ │ │ └── index.d.ts │ │ │ │ ├── Button │ │ │ │ │ ├── Button.vue.d.ts │ │ │ │ │ └── index.d.ts │ │ │ │ ├── Calendar │ │ │ │ │ ├── Calendar.vue.d.ts │ │ │ │ │ └── index.d.ts │ │ │ │ ├── CharacterCounter │ │ │ │ │ ├── CharacterCounter.vue.d.ts │ │ │ │ │ └── index.d.ts │ │ │ │ ├── CheckboxGroup │ │ │ │ │ ├── CheckboxGroup.vue.d.ts │ │ │ │ │ └── index.d.ts │ │ │ │ ├── ClientOnly │ │ │ │ │ ├── ClientOnly.vue.d.ts │ │ │ │ │ └── index.d.ts │ │ │ │ ├── Datapoint │ │ │ │ │ ├── Datapoint.vue.d.ts │ │ │ │ │ └── index.d.ts │ │ │ │ ├── Datepicker │ │ │ │ │ ├── Datepicker.vue.d.ts │ │ │ │ │ └── index.d.ts │ │ │ │ ├── Dropdown │ │ │ │ │ ├── Dropdown.vue.d.ts │ │ │ │ │ └── index.d.ts │ │ │ │ ├── DropdownDivider │ │ │ │ │ ├── DropdownDivider.vue.d.ts │ │ │ │ │ └── index.d.ts │ │ │ │ ├── DropdownHeader │ │ │ │ │ ├── DropdownHeader.vue.d.ts │ │ │ │ │ └── index.d.ts │ │ │ │ ├── DropdownItem │ │ │ │ │ ├── DropdownItem.vue.d.ts │ │ │ │ │ └── index.d.ts │ │ │ │ ├── FileUploader │ │ │ │ │ ├── FileUploader.vue.d.ts │ │ │ │ │ └── index.d.ts │ │ │ │ ├── FilterByDropdown │ │ │ │ │ ├── FilterByDropdown.vue.d.ts │ │ │ │ │ └── index.d.ts │ │ │ │ ├── FloatingUi │ │ │ │ │ ├── FloatingUi.vue.d.ts │ │ │ │ │ └── index.d.ts │ │ │ │ ├── Input │ │ │ │ │ ├── Input.vue.d.ts │ │ │ │ │ └── index.d.ts │ │ │ │ ├── LayoutApp │ │ │ │ │ ├── LayoutApp.vue.d.ts │ │ │ │ │ └── index.d.ts │ │ │ │ ├── LayoutSeiExternal │ │ │ │ │ ├── LayoutSeiExternal.vue.d.ts │ │ │ │ │ └── index.d.ts │ │ │ │ ├── LayoutSeiExternalFooter │ │ │ │ │ ├── LayoutSeiExternalFooter.vue.d.ts │ │ │ │ │ └── index.d.ts │ │ │ │ ├── LayoutSeiExternalHeader │ │ │ │ │ ├── LayoutSeiExternalHeader.vue.d.ts │ │ │ │ │ └── index.d.ts │ │ │ │ ├── LayoutSeiExternalHeaderContent │ │ │ │ │ ├── LayoutSeiExternalHeaderContent.vue.d.ts │ │ │ │ │ └── index.d.ts │ │ │ │ ├── LayoutSeiExternalMasthead │ │ │ │ │ ├── LayoutSeiExternalMasthead.vue.d.ts │ │ │ │ │ └── index.d.ts │ │ │ │ ├── LayoutSeiExternalNav │ │ │ │ │ ├── LayoutSeiExternalNav.vue.d.ts │ │ │ │ │ └── index.d.ts │ │ │ │ ├── LayoutSeiExternalWordmark │ │ │ │ │ ├── LayoutSeiExternalWordmark.vue.d.ts │ │ │ │ │ └── index.d.ts │ │ │ │ ├── LayoutStacked │ │ │ │ │ ├── LayoutStacked.vue.d.ts │ │ │ │ │ └── index.d.ts │ │ │ │ ├── Link │ │ │ │ │ ├── Link.vue.d.ts │ │ │ │ │ └── index.d.ts │ │ │ │ ├── LoadingBox │ │ │ │ │ ├── LoadingBox.vue.d.ts │ │ │ │ │ └── index.d.ts │ │ │ │ ├── LoadingSpinner │ │ │ │ │ ├── LoadingSpinner.vue.d.ts │ │ │ │ │ └── index.d.ts │ │ │ │ ├── Modal │ │ │ │ │ ├── Modal.vue.d.ts │ │ │ │ │ └── index.d.ts │ │ │ │ ├── Multiselect │ │ │ │ │ ├── Multiselect.vue.d.ts │ │ │ │ │ └── index.d.ts │ │ │ │ ├── Paginator │ │ │ │ │ ├── Paginator.vue.d.ts │ │ │ │ │ └── index.d.ts │ │ │ │ ├── Popover │ │ │ │ │ ├── Popover.vue.d.ts │ │ │ │ │ └── index.d.ts │ │ │ │ ├── RadioGroup │ │ │ │ │ ├── RadioGroup.vue.d.ts │ │ │ │ │ └── index.d.ts │ │ │ │ ├── ScrollArea │ │ │ │ │ ├── ScrollArea.vue.d.ts │ │ │ │ │ └── index.d.ts │ │ │ │ ├── Scrollspy │ │ │ │ │ ├── Scrollspy.vue.d.ts │ │ │ │ │ └── index.d.ts │ │ │ │ ├── SearchBox │ │ │ │ │ ├── SearchBox.vue.d.ts │ │ │ │ │ └── index.d.ts │ │ │ │ ├── Section │ │ │ │ │ ├── Section.vue.d.ts │ │ │ │ │ └── index.d.ts │ │ │ │ ├── Select │ │ │ │ │ ├── Select.vue.d.ts │ │ │ │ │ └── index.d.ts │ │ │ │ ├── Table │ │ │ │ │ ├── Table.vue.d.ts │ │ │ │ │ └── index.d.ts │ │ │ │ ├── Tabs │ │ │ │ │ ├── Tabs.vue.d.ts │ │ │ │ │ └── index.d.ts │ │ │ │ ├── Textarea │ │ │ │ │ ├── Textarea.vue.d.ts │ │ │ │ │ └── index.d.ts │ │ │ │ ├── Toast │ │ │ │ │ ├── Toast.vue.d.ts │ │ │ │ │ └── index.d.ts │ │ │ │ ├── Toaster │ │ │ │ │ ├── Toaster.vue.d.ts │ │ │ │ │ └── index.d.ts │ │ │ │ ├── ToggleSwitch │ │ │ │ │ ├── ToggleSwitch.vue.d.ts │ │ │ │ │ └── index.d.ts │ │ │ │ ├── Tooltip │ │ │ │ │ ├── Tooltip.vue.d.ts │ │ │ │ │ └── index.d.ts │ │ │ │ ├── TopFiveChart │ │ │ │ │ ├── TopFiveChart.vue.d.ts │ │ │ │ │ └── index.d.ts │ │ │ │ └── index.d.ts │ │ │ │ ├── docs │ │ │ │ ├── App.vue.d.ts │ │ │ │ └── components │ │ │ │ │ ├── Components.vue.d.ts │ │ │ │ │ ├── DocTables.vue.d.ts │ │ │ │ │ ├── EventsTable.vue.d.ts │ │ │ │ │ ├── Examples.vue.d.ts │ │ │ │ │ ├── PropsTable.vue.d.ts │ │ │ │ │ └── SlotsTable.vue.d.ts │ │ │ │ ├── helpers │ │ │ │ ├── debounce.d.ts │ │ │ │ ├── throttle.d.ts │ │ │ │ ├── throttleAndDebounce.d.ts │ │ │ │ └── uuid.d.ts │ │ │ │ └── main.d.ts │ │ ├── package.json │ │ ├── src │ │ │ ├── assets │ │ │ │ └── images │ │ │ │ │ ├── Software_Engineering_Institute_Unitmark_White.svg │ │ │ │ │ └── sprites-social.png │ │ │ ├── components │ │ │ │ ├── Autosuggest │ │ │ │ │ ├── Autosuggest.spec.js │ │ │ │ │ ├── Autosuggest.stories.js │ │ │ │ │ ├── Autosuggest.vue │ │ │ │ │ └── index.ts │ │ │ │ ├── Badge │ │ │ │ │ ├── Badge.spec.ts │ │ │ │ │ ├── Badge.stories.js │ │ │ │ │ ├── Badge.vue │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ └── Badge.spec.ts.snap │ │ │ │ │ └── index.ts │ │ │ │ ├── Button │ │ │ │ │ ├── Button.spec.ts │ │ │ │ │ ├── Button.stories.js │ │ │ │ │ ├── Button.vue │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ └── Button.spec.ts.snap │ │ │ │ │ └── index.ts │ │ │ │ ├── Calendar │ │ │ │ │ ├── Calendar.spec.js │ │ │ │ │ ├── Calendar.stories.js │ │ │ │ │ ├── Calendar.vue │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ └── Calendar.spec.js.snap │ │ │ │ │ └── index.ts │ │ │ │ ├── CharacterCounter │ │ │ │ │ ├── CharacterCounter.spec.js │ │ │ │ │ ├── CharacterCounter.vue │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ └── CharacterCounter.spec.js.snap │ │ │ │ │ └── index.ts │ │ │ │ ├── CheckboxGroup │ │ │ │ │ ├── CheckboxGroup.spec.js │ │ │ │ │ ├── CheckboxGroup.stories.js │ │ │ │ │ ├── CheckboxGroup.vue │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ └── CheckboxGroup.spec.js.snap │ │ │ │ │ └── index.ts │ │ │ │ ├── ClientOnly │ │ │ │ │ ├── ClientOnly.vue │ │ │ │ │ └── index.ts │ │ │ │ ├── Datapoint │ │ │ │ │ ├── Datapoint.spec.ts │ │ │ │ │ ├── Datapoint.stories.js │ │ │ │ │ ├── Datapoint.vue │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ └── Datapoint.spec.ts.snap │ │ │ │ │ └── index.ts │ │ │ │ ├── Datepicker │ │ │ │ │ ├── Datepicker.spec.js │ │ │ │ │ ├── Datepicker.stories.js │ │ │ │ │ ├── Datepicker.vue │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ └── Datepicker.spec.js.snap │ │ │ │ │ └── index.ts │ │ │ │ ├── Dropdown │ │ │ │ │ ├── Dropdown.spec.js │ │ │ │ │ ├── Dropdown.stories.js │ │ │ │ │ ├── Dropdown.vue │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ └── Dropdown.spec.js.snap │ │ │ │ │ └── index.ts │ │ │ │ ├── DropdownDivider │ │ │ │ │ ├── DropdownDivider.spec.js │ │ │ │ │ ├── DropdownDivider.stories.js │ │ │ │ │ ├── DropdownDivider.vue │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ └── DropdownDivider.spec.js.snap │ │ │ │ │ └── index.ts │ │ │ │ ├── DropdownHeader │ │ │ │ │ ├── DropdownHeader.spec.js │ │ │ │ │ ├── DropdownHeader.stories.js │ │ │ │ │ ├── DropdownHeader.vue │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ └── DropdownHeader.spec.js.snap │ │ │ │ │ └── index.ts │ │ │ │ ├── DropdownItem │ │ │ │ │ ├── DropdownItem.spec.js │ │ │ │ │ ├── DropdownItem.stories.js │ │ │ │ │ ├── DropdownItem.vue │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ └── DropdownItem.spec.js.snap │ │ │ │ │ └── index.ts │ │ │ │ ├── FileUploader │ │ │ │ │ ├── FileUploader.spec.js │ │ │ │ │ ├── FileUploader.stories.js │ │ │ │ │ ├── FileUploader.vue │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ └── FileUploader.spec.js.snap │ │ │ │ │ └── index.ts │ │ │ │ ├── FilterByDropdown │ │ │ │ │ ├── FilterByDropdown.spec.js │ │ │ │ │ ├── FilterByDropdown.stories.js │ │ │ │ │ ├── FilterByDropdown.vue │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ └── FilterByDropdown.spec.js.snap │ │ │ │ │ └── index.ts │ │ │ │ ├── FloatingUi │ │ │ │ │ ├── FloatingUi.spec.js │ │ │ │ │ ├── FloatingUi.vue │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ └── FloatingUi.spec.js.snap │ │ │ │ │ └── index.ts │ │ │ │ ├── Input │ │ │ │ │ ├── Input.spec.js │ │ │ │ │ ├── Input.stories.js │ │ │ │ │ ├── Input.vue │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ └── Input.spec.js.snap │ │ │ │ │ └── index.ts │ │ │ │ ├── LayoutApp │ │ │ │ │ ├── LayoutApp.spec.ts │ │ │ │ │ ├── LayoutApp.stories.js │ │ │ │ │ ├── LayoutApp.vue │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ └── LayoutApp.spec.ts.snap │ │ │ │ │ └── index.ts │ │ │ │ ├── LayoutSeiExternal │ │ │ │ │ ├── LayoutSeiExternal.spec.js │ │ │ │ │ ├── LayoutSeiExternal.stories.js │ │ │ │ │ ├── LayoutSeiExternal.vue │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ └── LayoutSeiExternal.spec.js.snap │ │ │ │ │ └── index.ts │ │ │ │ ├── LayoutSeiExternalFooter │ │ │ │ │ ├── LayoutSeiExternalFooter.spec.js │ │ │ │ │ ├── LayoutSeiExternalFooter.stories.js │ │ │ │ │ ├── LayoutSeiExternalFooter.vue │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ └── LayoutSeiExternalFooter.spec.js.snap │ │ │ │ │ └── index.ts │ │ │ │ ├── LayoutSeiExternalHeader │ │ │ │ │ ├── LayoutSeiExternalHeader.spec.js │ │ │ │ │ ├── LayoutSeiExternalHeader.stories.js │ │ │ │ │ ├── LayoutSeiExternalHeader.vue │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ └── LayoutSeiExternalHeader.spec.js.snap │ │ │ │ │ └── index.ts │ │ │ │ ├── LayoutSeiExternalHeaderContent │ │ │ │ │ ├── LayoutSeiExteralHeaderContent.stories.js │ │ │ │ │ ├── LayoutSeiExternalHeaderContent.spec.js │ │ │ │ │ ├── LayoutSeiExternalHeaderContent.vue │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ └── LayoutSeiExternalHeaderContent.spec.js.snap │ │ │ │ │ └── index.ts │ │ │ │ ├── LayoutSeiExternalMasthead │ │ │ │ │ ├── LayoutSeiExternalMasthead.spec.js │ │ │ │ │ ├── LayoutSeiExternalMasthead.stories.js │ │ │ │ │ ├── LayoutSeiExternalMasthead.vue │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ └── LayoutSeiExternalMasthead.spec.js.snap │ │ │ │ │ └── index.ts │ │ │ │ ├── LayoutSeiExternalNav │ │ │ │ │ ├── LayoutSeiExternalNav.spec.js │ │ │ │ │ ├── LayoutSeiExternalNav.stories.js │ │ │ │ │ ├── LayoutSeiExternalNav.vue │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ └── LayoutSeiExternalNav.spec.js.snap │ │ │ │ │ └── index.ts │ │ │ │ ├── LayoutSeiExternalWordmark │ │ │ │ │ ├── LayoutSeiExternalWordmark.spec.js │ │ │ │ │ ├── LayoutSeiExternalWordmark.stories.js │ │ │ │ │ ├── LayoutSeiExternalWordmark.vue │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ └── LayoutSeiExternalWordmark.spec.js.snap │ │ │ │ │ └── index.ts │ │ │ │ ├── LayoutStacked │ │ │ │ │ ├── LayoutStacked.spec.js │ │ │ │ │ ├── LayoutStacked.stories.js │ │ │ │ │ ├── LayoutStacked.vue │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ └── LayoutStacked.spec.js.snap │ │ │ │ │ └── index.ts │ │ │ │ ├── Link │ │ │ │ │ ├── Link.spec.js │ │ │ │ │ ├── Link.stories.js │ │ │ │ │ ├── Link.vue │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ └── Link.spec.js.snap │ │ │ │ │ └── index.ts │ │ │ │ ├── LoadingBox │ │ │ │ │ ├── LoadingBox.spec.js │ │ │ │ │ ├── LoadingBox.stories.js │ │ │ │ │ ├── LoadingBox.vue │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ └── LoadingBox.spec.js.snap │ │ │ │ │ └── index.ts │ │ │ │ ├── LoadingSpinner │ │ │ │ │ ├── LoadingSpinner.spec.js │ │ │ │ │ ├── LoadingSpinner.stories.js │ │ │ │ │ ├── LoadingSpinner.vue │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ └── LoadingSpinner.spec.js.snap │ │ │ │ │ └── index.ts │ │ │ │ ├── Modal │ │ │ │ │ ├── Modal.spec.js │ │ │ │ │ ├── Modal.stories.js │ │ │ │ │ ├── Modal.vue │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ └── Modal.spec.js.snap │ │ │ │ │ └── index.ts │ │ │ │ ├── Multiselect │ │ │ │ │ ├── Multiselect.spec.js │ │ │ │ │ ├── Multiselect.stories.js │ │ │ │ │ ├── Multiselect.vue │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ └── Multiselect.spec.js.snap │ │ │ │ │ └── index.ts │ │ │ │ ├── Paginator │ │ │ │ │ ├── Paginator.spec.js │ │ │ │ │ ├── Paginator.stories.js │ │ │ │ │ ├── Paginator.vue │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ └── Paginator.spec.js.snap │ │ │ │ │ └── index.ts │ │ │ │ ├── Popover │ │ │ │ │ ├── Popover.spec.js │ │ │ │ │ ├── Popover.stories.js │ │ │ │ │ ├── Popover.vue │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ └── Popover.spec.js.snap │ │ │ │ │ └── index.ts │ │ │ │ ├── RadioGroup │ │ │ │ │ ├── RadioGroup.spec.js │ │ │ │ │ ├── RadioGroup.stories.js │ │ │ │ │ ├── RadioGroup.vue │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ └── RadioGroup.spec.js.snap │ │ │ │ │ └── index.ts │ │ │ │ ├── ScrollArea │ │ │ │ │ ├── ScrollArea.spec.js │ │ │ │ │ ├── ScrollArea.stories.js │ │ │ │ │ ├── ScrollArea.vue │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ └── ScrollArea.spec.js.snap │ │ │ │ │ └── index.ts │ │ │ │ ├── Scrollspy │ │ │ │ │ ├── Scrollspy.spec.js │ │ │ │ │ ├── Scrollspy.stories.js │ │ │ │ │ ├── Scrollspy.vue │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ └── Scrollspy.spec.js.snap │ │ │ │ │ └── index.ts │ │ │ │ ├── SearchBox │ │ │ │ │ ├── SearchBox.spec.js │ │ │ │ │ ├── SearchBox.stories.js │ │ │ │ │ ├── SearchBox.vue │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ └── SearchBox.spec.js.snap │ │ │ │ │ └── index.ts │ │ │ │ ├── Section │ │ │ │ │ ├── Section.spec.js │ │ │ │ │ ├── Section.stories.js │ │ │ │ │ ├── Section.vue │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ └── Section.spec.js.snap │ │ │ │ │ └── index.ts │ │ │ │ ├── Select │ │ │ │ │ ├── Select.spec.js │ │ │ │ │ ├── Select.stories.js │ │ │ │ │ ├── Select.vue │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ └── Select.spec.js.snap │ │ │ │ │ └── index.ts │ │ │ │ ├── Table │ │ │ │ │ ├── Table.spec.js │ │ │ │ │ ├── Table.stories.js │ │ │ │ │ ├── Table.vue │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ └── Table.spec.js.snap │ │ │ │ │ └── index.ts │ │ │ │ ├── Tabs │ │ │ │ │ ├── Tabs.spec.js │ │ │ │ │ ├── Tabs.stories.js │ │ │ │ │ ├── Tabs.vue │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ ├── Tab.spec.js.snap │ │ │ │ │ │ └── Tabs.spec.js.snap │ │ │ │ │ └── index.ts │ │ │ │ ├── Textarea │ │ │ │ │ ├── Textarea.spec.js │ │ │ │ │ ├── Textarea.stories.js │ │ │ │ │ ├── Textarea.vue │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ └── Textarea.spec.js.snap │ │ │ │ │ └── index.ts │ │ │ │ ├── Toast │ │ │ │ │ ├── Toast.spec.js │ │ │ │ │ ├── Toast.stories.js │ │ │ │ │ ├── Toast.vue │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ └── Toast.spec.js.snap │ │ │ │ │ └── index.ts │ │ │ │ ├── Toaster │ │ │ │ │ ├── Toaster.spec.js │ │ │ │ │ ├── Toaster.stories.js │ │ │ │ │ ├── Toaster.vue │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ └── Toaster.spec.js.snap │ │ │ │ │ └── index.ts │ │ │ │ ├── ToggleSwitch │ │ │ │ │ ├── ToggleSwitch.spec.js │ │ │ │ │ ├── ToggleSwitch.stories.js │ │ │ │ │ ├── ToggleSwitch.vue │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ └── ToggleSwitch.spec.js.snap │ │ │ │ │ └── index.ts │ │ │ │ ├── Tooltip │ │ │ │ │ ├── Tooltip.spec.js │ │ │ │ │ ├── Tooltip.stories.js │ │ │ │ │ ├── Tooltip.vue │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ └── Tooltip.spec.js.snap │ │ │ │ │ └── index.ts │ │ │ │ ├── TopFiveChart │ │ │ │ │ ├── TopFiveChart.spec.js │ │ │ │ │ ├── TopFiveChart.stories.js │ │ │ │ │ ├── TopFiveChart.vue │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ └── TopFiveChart.spec.js.snap │ │ │ │ │ └── index.ts │ │ │ │ └── index.ts │ │ │ ├── docs │ │ │ │ ├── App.vue │ │ │ │ └── components │ │ │ │ │ ├── Components.vue │ │ │ │ │ ├── DocTables.vue │ │ │ │ │ ├── EventsTable.vue │ │ │ │ │ ├── Examples.vue │ │ │ │ │ ├── PropsTable.vue │ │ │ │ │ └── SlotsTable.vue │ │ │ ├── helpers │ │ │ │ ├── debounce.ts │ │ │ │ ├── throttle.ts │ │ │ │ ├── throttleAndDebounce.ts │ │ │ │ └── uuid.ts │ │ │ ├── index.css │ │ │ ├── main.ts │ │ │ ├── shims-vue.d.ts │ │ │ ├── stories │ │ │ │ └── Introduction.stories.mdx │ │ │ └── vite-env.d.ts │ │ └── volar.d.ts │ └── tailwindcss-3 │ │ ├── README.md │ │ ├── open-sans │ │ ├── index.css │ │ ├── open-sans-latin-300.woff │ │ ├── open-sans-latin-300.woff2 │ │ ├── open-sans-latin-300italic.woff │ │ ├── open-sans-latin-300italic.woff2 │ │ ├── open-sans-latin-400.woff │ │ ├── open-sans-latin-400.woff2 │ │ ├── open-sans-latin-400italic.woff │ │ ├── open-sans-latin-400italic.woff2 │ │ ├── open-sans-latin-600.woff │ │ ├── open-sans-latin-600.woff2 │ │ ├── open-sans-latin-600italic.woff │ │ ├── open-sans-latin-600italic.woff2 │ │ ├── open-sans-latin-700.woff │ │ ├── open-sans-latin-700.woff2 │ │ ├── open-sans-latin-700italic.woff │ │ ├── open-sans-latin-700italic.woff2 │ │ ├── open-sans-latin-800.woff │ │ ├── open-sans-latin-800.woff2 │ │ ├── open-sans-latin-800italic.woff │ │ └── open-sans-latin-800italic.woff2 │ │ ├── package.json │ │ └── tailwindcss │ │ ├── config │ │ ├── tailwindcss-colors.js │ │ ├── tailwindcss-font-family.js │ │ └── tailwindcss-typography.js │ │ ├── plugins │ │ ├── btn.js │ │ ├── form-control.js │ │ ├── input-group.js │ │ ├── link.js │ │ ├── nav.js │ │ ├── scroll-area.js │ │ ├── tab.js │ │ ├── table-prose.js │ │ └── word-break-word.js │ │ ├── tailwind-base.js │ │ └── tailwind.css ├── package.json ├── postcss.config.js ├── sds-license.txt ├── tailwind.config.js └── tailwind │ └── tailwind.css ├── pentestportal ├── __init__.py ├── settings.py ├── urls.py └── wsgi.py ├── proxy.txt ├── ptp.py ├── ptportal ├── __init__.py ├── admin.py ├── api │ ├── __init__.py │ ├── urls.py │ └── views.py ├── apps.py ├── context_processors.py ├── forms │ ├── __init__.py │ ├── base.py │ ├── ei.py │ ├── engagement.py │ ├── findings.py │ ├── hva.py │ ├── narrative.py │ ├── registration.py │ └── report.py ├── loader.py ├── management │ ├── __init__.py │ └── commands │ │ ├── __init__.py │ │ ├── dbLoader.py │ │ ├── generate_DHS_JSON.py │ │ └── set_report_type.py ├── middleware.py ├── migrations │ ├── 0001_initial.py │ └── __init__.py ├── models │ ├── __init__.py │ ├── abstract_models.py │ ├── assessment_tracker.py │ ├── data_exfil.py │ ├── engagement.py │ ├── findings.py │ ├── frameworks.py │ ├── image_finding.py │ ├── narrative.py │ ├── osinf.py │ ├── phishing.py │ ├── port_mapping.py │ ├── questionnaire.py │ ├── ransomware.py │ ├── report.py │ └── users.py ├── serializers.py ├── static │ ├── Favicon_Package │ │ ├── android-chrome-192x192.png │ │ ├── android-chrome-512x512.png │ │ ├── apple-touch-icon.png │ │ ├── browserconfig.xml │ │ ├── favicon-16x16.png │ │ ├── favicon-32x32.png │ │ ├── favicon.ico │ │ ├── mstile-150x150.png │ │ └── site.webmanifest │ ├── css │ │ ├── all.css │ │ ├── all.min.css │ │ ├── apexcharts.css │ │ ├── fontawesome-all.css │ │ ├── fontawesome-all.min.css │ │ ├── opensans.css │ │ ├── sds.style.css │ │ └── sds.tailwind.css │ ├── icons │ │ ├── a-solid.svg │ │ ├── a.svg │ │ ├── address-card-regular.svg │ │ ├── b-solid.svg │ │ ├── book-solid.svg │ │ ├── building.svg │ │ ├── bullseye-solid.svg │ │ ├── c-solid.svg │ │ ├── calculator-solid.svg │ │ ├── circle-plus-solid-white.svg │ │ ├── circle-plus-solid.svg │ │ ├── circle-question-solid.svg │ │ ├── circle-xmark-solid-white.svg │ │ ├── circle-xmark-solid.svg │ │ ├── clipboard-list-solid.svg │ │ ├── clock-rotate-left-solid.svg │ │ ├── d-solid.svg │ │ ├── diagram-project.svg │ │ ├── download-solid.svg │ │ ├── envelope.svg │ │ ├── file-alt-solid.svg │ │ ├── file-circle-xmark-solid.svg │ │ ├── file-code-regular.svg │ │ ├── file-code.svg │ │ ├── file-csv-solid.svg │ │ ├── file-download-solid-white.svg │ │ ├── file-download-solid.svg │ │ ├── file-excel-regular.svg │ │ ├── file-export-solid.svg │ │ ├── file-lines-regular.svg │ │ ├── file-pdf-regular.svg │ │ ├── file-powerpoint-regular.svg │ │ ├── file-word-regular.svg │ │ ├── file-zipper-regular.svg │ │ ├── floppy-disk-solid.svg │ │ ├── gear-solid.svg │ │ ├── house-user.svg │ │ ├── lightbulb-solid.svg │ │ ├── list-solid.svg │ │ ├── list-ul.svg │ │ ├── lock.svg │ │ ├── magnifying-glass-plus-solid.svg │ │ ├── network-wired-solid.svg │ │ ├── note-sticky-solid.svg │ │ ├── pen-to-square-white.svg │ │ ├── pen-to-square.svg │ │ ├── plus-solid.svg │ │ ├── poll-h-solid.svg │ │ ├── project-diagram-solid.svg │ │ ├── shield-halved.svg │ │ ├── square-poll-horizontal.svg │ │ ├── table-solid.svg │ │ ├── table.svg │ │ ├── tachograph-digital.svg │ │ ├── tachometer-alt-solid.svg │ │ ├── terminal.svg │ │ ├── thumbs-up-solid.svg │ │ ├── trash-solid-white.svg │ │ ├── trash-solid.svg │ │ ├── triangle-exclamation-solid.svg │ │ ├── up-right-from-square.svg │ │ ├── upload-solid-white.svg │ │ ├── upload-solid.svg │ │ ├── upload.svg │ │ ├── user.svg │ │ ├── wrench-solid.svg │ │ └── wrench.svg │ ├── js │ │ ├── apexcharts.amd.js │ │ ├── sds.umd.js │ │ ├── vue.global.prod.js │ │ └── vue3-apexcharts.umd.min.js │ └── templates │ │ ├── attack-path-template.pptx │ │ ├── email-template.csv │ │ └── payloads-template.csv ├── templates │ └── ptportal │ │ ├── assessment_activity_tracker.html │ │ ├── base.html │ │ ├── campaigns.html │ │ ├── data_exfiltration.html │ │ ├── ei │ │ └── election_infrastructure_form.html │ │ ├── engagement │ │ ├── engagement_meta_confirm_delete.html │ │ ├── engagement_meta_detail.html │ │ └── engagement_meta_form.html │ │ ├── errors │ │ ├── 400.html │ │ ├── 403.html │ │ ├── 404.html │ │ └── 500.html │ │ ├── export.html │ │ ├── external_port_mapping.html │ │ ├── finding │ │ ├── finding_confirm_delete.html │ │ ├── finding_detail.html │ │ ├── finding_detail2.html │ │ ├── finding_form.html │ │ ├── image_upload.html │ │ └── kevs.html │ │ ├── index.html │ │ ├── login.html │ │ ├── narrative │ │ ├── narrative_confirm_delete.html │ │ ├── narrative_form.html │ │ ├── narrative_list.html │ │ └── narrative_steps.html │ │ ├── osinf.html │ │ ├── password_reset.html │ │ ├── password_reset_complete.html │ │ ├── password_reset_confirm.html │ │ ├── password_reset_done.html │ │ ├── password_reset_email.html │ │ ├── payloads.html │ │ ├── ransomware.html │ │ ├── report.html │ │ ├── risk_score.html │ │ └── signup.html ├── templatetags │ ├── __init__.py │ ├── report_extras.py │ └── utils.py ├── urls.py ├── views │ ├── __init__.py │ ├── activity_tracker.py │ ├── campaigns.py │ ├── data_exfil.py │ ├── engagement.py │ ├── export.py │ ├── findings │ │ ├── __init__.py │ │ ├── findings.py │ │ └── images.py │ ├── narrative.py │ ├── osinf.py │ ├── payload_mapping │ │ ├── __init__.py │ │ └── lib │ │ │ ├── __init__.py │ │ │ ├── core │ │ │ ├── __init__.py │ │ │ ├── parser.py │ │ │ ├── report.py │ │ │ └── search.py │ │ │ ├── data │ │ │ ├── assessment-tool-map.json │ │ │ └── mitre-techniques.json │ │ │ └── models │ │ │ ├── __Init__.py │ │ │ ├── assessment.py │ │ │ ├── codetype.py │ │ │ ├── command.py │ │ │ ├── filetype.py │ │ │ ├── obfuscation.py │ │ │ ├── payload.py │ │ │ ├── security.py │ │ │ ├── subtechnique.py │ │ │ ├── tactic.py │ │ │ ├── technique.py │ │ │ └── tool.py │ ├── payloads.py │ ├── port_mapping.py │ ├── questionnaire.py │ ├── ransomware.py │ ├── report │ │ ├── __init__.py │ │ └── report.py │ ├── risk_score.py │ ├── utils.py │ └── views.py └── widgets.py └── report_gen ├── mam_xml.py ├── pt_findings_csv.py ├── pt_kev.py ├── pt_pace.py ├── pt_remediation.py ├── pt_report.py ├── pt_slide.py ├── pt_summary.py ├── pt_tracker.py ├── templates ├── KEV-template.docx ├── PACE │ ├── Franklin Gothic Book Regular.ttf │ ├── Franklin Gothic Demi Regular.ttf │ ├── Franklin Gothic Medium Regular.ttf │ ├── assessment_types.txt │ ├── ci_sectors.txt │ ├── mitigation_actions.txt │ ├── mitigation_challenges.txt │ ├── mitigation_status.txt │ └── sectors.txt ├── fast-template-ws.pptx ├── fast-template.docx ├── fast-template.pptx ├── hva-template.docx ├── rpt-template-ws.pptx ├── rpt-template.docx ├── rpt-template.pptx ├── rva-template-ws.pptx ├── rva-template.docx └── rva-template.pptx └── utilities ├── assessment_facts.py ├── check-tags.py ├── img_util.py ├── recompress.py ├── rt_parser.py └── xml_util.py /.dockerignore: -------------------------------------------------------------------------------- 1 | .git/ 2 | .cache 3 | 4 | 5 | *.egg-info 6 | *.egg/ 7 | *.pyc 8 | 9 | .coverage 10 | 11 | help_templates/ 12 | __pycache__ 13 | 14 | docker/containers/ 15 | docker/images/ 16 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | **/.settings 3 | 4 | pentestportal/media/* 5 | RPT-[0-9]* 6 | RVA-[0-9]* 7 | HVA-[0-9]* 8 | FAST-[0-9]* 9 | RV[0-9]* 10 | backup-* 11 | mode.txt 12 | docker/dev/env.txt 13 | docker/prod/env.txt 14 | docker/prod/nginx/ssl/ 15 | 16 | *.sqlite3 17 | 18 | config.yml 19 | ptportal.log 20 | 21 | __pycache__ 22 | *.pyc 23 | 24 | docs/_build/* 25 | 26 | ~$* 27 | 28 | *.pyc 29 | *.DS_Store 30 | 31 | .coverage 32 | .editorconfig 33 | 34 | docs/_build/* 35 | 36 | ptportal/migrations/0* 37 | 38 | docker/containers/* 39 | docker/images/* 40 | 41 | *.zip 42 | *.tar 43 | 44 | ptportal/static/rest_framework/* 45 | ptportal/static/webfonts/* 46 | ptportal/static/admin/js/* 47 | ptportal.log 48 | 49 | .vscode 50 | 51 | node/package-lock.json 52 | node/node_modules/* -------------------------------------------------------------------------------- /.isort.cfg: -------------------------------------------------------------------------------- 1 | [settings] 2 | combine_star=true 3 | force_sort_within_sections=true 4 | 5 | import_heading_stdlib=Standard Python Libraries 6 | import_heading_thirdparty=Third-Party Libraries 7 | import_heading_firstparty=cisagov Libraries 8 | 9 | # Run isort under the black profile to align with our other Python linting 10 | profile=black 11 | -------------------------------------------------------------------------------- /.lgtm.yml: -------------------------------------------------------------------------------- 1 | --- 2 | extraction: 3 | python: 4 | python_setup: 5 | version: 3 6 | requirements_files: 7 | - requirements-test.txt 8 | setup_py: false 9 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | # Already being linted by pretty-format-json 2 | *.json 3 | # Already being linted by mdl 4 | *.md 5 | # Already being linted by yamllint 6 | *.yaml 7 | *.yml 8 | -------------------------------------------------------------------------------- /.yamllint: -------------------------------------------------------------------------------- 1 | --- 2 | extends: default 3 | 4 | rules: 5 | # yamllint doesn't like when we use yes and no for true and false, 6 | # but that's pretty standard in Ansible. 7 | truthy: disable 8 | line-length: 9 | max: 115 10 | level: warning 11 | -------------------------------------------------------------------------------- /Acknowledgments.txt: -------------------------------------------------------------------------------- 1 | THIS WORK IS FUNDED IN PART BY: 2 | 1. The United States Department of Defense under Contract No. FA8702-15-D-0002 with Carnegie Mellon University for the operation of the Software Engineering Institute, a federally funded research and development center. 3 | 4 | 5 | THIS WORK BUILDS UPON THE FOLLOWING PRIOR WORKS: 6 | 1. Risk & Vulnerability Assessment Reporting Engine, Version v0.9-beta (https://github.com/cisagov/rva-reporting-engine/releases/tag/v0.9-alpha) Copyright 2022 Carnegie Mellon University. DM22-0744. 7 | 8 | DM22-1011 9 | -------------------------------------------------------------------------------- /Contributors.txt: -------------------------------------------------------------------------------- 1 | Contributors: 2 | Carnegie Mellon University 3 | [Jessica Hedges, Marisa Midler, Brandon Marzik, Destiney Plaza, Samantha Chaves, Catherine Nguyen, Carrie Gardner, Chesleah Kribs, Stephanie Hedges, Meghan Byrne, Wei-ren Murray, Ebonie McNeil, Matt Sisk, Ryan Steele, Anne-Sophie Kim, Derrick Spooner, Mike Albrethsen, Barbora Batokova, Austin Whisnant, Sonia Reed, Anne Connell, Shaymi Adetayo, Bob Ditmore, Phil Rotoli, Justin Forbes, Karen Miller]* 4 | 5 | 6 | *Pursuant to Section 105 of the US Copyright Act, the contributions of US Government Employees created in their official capacity are not subject to Copyright protection. 7 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | .PHONY: clean 2 | 3 | 4 | ################################################################################# 5 | # COMMANDS # 6 | ################################################################################# 7 | 8 | ## Delete all compiled Python files, and remove any generated zip, json, or word files 9 | clean: 10 | find . -type f -name "*.py[co]" -delete 11 | find . -type d -name "__pycache__" -delete 12 | find . -type f -name "*.json" -delete 13 | find . -type f -name "*.zip" -delete 14 | 15 | find . -type f -name "*.docx" -not -path "*report_gen*" -delete 16 | find . -type f -name "*.pptx" -not -path "*report_gen*" -delete 17 | rm -r ptportal/migrations/* 18 | touch ptportal/migrations/__init__.py 19 | rm mode.txt 20 | rm ptportal.log 21 | -------------------------------------------------------------------------------- /assets/Penetration Testing Findings Repository 1.0.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cisagov/pentest-reporting-engine/25570b9cfdc08900799ccf3146c3053bb16519f3/assets/Penetration Testing Findings Repository 1.0.xlsx -------------------------------------------------------------------------------- /assets/mfa-types.csv: -------------------------------------------------------------------------------- 1 | Type 2 | Authenticator App 3 | Badge/Smart Card 4 | Biometric 5 | E-mail Token 6 | Hardware Token 7 | Security Question(s) 8 | SMS Token 9 | Voice Call -------------------------------------------------------------------------------- /assets/mfa-vendors.csv: -------------------------------------------------------------------------------- 1 | Vendor 2 | Authentiq 3 | BioConnect 4 | Broadcom/Symantec 5 | Cisco/Duo 6 | CrowdStrike 7 | CyberArk 8 | Delinea 9 | Entrust 10 | Google 11 | IBM 12 | Identity Automation 13 | Imprivata 14 | JumpCloud 15 | LastPass 16 | ManageEngine 17 | Microsoft 18 | Okta 19 | OneLogin 20 | OneSpan 21 | Ping Identity 22 | RSA 23 | Secret Double Octopus 24 | SecureAuth 25 | Silverfort 26 | Thales 27 | Twilio 28 | WatchGuard 29 | Yubico -------------------------------------------------------------------------------- /assets/security-solutions.csv: -------------------------------------------------------------------------------- 1 | Name 2 | Arctic Wolf 3 | ArmorPoint 4 | Avast Endpoint 5 | Bitdefender 6 | Carbon Black 7 | Check Point 8 | Cisco Advanced Malware Protection (AMP) 9 | Cisco Secure Endpoint 10 | Cisco Firepower 11 | Cisco Stealthwatch 12 | Cisco Umbrella 13 | Comodo 14 | Cortex Extended Detection and Response (XDR) 15 | CrowdStrike 16 | Cybereason 17 | Cylance Endpoint Security 18 | Cynet Next-Gen Antivirus (NGAV) 19 | CYREN AntiVirus 20 | Elastic Security 21 | ESET-NOD32 22 | FireEye Endpoint Security 23 | Fortinet 24 | HP Wolf Security 25 | Kaspersky 26 | Malwarebytes 27 | ManageEngine Endpoint Central 28 | Microsoft Windows Defender 29 | Microsoft Windows Defender ATP 30 | Morphisec 31 | McAfee 32 | PC Matic 33 | Secureworks Taegis Extended Detection and Response (XDR) 34 | SentinelOne 35 | Sophos Central 36 | Sophos Intercept X 37 | Sophos Intercept X Advanced with Extended Detection and Response (XDR) 38 | Sophos Managed Threat Response (MTR) 39 | Symantec Endpoint Security 40 | Trellix 41 | Trend Micro 42 | WatchGuard 43 | Webroot 44 | WithSecure 45 | Vipre 46 | -------------------------------------------------------------------------------- /docker-compose.prod.yml: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | services: 4 | db: 5 | container_name: prod-db-1 6 | build: 7 | context: . 8 | dockerfile: docker/prod/Dockerfile.db 9 | volumes: 10 | - postgres_data:/var/lib/postgresql/data/ 11 | web: 12 | container_name: prod-web-1 13 | build: 14 | context: . 15 | dockerfile: docker/prod/Dockerfile.web 16 | command: gunicorn pentestportal.wsgi:application --bind 0.0.0.0:8080 17 | env_file: docker/prod/env.txt 18 | depends_on: 19 | - db 20 | volumes: 21 | # - web_volume:/code # uncomment this if you do not want 22 | # to mount the directory and edit files (and comment out the .:/code) 23 | - .:/code 24 | nginx: 25 | container_name: prod-nginx-1 26 | build: 27 | context: docker/prod/nginx 28 | dockerfile: Dockerfile.nginx 29 | restart: always 30 | volumes: 31 | - .:/code 32 | ports: 33 | - 443:443 34 | depends_on: 35 | - web 36 | 37 | volumes: 38 | postgres_data: 39 | web_volume: 40 | 41 | networks: 42 | default: 43 | name: ptportal 44 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | services: 4 | db: 5 | container_name: dev-db-1 6 | build: 7 | context: . 8 | dockerfile: docker/dev/Dockerfile.db 9 | volumes: 10 | - postgres_data:/var/lib/postgresql/data/ 11 | web: 12 | container_name: dev-web-1 13 | build: 14 | context: . 15 | dockerfile: docker/dev/Dockerfile.web 16 | command: docker/dev/wait-for-it.sh -h db -p 5432 -t 30 -- python manage.py runserver 0.0.0.0:8080 17 | env_file: docker/dev/env.txt 18 | ports: 19 | - "8080:8080" 20 | depends_on: 21 | - db 22 | volumes: 23 | - .:/code 24 | 25 | volumes: 26 | postgres_data: 27 | 28 | networks: 29 | default: 30 | name: ptportal 31 | -------------------------------------------------------------------------------- /docker/__init__.py: -------------------------------------------------------------------------------- 1 | # Risk & Vulnerability Assessment Reporting Engine 2 | 3 | # Copyright 2022 The Risk & Vulnerability Reporting Engine Contributors, All Rights Reserved. 4 | # (see Contributors.txt for a full list of Contributors) 5 | 6 | # SPDX-License-Identifier: BSD-3-Clause 7 | 8 | # Please see additional acknowledgments (including references to third party source code, object code, documentation and other files) in the license.txt file or contact permission@sei.cmu.edu for full terms. 9 | 10 | # Created, in part, with funding and support from the United States Government. (see Acknowledgments file). 11 | 12 | # DM22-1011 13 | 14 | from .docker_api import * 15 | -------------------------------------------------------------------------------- /docker/dev/Dockerfile.db: -------------------------------------------------------------------------------- 1 | FROM postgres:11.5-alpine 2 | -------------------------------------------------------------------------------- /docker/dev/Dockerfile.web: -------------------------------------------------------------------------------- 1 | FROM python:3.8 as ptportal-web-base 2 | 3 | RUN apt-get update && apt-get install -y \ 4 | p7zip-full \ 5 | nano \ 6 | npm \ 7 | zip 8 | 9 | ADD docker/dev/requirements.txt . 10 | RUN pip install --upgrade pip && \ 11 | pip install -r requirements.txt 12 | 13 | COPY node /code/node 14 | RUN cd /code && npm install -D node/dependencies/tailwindcss-3 --legacy-peer-deps \ 15 | && npm install -D node/dependencies/components-vue3 --legacy-peer-deps 16 | 17 | 18 | FROM ptportal-web-base 19 | 20 | ENV PYTHONDONTWRITEBYTECODE 1 21 | ENV PYTHONUNBUFFERED 1 22 | 23 | RUN mkdir -p /code/pentestportal/media 24 | WORKDIR /code 25 | -------------------------------------------------------------------------------- /docker/dev/env.txt: -------------------------------------------------------------------------------- 1 | DEBUG=1 2 | -------------------------------------------------------------------------------- /docker/dev/requirements.txt: -------------------------------------------------------------------------------- 1 | attackcti 2 | beautifulsoup4==4.12.3 3 | cairosvg==2.7.1 4 | django==3.2.24 5 | django-axes==5.4.3 6 | django-extra-views 7 | django-filter==21.1 8 | django-widget-tweaks==1.4.3 9 | djangorestframework==3.11.2 10 | gunicorn==23.0.0 11 | inflect==7.4.0 12 | openpyxl==3.1.5 13 | pandas==2.0.3 14 | Pillow==10.4.0 15 | psycopg2-binary==2.9.10 16 | python-docx==0.8.10 17 | python-pptx==0.6.18 18 | pyzipper 19 | numpy==1.24.4 20 | reportlab==4.2.5 21 | -------------------------------------------------------------------------------- /docker/prod/Dockerfile.db: -------------------------------------------------------------------------------- 1 | FROM postgres:11.5-alpine 2 | -------------------------------------------------------------------------------- /docker/prod/Dockerfile.web: -------------------------------------------------------------------------------- 1 | FROM python:3.8 as ptportal-web-base-prod 2 | 3 | RUN apt-get update && apt-get install -y \ 4 | p7zip-full \ 5 | nano \ 6 | npm \ 7 | zip \ 8 | netcat-openbsd \ 9 | gunicorn 10 | 11 | ADD docker/prod/requirements.txt . 12 | RUN pip install --upgrade pip && \ 13 | pip install -r ./requirements.txt 14 | 15 | COPY node /code/node 16 | RUN cd /code && npm install -D node/dependencies/tailwindcss-3 --legacy-peer-deps \ 17 | && npm install -D node/dependencies/components-vue3 --legacy-peer-deps 18 | 19 | FROM ptportal-web-base-prod 20 | 21 | ENV PYTHONDONTWRITEBYTECODE 1 22 | ENV PYTHONUNBUFFERED 1 23 | 24 | RUN mkdir -p /code/pentestportal/media 25 | WORKDIR /code 26 | -------------------------------------------------------------------------------- /docker/prod/env.txt: -------------------------------------------------------------------------------- 1 | DEBUG=0 2 | POSTGRES_HOST_AUTH_METHOD=trust 3 | -------------------------------------------------------------------------------- /docker/prod/nginx/Dockerfile.nginx: -------------------------------------------------------------------------------- 1 | FROM nginx:1.21.6-alpine 2 | 3 | ADD conf/nginx.conf /etc/nginx/conf.d/ 4 | RUN mkdir -p /etc/nginx/ssl 5 | RUN chown -R root:root /etc/nginx/ssl 6 | RUN chmod -R 600 /etc/nginx/ssl 7 | ADD ssl /etc/nginx/ssl 8 | -------------------------------------------------------------------------------- /docker/prod/nginx/conf/nginx.conf: -------------------------------------------------------------------------------- 1 | upstream pentestportal { 2 | server web:8080; 3 | } 4 | 5 | server { 6 | 7 | listen 80; 8 | listen 443 ssl default_server; 9 | client_max_body_size 10M; 10 | 11 | ssl_certificate /etc/nginx/ssl/selfsigned.crt; 12 | ssl_certificate_key /etc/nginx/ssl/selfsigned.key; 13 | 14 | location /static { 15 | alias /code/ptportal/static; 16 | autoindex on; 17 | } 18 | 19 | location /mediafiles { 20 | alias /code/pentestportal/media; 21 | } 22 | 23 | location / { 24 | proxy_pass http://pentestportal; 25 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 26 | proxy_set_header Host $host; 27 | proxy_redirect off; 28 | } 29 | 30 | 31 | 32 | } 33 | -------------------------------------------------------------------------------- /docker/prod/requirements.txt: -------------------------------------------------------------------------------- 1 | attackcti 2 | beautifulsoup4==4.12.3 3 | cairosvg==2.7.1 4 | django==3.2.24 5 | django-axes==5.4.3 6 | django-extra-views 7 | django-filter==21.1 8 | django-widget-tweaks==1.4.3 9 | djangorestframework==3.11.2 10 | gunicorn==23.0.0 11 | inflect==7.4.0 12 | openpyxl==3.1.5 13 | pandas==2.0.3 14 | Pillow==10.4.0 15 | psycopg2-binary==2.9.10 16 | python-docx==0.8.10 17 | python-pptx==0.6.18 18 | pyzipper 19 | numpy==1.24.4 20 | reportlab==4.2.5 21 | -------------------------------------------------------------------------------- /help_templates/domains.csv: -------------------------------------------------------------------------------- 1 | Network,Domain,Registrant 1.1.1.1,ns1.example.com,DNS Corporation 1.1.1.1,dns1.example.com,DNS Corporation 2.2.2.2,fs.example.com,Microsoft Corporation 2.2.2.2,files.example.com,Microsoft Corporation 3.3.3.3,autodiscover.example.com,Microsoft Corporation 4.4.4.4,www.example.com,L3 Communications -------------------------------------------------------------------------------- /help_templates/emails.csv: -------------------------------------------------------------------------------- 1 | Email Address,Breach Information breached.email1@example.com,Adapt - 2018-11-05 breached.email1@example.com,Apollo - 2018-07-23 breached.email1@example.com,B2B USA Businesses - 2017-07-18 breached_email2@example.com,Apollo - 2018-07-23 breached_email2@example.com,B2B USA Businesses - 2017-07-18 breached_email2@example.com,Data & Leads - 2018-11-14 breached_email2@example.com,Exactis - 2018-06-01 breached_email2@example.com,LinkedIn - 2012-05-05 breached_email2@example.com,Trik Spam Botnet - 2018-06-12 breachedemail3@org.example.com,NetProspex - 2016-09-01 -------------------------------------------------------------------------------- /help_templates/payloads.csv: -------------------------------------------------------------------------------- 1 | Description,Protocol,Host,Border 2 | Linked x64 EXE (Cobalt Strike),HTTPS,N,B 3 | Linked EXE Embedded HTA (Cobalt Strike),HTTPS,B,N 4 | Linked VBA Embedded HTA (Cobalt Strike),HTTPS,N,B 5 | Linked PowerShell HTA (Cobalt Strike),HTTPS,B,N 6 | Linked PowerShell HTA (Obfuscated via MorphHTA),HTTPS,N,N 7 | Linked C# HTA Embedded in HTML (SharpShooter),HTTPS,B,B -------------------------------------------------------------------------------- /manage.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # Risk & Vulnerability Assessment Reporting Engine 3 | 4 | # Copyright 2022 The Risk & Vulnerability Reporting Engine Contributors, All Rights Reserved. 5 | # (see Contributors.txt for a full list of Contributors) 6 | 7 | # SPDX-License-Identifier: BSD-3-Clause 8 | 9 | # Please see additional acknowledgments (including references to third party source code, object code, documentation and other files) in the license.txt file or contact permission@sei.cmu.edu for full terms. 10 | 11 | # Created, in part, with funding and support from the United States Government. (see Acknowledgments file). 12 | 13 | # DM22-1011 14 | 15 | import os 16 | import sys 17 | 18 | if __name__ == "__main__": 19 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "pentestportal.settings") 20 | 21 | from django.core.management import execute_from_command_line 22 | 23 | execute_from_command_line(sys.argv) 24 | -------------------------------------------------------------------------------- /node/.npmrc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cisagov/pentest-reporting-engine/25570b9cfdc08900799ccf3146c3053bb16519f3/node/.npmrc -------------------------------------------------------------------------------- /node/dependencies/components-vue3/dist/types/components/Autosuggest/index.d.ts: -------------------------------------------------------------------------------- 1 | import Component from "./Autosuggest.vue"; 2 | export default Component; 3 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/dist/types/components/Badge/index.d.ts: -------------------------------------------------------------------------------- 1 | import Component from "./Badge.vue"; 2 | export default Component; 3 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/dist/types/components/Button/index.d.ts: -------------------------------------------------------------------------------- 1 | import Component from "./Button.vue"; 2 | export default Component; 3 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/dist/types/components/Calendar/index.d.ts: -------------------------------------------------------------------------------- 1 | import Component from "./Calendar.vue"; 2 | export default Component; 3 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/dist/types/components/CharacterCounter/index.d.ts: -------------------------------------------------------------------------------- 1 | import Component from "./CharacterCounter.vue"; 2 | export default Component; 3 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/dist/types/components/CheckboxGroup/index.d.ts: -------------------------------------------------------------------------------- 1 | import Component from "./CheckboxGroup.vue"; 2 | export default Component; 3 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/dist/types/components/ClientOnly/ClientOnly.vue.d.ts: -------------------------------------------------------------------------------- 1 | declare const _default: import("vue").DefineComponent<{}, () => import("vue").VNode[] | null, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly>, {}>; 4 | export default _default; 5 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/dist/types/components/ClientOnly/index.d.ts: -------------------------------------------------------------------------------- 1 | import Component from "./ClientOnly.vue"; 2 | export default Component; 3 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/dist/types/components/Datapoint/index.d.ts: -------------------------------------------------------------------------------- 1 | import Component from "./Datapoint.vue"; 2 | export default Component; 3 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/dist/types/components/Datepicker/index.d.ts: -------------------------------------------------------------------------------- 1 | import Component from "./Datepicker.vue"; 2 | export default Component; 3 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/dist/types/components/Dropdown/index.d.ts: -------------------------------------------------------------------------------- 1 | import Component from "./Dropdown.vue"; 2 | export default Component; 3 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/dist/types/components/DropdownDivider/DropdownDivider.vue.d.ts: -------------------------------------------------------------------------------- 1 | declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly>, {}>; 2 | export default _default; 3 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/dist/types/components/DropdownDivider/index.d.ts: -------------------------------------------------------------------------------- 1 | import Component from "./DropdownDivider.vue"; 2 | export default Component; 3 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/dist/types/components/DropdownHeader/DropdownHeader.vue.d.ts: -------------------------------------------------------------------------------- 1 | declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly>, {}>; 2 | export default _default; 3 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/dist/types/components/DropdownHeader/index.d.ts: -------------------------------------------------------------------------------- 1 | import Component from "./DropdownHeader.vue"; 2 | export default Component; 3 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/dist/types/components/DropdownItem/index.d.ts: -------------------------------------------------------------------------------- 1 | import Component from "./DropdownItem.vue"; 2 | export default Component; 3 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/dist/types/components/FileUploader/index.d.ts: -------------------------------------------------------------------------------- 1 | import Component from "./FileUploader.vue"; 2 | export default Component; 3 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/dist/types/components/FilterByDropdown/index.d.ts: -------------------------------------------------------------------------------- 1 | import Component from "./FilterByDropdown.vue"; 2 | export default Component; 3 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/dist/types/components/FloatingUi/index.d.ts: -------------------------------------------------------------------------------- 1 | import Component from "./FloatingUi.vue"; 2 | export default Component; 3 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/dist/types/components/Input/index.d.ts: -------------------------------------------------------------------------------- 1 | import Component from "./Input.vue"; 2 | export default Component; 3 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/dist/types/components/LayoutApp/index.d.ts: -------------------------------------------------------------------------------- 1 | import Component from "./LayoutApp.vue"; 2 | export default Component; 3 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/dist/types/components/LayoutSeiExternal/index.d.ts: -------------------------------------------------------------------------------- 1 | import Component from "./LayoutSeiExternal.vue"; 2 | export default Component; 3 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/dist/types/components/LayoutSeiExternalFooter/LayoutSeiExternalFooter.vue.d.ts: -------------------------------------------------------------------------------- 1 | declare const _default: import("vue").DefineComponent<{}, {}, {}, { 2 | year(): number; 3 | socialSprites(): string; 4 | }, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly>, {}>; 5 | export default _default; 6 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/dist/types/components/LayoutSeiExternalFooter/index.d.ts: -------------------------------------------------------------------------------- 1 | import Component from "./LayoutSeiExternalFooter.vue"; 2 | export default Component; 3 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/dist/types/components/LayoutSeiExternalHeader/LayoutSeiExternalHeader.vue.d.ts: -------------------------------------------------------------------------------- 1 | declare const _default: import("vue").DefineComponent<{ 2 | /** 3 | * An object containing various properties that display in the header. 4 | */ 5 | page: { 6 | type: ObjectConstructor; 7 | default: () => {}; 8 | }; 9 | }, unknown, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly {}; 16 | }; 17 | }>>, { 18 | page: Record; 19 | }>; 20 | export default _default; 21 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/dist/types/components/LayoutSeiExternalHeader/index.d.ts: -------------------------------------------------------------------------------- 1 | import Component from "./LayoutSeiExternalHeader.vue"; 2 | export default Component; 3 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/dist/types/components/LayoutSeiExternalHeaderContent/LayoutSeiExternalHeaderContent.vue.d.ts: -------------------------------------------------------------------------------- 1 | declare const _default: import("vue").DefineComponent<{ 2 | /** 3 | * An object containing various properties that display in the content. 4 | */ 5 | page: { 6 | type: ObjectConstructor; 7 | default: () => {}; 8 | }; 9 | }, unknown, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly {}; 16 | }; 17 | }>>, { 18 | page: Record; 19 | }>; 20 | export default _default; 21 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/dist/types/components/LayoutSeiExternalHeaderContent/index.d.ts: -------------------------------------------------------------------------------- 1 | import Component from "./LayoutSeiExternalHeaderContent.vue"; 2 | export default Component; 3 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/dist/types/components/LayoutSeiExternalMasthead/LayoutSeiExternalMasthead.vue.d.ts: -------------------------------------------------------------------------------- 1 | declare const _default: import("vue").DefineComponent<{ 2 | /** 3 | * An object containing various properties that display in the masthead. 4 | */ 5 | page: { 6 | type: ObjectConstructor; 7 | default: () => {}; 8 | }; 9 | }, unknown, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly {}; 16 | }; 17 | }>>, { 18 | page: Record; 19 | }>; 20 | export default _default; 21 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/dist/types/components/LayoutSeiExternalMasthead/index.d.ts: -------------------------------------------------------------------------------- 1 | import Component from "./LayoutSeiExternalMasthead.vue"; 2 | export default Component; 3 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/dist/types/components/LayoutSeiExternalNav/LayoutSeiExternalNav.vue.d.ts: -------------------------------------------------------------------------------- 1 | declare const _default: import("vue").DefineComponent<{ 2 | /** 3 | * An object containing various properties that determine the navigation. 4 | */ 5 | page: { 6 | type: ObjectConstructor; 7 | default: () => {}; 8 | }; 9 | }, unknown, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly {}; 16 | }; 17 | }>>, { 18 | page: Record; 19 | }>; 20 | export default _default; 21 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/dist/types/components/LayoutSeiExternalNav/index.d.ts: -------------------------------------------------------------------------------- 1 | import Component from "./LayoutSeiExternalNav.vue"; 2 | export default Component; 3 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/dist/types/components/LayoutSeiExternalWordmark/LayoutSeiExternalWordmark.vue.d.ts: -------------------------------------------------------------------------------- 1 | declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly>, {}>; 2 | export default _default; 3 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/dist/types/components/LayoutSeiExternalWordmark/index.d.ts: -------------------------------------------------------------------------------- 1 | import Component from "./LayoutSeiExternalWordmark.vue"; 2 | export default Component; 3 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/dist/types/components/LayoutStacked/index.d.ts: -------------------------------------------------------------------------------- 1 | import Component from "./LayoutStacked.vue"; 2 | export default Component; 3 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/dist/types/components/Link/index.d.ts: -------------------------------------------------------------------------------- 1 | import Component from "./Link.vue"; 2 | export default Component; 3 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/dist/types/components/LoadingBox/index.d.ts: -------------------------------------------------------------------------------- 1 | import Component from "./LoadingBox.vue"; 2 | export default Component; 3 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/dist/types/components/LoadingSpinner/index.d.ts: -------------------------------------------------------------------------------- 1 | import Component from "./LoadingSpinner.vue"; 2 | export default Component; 3 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/dist/types/components/Modal/index.d.ts: -------------------------------------------------------------------------------- 1 | import Component from "./Modal.vue"; 2 | export default Component; 3 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/dist/types/components/Multiselect/index.d.ts: -------------------------------------------------------------------------------- 1 | import Component from "./Multiselect.vue"; 2 | export default Component; 3 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/dist/types/components/Paginator/index.d.ts: -------------------------------------------------------------------------------- 1 | import Component from "./Paginator.vue"; 2 | export default Component; 3 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/dist/types/components/Popover/index.d.ts: -------------------------------------------------------------------------------- 1 | import Component from "./Popover.vue"; 2 | export default Component; 3 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/dist/types/components/RadioGroup/index.d.ts: -------------------------------------------------------------------------------- 1 | import Component from "./RadioGroup.vue"; 2 | export default Component; 3 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/dist/types/components/ScrollArea/ScrollArea.vue.d.ts: -------------------------------------------------------------------------------- 1 | declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly>, {}>; 2 | export default _default; 3 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/dist/types/components/ScrollArea/index.d.ts: -------------------------------------------------------------------------------- 1 | import Component from "./ScrollArea.vue"; 2 | export default Component; 3 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/dist/types/components/Scrollspy/index.d.ts: -------------------------------------------------------------------------------- 1 | import Component from "./Scrollspy.vue"; 2 | export default Component; 3 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/dist/types/components/SearchBox/index.d.ts: -------------------------------------------------------------------------------- 1 | import Component from "./SearchBox.vue"; 2 | export default Component; 3 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/dist/types/components/Section/index.d.ts: -------------------------------------------------------------------------------- 1 | import Component from "./Section.vue"; 2 | export default Component; 3 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/dist/types/components/Select/index.d.ts: -------------------------------------------------------------------------------- 1 | import Component from "./Select.vue"; 2 | export default Component; 3 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/dist/types/components/Table/index.d.ts: -------------------------------------------------------------------------------- 1 | import Component from "./Table.vue"; 2 | export default Component; 3 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/dist/types/components/Tabs/index.d.ts: -------------------------------------------------------------------------------- 1 | import Component from "./Tabs.vue"; 2 | export default Component; 3 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/dist/types/components/Textarea/index.d.ts: -------------------------------------------------------------------------------- 1 | import Component from "./Textarea.vue"; 2 | export default Component; 3 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/dist/types/components/Toast/index.d.ts: -------------------------------------------------------------------------------- 1 | import Component from "./Toast.vue"; 2 | export default Component; 3 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/dist/types/components/Toaster/index.d.ts: -------------------------------------------------------------------------------- 1 | import Component from "./Toaster.vue"; 2 | export default Component; 3 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/dist/types/components/ToggleSwitch/index.d.ts: -------------------------------------------------------------------------------- 1 | import Component from "./ToggleSwitch.vue"; 2 | export default Component; 3 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/dist/types/components/Tooltip/index.d.ts: -------------------------------------------------------------------------------- 1 | import Component from "./Tooltip.vue"; 2 | export default Component; 3 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/dist/types/components/TopFiveChart/index.d.ts: -------------------------------------------------------------------------------- 1 | import Component from "./TopFiveChart.vue"; 2 | export default Component; 3 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/dist/types/docs/components/Components.vue.d.ts: -------------------------------------------------------------------------------- 1 | declare const _default: import("vue").DefineComponent<{}, {}, { 2 | openModal: boolean; 3 | openDropdown: boolean; 4 | }, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly>, {}>; 5 | export default _default; 6 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/dist/types/helpers/debounce.d.ts: -------------------------------------------------------------------------------- 1 | export default function debounce(func: Function, wait: number, immediate?: Boolean): (this: any, ...args: any[]) => void; 2 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/dist/types/helpers/throttle.d.ts: -------------------------------------------------------------------------------- 1 | export default function throttle(fn: Function, wait: number): (...args: any[]) => void; 2 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/dist/types/helpers/throttleAndDebounce.d.ts: -------------------------------------------------------------------------------- 1 | export declare function throttleAndDebounce(fn: () => void, delay: number): () => void; 2 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/dist/types/helpers/uuid.d.ts: -------------------------------------------------------------------------------- 1 | export default function uuid(): string; 2 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/dist/types/main.d.ts: -------------------------------------------------------------------------------- 1 | import "@sds/tailwindcss-3/open-sans/index.css"; 2 | import "./index.css"; 3 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/assets/images/sprites-social.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cisagov/pentest-reporting-engine/25570b9cfdc08900799ccf3146c3053bb16519f3/node/dependencies/components-vue3/src/assets/images/sprites-social.png -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/Autosuggest/index.ts: -------------------------------------------------------------------------------- 1 | import { App } from "vue"; 2 | import Component from "./Autosuggest.vue"; 3 | 4 | Component.install = (Vue: App) => { 5 | Vue.component(Component.name, Component); 6 | } 7 | 8 | export default Component; 9 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/Badge/Badge.spec.ts: -------------------------------------------------------------------------------- 1 | import { describe, expect, it } from 'vitest' 2 | import { shallowMount } from '@vue/test-utils' 3 | import Component from './Badge.vue' 4 | 5 | describe('Badge', () => { 6 | it('should match its default snapshot', () => { 7 | const wrapper = shallowMount(Component, { 8 | slots: { 9 | default: 'Badge' 10 | } 11 | }) 12 | expect(wrapper.element).toMatchSnapshot() 13 | }) 14 | 15 | it('should match its variant primary, type light-border snapshot', () => { 16 | const wrapper = shallowMount(Component, { 17 | slots: { 18 | default: 'Badge' 19 | }, 20 | props: { 21 | variant: 'primary', 22 | type: 'light-border' 23 | } 24 | }) 25 | expect(wrapper.element).toMatchSnapshot() 26 | }) 27 | }) -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/Badge/Badge.stories.js: -------------------------------------------------------------------------------- 1 | import SdsBadge from './Badge.vue'; 2 | 3 | export default { 4 | title: 'Data Visualization/Badge', 5 | parameters: { 6 | docs: { 7 | description: { 8 | component: 'A badge is a visual indicator used to label, organize, or categorize an item for quick recognition.', 9 | }, 10 | }, 11 | }, 12 | component: SdsBadge, 13 | argTypes: { 14 | variant: { 15 | options: ['gray', 'tan', 'yellow', 'orange', 'pink', 'red', 'purple', 'indigo', 'blue', 'teal', 'green'], 16 | control: { type: 'select' } 17 | }, 18 | type: { 19 | options: ['light-border', 'light', 'medium', 'dark'], 20 | control: { type: 'select' } 21 | } 22 | } 23 | }; 24 | 25 | const Template = (args) => ({ 26 | components: { SdsBadge }, 27 | setup() { 28 | return { args } 29 | }, 30 | template: ` 31 | Badge 32 | ` 33 | }); 34 | 35 | export const Default = Template.bind({}); 36 | Default.args = {}; 37 | 38 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/Badge/__snapshots__/Badge.spec.ts.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1 2 | 3 | exports[`Badge > should match its default snapshot 1`] = ` 4 |
8 | 9 | Badge 10 | 11 |
12 | `; 13 | 14 | exports[`Badge > should match its variant primary, type light-border snapshot 1`] = ` 15 |
19 | 20 | Badge 21 | 22 |
23 | `; 24 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/Badge/index.ts: -------------------------------------------------------------------------------- 1 | import { App } from "vue"; 2 | import Component from "./Badge.vue"; 3 | 4 | Component.install = (Vue: App) => { 5 | Vue.component(Component.name, Component); 6 | } 7 | 8 | export default Component; 9 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/Button/Button.spec.ts: -------------------------------------------------------------------------------- 1 | import { describe, expect, it } from 'vitest' 2 | import { shallowMount } from '@vue/test-utils' 3 | import Component from './Button.vue' 4 | 5 | describe('Button', () => { 6 | it('should match its default snapshot', () => { 7 | const wrapper = shallowMount(Component, { 8 | slots: { 9 | default: 'Button' 10 | } 11 | }) 12 | expect(wrapper.element).toMatchSnapshot() 13 | }) 14 | 15 | it('should match its variant primary snapshot', () => { 16 | const wrapper = shallowMount(Component, { 17 | slots: { 18 | default: 'Button' 19 | }, 20 | props: { 21 | variant: 'primary' 22 | } 23 | }) 24 | expect(wrapper.element).toMatchSnapshot() 25 | }) 26 | }) -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/Button/__snapshots__/Button.spec.ts.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1 2 | 3 | exports[`Button > should match its default snapshot 1`] = ` 4 | 12 | `; 13 | 14 | exports[`Button > should match its variant primary snapshot 1`] = ` 15 | 23 | `; 24 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/Button/index.ts: -------------------------------------------------------------------------------- 1 | import { App } from "vue"; 2 | import Component from "./Button.vue"; 3 | 4 | Component.install = (Vue: App) => { 5 | Vue.component(Component.name, Component); 6 | } 7 | 8 | export default Component; 9 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/Calendar/Calendar.spec.js: -------------------------------------------------------------------------------- 1 | import { describe, expect, it, vi } from 'vitest' 2 | import { shallowMount } from '@vue/test-utils' 3 | import Component from './Calendar.vue' 4 | 5 | describe('Calendar', () => { 6 | it('should match its default snapshot', () => { 7 | const date = new Date(2021, 11, 19) 8 | vi.useFakeTimers() 9 | vi.setSystemTime(date) 10 | const wrapper = shallowMount(Component, { 11 | props: { 12 | modelValue: null 13 | } 14 | }) 15 | expect(wrapper.element).toMatchSnapshot() 16 | }) 17 | }) 18 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/Calendar/index.ts: -------------------------------------------------------------------------------- 1 | import { App } from "vue"; 2 | import Component from "./Calendar.vue"; 3 | 4 | Component.install = (Vue: App) => { 5 | Vue.component(Component.name, Component); 6 | } 7 | 8 | export default Component; 9 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/CharacterCounter/CharacterCounter.spec.js: -------------------------------------------------------------------------------- 1 | import { describe, expect, it } from 'vitest' 2 | import { shallowMount } from '@vue/test-utils' 3 | import Component from './CharacterCounter.vue' 4 | 5 | describe('CharacterCounter', () => { 6 | it('should match its default snapshot', () => { 7 | const wrapper = shallowMount(Component, {}) 8 | expect(wrapper.element).toMatchSnapshot() 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/CharacterCounter/CharacterCounter.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 35 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/CharacterCounter/__snapshots__/CharacterCounter.spec.js.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1 2 | 3 | exports[`CharacterCounter > should match its default snapshot 1`] = ` 4 |
8 | 0 9 |
10 | `; 11 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/CharacterCounter/index.ts: -------------------------------------------------------------------------------- 1 | import { App } from "vue"; 2 | import Component from "./CharacterCounter.vue"; 3 | 4 | Component.install = (Vue: App) => { 5 | Vue.component(Component.name, Component); 6 | } 7 | 8 | export default Component; 9 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/CheckboxGroup/CheckboxGroup.spec.js: -------------------------------------------------------------------------------- 1 | import { describe, expect, it } from 'vitest' 2 | import { shallowMount } from '@vue/test-utils' 3 | import Component from './CheckboxGroup.vue' 4 | 5 | describe('CheckboxGroup', () => { 6 | it('should match its default snapshot', () => { 7 | const wrapper = shallowMount(Component, {}) 8 | expect(wrapper.element).toMatchSnapshot() 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.spec.js.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1 2 | 3 | exports[`CheckboxGroup > should match its default snapshot 1`] = ` 4 |
11 | 12 | 13 |
14 | `; 15 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/CheckboxGroup/index.ts: -------------------------------------------------------------------------------- 1 | import { App } from "vue"; 2 | import Component from "./CheckboxGroup.vue"; 3 | 4 | Component.install = (Vue: App) => { 5 | Vue.component(Component.name, Component); 6 | } 7 | 8 | export default Component; 9 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/ClientOnly/ClientOnly.vue: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/ClientOnly/index.ts: -------------------------------------------------------------------------------- 1 | import { App } from "vue"; 2 | import Component from "./ClientOnly.vue"; 3 | 4 | Component.install = (Vue: App) => { 5 | Vue.component(Component.name, Component); 6 | } 7 | 8 | export default Component; 9 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/Datapoint/Datapoint.spec.ts: -------------------------------------------------------------------------------- 1 | import { describe, expect, it } from 'vitest' 2 | import { shallowMount } from '@vue/test-utils' 3 | import Component from './Datapoint.vue' 4 | 5 | describe('Datapoint', () => { 6 | it('should match its default snapshot', () => { 7 | const wrapper = shallowMount(Component, { 8 | slots: { 9 | default: '4000', 10 | label: 'label', 11 | context: 'context' 12 | } 13 | }) 14 | expect(wrapper.element).toMatchSnapshot() 15 | }) 16 | 17 | it('should match its variant green, size sm, label, and context slots snapshot', () => { 18 | const wrapper = shallowMount(Component, { 19 | slots: { 20 | default: '2000' 21 | }, 22 | props: { 23 | variant: 'green', 24 | size: 'sm', 25 | label: 'label', 26 | context: 'context' 27 | } 28 | }) 29 | expect(wrapper.element).toMatchSnapshot() 30 | }) 31 | }) -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/Datapoint/Datapoint.stories.js: -------------------------------------------------------------------------------- 1 | import SdsDatapoint from './Datapoint.vue'; 2 | 3 | export default { 4 | title: 'Data Visualization/Datapoint', 5 | parameters: { 6 | docs: { 7 | description: { 8 | component: 'BETA: A datapoint displays at-a-glance data for a user to quickly view key metrics.', 9 | }, 10 | }, 11 | }, 12 | component: SdsDatapoint, 13 | argTypes: { 14 | variant: { 15 | options: ['', 'gray', 'tan', 'yellow', 'orange', 'pink', 'red', 'purple', 'indigo', 'blue', 'teal', 'green'], 16 | control: { type: 'select' } 17 | }, 18 | size: { 19 | options: ['sm', 'md', 'lg'], 20 | control: { type: 'select' } 21 | } 22 | } 23 | }; 24 | 25 | const Template = (args) => ({ 26 | components: { SdsDatapoint }, 27 | setup() { 28 | return { args } 29 | }, 30 | template: ` 31 | 32 | ` 33 | }); 34 | 35 | export const Default = Template.bind({}); 36 | Default.args = { 37 | modelValue: 8675309, 38 | label: 'Label', 39 | context: 'Context' 40 | }; 41 | 42 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/Datapoint/index.ts: -------------------------------------------------------------------------------- 1 | import { App } from "vue"; 2 | import Component from "./Datapoint.vue"; 3 | 4 | Component.install = (Vue: App) => { 5 | Vue.component(Component.name, Component); 6 | } 7 | 8 | export default Component; 9 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/Datepicker/Datepicker.spec.js: -------------------------------------------------------------------------------- 1 | import { describe, expect, it } from 'vitest' 2 | import { shallowMount } from '@vue/test-utils' 3 | import Component from './Datepicker.vue' 4 | 5 | describe('Datepicker', () => { 6 | it('should match its default snapshot', () => { 7 | const wrapper = shallowMount(Component, {}) 8 | expect(wrapper.element).toMatchSnapshot() 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/Datepicker/index.ts: -------------------------------------------------------------------------------- 1 | import { App } from "vue"; 2 | import Component from "./Datepicker.vue"; 3 | 4 | Component.install = (Vue: App) => { 5 | Vue.component(Component.name, Component); 6 | } 7 | 8 | export default Component; 9 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/Dropdown/Dropdown.spec.js: -------------------------------------------------------------------------------- 1 | import { describe, expect, it } from 'vitest' 2 | import { shallowMount } from '@vue/test-utils' 3 | import Component from './Dropdown.vue' 4 | 5 | describe('Dropdown', () => { 6 | it('should match its default snapshot', () => { 7 | const wrapper = shallowMount(Component, { 8 | directives: { 9 | 'uid': { 10 | created(el) { 11 | el.setAttribute('id', 'unique-id') 12 | } 13 | } 14 | } 15 | }) 16 | expect(wrapper.element).toMatchSnapshot() 17 | }) 18 | }) 19 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/Dropdown/__snapshots__/Dropdown.spec.js.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1 2 | 3 | exports[`Dropdown > should match its default snapshot 1`] = ` 4 |
8 |
11 | 12 | 13 | 36 | 37 | 38 |
39 | 40 |
41 | `; 42 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/Dropdown/index.ts: -------------------------------------------------------------------------------- 1 | import { App } from "vue"; 2 | import Component from "./Dropdown.vue"; 3 | 4 | Component.install = (Vue: App) => { 5 | Vue.component(Component.name, Component); 6 | } 7 | 8 | export default Component; 9 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/DropdownDivider/DropdownDivider.spec.js: -------------------------------------------------------------------------------- 1 | import { describe, expect, it } from 'vitest' 2 | import { shallowMount } from '@vue/test-utils' 3 | import Component from './DropdownDivider.vue' 4 | 5 | describe('DropdownDivider', () => { 6 | it('should match its default snapshot', () => { 7 | const wrapper = shallowMount(Component, {}) 8 | expect(wrapper.element).toMatchSnapshot() 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/DropdownDivider/DropdownDivider.stories.js: -------------------------------------------------------------------------------- 1 | import SdsDropdownDivider from './DropdownDivider.vue'; 2 | 3 | export default { 4 | title: 'Buttons/Dropdowns/Dropdown/Dropdown Divider', 5 | parameters: { 6 | docs: { 7 | description: { 8 | component: 'A divider for use as a child to a dropdown.', 9 | }, 10 | }, 11 | }, 12 | component: SdsDropdownDivider, 13 | argTypes: { 14 | } 15 | }; 16 | 17 | const Template = (args) => ({ 18 | components: { SdsDropdownDivider }, 19 | setup() { 20 | return { args } 21 | }, 22 | template: ` 23 | 24 | ` 25 | }); 26 | 27 | export const Default = Template.bind({}); 28 | Default.args = {}; 29 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/DropdownDivider/DropdownDivider.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/DropdownDivider/__snapshots__/DropdownDivider.spec.js.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1 2 | 3 | exports[`DropdownDivider > should match its default snapshot 1`] = ` 4 |
8 | `; 9 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/DropdownDivider/index.ts: -------------------------------------------------------------------------------- 1 | import { App } from "vue"; 2 | import Component from "./DropdownDivider.vue"; 3 | 4 | Component.install = (Vue: App) => { 5 | Vue.component(Component.name, Component); 6 | } 7 | 8 | export default Component; 9 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/DropdownHeader/DropdownHeader.spec.js: -------------------------------------------------------------------------------- 1 | import { describe, expect, it } from 'vitest' 2 | import { shallowMount } from '@vue/test-utils' 3 | import Component from './DropdownHeader.vue' 4 | 5 | describe('DropdownHeader', () => { 6 | it('should match its default snapshot', () => { 7 | const wrapper = shallowMount(Component, {}) 8 | expect(wrapper.element).toMatchSnapshot() 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/DropdownHeader/DropdownHeader.stories.js: -------------------------------------------------------------------------------- 1 | import SdsDropdownHeader from './DropdownHeader.vue'; 2 | 3 | export default { 4 | title: 'Buttons/Dropdowns/Dropdown/Dropdown Header', 5 | parameters: { 6 | docs: { 7 | description: { 8 | component: 'A divider for use as a child to a dropdown.', 9 | }, 10 | }, 11 | }, 12 | component: SdsDropdownHeader, 13 | argTypes: { 14 | } 15 | }; 16 | 17 | const Template = (args) => ({ 18 | components: { SdsDropdownHeader }, 19 | setup() { 20 | return { args } 21 | }, 22 | template: ` 23 | 24 | Dropdown header 25 | 26 | ` 27 | }); 28 | 29 | export const Default = Template.bind({}); 30 | Default.args = {}; 31 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/DropdownHeader/DropdownHeader.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/DropdownHeader/__snapshots__/DropdownHeader.spec.js.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1 2 | 3 | exports[`DropdownHeader > should match its default snapshot 1`] = ` 4 |
8 | 9 | 10 |
11 | `; 12 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/DropdownHeader/index.ts: -------------------------------------------------------------------------------- 1 | import { App } from "vue"; 2 | import Component from "./DropdownHeader.vue"; 3 | 4 | Component.install = (Vue: App) => { 5 | Vue.component(Component.name, Component); 6 | } 7 | 8 | export default Component; 9 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/DropdownItem/DropdownItem.spec.js: -------------------------------------------------------------------------------- 1 | import { describe, expect, it, vi } from 'vitest' 2 | import { shallowMount } from '@vue/test-utils' 3 | import Component from './DropdownItem.vue' 4 | 5 | describe('DropdownItem', () => { 6 | it('should match its default snapshot', () => { 7 | const wrapper = shallowMount(Component, { 8 | global: { 9 | provide: { 10 | emitter: vi.fn() 11 | } 12 | } 13 | }) 14 | expect(wrapper.element).toMatchSnapshot() 15 | }) 16 | }) 17 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/DropdownItem/DropdownItem.stories.js: -------------------------------------------------------------------------------- 1 | import SdsDropdownItem from './DropdownItem.vue'; 2 | 3 | export default { 4 | title: 'Buttons/Dropdowns/Dropdown/Dropdown Item', 5 | parameters: { 6 | docs: { 7 | description: { 8 | component: 'An item for use as a child to a dropdown.', 9 | }, 10 | }, 11 | }, 12 | component: SdsDropdownItem, 13 | argTypes: { 14 | tag: { 15 | options: ['a', 'button'], 16 | control: { type: 'radio' } 17 | } 18 | } 19 | }; 20 | 21 | const Template = (args) => ({ 22 | components: { SdsDropdownItem }, 23 | setup() { 24 | return { args } 25 | }, 26 | template: ` 27 | 28 | Dropdown item 29 | 30 | ` 31 | }); 32 | 33 | export const Default = Template.bind({}); 34 | Default.args = {}; 35 | 36 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/DropdownItem/__snapshots__/DropdownItem.spec.js.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1 2 | 3 | exports[`DropdownItem > should match its default snapshot 1`] = ` 4 | 10 | 11 | 12 | 13 | `; 14 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/DropdownItem/index.ts: -------------------------------------------------------------------------------- 1 | import { App } from "vue"; 2 | import Component from "./DropdownItem.vue"; 3 | 4 | Component.install = (Vue: App) => { 5 | Vue.component(Component.name, Component); 6 | } 7 | 8 | export default Component; 9 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/FileUploader/FileUploader.spec.js: -------------------------------------------------------------------------------- 1 | import { describe, expect, it, vi } from 'vitest' 2 | import { shallowMount } from '@vue/test-utils' 3 | import Component from './FileUploader.vue' 4 | 5 | describe('FileUploader', () => { 6 | it('should match its default snapshot', () => { 7 | const wrapper = shallowMount(Component, { 8 | directives: { 9 | 'uid': { 10 | created(el) { 11 | el.setAttribute('id', 'unique-id') 12 | } 13 | } 14 | } 15 | }) 16 | expect(wrapper.element).toMatchSnapshot() 17 | }) 18 | }) 19 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/FileUploader/index.ts: -------------------------------------------------------------------------------- 1 | import { App } from "vue"; 2 | import Component from "./FileUploader.vue"; 3 | 4 | Component.install = (Vue: App) => { 5 | Vue.component(Component.name, Component); 6 | } 7 | 8 | export default Component; 9 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/FilterByDropdown/FilterByDropdown.spec.js: -------------------------------------------------------------------------------- 1 | import { describe, expect, it } from 'vitest' 2 | import { shallowMount } from '@vue/test-utils' 3 | import Component from "./FilterByDropdown.vue"; 4 | 5 | describe("FilterByDropdown.vue", () => { 6 | it("is a Vue instance", () => { 7 | const wrapper = shallowMount(Component, { 8 | directives: { 9 | 'uid': { 10 | created(el) { 11 | el.setAttribute('id', 'unique-id') 12 | } 13 | } 14 | } 15 | }) 16 | expect(wrapper.vm).toBeTruthy(); 17 | }); 18 | 19 | it("matches snapshot with no props assigned", async () => { 20 | const props = {}; 21 | const wrapper = shallowMount(Component, { 22 | props, 23 | directives: { 24 | 'uid': { 25 | created(el) { 26 | el.setAttribute('id', 'unique-id') 27 | } 28 | } 29 | } 30 | }); 31 | expect(wrapper.html()).toMatchSnapshot(); 32 | }); 33 | }); 34 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/FilterByDropdown/__snapshots__/FilterByDropdown.spec.js.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1 2 | 3 | exports[`FilterByDropdown.vue > matches snapshot with no props assigned 1`] = ` 4 | "
5 |
8 | 9 |
" 10 | `; 11 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/FilterByDropdown/index.ts: -------------------------------------------------------------------------------- 1 | import { App } from "vue"; 2 | import Component from "./FilterByDropdown.vue"; 3 | 4 | Component.install = (Vue: App) => { 5 | Vue.component(Component.name, Component); 6 | } 7 | 8 | export default Component; 9 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/FloatingUi/FloatingUi.spec.js: -------------------------------------------------------------------------------- 1 | import { describe, expect, it } from 'vitest' 2 | import { shallowMount } from '@vue/test-utils' 3 | import Component from "./FloatingUi.vue"; 4 | 5 | describe("FloatingUi.vue", () => { 6 | it("is a Vue instance", () => { 7 | const wrapper = shallowMount(Component); 8 | expect(wrapper.vm).toBeTruthy(); 9 | }); 10 | 11 | it("matches snapshot with no props assigned", async () => { 12 | const props = {}; 13 | const wrapper = shallowMount(Component, { props }); 14 | expect(wrapper.html()).toMatchSnapshot(); 15 | }); 16 | }); 17 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/FloatingUi/__snapshots__/FloatingUi.spec.js.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1 2 | 3 | exports[`FloatingUi.vue > matches snapshot with no props assigned 1`] = ` 4 | "
5 |
6 | 7 |
" 8 | `; 9 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/FloatingUi/index.ts: -------------------------------------------------------------------------------- 1 | import { App } from "vue"; 2 | import Component from "./FloatingUi.vue"; 3 | 4 | Component.install = (Vue: App) => { 5 | Vue.component(Component.name, Component); 6 | } 7 | 8 | export default Component; 9 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/Input/Input.spec.js: -------------------------------------------------------------------------------- 1 | import { describe, expect, it } from 'vitest' 2 | import { shallowMount } from '@vue/test-utils' 3 | import Component from './Input.vue' 4 | 5 | describe('Input', () => { 6 | it('should match its default snapshot', () => { 7 | const wrapper = shallowMount(Component, {}) 8 | expect(wrapper.element).toMatchSnapshot() 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/Input/Input.stories.js: -------------------------------------------------------------------------------- 1 | import SdsInput from './Input.vue'; 2 | 3 | export default { 4 | title: 'Inputs/Text fields/Input', 5 | parameters: { 6 | docs: { 7 | description: { 8 | component: 'An input is a standard text field that allows users to enter a freeform response that includes letters, numbers, or symbols.', 9 | }, 10 | }, 11 | }, 12 | component: SdsInput, 13 | argTypes: { 14 | type: { 15 | options: ['email', 'number', 'password', 'search', 'tel', 'text', 'url'], 16 | control: { type: 'select' } 17 | } 18 | } 19 | }; 20 | 21 | const Template = (args) => ({ 22 | components: { SdsInput }, 23 | setup() { 24 | return { args } 25 | }, 26 | template: ` 27 | 28 | `, 29 | data() { 30 | return { localValue: this.$props.modelValue } 31 | }, 32 | watch: { 33 | modelValue(value) { 34 | this.localValue = value 35 | } 36 | }, 37 | }); 38 | 39 | export const Default = Template.bind({}); 40 | Default.args = {}; 41 | 42 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/Input/__snapshots__/Input.spec.js.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1 2 | 3 | exports[`Input > should match its default snapshot 1`] = ` 4 |
7 | 13 | 14 |
15 | `; 16 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/Input/index.ts: -------------------------------------------------------------------------------- 1 | import { App } from "vue"; 2 | import Component from "./Input.vue"; 3 | 4 | Component.install = (Vue: App) => { 5 | Vue.component(Component.name, Component); 6 | } 7 | 8 | export default Component; 9 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/LayoutApp/LayoutApp.spec.ts: -------------------------------------------------------------------------------- 1 | import { describe, expect, it } from 'vitest' 2 | import { shallowMount } from '@vue/test-utils' 3 | import Component from './LayoutApp.vue' 4 | 5 | describe('LayoutApp', () => { 6 | it('should match its default snapshot', () => { 7 | const wrapper = shallowMount(Component, { 8 | slots: { 9 | default: 'Button' 10 | } 11 | }) 12 | expect(wrapper.element).toMatchSnapshot() 13 | }) 14 | }) -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/LayoutApp/index.ts: -------------------------------------------------------------------------------- 1 | import { App } from "vue"; 2 | import Component from "./LayoutApp.vue"; 3 | 4 | Component.install = (Vue: App) => { 5 | Vue.component(Component.name, Component); 6 | } 7 | 8 | export default Component; 9 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/LayoutSeiExternal/LayoutSeiExternal.spec.js: -------------------------------------------------------------------------------- 1 | import { describe, expect, it } from 'vitest' 2 | import { shallowMount } from '@vue/test-utils' 3 | import Component from './LayoutSeiExternal.vue' 4 | 5 | describe('LayoutSeiExternal', () => { 6 | it('should match its default snapshot', () => { 7 | const wrapper = shallowMount(Component, {}) 8 | expect(wrapper.element).toMatchSnapshot() 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/LayoutSeiExternal/index.ts: -------------------------------------------------------------------------------- 1 | import { App } from "vue"; 2 | import Component from "./LayoutSeiExternal.vue"; 3 | 4 | Component.install = (Vue: App) => { 5 | Vue.component(Component.name, Component); 6 | } 7 | 8 | export default Component; 9 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/LayoutSeiExternalFooter/LayoutSeiExternalFooter.spec.js: -------------------------------------------------------------------------------- 1 | import { describe, expect, it } from 'vitest' 2 | import { shallowMount } from '@vue/test-utils' 3 | import Component from './LayoutSeiExternalFooter.vue' 4 | 5 | describe('LayoutSeiExternalFooter', () => { 6 | it('should match its default snapshot', () => { 7 | const wrapper = shallowMount(Component, {}) 8 | expect(wrapper.element).toMatchSnapshot() 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/LayoutSeiExternalFooter/LayoutSeiExternalFooter.stories.js: -------------------------------------------------------------------------------- 1 | import SdsLayoutSeiExternalFooter from './LayoutSeiExternalFooter.vue'; 2 | 3 | export default { 4 | title: 'Layouts/Layout SEI External/Layout SEI External Footer', 5 | parameters: { 6 | docs: { 7 | description: { 8 | component: 'The footer for the LayoutSeiExternal layout.', 9 | }, 10 | }, 11 | }, 12 | component: SdsLayoutSeiExternalFooter, 13 | argTypes: {} 14 | }; 15 | 16 | const Template = (args) => ({ 17 | components: { SdsLayoutSeiExternalFooter }, 18 | setup() { 19 | return { args } 20 | }, 21 | template: ` 22 | 23 | ` 24 | }); 25 | 26 | export const Default = Template.bind({}); 27 | Default.args = {}; 28 | 29 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/LayoutSeiExternalFooter/index.ts: -------------------------------------------------------------------------------- 1 | import { App } from "vue"; 2 | import Component from "./LayoutSeiExternalFooter.vue"; 3 | 4 | Component.install = (Vue: App) => { 5 | Vue.component(Component.name, Component); 6 | } 7 | 8 | export default Component; 9 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/LayoutSeiExternalHeader/LayoutSeiExternalHeader.spec.js: -------------------------------------------------------------------------------- 1 | import { describe, expect, it } from 'vitest' 2 | import { shallowMount } from '@vue/test-utils' 3 | import Component from './LayoutSeiExternalHeader.vue' 4 | 5 | describe('LayoutSeiExternalHeader', () => { 6 | it('should match its default snapshot', () => { 7 | const wrapper = shallowMount(Component, {}) 8 | expect(wrapper.element).toMatchSnapshot() 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/LayoutSeiExternalHeader/index.ts: -------------------------------------------------------------------------------- 1 | import { App } from "vue"; 2 | import Component from "./LayoutSeiExternalHeader.vue"; 3 | 4 | Component.install = (Vue: App) => { 5 | Vue.component(Component.name, Component); 6 | } 7 | 8 | export default Component; 9 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/LayoutSeiExternalHeaderContent/LayoutSeiExternalHeaderContent.spec.js: -------------------------------------------------------------------------------- 1 | import { describe, expect, it } from 'vitest' 2 | import { shallowMount } from '@vue/test-utils' 3 | import Component from './LayoutSeiExternalHeaderContent.vue' 4 | 5 | describe('LayoutSeiExternalHeaderContent', () => { 6 | it('should match its default snapshot', () => { 7 | const wrapper = shallowMount(Component, {}) 8 | expect(wrapper.element).toMatchSnapshot() 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/LayoutSeiExternalHeaderContent/LayoutSeiExternalHeaderContent.vue: -------------------------------------------------------------------------------- 1 | 25 | 26 | 42 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/LayoutSeiExternalHeaderContent/__snapshots__/LayoutSeiExternalHeaderContent.spec.js.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1 2 | 3 | exports[`LayoutSeiExternalHeaderContent > should match its default snapshot 1`] = ` 4 |
8 | 9 | 10 | 11 |
12 | `; 13 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/LayoutSeiExternalHeaderContent/index.ts: -------------------------------------------------------------------------------- 1 | import { App } from "vue"; 2 | import Component from "./LayoutSeiExternalHeaderContent.vue"; 3 | 4 | Component.install = (Vue: App) => { 5 | Vue.component(Component.name, Component); 6 | } 7 | 8 | export default Component; 9 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/LayoutSeiExternalMasthead/LayoutSeiExternalMasthead.spec.js: -------------------------------------------------------------------------------- 1 | import { describe, expect, it } from 'vitest' 2 | import { shallowMount } from '@vue/test-utils' 3 | import Component from './LayoutSeiExternalMasthead.vue' 4 | 5 | describe('LayoutSeiExternalMasthead', () => { 6 | it('should match its default snapshot', () => { 7 | const wrapper = shallowMount(Component, {}) 8 | expect(wrapper.element).toMatchSnapshot() 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/LayoutSeiExternalMasthead/__snapshots__/LayoutSeiExternalMasthead.spec.js.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1 2 | 3 | exports[`LayoutSeiExternalMasthead > should match its default snapshot 1`] = ` 4 |
8 |
11 | 12 | 13 | 14 |
15 |
16 | `; 17 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/LayoutSeiExternalMasthead/index.ts: -------------------------------------------------------------------------------- 1 | import { App } from "vue"; 2 | import Component from "./LayoutSeiExternalMasthead.vue"; 3 | 4 | Component.install = (Vue: App) => { 5 | Vue.component(Component.name, Component); 6 | } 7 | 8 | export default Component; 9 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/LayoutSeiExternalNav/LayoutSeiExternalNav.spec.js: -------------------------------------------------------------------------------- 1 | import { describe, expect, it } from 'vitest' 2 | import { shallowMount } from '@vue/test-utils' 3 | import Component from './LayoutSeiExternalNav.vue' 4 | 5 | describe('LayoutSeiExternalNav', () => { 6 | it('should match its default snapshot', () => { 7 | const wrapper = shallowMount(Component, {}) 8 | expect(wrapper.element).toMatchSnapshot() 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/LayoutSeiExternalNav/__snapshots__/LayoutSeiExternalNav.spec.js.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1 2 | 3 | exports[`LayoutSeiExternalNav > should match its default snapshot 1`] = ` 4 |
8 | 9 | 10 |
11 | `; 12 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/LayoutSeiExternalNav/index.ts: -------------------------------------------------------------------------------- 1 | import { App } from "vue"; 2 | import Component from "./LayoutSeiExternalNav.vue"; 3 | 4 | Component.install = (Vue: App) => { 5 | Vue.component(Component.name, Component); 6 | } 7 | 8 | export default Component; 9 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/LayoutSeiExternalWordmark/LayoutSeiExternalWordmark.spec.js: -------------------------------------------------------------------------------- 1 | import { describe, expect, it } from 'vitest' 2 | import { shallowMount } from '@vue/test-utils' 3 | import Component from './LayoutSeiExternalWordmark.vue' 4 | 5 | describe('LayoutSeiExternalWordmark', () => { 6 | it('should match its default snapshot', () => { 7 | const wrapper = shallowMount(Component, {}) 8 | expect(wrapper.element).toMatchSnapshot() 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/LayoutSeiExternalWordmark/LayoutSeiExternalWordmark.stories.js: -------------------------------------------------------------------------------- 1 | import SdsLayoutSeiExternalWordmark from './LayoutSeiExternalWordmark.vue'; 2 | 3 | export default { 4 | title: 'Layouts/Layout SEI External/Layout SEI External Wordmark', 5 | parameters: { 6 | docs: { 7 | description: { 8 | component: 'The wordmark for the LayoutSeiExternal layout.', 9 | }, 10 | }, 11 | }, 12 | component: SdsLayoutSeiExternalWordmark, 13 | argTypes: {} 14 | }; 15 | 16 | const Template = (args) => ({ 17 | components: { SdsLayoutSeiExternalWordmark }, 18 | setup() { 19 | return { args } 20 | }, 21 | template: ` 22 | 23 | ` 24 | }); 25 | 26 | export const Default = Template.bind({}); 27 | Default.args = {}; 28 | 29 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/LayoutSeiExternalWordmark/index.ts: -------------------------------------------------------------------------------- 1 | import { App } from "vue"; 2 | import Component from "./LayoutSeiExternalWordmark.vue"; 3 | 4 | Component.install = (Vue: App) => { 5 | Vue.component(Component.name, Component); 6 | } 7 | 8 | export default Component; 9 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/LayoutStacked/LayoutStacked.spec.js: -------------------------------------------------------------------------------- 1 | import { describe, expect, it } from 'vitest' 2 | import { shallowMount } from '@vue/test-utils' 3 | import Component from './LayoutStacked.vue' 4 | 5 | describe('LayoutStacked', () => { 6 | it('should match its default snapshot', () => { 7 | const wrapper = shallowMount(Component, {}) 8 | expect(wrapper.element).toMatchSnapshot() 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/LayoutStacked/__snapshots__/LayoutStacked.spec.js.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1 2 | 3 | exports[`LayoutStacked > should match its default snapshot 1`] = ` 4 |
8 | 9 |
12 | 13 | 14 |
15 | 16 |
17 | `; 18 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/LayoutStacked/index.ts: -------------------------------------------------------------------------------- 1 | import { App } from "vue"; 2 | import Component from "./LayoutStacked.vue"; 3 | 4 | Component.install = (Vue: App) => { 5 | Vue.component(Component.name, Component); 6 | } 7 | 8 | export default Component; 9 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/Link/Link.spec.js: -------------------------------------------------------------------------------- 1 | import { describe, expect, it } from 'vitest' 2 | import { shallowMount } from '@vue/test-utils' 3 | import Component from './Link.vue' 4 | 5 | describe('Link', () => { 6 | it('should match its default snapshot', () => { 7 | const wrapper = shallowMount(Component, {}) 8 | expect(wrapper.element).toMatchSnapshot() 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/Link/__snapshots__/Link.spec.js.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1 2 | 3 | exports[`Link > should match its default snapshot 1`] = ` 4 | 8 | 9 | 10 | 11 | `; 12 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/Link/index.ts: -------------------------------------------------------------------------------- 1 | import { App } from "vue"; 2 | import Component from "./Link.vue"; 3 | 4 | Component.install = (Vue: App) => { 5 | Vue.component(Component.name, Component); 6 | } 7 | 8 | export default Component; 9 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/LoadingBox/__snapshots__/LoadingBox.spec.js.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1 2 | 3 | exports[`LoadingBox.vue > matches snapshot 1`] = ` 4 | 9 | `; 10 | 11 | exports[`LoadingBox.vue > matches snapshot with no props assigned 1`] = `""`; 12 | 13 | exports[`LoadingBox.vue > matches snapshot with width and height prop assigned 1`] = `""`; 14 | 15 | exports[`LoadingBox.vue > matches snapshot with width prop assigned 1`] = `""`; 16 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/LoadingBox/index.ts: -------------------------------------------------------------------------------- 1 | import { App } from "vue"; 2 | import Component from "./LoadingBox.vue"; 3 | 4 | Component.install = (Vue: App) => { 5 | Vue.component(Component.name, Component); 6 | } 7 | 8 | export default Component; 9 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/LoadingSpinner/index.ts: -------------------------------------------------------------------------------- 1 | import { App } from "vue"; 2 | import Component from "./LoadingSpinner.vue"; 3 | 4 | Component.install = (Vue: App) => { 5 | Vue.component(Component.name, Component); 6 | } 7 | 8 | export default Component; 9 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/Modal/Modal.spec.js: -------------------------------------------------------------------------------- 1 | import { describe, expect, it } from 'vitest' 2 | import { shallowMount } from '@vue/test-utils' 3 | import Component from './Modal.vue' 4 | 5 | describe('Modal', () => { 6 | it('should match its default snapshot', () => { 7 | const wrapper = shallowMount(Component, {}) 8 | expect(wrapper.element).toMatchSnapshot() 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/Modal/__snapshots__/Modal.spec.js.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1 2 | 3 | exports[`Modal > should match its default snapshot 1`] = ``; 4 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/Modal/index.ts: -------------------------------------------------------------------------------- 1 | import { App } from "vue"; 2 | import Component from "./Modal.vue"; 3 | 4 | Component.install = (Vue: App) => { 5 | Vue.component(Component.name, Component); 6 | } 7 | 8 | export default Component; 9 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/Multiselect/Multiselect.spec.js: -------------------------------------------------------------------------------- 1 | import { describe, expect, it } from 'vitest' 2 | import { shallowMount } from '@vue/test-utils' 3 | import Component from "./Multiselect.vue"; 4 | 5 | describe("Multiselect.vue", () => { 6 | it("is a Vue instance", () => { 7 | const wrapper = shallowMount(Component); 8 | expect(wrapper.vm).toBeTruthy(); 9 | }); 10 | 11 | it("matches snapshot with no props assigned", () => { 12 | const props = {}; 13 | const wrapper = shallowMount(Component, { props }); 14 | expect(wrapper.html()).toMatchSnapshot(); 15 | }); 16 | }); 17 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/Multiselect/__snapshots__/Multiselect.spec.js.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1 2 | 3 | exports[`Multiselect.vue > matches snapshot with no props assigned 1`] = ` 4 | "
5 |
    6 |
  • 7 | 8 |
  • 9 |
10 | 11 |
12 | 13 |
" 14 | `; 15 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/Multiselect/index.ts: -------------------------------------------------------------------------------- 1 | import { App } from "vue"; 2 | import Component from "./Multiselect.vue"; 3 | 4 | Component.install = (Vue: App) => { 5 | Vue.component(Component.name, Component); 6 | } 7 | 8 | export default Component; 9 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/Paginator/Paginator.stories.js: -------------------------------------------------------------------------------- 1 | import SdsPaginator from './Paginator.vue'; 2 | 3 | export default { 4 | title: 'Navigation/Paginator', 5 | parameters: { 6 | docs: { 7 | description: { 8 | component: 'A paginator is a specialized group of buttons that allows users to browse large amounts of content in smaller chunks across multiple pages.', 9 | }, 10 | }, 11 | }, 12 | component: SdsPaginator, 13 | argTypes: { 14 | } 15 | }; 16 | 17 | const Template = (args) => ({ 18 | components: { SdsPaginator }, 19 | setup() { 20 | return { args } 21 | }, 22 | template: ` 23 | 24 | ` 25 | }); 26 | 27 | export const Default = Template.bind({}); 28 | Default.args = { 29 | currentPage: 3, 30 | totalPages: 10 31 | }; 32 | 33 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/Paginator/index.ts: -------------------------------------------------------------------------------- 1 | import { App } from "vue"; 2 | import Component from "./Paginator.vue"; 3 | 4 | Component.install = (Vue: App) => { 5 | Vue.component(Component.name, Component); 6 | } 7 | 8 | export default Component; 9 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/Popover/Popover.spec.js: -------------------------------------------------------------------------------- 1 | import { describe, expect, it } from 'vitest' 2 | import { shallowMount } from '@vue/test-utils' 3 | import Component from "./Popover.vue"; 4 | 5 | describe("Popover.vue", () => { 6 | it("is a Vue instance", () => { 7 | const wrapper = shallowMount(Component); 8 | expect(wrapper.vm).toBeTruthy(); 9 | }); 10 | it("matches snapshot", () => { 11 | const wrapper = shallowMount(Component); 12 | expect(wrapper.element).toMatchSnapshot(); 13 | }); 14 | it("matches snapshot with no props assigned", () => { 15 | const propsData = {}; 16 | const wrapper = shallowMount(Component, { propsData }); 17 | expect(wrapper.html()).toMatchSnapshot(); 18 | }); 19 | it("matches snapshot with prop assigned", () => { 20 | const propsData = { 21 | placement: 'bottom', 22 | size: 'sm', 23 | popoverClass: 'test', 24 | triggerClass: 'test' 25 | }; 26 | const wrapper = shallowMount(Component, { propsData }); 27 | expect(wrapper.html()).toMatchSnapshot(); 28 | }); 29 | 30 | }); 31 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/Popover/__snapshots__/Popover.spec.js.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1 2 | 3 | exports[`Popover.vue > matches snapshot 1`] = ` 4 |
8 |
11 | 12 |
13 | 14 | 15 |
16 | 17 |
18 | 19 |
20 | `; 21 | 22 | exports[`Popover.vue > matches snapshot with no props assigned 1`] = ` 23 | "
24 |
25 |
26 |
27 | 28 |
" 29 | `; 30 | 31 | exports[`Popover.vue > matches snapshot with prop assigned 1`] = ` 32 | "
33 |
34 |
35 |
36 | 37 |
" 38 | `; 39 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/Popover/index.ts: -------------------------------------------------------------------------------- 1 | import { App } from "vue"; 2 | import Component from "./Popover.vue"; 3 | 4 | Component.install = (Vue: App) => { 5 | Vue.component(Component.name, Component); 6 | } 7 | 8 | export default Component; 9 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/RadioGroup/RadioGroup.spec.js: -------------------------------------------------------------------------------- 1 | import { describe, expect, it } from 'vitest' 2 | import { shallowMount } from '@vue/test-utils' 3 | import Component from './RadioGroup.vue' 4 | 5 | describe('RadioGroup', () => { 6 | it('should match its default snapshot', () => { 7 | const wrapper = shallowMount(Component, {}) 8 | expect(wrapper.element).toMatchSnapshot() 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/RadioGroup/RadioGroup.stories.js: -------------------------------------------------------------------------------- 1 | import SdsRadioGroup from './RadioGroup.vue'; 2 | 3 | export default { 4 | title: 'Inputs/Selections/Radio Group', 5 | parameters: { 6 | docs: { 7 | description: { 8 | component: 'A radio group allows users to pick a single option from a list.', 9 | }, 10 | }, 11 | }, 12 | component: SdsRadioGroup, 13 | argTypes: {} 14 | }; 15 | 16 | const Template = (args) => ({ 17 | components: { SdsRadioGroup }, 18 | setup() { 19 | return { args } 20 | }, 21 | template: ` 22 | 23 | `, 24 | data() { 25 | return { localValue: this.$props.modelValue } 26 | }, 27 | watch: { 28 | modelValue(value) { 29 | this.localValue = value 30 | } 31 | }, 32 | }); 33 | 34 | export const Default = Template.bind({}); 35 | Default.args = { 36 | modelValue: true, 37 | options: [ 38 | { id: 1, value: true, text: 'Yes' }, 39 | { id: 2, value: false, text: 'No' }, 40 | ] 41 | }; 42 | 43 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/RadioGroup/__snapshots__/RadioGroup.spec.js.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1 2 | 3 | exports[`RadioGroup > should match its default snapshot 1`] = ` 4 |
11 | 12 | 13 |
14 | `; 15 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/RadioGroup/index.ts: -------------------------------------------------------------------------------- 1 | import { App } from "vue"; 2 | import Component from "./RadioGroup.vue"; 3 | 4 | Component.install = (Vue: App) => { 5 | Vue.component(Component.name, Component); 6 | } 7 | 8 | export default Component; 9 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/ScrollArea/ScrollArea.spec.js: -------------------------------------------------------------------------------- 1 | import { describe, expect, it } from 'vitest' 2 | import { shallowMount } from '@vue/test-utils' 3 | import Component from './ScrollArea.vue' 4 | 5 | describe('ScrollArea', () => { 6 | it('should match its default snapshot', () => { 7 | const wrapper = shallowMount(Component, {}) 8 | expect(wrapper.element).toMatchSnapshot() 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/ScrollArea/ScrollArea.stories.js: -------------------------------------------------------------------------------- 1 | import SdsScrollArea from './ScrollArea.vue'; 2 | 3 | export default { 4 | title: 'Utility/Scroll Area', 5 | parameters: { 6 | docs: { 7 | description: { 8 | component: 'A scroll area is a wrapper that provides a visible scroll bar and enables users to scroll through content that exceeds the size of the frame.', 9 | }, 10 | }, 11 | }, 12 | component: SdsScrollArea, 13 | argTypes: {} 14 | }; 15 | 16 | const Template = (args) => ({ 17 | components: { SdsScrollArea }, 18 | setup() { 19 | return { args } 20 | }, 21 | template: ` 22 | 23 |
Sample text
24 |
25 | ` 26 | }); 27 | 28 | export const Default = Template.bind({}); 29 | Default.args = {}; 30 | 31 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/ScrollArea/ScrollArea.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/ScrollArea/__snapshots__/ScrollArea.spec.js.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1 2 | 3 | exports[`ScrollArea > should match its default snapshot 1`] = ` 4 |
8 | 9 | 10 |
11 | `; 12 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/ScrollArea/index.ts: -------------------------------------------------------------------------------- 1 | import { App } from "vue"; 2 | import Component from "./ScrollArea.vue"; 3 | 4 | Component.install = (Vue: App) => { 5 | Vue.component(Component.name, Component); 6 | } 7 | 8 | export default Component; 9 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/Scrollspy/Scrollspy.spec.js: -------------------------------------------------------------------------------- 1 | import { describe, expect, it } from 'vitest' 2 | import { shallowMount } from '@vue/test-utils' 3 | import Component from './Scrollspy.vue' 4 | 5 | describe('Scrollspy', () => { 6 | it('should match its default snapshot', () => { 7 | const wrapper = shallowMount(Component, {}) 8 | expect(wrapper.element).toMatchSnapshot() 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/Scrollspy/__snapshots__/Scrollspy.spec.js.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1 2 | 3 | exports[`Scrollspy > should match its default snapshot 1`] = ` 4 | 8 | `; 9 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/Scrollspy/index.ts: -------------------------------------------------------------------------------- 1 | import { App } from "vue"; 2 | import Component from "./Scrollspy.vue"; 3 | 4 | Component.install = (Vue: App) => { 5 | Vue.component(Component.name, Component); 6 | } 7 | 8 | export default Component; 9 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/SearchBox/SearchBox.spec.js: -------------------------------------------------------------------------------- 1 | import { describe, expect, it } from 'vitest' 2 | import { shallowMount } from '@vue/test-utils' 3 | import Component from './SearchBox.vue' 4 | 5 | describe('SearchBox', () => { 6 | it('should match its default snapshot', () => { 7 | const wrapper = shallowMount(Component, {}) 8 | expect(wrapper.element).toMatchSnapshot() 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/SearchBox/SearchBox.stories.js: -------------------------------------------------------------------------------- 1 | import SdsSearchBox from './SearchBox.vue'; 2 | 3 | export default { 4 | title: 'Inputs/Search Box', 5 | parameters: { 6 | docs: { 7 | description: { 8 | component: 'A search box is a text field allows users to type in search terms and execute it by clicking the magnifying glass icon.', 9 | }, 10 | }, 11 | }, 12 | component: SdsSearchBox, 13 | argTypes: { 14 | variant: { 15 | options: ['default', 'primary', 'danger'], 16 | control: { type: 'select' } 17 | } 18 | } 19 | }; 20 | 21 | const Template = (args) => ({ 22 | components: { SdsSearchBox }, 23 | setup() { 24 | return { args } 25 | }, 26 | template: ` 27 | 28 | `, 29 | data() { 30 | return { localValue: this.$props.modelValue } 31 | }, 32 | watch: { 33 | modelValue(value) { 34 | this.localValue = value 35 | } 36 | }, 37 | }); 38 | 39 | export const Default = Template.bind({}); 40 | Default.args = {}; 41 | 42 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/SearchBox/index.ts: -------------------------------------------------------------------------------- 1 | import { App } from "vue"; 2 | import Component from "./SearchBox.vue"; 3 | 4 | Component.install = (Vue: App) => { 5 | Vue.component(Component.name, Component); 6 | } 7 | 8 | export default Component; 9 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/Section/Section.spec.js: -------------------------------------------------------------------------------- 1 | import { describe, expect, it } from 'vitest' 2 | import { shallowMount } from '@vue/test-utils' 3 | import Component from './Section.vue' 4 | 5 | describe('Section', () => { 6 | it('should match its default snapshot', () => { 7 | const wrapper = shallowMount(Component, {}) 8 | expect(wrapper.element).toMatchSnapshot() 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/Section/Section.stories.js: -------------------------------------------------------------------------------- 1 | import SdsSection from './Section.vue'; 2 | 3 | export default { 4 | title: 'Containers/Section', 5 | parameters: { 6 | docs: { 7 | description: { 8 | component: 'A section is a simple container that houses related content and action buttons.', 9 | }, 10 | }, 11 | }, 12 | component: SdsSection, 13 | argTypes: { 14 | type: { 15 | options: ['simple', 'raised', 'accented'], 16 | control: { type: 'select' } 17 | } 18 | } 19 | }; 20 | 21 | const Template = (args) => ({ 22 | components: { SdsSection }, 23 | setup() { 24 | return { args } 25 | }, 26 | template: ` 27 | 28 | 29 | 30 | 31 | Lorem ipsum dolor sit amet.... 32 | 33 | ` 34 | }); 35 | 36 | export const Default = Template.bind({}); 37 | Default.args = {}; 38 | 39 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/Section/__snapshots__/Section.spec.js.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1 2 | 3 | exports[`Section > should match its default snapshot 1`] = ` 4 |
8 |
11 |
14 |
17 | 18 | 19 |
20 | 21 |
22 |
23 | 24 |
25 | `; 26 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/Section/index.ts: -------------------------------------------------------------------------------- 1 | import { App } from "vue"; 2 | import Component from "./Section.vue"; 3 | 4 | Component.install = (Vue: App) => { 5 | Vue.component(Component.name, Component); 6 | } 7 | 8 | export default Component; 9 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/Select/Select.spec.js: -------------------------------------------------------------------------------- 1 | import { describe, expect, it } from 'vitest' 2 | import { shallowMount } from '@vue/test-utils' 3 | import Component from './Select.vue' 4 | 5 | describe('Select', () => { 6 | it('should match its default snapshot', () => { 7 | const wrapper = shallowMount(Component, { 8 | props: { 9 | modelValue: 1, 10 | options: [ 11 | { id: 1, value: 1, text: 'Option 1' }, 12 | { id: 2, value: 2, text: 'Option 2' }, 13 | { id: 3, value: 3, text: 'Option 3' } 14 | ] 15 | } 16 | }) 17 | expect(wrapper.element).toMatchSnapshot() 18 | }) 19 | }) 20 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/Select/__snapshots__/Select.spec.js.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1 2 | 3 | exports[`Select > should match its default snapshot 1`] = ` 4 | 30 | `; 31 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/Select/index.ts: -------------------------------------------------------------------------------- 1 | import { App } from "vue"; 2 | import Component from "./Select.vue"; 3 | 4 | Component.install = (Vue: App) => { 5 | Vue.component(Component.name, Component); 6 | } 7 | 8 | export default Component; 9 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/Table/index.ts: -------------------------------------------------------------------------------- 1 | import { App } from "vue"; 2 | import Component from "./Table.vue"; 3 | 4 | Component.install = (Vue: App) => { 5 | Vue.component(Component.name, Component); 6 | } 7 | 8 | export default Component; 9 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/Tabs/Tabs.spec.js: -------------------------------------------------------------------------------- 1 | import { describe, expect, it } from 'vitest' 2 | import { shallowMount } from '@vue/test-utils' 3 | import Component from './Tabs.vue' 4 | 5 | describe('Tabs', () => { 6 | it('should match its default snapshot', () => { 7 | const wrapper = shallowMount(Component, { 8 | directives: { 9 | 'uid': { 10 | created(el) { 11 | el.setAttribute('id', 'unique-id') 12 | } 13 | } 14 | } 15 | }) 16 | expect(wrapper.element).toMatchSnapshot() 17 | }) 18 | }) 19 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/Tabs/__snapshots__/Tab.spec.js.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1 2 | 3 | exports[`Tab > should match its default snapshot 1`] = ` 4 | 11 | `; 12 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/Tabs/__snapshots__/Tabs.spec.js.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1 2 | 3 | exports[`Tabs > should match its default snapshot 1`] = ` 4 |
8 |
11 |
    15 | 16 | 17 |
18 |
19 | 20 | 21 |
22 | `; 23 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/Tabs/index.ts: -------------------------------------------------------------------------------- 1 | import { App } from "vue"; 2 | import Component from "./Tabs.vue"; 3 | 4 | Component.install = (Vue: App) => { 5 | Vue.component(Component.name, Component); 6 | } 7 | 8 | export default Component; 9 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/Textarea/Textarea.stories.js: -------------------------------------------------------------------------------- 1 | import { ref, watch } from 'vue'; 2 | import SdsTextarea from './Textarea.vue'; 3 | 4 | export default { 5 | title: 'Inputs/Text fields/Textarea', 6 | parameters: { 7 | docs: { 8 | description: { 9 | component: 'A textarea is a large input field that allows users to enter a freeform response spanning multiple lines.', 10 | }, 11 | }, 12 | }, 13 | component: SdsTextarea, 14 | argTypes: {} 15 | }; 16 | 17 | const Template = (args) => ({ 18 | components: { SdsTextarea }, 19 | setup(props) { 20 | const localValue = ref(props.modelValue) 21 | watch(() => props.modelValue, (newValue) => { 22 | localValue.value = newValue 23 | }) 24 | return { localValue, args } 25 | }, 26 | template: ` 27 | 28 | ` 29 | }); 30 | 31 | export const Default = Template.bind({}); 32 | Default.args = {}; 33 | 34 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/Textarea/index.ts: -------------------------------------------------------------------------------- 1 | import { App } from "vue"; 2 | import Component from "./Textarea.vue"; 3 | 4 | Component.install = (Vue: App) => { 5 | Vue.component(Component.name, Component); 6 | } 7 | 8 | export default Component; 9 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/Toast/Toast.spec.js: -------------------------------------------------------------------------------- 1 | import { describe, expect, it } from 'vitest' 2 | import { shallowMount } from '@vue/test-utils' 3 | import Component from './Toast.vue' 4 | 5 | describe('Toast', () => { 6 | it('should match its default snapshot', () => { 7 | const wrapper = shallowMount(Component, { 8 | props: { 9 | id: 1, 10 | title: 'Title', 11 | text: 'Lorem ipsum...' 12 | } 13 | }) 14 | expect(wrapper.element).toMatchSnapshot() 15 | }) 16 | }) 17 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/Toast/Toast.stories.js: -------------------------------------------------------------------------------- 1 | import SdsToast from './Toast.vue'; 2 | 3 | export default { 4 | title: 'Feedback/Toast', 5 | parameters: { 6 | docs: { 7 | description: { 8 | component: 'A toast serves as a feedback and confirmation mechanism after the user takes an action.', 9 | }, 10 | }, 11 | }, 12 | component: SdsToast, 13 | argTypes: { 14 | variant: { 15 | options: ['success', 'info', 'warning', 'danger'], 16 | control: { type: 'select' } 17 | }, 18 | } 19 | }; 20 | 21 | const Template = (args) => ({ 22 | components: { SdsToast }, 23 | setup() { 24 | return { args } 25 | }, 26 | template: ` 27 | 28 | ` 29 | }); 30 | 31 | export const Default = Template.bind({}); 32 | Default.args = { 33 | id: 1, 34 | variant: 'success', 35 | title: 'Title', 36 | text: 'Text of the toast' 37 | }; 38 | 39 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/Toast/index.ts: -------------------------------------------------------------------------------- 1 | import { App } from "vue"; 2 | import Component from "./Toast.vue"; 3 | 4 | Component.install = (Vue: App) => { 5 | Vue.component(Component.name, Component); 6 | } 7 | 8 | export default Component; 9 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/Toaster/Toaster.spec.js: -------------------------------------------------------------------------------- 1 | import { describe, expect, it } from 'vitest' 2 | import { shallowMount } from '@vue/test-utils' 3 | import Component from './Toaster.vue' 4 | 5 | describe('Toaster', () => { 6 | it('should match its default snapshot', () => { 7 | const wrapper = shallowMount(Component, {}) 8 | expect(wrapper.element).toMatchSnapshot() 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/Toaster/__snapshots__/Toaster.spec.js.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1 2 | 3 | exports[`Toaster > should match its default snapshot 1`] = ``; 4 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/Toaster/index.ts: -------------------------------------------------------------------------------- 1 | import { App } from "vue"; 2 | import Component from "./Toaster.vue"; 3 | 4 | Component.install = (Vue: App) => { 5 | Vue.component(Component.name, Component); 6 | } 7 | 8 | export default Component; 9 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/ToggleSwitch/ToggleSwitch.spec.js: -------------------------------------------------------------------------------- 1 | import { describe, expect, it } from 'vitest' 2 | import { shallowMount } from '@vue/test-utils' 3 | import Component from "./ToggleSwitch.vue"; 4 | 5 | describe("ToggleSwitch.vue", () => { 6 | it("is a Vue instance", () => { 7 | const wrapper = shallowMount(Component); 8 | expect(wrapper.vm).toBeTruthy(); 9 | }); 10 | it("matches snapshot", () => { 11 | const wrapper = shallowMount(Component); 12 | expect(wrapper.element).toMatchSnapshot(); 13 | }); 14 | it("matches snapshot with no props assigned", () => { 15 | const propsData = {}; 16 | const wrapper = shallowMount(Component, { propsData }); 17 | expect(wrapper.html()).toMatchSnapshot(); 18 | }); 19 | it("matches snapshot with prop assigned", () => { 20 | const propsData = { 21 | disabled: false, 22 | variant: 'primary', 23 | value: false 24 | }; 25 | const wrapper = shallowMount(Component, { propsData }); 26 | expect(wrapper.html()).toMatchSnapshot(); 27 | }); 28 | }); 29 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/ToggleSwitch/ToggleSwitch.stories.js: -------------------------------------------------------------------------------- 1 | import SdsToggleSwitch from './ToggleSwitch.vue'; 2 | 3 | export default { 4 | title: 'Inputs/Toggle Switch', 5 | parameters: { 6 | docs: { 7 | description: { 8 | component: 'A toggle switch is a component that allows users to turn a system state on or off, which will trigger a change across the entire application.', 9 | }, 10 | }, 11 | }, 12 | component: SdsToggleSwitch, 13 | argTypes: { 14 | variant: { 15 | options: ['primary', 'danger'], 16 | control: {type: 'select'} 17 | } 18 | } 19 | }; 20 | 21 | const Template = (args) => ({ 22 | components: {SdsToggleSwitch}, 23 | setup() { 24 | return { args } 25 | }, 26 | template: ` `, 27 | data() { 28 | return { localValue: this.$props.modelValue } 29 | }, 30 | watch: { 31 | modelValue(value) { 32 | this.localValue = value 33 | } 34 | }, 35 | }); 36 | 37 | export const Default = Template.bind({}); 38 | Default.args = {}; 39 | 40 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/ToggleSwitch/index.ts: -------------------------------------------------------------------------------- 1 | import { App } from "vue"; 2 | import Component from "./ToggleSwitch.vue"; 3 | 4 | Component.install = (Vue: App) => { 5 | Vue.component(Component.name, Component); 6 | } 7 | 8 | export default Component; 9 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/Tooltip/Tooltip.spec.js: -------------------------------------------------------------------------------- 1 | import { describe, expect, it } from 'vitest' 2 | import { shallowMount } from '@vue/test-utils' 3 | import Component from "./Tooltip.vue"; 4 | 5 | describe("Tooltip.vue", () => { 6 | it("is a Vue instance", () => { 7 | const wrapper = shallowMount(Component); 8 | expect(wrapper.vm).toBeTruthy(); 9 | }); 10 | it("matches snapshot", () => { 11 | const wrapper = shallowMount(Component); 12 | expect(wrapper.element).toMatchSnapshot(); 13 | }); 14 | it("matches snapshot with no props assigned", () => { 15 | const propsData = {}; 16 | const wrapper = shallowMount(Component, { propsData }); 17 | expect(wrapper.html()).toMatchSnapshot(); 18 | }); 19 | it("matches snapshot with prop assigned", () => { 20 | const propsData = { 21 | placement: 'bottom', 22 | size: 'sm', 23 | tooltipClass: 'test', 24 | triggerClass: 'test' 25 | }; 26 | const wrapper = shallowMount(Component, { propsData }); 27 | expect(wrapper.html()).toMatchSnapshot(); 28 | }); 29 | 30 | }); 31 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/Tooltip/__snapshots__/Tooltip.spec.js.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1 2 | 3 | exports[`Tooltip.vue > matches snapshot 1`] = ` 4 |
8 |
11 | 12 |
13 | 14 | 15 |
16 | 17 |
18 | 19 |
20 | `; 21 | 22 | exports[`Tooltip.vue > matches snapshot with no props assigned 1`] = ` 23 | "
24 |
25 |
26 |
27 | 28 |
" 29 | `; 30 | 31 | exports[`Tooltip.vue > matches snapshot with prop assigned 1`] = ` 32 | "
33 |
34 |
35 |
36 | 37 |
" 38 | `; 39 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/Tooltip/index.ts: -------------------------------------------------------------------------------- 1 | import { App } from "vue"; 2 | import Component from "./Tooltip.vue"; 3 | 4 | Component.install = (Vue: App) => { 5 | Vue.component(Component.name, Component); 6 | } 7 | 8 | export default Component; 9 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/components/TopFiveChart/index.ts: -------------------------------------------------------------------------------- 1 | import { App } from "vue"; 2 | import Component from "./TopFiveChart.vue"; 3 | 4 | Component.install = (Vue: App) => { 5 | Vue.component(Component.name, Component); 6 | } 7 | 8 | export default Component; 9 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/docs/components/DocTables.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/helpers/debounce.ts: -------------------------------------------------------------------------------- 1 | export default function debounce( 2 | func: Function, 3 | wait: number, 4 | immediate: Boolean = false 5 | ) { 6 | let timeout: any; 7 | return function (this: any, ...args: any[]) { 8 | const context = this; 9 | clearTimeout(timeout); 10 | timeout = setTimeout(function () { 11 | timeout = null; 12 | if (!immediate) func.apply(context, args); 13 | }, wait); 14 | if (immediate && !timeout) func.apply(context, args); 15 | }; 16 | } 17 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/helpers/throttle.ts: -------------------------------------------------------------------------------- 1 | export default function throttle(fn: Function, wait: number) { 2 | let isCalled = false; 3 | 4 | return function (...args: any[]) { 5 | if (!isCalled) { 6 | fn(...args); 7 | isCalled = true; 8 | setTimeout(function () { 9 | isCalled = false; 10 | }, wait); 11 | } 12 | }; 13 | } 14 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/helpers/throttleAndDebounce.ts: -------------------------------------------------------------------------------- 1 | export function throttleAndDebounce(fn: () => void, delay: number): () => void { 2 | let timeout: ReturnType 3 | let called = false 4 | 5 | return () => { 6 | if (timeout) { 7 | clearTimeout(timeout) 8 | } 9 | 10 | if (!called) { 11 | fn() 12 | called = true 13 | setTimeout(() => { 14 | called = false 15 | }, delay) 16 | } else { 17 | timeout = setTimeout(fn, delay) 18 | } 19 | } 20 | } -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/helpers/uuid.ts: -------------------------------------------------------------------------------- 1 | export default function uuid(){ 2 | return Date.now().toString(36) + Math.random().toString(36).substr(2); 3 | } -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/index.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/shims-vue.d.ts: -------------------------------------------------------------------------------- 1 | declare module '*.vue' { 2 | import { DefineComponent } from 'vue' 3 | const component: DefineComponent<{}, {}, any> 4 | export default component 5 | } 6 | 7 | declare module 'lodash/uniq'; 8 | declare module '@shimyshack/uid'; -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/stories/Introduction.stories.mdx: -------------------------------------------------------------------------------- 1 | import { Meta } from '@storybook/addon-docs'; 2 | 3 | 4 | 5 | # SEI Design System 6 | 7 | ## Vue 3 Components 8 | 9 | You've reached the technical documentation center for the `@sds/components-vue3` node module. 10 | 11 | Feel free to [get in touch](https://designsystem.sei.cmu.edu/help-support/contact-us) with us or feel free to peruse the [repository](https://code.sei.cmu.edu/bitbucket/projects/SDS/repos/components-vue3/browse). 12 | 13 | ### Documentation 14 | 15 | For full documentation, please visit the [SEI Design System Reference Guide](https://designsystem.sei.cmu.edu). 16 | 17 | ### Contributing 18 | 19 | To contribute, see [Contribute to the Codebase](https://designsystem.sei.cmu.edu/help-support/contribute-to-the-codebase). 20 | -------------------------------------------------------------------------------- /node/dependencies/components-vue3/src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /node/dependencies/tailwindcss-3/open-sans/open-sans-latin-300.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cisagov/pentest-reporting-engine/25570b9cfdc08900799ccf3146c3053bb16519f3/node/dependencies/tailwindcss-3/open-sans/open-sans-latin-300.woff -------------------------------------------------------------------------------- /node/dependencies/tailwindcss-3/open-sans/open-sans-latin-300.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cisagov/pentest-reporting-engine/25570b9cfdc08900799ccf3146c3053bb16519f3/node/dependencies/tailwindcss-3/open-sans/open-sans-latin-300.woff2 -------------------------------------------------------------------------------- /node/dependencies/tailwindcss-3/open-sans/open-sans-latin-300italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cisagov/pentest-reporting-engine/25570b9cfdc08900799ccf3146c3053bb16519f3/node/dependencies/tailwindcss-3/open-sans/open-sans-latin-300italic.woff -------------------------------------------------------------------------------- /node/dependencies/tailwindcss-3/open-sans/open-sans-latin-300italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cisagov/pentest-reporting-engine/25570b9cfdc08900799ccf3146c3053bb16519f3/node/dependencies/tailwindcss-3/open-sans/open-sans-latin-300italic.woff2 -------------------------------------------------------------------------------- /node/dependencies/tailwindcss-3/open-sans/open-sans-latin-400.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cisagov/pentest-reporting-engine/25570b9cfdc08900799ccf3146c3053bb16519f3/node/dependencies/tailwindcss-3/open-sans/open-sans-latin-400.woff -------------------------------------------------------------------------------- /node/dependencies/tailwindcss-3/open-sans/open-sans-latin-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cisagov/pentest-reporting-engine/25570b9cfdc08900799ccf3146c3053bb16519f3/node/dependencies/tailwindcss-3/open-sans/open-sans-latin-400.woff2 -------------------------------------------------------------------------------- /node/dependencies/tailwindcss-3/open-sans/open-sans-latin-400italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cisagov/pentest-reporting-engine/25570b9cfdc08900799ccf3146c3053bb16519f3/node/dependencies/tailwindcss-3/open-sans/open-sans-latin-400italic.woff -------------------------------------------------------------------------------- /node/dependencies/tailwindcss-3/open-sans/open-sans-latin-400italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cisagov/pentest-reporting-engine/25570b9cfdc08900799ccf3146c3053bb16519f3/node/dependencies/tailwindcss-3/open-sans/open-sans-latin-400italic.woff2 -------------------------------------------------------------------------------- /node/dependencies/tailwindcss-3/open-sans/open-sans-latin-600.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cisagov/pentest-reporting-engine/25570b9cfdc08900799ccf3146c3053bb16519f3/node/dependencies/tailwindcss-3/open-sans/open-sans-latin-600.woff -------------------------------------------------------------------------------- /node/dependencies/tailwindcss-3/open-sans/open-sans-latin-600.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cisagov/pentest-reporting-engine/25570b9cfdc08900799ccf3146c3053bb16519f3/node/dependencies/tailwindcss-3/open-sans/open-sans-latin-600.woff2 -------------------------------------------------------------------------------- /node/dependencies/tailwindcss-3/open-sans/open-sans-latin-600italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cisagov/pentest-reporting-engine/25570b9cfdc08900799ccf3146c3053bb16519f3/node/dependencies/tailwindcss-3/open-sans/open-sans-latin-600italic.woff -------------------------------------------------------------------------------- /node/dependencies/tailwindcss-3/open-sans/open-sans-latin-600italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cisagov/pentest-reporting-engine/25570b9cfdc08900799ccf3146c3053bb16519f3/node/dependencies/tailwindcss-3/open-sans/open-sans-latin-600italic.woff2 -------------------------------------------------------------------------------- /node/dependencies/tailwindcss-3/open-sans/open-sans-latin-700.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cisagov/pentest-reporting-engine/25570b9cfdc08900799ccf3146c3053bb16519f3/node/dependencies/tailwindcss-3/open-sans/open-sans-latin-700.woff -------------------------------------------------------------------------------- /node/dependencies/tailwindcss-3/open-sans/open-sans-latin-700.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cisagov/pentest-reporting-engine/25570b9cfdc08900799ccf3146c3053bb16519f3/node/dependencies/tailwindcss-3/open-sans/open-sans-latin-700.woff2 -------------------------------------------------------------------------------- /node/dependencies/tailwindcss-3/open-sans/open-sans-latin-700italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cisagov/pentest-reporting-engine/25570b9cfdc08900799ccf3146c3053bb16519f3/node/dependencies/tailwindcss-3/open-sans/open-sans-latin-700italic.woff -------------------------------------------------------------------------------- /node/dependencies/tailwindcss-3/open-sans/open-sans-latin-700italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cisagov/pentest-reporting-engine/25570b9cfdc08900799ccf3146c3053bb16519f3/node/dependencies/tailwindcss-3/open-sans/open-sans-latin-700italic.woff2 -------------------------------------------------------------------------------- /node/dependencies/tailwindcss-3/open-sans/open-sans-latin-800.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cisagov/pentest-reporting-engine/25570b9cfdc08900799ccf3146c3053bb16519f3/node/dependencies/tailwindcss-3/open-sans/open-sans-latin-800.woff -------------------------------------------------------------------------------- /node/dependencies/tailwindcss-3/open-sans/open-sans-latin-800.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cisagov/pentest-reporting-engine/25570b9cfdc08900799ccf3146c3053bb16519f3/node/dependencies/tailwindcss-3/open-sans/open-sans-latin-800.woff2 -------------------------------------------------------------------------------- /node/dependencies/tailwindcss-3/open-sans/open-sans-latin-800italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cisagov/pentest-reporting-engine/25570b9cfdc08900799ccf3146c3053bb16519f3/node/dependencies/tailwindcss-3/open-sans/open-sans-latin-800italic.woff -------------------------------------------------------------------------------- /node/dependencies/tailwindcss-3/open-sans/open-sans-latin-800italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cisagov/pentest-reporting-engine/25570b9cfdc08900799ccf3146c3053bb16519f3/node/dependencies/tailwindcss-3/open-sans/open-sans-latin-800italic.woff2 -------------------------------------------------------------------------------- /node/dependencies/tailwindcss-3/tailwindcss/config/tailwindcss-font-family.js: -------------------------------------------------------------------------------- 1 | const defaultTheme = require("tailwindcss/defaultTheme"); 2 | 3 | module.exports = { 4 | sans: ["Open Sans", ...defaultTheme.fontFamily.sans], 5 | }; 6 | -------------------------------------------------------------------------------- /node/dependencies/tailwindcss-3/tailwindcss/plugins/word-break-word.js: -------------------------------------------------------------------------------- 1 | const plugin = require("tailwindcss/plugin"); 2 | 3 | module.exports = plugin(function ({ addUtilities }) { 4 | const newUtilities = { 5 | ".word-break-word": { 6 | wordBreak: "break-word", 7 | } 8 | }; 9 | 10 | addUtilities(newUtilities, ['responsive']); 11 | }); 12 | -------------------------------------------------------------------------------- /node/dependencies/tailwindcss-3/tailwindcss/tailwind.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; -------------------------------------------------------------------------------- /node/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "node", 3 | "version": "1.0.0", 4 | "description": "", 5 | "private": true, 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1", 8 | "processcss": "npx postcss tailwind/tailwind.css -o ../ptportal/static/css/sds.tailwind.css" 9 | }, 10 | "keywords": [], 11 | "author": "", 12 | "license": "ISC", 13 | "devDependencies": { 14 | "@sds/components-vue3": "file:dependencies/components-vue3", 15 | "@sds/tailwindcss-3": "file:dependencies/tailwindcss-3", 16 | "@tailwindcss/aspect-ratio": "^0.4.2", 17 | "@tailwindcss/forms": "^0.5.3", 18 | "@tailwindcss/line-clamp": "^0.4.2", 19 | "@tailwindcss/typography": "^0.5.8", 20 | "autoprefixer": "^10.4.13", 21 | "postcss": "^8.4.18", 22 | "postcss-cli": "^9.1.0", 23 | "postcss-import": "^14.1.0", 24 | "tailwindcss": "^3.2.2" 25 | }, 26 | "dependencies": { 27 | "apexcharts": "^3.36.3", 28 | "vue3-apexcharts": "^1.4.1" 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /node/postcss.config.js: -------------------------------------------------------------------------------- 1 | // Risk & Vulnerability Assessment Reporting Engine 2 | 3 | // Copyright 2022 The Risk & Vulnerability Reporting Engine Contributors, All Rights Reserved. 4 | // (see Contributors.txt for a full list of Contributors) 5 | 6 | // SPDX-License-Identifier: BSD-3-Clause 7 | 8 | // Please see additional acknowledgments (including references to third party source code, object code, documentation and other files) in the license.txt file or contact permission@sei.cmu.edu for full terms. 9 | 10 | // Created, in part, with funding and support from the United States Government. (see Acknowledgments file). 11 | 12 | // DM22-1011 13 | 14 | 15 | 16 | const tailwindcss = require('tailwindcss') 17 | module.exports = { 18 | plugins: [ 19 | tailwindcss('./tailwind.config.js'), 20 | require('autoprefixer'), 21 | require('postcss-import'), 22 | ], 23 | }; -------------------------------------------------------------------------------- /node/tailwind.config.js: -------------------------------------------------------------------------------- 1 | // Risk & Vulnerability Assessment Reporting Engine 2 | 3 | // Copyright 2022 The Risk & Vulnerability Reporting Engine Contributors, All Rights Reserved. 4 | // (see Contributors.txt for a full list of Contributors) 5 | 6 | // SPDX-License-Identifier: BSD-3-Clause 7 | 8 | // Please see additional acknowledgments (including references to third party source code, object code, documentation and other files) in the license.txt file or contact permission@sei.cmu.edu for full terms. 9 | 10 | // Created, in part, with funding and support from the United States Government. (see Acknowledgments file). 11 | 12 | // DM22-1011 13 | 14 | 15 | 16 | 17 | module.exports = { 18 | presets: [ 19 | require('@sds/tailwindcss-3') 20 | ], 21 | content: [ 22 | './node_modules/@sds/components-vue3/src/components/**/*.{js,vue,ts}', 23 | '../ptportal/templates/**/*.{js,html}' 24 | ], 25 | } -------------------------------------------------------------------------------- /node/tailwind/tailwind.css: -------------------------------------------------------------------------------- 1 | @import "../node_modules/@sds/tailwindcss-3/open-sans/index.css"; 2 | @import "tailwindcss/base"; 3 | @import "tailwindcss/components"; 4 | @import "tailwindcss/utilities"; -------------------------------------------------------------------------------- /pentestportal/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cisagov/pentest-reporting-engine/25570b9cfdc08900799ccf3146c3053bb16519f3/pentestportal/__init__.py -------------------------------------------------------------------------------- /pentestportal/wsgi.py: -------------------------------------------------------------------------------- 1 | """ 2 | WSGI config for pentestportal project. 3 | 4 | It exposes the WSGI callable as a module-level variable named ``application``. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/1.9/howto/deployment/wsgi/ 8 | """ 9 | # Risk & Vulnerability Assessment Reporting Engine 10 | 11 | # Copyright 2022 The Risk & Vulnerability Reporting Engine Contributors, All Rights Reserved. 12 | # (see Contributors.txt for a full list of Contributors) 13 | 14 | # SPDX-License-Identifier: BSD-3-Clause 15 | 16 | # Please see additional acknowledgments (including references to third party source code, object code, documentation and other files) in the license.txt file or contact permission@sei.cmu.edu for full terms. 17 | 18 | # Created, in part, with funding and support from the United States Government. (see Acknowledgments file). 19 | 20 | # DM22-1011 21 | 22 | import os 23 | 24 | from django.core.wsgi import get_wsgi_application 25 | 26 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "pentestportal.settings") 27 | 28 | application = get_wsgi_application() 29 | -------------------------------------------------------------------------------- /proxy.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cisagov/pentest-reporting-engine/25570b9cfdc08900799ccf3146c3053bb16519f3/proxy.txt -------------------------------------------------------------------------------- /ptportal/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cisagov/pentest-reporting-engine/25570b9cfdc08900799ccf3146c3053bb16519f3/ptportal/__init__.py -------------------------------------------------------------------------------- /ptportal/api/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cisagov/pentest-reporting-engine/25570b9cfdc08900799ccf3146c3053bb16519f3/ptportal/api/__init__.py -------------------------------------------------------------------------------- /ptportal/api/urls.py: -------------------------------------------------------------------------------- 1 | # portal/api/urls.py 2 | from django.urls import path 3 | from rest_framework.authtoken.views import obtain_auth_token 4 | from .views import * 5 | 6 | urlpatterns = [ 7 | path('auth/', obtain_auth_token, name='api-auth'), 8 | path('affected-systems/', AffectedSystemListView.as_view(), name='affected-systems-list'), 9 | path('mitigations/', MitigationListView.as_view(), name='mitigations-list'), 10 | path('specific-findings/', SpecificFindingListView.as_view(), name='specific-findings-list'), 11 | path('uploaded-findings/', UploadedFindingListView.as_view(), name='uploaded-findings-list'), 12 | path('uploaded-findings//', UploadedFindingUpdateView.as_view(), name='uploaded-findings-update') 13 | ] 14 | -------------------------------------------------------------------------------- /ptportal/apps.py: -------------------------------------------------------------------------------- 1 | # Risk & Vulnerability Assessment Reporting Engine 2 | 3 | # Copyright 2022 The Risk & Vulnerability Reporting Engine Contributors, All Rights Reserved. 4 | # (see Contributors.txt for a full list of Contributors) 5 | 6 | # SPDX-License-Identifier: BSD-3-Clause 7 | 8 | # Please see additional acknowledgments (including references to third party source code, object code, documentation and other files) in the license.txt file or contact permission@sei.cmu.edu for full terms. 9 | 10 | # Created, in part, with funding and support from the United States Government. (see Acknowledgments file). 11 | 12 | # DM22-1011 13 | 14 | from django.apps import AppConfig 15 | 16 | 17 | class PtportalConfig(AppConfig): 18 | name = 'ptportal' 19 | -------------------------------------------------------------------------------- /ptportal/forms/__init__.py: -------------------------------------------------------------------------------- 1 | # Risk & Vulnerability Assessment Reporting Engine 2 | 3 | # Copyright 2022 The Risk & Vulnerability Reporting Engine Contributors, All Rights Reserved. 4 | # (see Contributors.txt for a full list of Contributors) 5 | 6 | # SPDX-License-Identifier: BSD-3-Clause 7 | 8 | # Please see additional acknowledgments (including references to third party source code, object code, documentation and other files) in the license.txt file or contact permission@sei.cmu.edu for full terms. 9 | 10 | # Created, in part, with funding and support from the United States Government. (see Acknowledgments file). 11 | 12 | # DM22-1011 13 | 14 | 15 | from .base import * 16 | from .ei import * 17 | from .engagement import * 18 | from .findings import * 19 | from .hva import * 20 | from .registration import * 21 | from .report import * 22 | from .narrative import * 23 | -------------------------------------------------------------------------------- /ptportal/forms/base.py: -------------------------------------------------------------------------------- 1 | # Risk & Vulnerability Assessment Reporting Engine 2 | 3 | # Copyright 2022 The Risk & Vulnerability Reporting Engine Contributors, All Rights Reserved. 4 | # (see Contributors.txt for a full list of Contributors) 5 | 6 | # SPDX-License-Identifier: BSD-3-Clause 7 | 8 | # Please see additional acknowledgments (including references to third party source code, object code, documentation and other files) in the license.txt file or contact permission@sei.cmu.edu for full terms. 9 | 10 | # Created, in part, with funding and support from the United States Government. (see Acknowledgments file). 11 | 12 | # DM22-1011 13 | from django import forms 14 | 15 | 16 | class BaseForm(forms.Form): 17 | def __init__(self, *args, **kwargs): 18 | kwargs.setdefault('label_suffix', '') 19 | super(BaseForm, self).__init__(*args, **kwargs) 20 | 21 | 22 | class BaseModelForm(forms.ModelForm): 23 | error_css_class = 'is-invalid' 24 | 25 | def __init__(self, *args, **kwargs): 26 | kwargs.setdefault('label_suffix', '') 27 | super(BaseModelForm, self).__init__(*args, **kwargs) 28 | -------------------------------------------------------------------------------- /ptportal/loader.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cisagov/pentest-reporting-engine/25570b9cfdc08900799ccf3146c3053bb16519f3/ptportal/loader.py -------------------------------------------------------------------------------- /ptportal/management/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cisagov/pentest-reporting-engine/25570b9cfdc08900799ccf3146c3053bb16519f3/ptportal/management/__init__.py -------------------------------------------------------------------------------- /ptportal/management/commands/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cisagov/pentest-reporting-engine/25570b9cfdc08900799ccf3146c3053bb16519f3/ptportal/management/commands/__init__.py -------------------------------------------------------------------------------- /ptportal/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cisagov/pentest-reporting-engine/25570b9cfdc08900799ccf3146c3053bb16519f3/ptportal/migrations/__init__.py -------------------------------------------------------------------------------- /ptportal/models/__init__.py: -------------------------------------------------------------------------------- 1 | # Risk & Vulnerability Assessment Reporting Engine 2 | 3 | # Copyright 2022 The Risk & Vulnerability Reporting Engine Contributors, All Rights Reserved. 4 | # (see Contributors.txt for a full list of Contributors) 5 | 6 | # SPDX-License-Identifier: BSD-3-Clause 7 | 8 | # Please see additional acknowledgments (including references to third party source code, object code, documentation and other files) in the license.txt file or contact permission@sei.cmu.edu for full terms. 9 | 10 | # Created, in part, with funding and support from the United States Government. (see Acknowledgments file). 11 | 12 | # DM22-1011 13 | 14 | from .users import * 15 | from .findings import * 16 | from .frameworks import * 17 | from .phishing import * 18 | from .image_finding import * 19 | from .report import * 20 | from .engagement import * 21 | from .assessment_tracker import * 22 | from .questionnaire import * 23 | from .port_mapping import * 24 | from .narrative import * 25 | from .data_exfil import * 26 | from .ransomware import * 27 | from .osinf import * 28 | -------------------------------------------------------------------------------- /ptportal/static/Favicon_Package/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cisagov/pentest-reporting-engine/25570b9cfdc08900799ccf3146c3053bb16519f3/ptportal/static/Favicon_Package/android-chrome-192x192.png -------------------------------------------------------------------------------- /ptportal/static/Favicon_Package/android-chrome-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cisagov/pentest-reporting-engine/25570b9cfdc08900799ccf3146c3053bb16519f3/ptportal/static/Favicon_Package/android-chrome-512x512.png -------------------------------------------------------------------------------- /ptportal/static/Favicon_Package/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cisagov/pentest-reporting-engine/25570b9cfdc08900799ccf3146c3053bb16519f3/ptportal/static/Favicon_Package/apple-touch-icon.png -------------------------------------------------------------------------------- /ptportal/static/Favicon_Package/browserconfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | #da532c 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /ptportal/static/Favicon_Package/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cisagov/pentest-reporting-engine/25570b9cfdc08900799ccf3146c3053bb16519f3/ptportal/static/Favicon_Package/favicon-16x16.png -------------------------------------------------------------------------------- /ptportal/static/Favicon_Package/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cisagov/pentest-reporting-engine/25570b9cfdc08900799ccf3146c3053bb16519f3/ptportal/static/Favicon_Package/favicon-32x32.png -------------------------------------------------------------------------------- /ptportal/static/Favicon_Package/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cisagov/pentest-reporting-engine/25570b9cfdc08900799ccf3146c3053bb16519f3/ptportal/static/Favicon_Package/favicon.ico -------------------------------------------------------------------------------- /ptportal/static/Favicon_Package/mstile-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cisagov/pentest-reporting-engine/25570b9cfdc08900799ccf3146c3053bb16519f3/ptportal/static/Favicon_Package/mstile-150x150.png -------------------------------------------------------------------------------- /ptportal/static/Favicon_Package/site.webmanifest: -------------------------------------------------------------------------------- 1 | { 2 | "name": "", 3 | "short_name": "", 4 | "icons": [ 5 | { 6 | "src": "/android-chrome-192x192.png", 7 | "sizes": "192x192", 8 | "type": "image/png" 9 | }, 10 | { 11 | "src": "/android-chrome-512x512.png", 12 | "sizes": "512x512", 13 | "type": "image/png" 14 | } 15 | ], 16 | "theme_color": "#ffffff", 17 | "background_color": "#ffffff", 18 | "display": "standalone" 19 | } 20 | -------------------------------------------------------------------------------- /ptportal/static/icons/a-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ptportal/static/icons/a.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ptportal/static/icons/address-card-regular.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ptportal/static/icons/b-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ptportal/static/icons/book-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ptportal/static/icons/bullseye-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ptportal/static/icons/c-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ptportal/static/icons/circle-plus-solid-white.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ptportal/static/icons/circle-plus-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ptportal/static/icons/circle-question-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ptportal/static/icons/circle-xmark-solid-white.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ptportal/static/icons/circle-xmark-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ptportal/static/icons/clipboard-list-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ptportal/static/icons/clock-rotate-left-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ptportal/static/icons/d-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ptportal/static/icons/diagram-project.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ptportal/static/icons/download-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ptportal/static/icons/envelope.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ptportal/static/icons/file-alt-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ptportal/static/icons/file-circle-xmark-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ptportal/static/icons/file-code-regular.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ptportal/static/icons/file-code.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ptportal/static/icons/file-download-solid-white.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ptportal/static/icons/file-download-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ptportal/static/icons/file-excel-regular.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ptportal/static/icons/file-export-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ptportal/static/icons/file-lines-regular.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ptportal/static/icons/file-pdf-regular.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ptportal/static/icons/file-powerpoint-regular.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ptportal/static/icons/file-word-regular.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ptportal/static/icons/file-zipper-regular.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ptportal/static/icons/floppy-disk-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ptportal/static/icons/house-user.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ptportal/static/icons/lightbulb-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ptportal/static/icons/list-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ptportal/static/icons/list-ul.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ptportal/static/icons/lock.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ptportal/static/icons/magnifying-glass-plus-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ptportal/static/icons/network-wired-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ptportal/static/icons/note-sticky-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ptportal/static/icons/pen-to-square-white.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ptportal/static/icons/pen-to-square.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ptportal/static/icons/plus-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ptportal/static/icons/poll-h-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ptportal/static/icons/project-diagram-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ptportal/static/icons/shield-halved.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ptportal/static/icons/square-poll-horizontal.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ptportal/static/icons/table-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ptportal/static/icons/table.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ptportal/static/icons/terminal.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ptportal/static/icons/thumbs-up-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ptportal/static/icons/trash-solid-white.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ptportal/static/icons/trash-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ptportal/static/icons/triangle-exclamation-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ptportal/static/icons/up-right-from-square.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ptportal/static/icons/upload-solid-white.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ptportal/static/icons/upload-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ptportal/static/icons/upload.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ptportal/static/icons/user.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ptportal/static/icons/wrench-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ptportal/static/icons/wrench.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ptportal/static/templates/attack-path-template.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cisagov/pentest-reporting-engine/25570b9cfdc08900799ccf3146c3053bb16519f3/ptportal/static/templates/attack-path-template.pptx -------------------------------------------------------------------------------- /ptportal/static/templates/email-template.csv: -------------------------------------------------------------------------------- 1 | Email Address,Breach Information breached.email1@example.com,Adapt - 2018-11-05 breached.email1@example.com,Apollo - 2018-07-23 breached.email1@example.com,B2B USA Businesses - 2017-07-18 breached_email2@example.com,Apollo - 2018-07-23 breached_email2@example.com,B2B USA Businesses - 2017-07-18 breached_email2@example.com,Data & Leads - 2018-11-14 breached_email2@example.com,Exactis - 2018-06-01 breached_email2@example.com,LinkedIn - 2012-05-05 breached_email2@example.com,Trik Spam Botnet - 2018-06-12 breachedemail3@org.example.com,NetProspex - 2016-09-01 -------------------------------------------------------------------------------- /ptportal/static/templates/payloads-template.csv: -------------------------------------------------------------------------------- 1 | Description,Protocol,Host,Border 2 | Example Payload 1,HTTPS,B,B 3 | Example Payload 2,DNS,N,N -------------------------------------------------------------------------------- /ptportal/templates/ptportal/errors/400.html: -------------------------------------------------------------------------------- 1 | 14 | {% extends 'ptportal/base.html' %} 15 | {% load humanize %} 16 | 17 | {% block content %} 18 | 19 |
20 |
21 |
22 |
23 |

Error 400: Page Not Found

24 |
25 |
26 |
27 |
28 | 29 | {% endblock %} 30 | -------------------------------------------------------------------------------- /ptportal/templates/ptportal/errors/403.html: -------------------------------------------------------------------------------- 1 | 14 | 15 | {% extends 'ptportal/base.html' %} 16 | {% load humanize %} 17 | 18 | {% block content %} 19 | 20 |
21 |
22 |
23 |
24 |

Error 403: Page Not Found

25 |
26 |
27 |
28 |
29 | 30 | {% endblock %} 31 | -------------------------------------------------------------------------------- /ptportal/templates/ptportal/errors/404.html: -------------------------------------------------------------------------------- 1 | 14 | 15 | {% extends 'ptportal/base.html' %} 16 | {% load humanize %} 17 | 18 | {% block content %} 19 | 20 |
21 |
22 |
23 |
24 |

Error 404: Page Not Found

25 |
26 |
27 |
28 |
29 | 30 | {% endblock %} 31 | -------------------------------------------------------------------------------- /ptportal/templates/ptportal/errors/500.html: -------------------------------------------------------------------------------- 1 | 14 | 15 | {% extends 'ptportal/base.html' %} 16 | {% load humanize %} 17 | 18 | {% block content %} 19 | 20 |
21 |
22 |
23 |
24 |

Error 500: Server Error

25 |
26 |
27 |
28 |
29 | 30 | {% endblock %} 31 | -------------------------------------------------------------------------------- /ptportal/templates/ptportal/password_reset_email.html: -------------------------------------------------------------------------------- 1 | {% autoescape off %} 2 | To initiate the password reset process for your PenTest Portal Account, please click the link below: 3 | 4 | {{ protocol }}://{{ domain }}{% url 'password_reset_confirm' uidb64=uid token=token %} 5 | 6 | If clicking the link above doesn't work, please copy and paste the URL above into a new browser 7 | window instead. 8 | 9 | Sincerely, 10 | The PenTest Portal Team 11 | {% endautoescape %} 12 | -------------------------------------------------------------------------------- /ptportal/templatetags/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cisagov/pentest-reporting-engine/25570b9cfdc08900799ccf3146c3053bb16519f3/ptportal/templatetags/__init__.py -------------------------------------------------------------------------------- /ptportal/views/payload_mapping/__init__.py: -------------------------------------------------------------------------------- 1 | # Risk & Vulnerability Assessment Reporting Engine 2 | 3 | # Copyright 2022 The Risk & Vulnerability Reporting Engine Contributors, All Rights Reserved. 4 | # (see Contributors.txt for a full list of Contributors) 5 | 6 | # SPDX-License-Identifier: BSD-3-Clause 7 | 8 | # Please see additional acknowledgments (including references to third party source code, object code, documentation and other files) in the license.txt file or contact permission@sei.cmu.edu for full terms. 9 | 10 | # Created, in part, with funding and support from the United States Government. (see Acknowledgments file). 11 | 12 | # DM22-1011 13 | 14 | from .lib import * 15 | -------------------------------------------------------------------------------- /ptportal/views/payload_mapping/lib/__init__.py: -------------------------------------------------------------------------------- 1 | # Risk & Vulnerability Assessment Reporting Engine 2 | 3 | # Copyright 2022 The Risk & Vulnerability Reporting Engine Contributors, All Rights Reserved. 4 | # (see Contributors.txt for a full list of Contributors) 5 | 6 | # SPDX-License-Identifier: BSD-3-Clause 7 | 8 | # Please see additional acknowledgments (including references to third party source code, object code, documentation and other files) in the license.txt file or contact permission@sei.cmu.edu for full terms. 9 | 10 | # Created, in part, with funding and support from the United States Government. (see Acknowledgments file). 11 | 12 | # DM22-1011 13 | 14 | from .core import * 15 | from .models import * 16 | -------------------------------------------------------------------------------- /ptportal/views/payload_mapping/lib/core/__init__.py: -------------------------------------------------------------------------------- 1 | # Risk & Vulnerability Assessment Reporting Engine 2 | 3 | # Copyright 2022 The Risk & Vulnerability Reporting Engine Contributors, All Rights Reserved. 4 | # (see Contributors.txt for a full list of Contributors) 5 | 6 | # SPDX-License-Identifier: BSD-3-Clause 7 | 8 | # Please see additional acknowledgments (including references to third party source code, object code, documentation and other files) in the license.txt file or contact permission@sei.cmu.edu for full terms. 9 | 10 | # Created, in part, with funding and support from the United States Government. (see Acknowledgments file). 11 | 12 | # DM22-1011 13 | 14 | from .parser import * 15 | from .report import * 16 | from .search import * 17 | -------------------------------------------------------------------------------- /ptportal/views/payload_mapping/lib/models/__Init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cisagov/pentest-reporting-engine/25570b9cfdc08900799ccf3146c3053bb16519f3/ptportal/views/payload_mapping/lib/models/__Init__.py -------------------------------------------------------------------------------- /ptportal/views/payload_mapping/lib/models/subtechnique.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Risk & Vulnerability Assessment Reporting Engine 3 | 4 | # Copyright 2022 The Risk & Vulnerability Reporting Engine Contributors, All Rights Reserved. 5 | # (see Contributors.txt for a full list of Contributors) 6 | 7 | # SPDX-License-Identifier: BSD-3-Clause 8 | 9 | # Please see additional acknowledgments (including references to third party source code, object code, documentation and other files) in the license.txt file or contact permission@sei.cmu.edu for full terms. 10 | 11 | # Created, in part, with funding and support from the United States Government. (see Acknowledgments file). 12 | 13 | # DM22-1011 14 | 15 | 16 | class SubTechnique(object): 17 | def __init__(self, id, name): 18 | """Holds Information About Sub Techniques""" 19 | self.id = id 20 | self.name = name 21 | -------------------------------------------------------------------------------- /ptportal/widgets.py: -------------------------------------------------------------------------------- 1 | # Risk & Vulnerability Assessment Reporting Engine 2 | 3 | # Copyright 2022 The Risk & Vulnerability Reporting Engine Contributors, All Rights Reserved. 4 | # (see Contributors.txt for a full list of Contributors) 5 | 6 | # SPDX-License-Identifier: BSD-3-Clause 7 | 8 | # Please see additional acknowledgments (including references to third party source code, object code, documentation and other files) in the license.txt file or contact permission@sei.cmu.edu for full terms. 9 | 10 | # Created, in part, with funding and support from the United States Government. (see Acknowledgments file). 11 | 12 | # DM22-1011 13 | 14 | from django.forms import DateTimeInput 15 | 16 | 17 | class XDSoftDateTimePickerInput(DateTimeInput): 18 | template_name = 'template/ptportal/templates/datetimepicker.html' 19 | -------------------------------------------------------------------------------- /report_gen/templates/KEV-template.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cisagov/pentest-reporting-engine/25570b9cfdc08900799ccf3146c3053bb16519f3/report_gen/templates/KEV-template.docx -------------------------------------------------------------------------------- /report_gen/templates/PACE/Franklin Gothic Book Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cisagov/pentest-reporting-engine/25570b9cfdc08900799ccf3146c3053bb16519f3/report_gen/templates/PACE/Franklin Gothic Book Regular.ttf -------------------------------------------------------------------------------- /report_gen/templates/PACE/Franklin Gothic Demi Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cisagov/pentest-reporting-engine/25570b9cfdc08900799ccf3146c3053bb16519f3/report_gen/templates/PACE/Franklin Gothic Demi Regular.ttf -------------------------------------------------------------------------------- /report_gen/templates/PACE/Franklin Gothic Medium Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cisagov/pentest-reporting-engine/25570b9cfdc08900799ccf3146c3053bb16519f3/report_gen/templates/PACE/Franklin Gothic Medium Regular.ttf -------------------------------------------------------------------------------- /report_gen/templates/PACE/assessment_types.txt: -------------------------------------------------------------------------------- 1 | 2 | Remote Penetration Test (RPT) 3 | Risk and Vulnerability Assessment (RVA) -------------------------------------------------------------------------------- /report_gen/templates/PACE/ci_sectors.txt: -------------------------------------------------------------------------------- 1 | 2 | Chemical 3 | Commercial Facilities 4 | Communications 5 | Critical Manufacturing 6 | Dams 7 | Defense Industrial Base 8 | Emergency Services 9 | Energy 10 | Financial Services 11 | Food and Agriculture 12 | Government Facilities 13 | Healthcare and Public Health 14 | Identifying Critical Infrastructure During COVID-19 15 | Information Technology 16 | Nuclear Reactors, Materials, and Waste 17 | Sector-Specific Agencies 18 | Transportation Systems 19 | Water and Wastewater Systems -------------------------------------------------------------------------------- /report_gen/templates/PACE/mitigation_actions.txt: -------------------------------------------------------------------------------- 1 | N/A 2 | Removed Affected System(s) or Service(s) 3 | Patched Affected System(s) or Service(s) 4 | Upgraded Affected System(s) or Service(s) 5 | Aligned Policy with Best Practices 6 | Conducted User Awareness Training 7 | Reconfigured Existing Security Feature or Policy 8 | Implemented New Security Feature or Policy 9 | Implemented Network Segmentation 10 | Implemented Multi-Factor Authentication 11 | Removed or Replaced Insecure Protocol 12 | Implemented Access Controls 13 | Reconfigured Object Permissions 14 | Removed Insecure Configuration 15 | Implemented Input Validation/Sanitization 16 | Other (Please Specify Below) -------------------------------------------------------------------------------- /report_gen/templates/PACE/mitigation_challenges.txt: -------------------------------------------------------------------------------- 1 | N/A 2 | Cybersecurity/IT Budget Limitations 3 | Staffing Limitations 4 | Timing/Schedule Limitations 5 | Technically Infeasible 6 | Resource Constraints 7 | Other (Please Specify Below) -------------------------------------------------------------------------------- /report_gen/templates/PACE/mitigation_status.txt: -------------------------------------------------------------------------------- 1 | Fully Mitigated 2 | Partially Mitigated 3 | False Positive 4 | Accepted Risk 5 | No Action Taken -------------------------------------------------------------------------------- /report_gen/templates/PACE/sectors.txt: -------------------------------------------------------------------------------- 1 | 2 | Federal 3 | State 4 | Local 5 | Tribal 6 | Territorial 7 | Private 8 | Other -------------------------------------------------------------------------------- /report_gen/templates/fast-template-ws.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cisagov/pentest-reporting-engine/25570b9cfdc08900799ccf3146c3053bb16519f3/report_gen/templates/fast-template-ws.pptx -------------------------------------------------------------------------------- /report_gen/templates/fast-template.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cisagov/pentest-reporting-engine/25570b9cfdc08900799ccf3146c3053bb16519f3/report_gen/templates/fast-template.docx -------------------------------------------------------------------------------- /report_gen/templates/fast-template.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cisagov/pentest-reporting-engine/25570b9cfdc08900799ccf3146c3053bb16519f3/report_gen/templates/fast-template.pptx -------------------------------------------------------------------------------- /report_gen/templates/hva-template.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cisagov/pentest-reporting-engine/25570b9cfdc08900799ccf3146c3053bb16519f3/report_gen/templates/hva-template.docx -------------------------------------------------------------------------------- /report_gen/templates/rpt-template-ws.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cisagov/pentest-reporting-engine/25570b9cfdc08900799ccf3146c3053bb16519f3/report_gen/templates/rpt-template-ws.pptx -------------------------------------------------------------------------------- /report_gen/templates/rpt-template.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cisagov/pentest-reporting-engine/25570b9cfdc08900799ccf3146c3053bb16519f3/report_gen/templates/rpt-template.docx -------------------------------------------------------------------------------- /report_gen/templates/rpt-template.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cisagov/pentest-reporting-engine/25570b9cfdc08900799ccf3146c3053bb16519f3/report_gen/templates/rpt-template.pptx -------------------------------------------------------------------------------- /report_gen/templates/rva-template-ws.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cisagov/pentest-reporting-engine/25570b9cfdc08900799ccf3146c3053bb16519f3/report_gen/templates/rva-template-ws.pptx -------------------------------------------------------------------------------- /report_gen/templates/rva-template.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cisagov/pentest-reporting-engine/25570b9cfdc08900799ccf3146c3053bb16519f3/report_gen/templates/rva-template.docx -------------------------------------------------------------------------------- /report_gen/templates/rva-template.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cisagov/pentest-reporting-engine/25570b9cfdc08900799ccf3146c3053bb16519f3/report_gen/templates/rva-template.pptx --------------------------------------------------------------------------------