gitextract_do4ph06x/ ├── .dockerignore ├── .env-defaults ├── .env-dist ├── .env-prod ├── .gitattributes ├── .github/ │ ├── CODEOWNERS │ ├── ISSUE_TEMPLATE/ │ │ ├── .gitignore │ │ ├── bug_report.md │ │ ├── config.yml │ │ ├── feature_request.md │ │ └── user_story.md │ ├── dependabot.yml │ ├── pull_request_template.md │ ├── scripts/ │ │ ├── commit_sign_push.sh │ │ └── coverage_file_fixer.py │ └── workflows/ │ ├── boefjes-tests.yml │ ├── boefjes_container_image.yml │ ├── boefjes_tests.yml │ ├── build-debian-docker-image.yml │ ├── build-rdo-package.yml │ ├── build_docs_on_pr.yml │ ├── bytes-tests.yml │ ├── bytes_container_image.yml │ ├── bytes_tests.yml │ ├── check_requirements.yml │ ├── codeql.yml │ ├── containerized_boefjes.yml │ ├── debian_package.yml │ ├── deploy_docs.yml │ ├── mula-tests.yml │ ├── mula_container_image.yml │ ├── mula_tests.yml │ ├── octopoes-tests.yml │ ├── octopoes_container_image.yml │ ├── octopoes_rtest.yml │ ├── octopoes_tests.yml │ ├── pre_commit_checks.yml │ ├── rocky-tests.yml │ ├── rocky_container_image.yml │ ├── rocky_makelang.yml │ ├── rocky_tests.yml │ ├── sonar-cloud.yml │ └── test_debian_packages_on_ubuntu.yml ├── .gitignore ├── .gitpod.yml ├── .pre-commit-config.yaml ├── .stylelintrc.json ├── CONTRIBUTING.rst ├── LICENSE ├── Makefile ├── README.rst ├── boefjes/ │ ├── .ci/ │ │ └── docker-compose.yml │ ├── .dockerignore │ ├── .editorconfig │ ├── .gitignore │ ├── Dockerfile │ ├── LICENSE │ ├── MANIFEST.in │ ├── Makefile │ ├── boefjes/ │ │ ├── __init__.py │ │ ├── __main__.py │ │ ├── alembic.ini │ │ ├── api.py │ │ ├── clients/ │ │ │ ├── __init__.py │ │ │ ├── bytes_client.py │ │ │ └── scheduler_client.py │ │ ├── config.py │ │ ├── dependencies/ │ │ │ ├── __init__.py │ │ │ ├── encryption.py │ │ │ └── plugins.py │ │ ├── job_handler.py │ │ ├── katalogus/ │ │ │ ├── __init__.py │ │ │ ├── configs.py │ │ │ ├── organisations.py │ │ │ ├── plugins.py │ │ │ ├── root.py │ │ │ ├── settings.py │ │ │ └── version.py │ │ ├── local/ │ │ │ ├── __init__.py │ │ │ └── runner.py │ │ ├── logging.json │ │ ├── logging.py │ │ ├── migrations/ │ │ │ ├── __init__.py │ │ │ ├── env.py │ │ │ ├── script.py.mako │ │ │ └── versions/ │ │ │ ├── 0001_add_katalogus_models.py │ │ │ ├── 0002_change_lengths_of_several_char_fields.py │ │ │ ├── 0003_longer_plugin_ids.py │ │ │ ├── 197672984df0_make_organisation_code_field_larger.py │ │ │ ├── 5be152459a7b_introduce_schema_field_to_boefje_model.py │ │ │ ├── 6f99834a4a5a_introduce_boefje_and_normalizer_models.py │ │ │ ├── 7c88b9cd96aa_remove_the_repository_model.py │ │ │ ├── 870fc302b852_remove_environment_keys_field.py │ │ │ ├── 9f48560b0000_add_schedule_interval_fields.py │ │ │ ├── __init__.py │ │ │ ├── a2c8d54b0124_unique_plugin_names.py │ │ │ ├── cd34fdfafdaf_json_settings_for_settings_table.py │ │ │ ├── f9de6eb7824b_introduce_boefjeconfig_model.py │ │ │ ├── fc0295b38184_add_run_on_field_to_boefje.py │ │ │ └── fdeaea4481b8_add_deduplication_flag.py │ │ ├── normalizer_interfaces.py │ │ ├── normalizer_models.py │ │ ├── plugins/ │ │ │ ├── __init__.py │ │ │ ├── helpers.py │ │ │ ├── kat_adr_finding_types/ │ │ │ │ ├── __init__.py │ │ │ │ ├── adr_finding_types.json │ │ │ │ ├── boefje.json │ │ │ │ ├── description.md │ │ │ │ ├── main.py │ │ │ │ ├── normalize.py │ │ │ │ └── normalizer.json │ │ │ ├── kat_adr_validator/ │ │ │ │ ├── __init__.py │ │ │ │ ├── boefje.Dockerfile │ │ │ │ ├── boefje.Dockerfile.dockerignore │ │ │ │ ├── boefje.json │ │ │ │ ├── description.md │ │ │ │ ├── main.py │ │ │ │ ├── normalize.py │ │ │ │ └── normalizer.json │ │ │ ├── kat_answer_parser/ │ │ │ │ ├── __init__.py │ │ │ │ ├── normalize.py │ │ │ │ └── normalizer.json │ │ │ ├── kat_binaryedge/ │ │ │ │ ├── __init__.py │ │ │ │ ├── boefje.json │ │ │ │ ├── containers/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── normalize.py │ │ │ │ │ └── normalizer.json │ │ │ │ ├── databases/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── normalize.py │ │ │ │ │ └── normalizer.json │ │ │ │ ├── description.md │ │ │ │ ├── http_web/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── normalize.py │ │ │ │ │ └── normalizer.json │ │ │ │ ├── main.py │ │ │ │ ├── message_queues/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── normalize.py │ │ │ │ │ └── normalizer.json │ │ │ │ ├── protocols/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── normalize.py │ │ │ │ │ └── normalizer.json │ │ │ │ ├── remote_desktop/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── normalize.py │ │ │ │ │ └── normalizer.json │ │ │ │ ├── requirements.txt │ │ │ │ ├── schema.json │ │ │ │ ├── service_identification/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── normalize.py │ │ │ │ │ └── normalizer.json │ │ │ │ └── services/ │ │ │ │ ├── __init__.py │ │ │ │ ├── normalize.py │ │ │ │ └── normalizer.json │ │ │ ├── kat_burpsuite/ │ │ │ │ ├── __init__.py │ │ │ │ ├── normalize.py │ │ │ │ └── normalizer.json │ │ │ ├── kat_calvin/ │ │ │ │ ├── __init__.py │ │ │ │ ├── normalize.py │ │ │ │ └── normalizer.json │ │ │ ├── kat_censys/ │ │ │ │ ├── __init__.py │ │ │ │ ├── boefje.json │ │ │ │ ├── description.md │ │ │ │ ├── main.py │ │ │ │ ├── normalize.py │ │ │ │ ├── normalizer.json │ │ │ │ ├── requirements.txt │ │ │ │ └── schema.json │ │ │ ├── kat_crt_sh/ │ │ │ │ ├── __init__.py │ │ │ │ ├── boefje.json │ │ │ │ ├── description.md │ │ │ │ ├── main.py │ │ │ │ ├── normalize.py │ │ │ │ ├── normalizer.json │ │ │ │ └── requirements.txt │ │ │ ├── kat_cve_2023_34039/ │ │ │ │ ├── __init__.py │ │ │ │ ├── boefje.json │ │ │ │ ├── keys/ │ │ │ │ │ ├── vrni-6.0.0/ │ │ │ │ │ │ ├── id_rsa_vnera_keypair_6.0.0_platform │ │ │ │ │ │ └── id_rsa_vnera_keypair_6.0.0_proxy │ │ │ │ │ ├── vrni-6.1.0/ │ │ │ │ │ │ ├── id_rsa_vnera_keypair_6.1.0_platform │ │ │ │ │ │ └── id_rsa_vnera_keypair_6.1.0_proxy │ │ │ │ │ ├── vrni-6.10.0/ │ │ │ │ │ │ ├── id_rsa_vnera_keypair_6.10.0_collector │ │ │ │ │ │ └── id_rsa_vnera_keypair_6.10.0_platform │ │ │ │ │ ├── vrni-6.2.0/ │ │ │ │ │ │ ├── id_rsa_vnera_keypair_6.2.0_collector │ │ │ │ │ │ └── id_rsa_vnera_keypair_6.2.0_platform │ │ │ │ │ ├── vrni-6.3.0/ │ │ │ │ │ │ ├── id_rsa_vnera_keypair_6.3.0_collector │ │ │ │ │ │ └── id_rsa_vnera_keypair_6.3.0_platform │ │ │ │ │ ├── vrni-6.4.0/ │ │ │ │ │ │ ├── id_rsa_vnera_keypair_6.4.0_collector │ │ │ │ │ │ └── id_rsa_vnera_keypair_6.4.0_platform │ │ │ │ │ ├── vrni-6.5.0/ │ │ │ │ │ │ ├── id_rsa_vnera_keypair_6.5.0_collector │ │ │ │ │ │ └── id_rsa_vnera_keypair_6.5.0_platform │ │ │ │ │ ├── vrni-6.6.0/ │ │ │ │ │ │ ├── id_rsa_vnera_keypair_6.6.0_collector │ │ │ │ │ │ └── id_rsa_vnera_keypair_6.6.0_platform │ │ │ │ │ ├── vrni-6.7.0/ │ │ │ │ │ │ ├── id_rsa_vnera_keypair_6.7.0_collector │ │ │ │ │ │ └── id_rsa_vnera_keypair_6.7.0_platform │ │ │ │ │ ├── vrni-6.8.0/ │ │ │ │ │ │ ├── id_rsa_vnera_keypair_6.8.0_collector │ │ │ │ │ │ └── id_rsa_vnera_keypair_6.8.0_platform │ │ │ │ │ └── vrni-6.9.0/ │ │ │ │ │ ├── id_rsa_vnera_keypair_6.9.0_collector │ │ │ │ │ └── id_rsa_vnera_keypair_6.9.0_platform │ │ │ │ └── main.py │ │ │ ├── kat_cve_2023_35078/ │ │ │ │ ├── __init__.py │ │ │ │ ├── boefje.json │ │ │ │ ├── description.md │ │ │ │ ├── main.py │ │ │ │ ├── normalize.py │ │ │ │ └── normalizer.json │ │ │ ├── kat_cve_2024_6387/ │ │ │ │ ├── __init__.py │ │ │ │ ├── normalize.py │ │ │ │ └── normalizer.json │ │ │ ├── kat_cve_finding_types/ │ │ │ │ ├── __init__.py │ │ │ │ ├── boefje.json │ │ │ │ ├── description.md │ │ │ │ ├── main.py │ │ │ │ ├── normalize.py │ │ │ │ ├── normalizer.json │ │ │ │ └── schema.json │ │ │ ├── kat_cwe_finding_types/ │ │ │ │ ├── __init__.py │ │ │ │ ├── boefje.json │ │ │ │ ├── cwec_v4.16.xml │ │ │ │ ├── description.md │ │ │ │ ├── main.py │ │ │ │ ├── normalize.py │ │ │ │ ├── normalizer.json │ │ │ │ └── requirements.txt │ │ │ ├── kat_dicom/ │ │ │ │ ├── __init__.py │ │ │ │ ├── boefje.json │ │ │ │ ├── description.md │ │ │ │ ├── main.py │ │ │ │ ├── normalize.py │ │ │ │ ├── normalizer.json │ │ │ │ └── requirements.txt │ │ │ ├── kat_dns/ │ │ │ │ ├── __init__.py │ │ │ │ ├── boefje.json │ │ │ │ ├── description.md │ │ │ │ ├── main.py │ │ │ │ ├── normalize.py │ │ │ │ ├── normalizer.json │ │ │ │ ├── requirements.txt │ │ │ │ └── schema.json │ │ │ ├── kat_dns_version/ │ │ │ │ ├── __init__.py │ │ │ │ ├── boefje.json │ │ │ │ ├── description.md │ │ │ │ ├── main.py │ │ │ │ ├── normalize.py │ │ │ │ ├── normalizer.json │ │ │ │ └── schema.json │ │ │ ├── kat_dns_zone/ │ │ │ │ ├── __init__.py │ │ │ │ ├── boefje.json │ │ │ │ ├── description.md │ │ │ │ ├── main.py │ │ │ │ ├── normalize.py │ │ │ │ ├── normalizer.json │ │ │ │ └── requirements.txt │ │ │ ├── kat_dnssec/ │ │ │ │ ├── __init__.py │ │ │ │ ├── boefje.Dockerfile │ │ │ │ ├── boefje.Dockerfile.dockerignore │ │ │ │ ├── boefje.json │ │ │ │ ├── description.md │ │ │ │ ├── main.py │ │ │ │ ├── normalize.py │ │ │ │ └── normalizer.json │ │ │ ├── kat_export_http/ │ │ │ │ ├── __init__.py │ │ │ │ ├── boefje.Dockerfile │ │ │ │ ├── boefje.Dockerfile.dockerignore │ │ │ │ ├── boefje.json │ │ │ │ ├── description.md │ │ │ │ ├── main.py │ │ │ │ └── schema.json │ │ │ ├── kat_external_db/ │ │ │ │ ├── __init__.py │ │ │ │ ├── boefje.json │ │ │ │ ├── description.md │ │ │ │ ├── main.py │ │ │ │ ├── normalize.py │ │ │ │ ├── normalizer.json │ │ │ │ └── schema.json │ │ │ ├── kat_fierce/ │ │ │ │ ├── __init__.py │ │ │ │ ├── boefje.json │ │ │ │ ├── description.md │ │ │ │ ├── fierce.py │ │ │ │ ├── lists/ │ │ │ │ │ ├── 20000.txt │ │ │ │ │ ├── 5000.txt │ │ │ │ │ └── default.txt │ │ │ │ ├── main.py │ │ │ │ ├── normalize.py │ │ │ │ └── normalizer.json │ │ │ ├── kat_finding_normalizer/ │ │ │ │ ├── __init__.py │ │ │ │ ├── normalize.py │ │ │ │ └── normalizer.json │ │ │ ├── kat_green_hosting/ │ │ │ │ ├── __init__.py │ │ │ │ ├── boefje.json │ │ │ │ ├── description.md │ │ │ │ ├── main.py │ │ │ │ ├── normalize.py │ │ │ │ └── normalizer.json │ │ │ ├── kat_kat_finding_types/ │ │ │ │ ├── __init__.py │ │ │ │ ├── boefje.json │ │ │ │ ├── description.md │ │ │ │ ├── kat_finding_types.json │ │ │ │ ├── main.py │ │ │ │ ├── normalize.py │ │ │ │ └── normalizer.json │ │ │ ├── kat_leakix/ │ │ │ │ ├── __init__.py │ │ │ │ ├── boefje.json │ │ │ │ ├── description.md │ │ │ │ ├── main.py │ │ │ │ ├── normalize.py │ │ │ │ ├── normalizer.json │ │ │ │ └── schema.json │ │ │ ├── kat_manual/ │ │ │ │ ├── __init__.py │ │ │ │ ├── csv/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── normalize.py │ │ │ │ │ └── normalizer.json │ │ │ │ └── single_ooi/ │ │ │ │ ├── __init__.py │ │ │ │ ├── normalize.py │ │ │ │ └── normalizer.json │ │ │ ├── kat_masscan/ │ │ │ │ ├── __init__.py │ │ │ │ ├── boefje.Dockerfile │ │ │ │ ├── boefje.Dockerfile.dockerignore │ │ │ │ ├── boefje.json │ │ │ │ ├── description.md │ │ │ │ ├── main.py │ │ │ │ ├── normalize.py │ │ │ │ ├── normalizer.json │ │ │ │ └── schema.json │ │ │ ├── kat_maxmind_geoip/ │ │ │ │ ├── __init__.py │ │ │ │ ├── boefje.json │ │ │ │ ├── main.py │ │ │ │ ├── normalize.py │ │ │ │ ├── normalizer.json │ │ │ │ ├── requirements.txt │ │ │ │ └── schema.json │ │ │ ├── kat_nikto/ │ │ │ │ ├── __init__.py │ │ │ │ ├── boefje.Dockerfile │ │ │ │ ├── boefje.Dockerfile.dockerignore │ │ │ │ ├── boefje.json │ │ │ │ ├── description.md │ │ │ │ ├── main.js │ │ │ │ ├── normalize.py │ │ │ │ ├── normalizer.json │ │ │ │ ├── oci_adapter.js │ │ │ │ ├── package.json │ │ │ │ └── schema.json │ │ │ ├── kat_nmap_ip_range/ │ │ │ │ ├── __init__.py │ │ │ │ ├── boefje.json │ │ │ │ ├── description.md │ │ │ │ └── schema.json │ │ │ ├── kat_nmap_ports/ │ │ │ │ ├── __init__.py │ │ │ │ ├── boefje.json │ │ │ │ ├── description.md │ │ │ │ └── schema.json │ │ │ ├── kat_nmap_tcp/ │ │ │ │ ├── __init__.py │ │ │ │ ├── boefje.Dockerfile │ │ │ │ ├── boefje.Dockerfile.dockerignore │ │ │ │ ├── boefje.json │ │ │ │ ├── description.md │ │ │ │ ├── main.py │ │ │ │ ├── normalize.py │ │ │ │ ├── normalizer.json │ │ │ │ └── schema.json │ │ │ ├── kat_nmap_udp/ │ │ │ │ ├── __init__.py │ │ │ │ ├── boefje.json │ │ │ │ ├── description.md │ │ │ │ └── schema.json │ │ │ ├── kat_nuclei_cve/ │ │ │ │ ├── __init__.py │ │ │ │ ├── boefje.Dockerfile │ │ │ │ ├── boefje.Dockerfile.dockerignore │ │ │ │ ├── boefje.json │ │ │ │ ├── description.md │ │ │ │ ├── main.py │ │ │ │ ├── normalize.py │ │ │ │ └── normalizer.json │ │ │ ├── kat_nuclei_exposed_panels/ │ │ │ │ ├── __init__.py │ │ │ │ ├── boefje.json │ │ │ │ ├── description.md │ │ │ │ ├── normalize.py │ │ │ │ └── normalizer.json │ │ │ ├── kat_nuclei_take_over/ │ │ │ │ ├── __init__.py │ │ │ │ ├── boefje.json │ │ │ │ ├── description.md │ │ │ │ ├── normalize.py │ │ │ │ └── normalizer.json │ │ │ ├── kat_pdio_subfinder/ │ │ │ │ ├── __init__.py │ │ │ │ ├── boefje.Dockerfile │ │ │ │ ├── boefje.Dockerfile.dockerignore │ │ │ │ ├── boefje.json │ │ │ │ ├── description.md │ │ │ │ ├── main.py │ │ │ │ ├── normalize.py │ │ │ │ ├── normalizer.json │ │ │ │ └── schema.json │ │ │ ├── kat_rdns/ │ │ │ │ ├── __init__.py │ │ │ │ ├── boefje.json │ │ │ │ ├── description.md │ │ │ │ ├── main.py │ │ │ │ ├── normalize.py │ │ │ │ └── normalizer.json │ │ │ ├── kat_report_data/ │ │ │ │ ├── __init__.py │ │ │ │ ├── normalize.py │ │ │ │ └── normalizer.json │ │ │ ├── kat_retirejs_finding_types/ │ │ │ │ ├── __init__.py │ │ │ │ ├── boefje.json │ │ │ │ ├── description.md │ │ │ │ ├── main.py │ │ │ │ ├── normalize.py │ │ │ │ └── normalizer.json │ │ │ ├── kat_rpki/ │ │ │ │ ├── __init__.py │ │ │ │ ├── boefje.json │ │ │ │ ├── main.py │ │ │ │ ├── normalize.py │ │ │ │ ├── normalizer.json │ │ │ │ ├── requirements.txt │ │ │ │ └── schema.json │ │ │ ├── kat_security_txt_downloader/ │ │ │ │ ├── __init__.py │ │ │ │ ├── boefje.json │ │ │ │ ├── description.md │ │ │ │ ├── main.py │ │ │ │ ├── normalize.py │ │ │ │ ├── normalizer.json │ │ │ │ └── requirements.txt │ │ │ ├── kat_service_banner/ │ │ │ │ ├── __init__.py │ │ │ │ ├── boefje.json │ │ │ │ └── main.py │ │ │ ├── kat_shodan/ │ │ │ │ ├── __init__.py │ │ │ │ ├── boefje.json │ │ │ │ ├── description.md │ │ │ │ ├── main.py │ │ │ │ ├── normalize.py │ │ │ │ ├── normalizer.json │ │ │ │ ├── requirements.txt │ │ │ │ └── schema.json │ │ │ ├── kat_shodan_internetdb/ │ │ │ │ ├── __init__.py │ │ │ │ ├── boefje.json │ │ │ │ ├── description.md │ │ │ │ ├── main.py │ │ │ │ ├── normalize.py │ │ │ │ ├── normalizer.json │ │ │ │ ├── requirements.txt │ │ │ │ └── schema.json │ │ │ ├── kat_snyk/ │ │ │ │ ├── __init__.py │ │ │ │ ├── boefje.json │ │ │ │ ├── check_version.py │ │ │ │ ├── description.md │ │ │ │ ├── main.py │ │ │ │ ├── normalize.py │ │ │ │ ├── normalizer.json │ │ │ │ └── requirements.txt │ │ │ ├── kat_snyk_finding_types/ │ │ │ │ ├── __init__.py │ │ │ │ ├── boefje.json │ │ │ │ ├── description.md │ │ │ │ ├── main.py │ │ │ │ ├── normalize.py │ │ │ │ └── normalizer.json │ │ │ ├── kat_ssl_certificates/ │ │ │ │ ├── __init__.py │ │ │ │ ├── boefje.Dockerfile │ │ │ │ ├── boefje.Dockerfile.dockerignore │ │ │ │ ├── boefje.json │ │ │ │ ├── description.md │ │ │ │ ├── main.py │ │ │ │ ├── normalize.py │ │ │ │ └── normalizer.json │ │ │ ├── kat_ssl_scan/ │ │ │ │ ├── __init__.py │ │ │ │ ├── boefje.Dockerfile │ │ │ │ ├── boefje.Dockerfile.dockerignore │ │ │ │ ├── boefje.json │ │ │ │ ├── description.md │ │ │ │ ├── main.py │ │ │ │ ├── normalize.py │ │ │ │ └── normalizer.json │ │ │ ├── kat_testssl_sh_ciphers/ │ │ │ │ ├── __init__.py │ │ │ │ ├── boefje.Dockerfile │ │ │ │ ├── boefje.Dockerfile.dockerignore │ │ │ │ ├── boefje.json │ │ │ │ ├── boefjes-requirements.txt │ │ │ │ ├── description.md │ │ │ │ ├── main.py │ │ │ │ ├── normalize.py │ │ │ │ ├── normalizer.json │ │ │ │ └── schema.json │ │ │ ├── kat_wappalyzer/ │ │ │ │ ├── __init__.py │ │ │ │ ├── data/ │ │ │ │ │ ├── categories.json │ │ │ │ │ ├── groups.json │ │ │ │ │ ├── technologies/ │ │ │ │ │ │ ├── _.json │ │ │ │ │ │ ├── a.json │ │ │ │ │ │ ├── b.json │ │ │ │ │ │ ├── c.json │ │ │ │ │ │ ├── d.json │ │ │ │ │ │ ├── e.json │ │ │ │ │ │ ├── f.json │ │ │ │ │ │ ├── g.json │ │ │ │ │ │ ├── h.json │ │ │ │ │ │ ├── i.json │ │ │ │ │ │ ├── j.json │ │ │ │ │ │ ├── k.json │ │ │ │ │ │ ├── l.json │ │ │ │ │ │ ├── m.json │ │ │ │ │ │ ├── n.json │ │ │ │ │ │ ├── o.json │ │ │ │ │ │ ├── p.json │ │ │ │ │ │ ├── q.json │ │ │ │ │ │ ├── r.json │ │ │ │ │ │ ├── s.json │ │ │ │ │ │ ├── t.json │ │ │ │ │ │ ├── u.json │ │ │ │ │ │ ├── v.json │ │ │ │ │ │ ├── w.json │ │ │ │ │ │ ├── x.json │ │ │ │ │ │ ├── y.json │ │ │ │ │ │ └── z.json │ │ │ │ │ ├── update.sh │ │ │ │ │ └── urls.txt │ │ │ │ ├── normalize.py │ │ │ │ ├── normalizer.json │ │ │ │ └── utils.py │ │ │ ├── kat_webpage_analysis/ │ │ │ │ ├── __init__.py │ │ │ │ ├── boefje.json │ │ │ │ ├── check_images/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── normalize.py │ │ │ │ │ └── normalizer.json │ │ │ │ ├── description.md │ │ │ │ ├── find_images_in_html/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── normalize.py │ │ │ │ │ └── normalizer.json │ │ │ │ ├── har/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── httpx.py │ │ │ │ │ └── requests.py │ │ │ │ ├── headers/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── normalize.py │ │ │ │ │ └── normalizer.json │ │ │ │ ├── main.py │ │ │ │ └── requirements.txt │ │ │ ├── kat_webpage_capture/ │ │ │ │ ├── __init__.py │ │ │ │ ├── boefje.Dockerfile │ │ │ │ ├── boefje.Dockerfile.dockerignore │ │ │ │ ├── boefje.json │ │ │ │ └── main.py │ │ │ └── kat_wpscan/ │ │ │ ├── __init__.py │ │ │ ├── boefje.Dockerfile │ │ │ ├── boefje.Dockerfile.dockerignore │ │ │ ├── boefje.json │ │ │ ├── description.md │ │ │ ├── main.py │ │ │ ├── normalize.py │ │ │ ├── normalizer.json │ │ │ └── schema.json │ │ ├── seed.py │ │ ├── sql/ │ │ │ ├── __init__.py │ │ │ ├── config_storage.py │ │ │ ├── db.py │ │ │ ├── db_models.py │ │ │ ├── organisation_storage.py │ │ │ ├── plugin_storage.py │ │ │ └── session.py │ │ ├── storage/ │ │ │ ├── __init__.py │ │ │ ├── interfaces.py │ │ │ └── memory.py │ │ ├── version.py │ │ └── worker/ │ │ ├── __init__.py │ │ ├── __main__.py │ │ ├── boefje_handler.py │ │ ├── client.py │ │ ├── interfaces.py │ │ ├── job_models.py │ │ ├── manager.py │ │ ├── models.py │ │ ├── oci_adapter.py │ │ └── repository.py │ ├── debian/ │ │ ├── control │ │ ├── copyright │ │ ├── install │ │ ├── kat-boefjes.kat-boefjes.service │ │ ├── kat-boefjes.kat-katalogus.service │ │ ├── kat-boefjes.kat-normalizers.service │ │ ├── kat-boefjes.sysusers │ │ ├── postinst │ │ ├── rules │ │ └── triggers │ ├── entrypoint.sh │ ├── export_migrations/ │ │ ├── 0001_add_katalogus_models.sql │ │ ├── 0002_change_lengths_of_several_char_fields.sql │ │ ├── 0003_longer_plugin_ids.sql │ │ ├── 0004_197672984df0_make_organisation_code_field_larger.sql │ │ ├── 0005_cd34fdfafdaf_json_settings_for_settings_table.sql │ │ ├── 0006_7c88b9cd96aa_remove_the_repository_model.sql │ │ ├── 0007_6f99834a4a5a_introduce_boefje_and_normalizer_models.sql │ │ ├── 0008_f9de6eb7824b_introduce_boefjeconfig_model.sql │ │ ├── 0009_5be152459a7b_introduce_schema_field_to_boefje_model.sql │ │ ├── 0010_870fc302b852_remove_environment_keys_field.sql │ │ ├── 0011_a2c8d54b0124_unique_plugin_names.sql │ │ ├── 0012_9f48560b0000_add_schedule_interval_fields.sql │ │ ├── 0013_fc0295b38184_add_run_on_field_to_boefje.sql │ │ └── 0014_fdeaea4481b8_add_deduplication_flag.sql │ ├── images/ │ │ ├── base.Dockerfile │ │ ├── base.Dockerfile.dockerignore │ │ ├── generic.Dockerfile │ │ ├── generic.Dockerfile.dockerignore │ │ └── requirements.txt │ ├── packaging/ │ │ ├── deb/ │ │ │ ├── Makefile │ │ │ └── data/ │ │ │ ├── etc/ │ │ │ │ └── kat/ │ │ │ │ ├── boefjes.conf │ │ │ │ ├── boefjes.logging.json │ │ │ │ └── katalogus.gunicorn.conf.py │ │ │ └── usr/ │ │ │ └── bin/ │ │ │ └── update-katalogus-db │ │ └── scripts/ │ │ └── build-debian-package.sh │ ├── pyproject.toml │ ├── requirements-dev.txt │ ├── requirements.txt │ ├── setup.py │ ├── tests/ │ │ ├── __init__.py │ │ ├── conftest.py │ │ ├── examples/ │ │ │ ├── adr-validator-normalize.json │ │ │ ├── answer-normalize.json │ │ │ ├── body-normalize.json │ │ │ ├── body-page-analysis-normalize.json │ │ │ ├── bodyimage-normalize.json │ │ │ ├── calvin-normalizer.json │ │ │ ├── cat_image │ │ │ ├── cve_2023_35078_not_vulnerable.html │ │ │ ├── cve_2023_35078_vulnerable.html │ │ │ ├── dns-normalize.json │ │ │ ├── download_body │ │ │ ├── download_headers.json │ │ │ ├── download_image_headers.json │ │ │ ├── download_page_analysis.raw │ │ │ ├── external_db.json │ │ │ ├── inputs/ │ │ │ │ ├── cve-result-with-cvss.json │ │ │ │ ├── cve-result-with-cvss2.json │ │ │ │ ├── cve-result-without-cvss.json │ │ │ │ ├── dns-result-example.com-cnames.json │ │ │ │ ├── dns-result-example.nl.json │ │ │ │ ├── dns-result-mx-example.nl.json │ │ │ │ ├── dns-result-www.example.nl.json │ │ │ │ ├── dns-zone-result-sub.example.nl.txt │ │ │ │ ├── dnssec-self-signed.txt │ │ │ │ ├── dnssec-status-line-not-last-line.txt │ │ │ │ ├── dnssec-unsigned.txt │ │ │ │ ├── dnssec-valid.txt │ │ │ │ ├── fierce-result-example.com.json │ │ │ │ ├── headers-check-input.json │ │ │ │ ├── security_txt_result_different_website.json │ │ │ │ ├── security_txt_result_same_website.json │ │ │ │ ├── snyk-result-findings.json │ │ │ │ ├── snyk-result-no-findings.json │ │ │ │ ├── testssl-sh-ciphered.json │ │ │ │ └── testssl-sh-cipherless.json │ │ │ ├── log4shell-job.json │ │ │ ├── manual-csv.json │ │ │ ├── manual-ooi.json │ │ │ ├── raw/ │ │ │ │ ├── leakix-example.com-output.txt │ │ │ │ ├── leakix-example.com.json │ │ │ │ ├── leakix-hostname-strict.json │ │ │ │ ├── nikto-apache.dvwa.cloud.json │ │ │ │ ├── nikto-example.com.json │ │ │ │ ├── nikto-non-existing.com.json │ │ │ │ └── nmap_mispoes.xml │ │ │ ├── rdns-example1.txt │ │ │ ├── rdns-example2.txt │ │ │ ├── rdns-nxdomain.txt │ │ │ ├── report-data-normalize.json │ │ │ ├── report-data.json │ │ │ ├── scheduler/ │ │ │ │ ├── pop_response_boefje.json │ │ │ │ ├── pop_response_boefje_2.json │ │ │ │ ├── pop_response_boefje_no_ooi.json │ │ │ │ ├── pop_response_duplicated_boefje.json │ │ │ │ ├── pop_response_duplicated_boefje_error.json │ │ │ │ ├── pop_response_duplicated_docker_boefje.json │ │ │ │ ├── pop_response_normalizer.json │ │ │ │ ├── should_crash.json │ │ │ │ └── should_crash_2.json │ │ │ ├── snyk-job.json │ │ │ ├── snyk-normalizer.json │ │ │ ├── snyk-vuln.html │ │ │ ├── snyk-vuln2.html │ │ │ ├── snyk-vuln3.html │ │ │ ├── ssl-certificates.txt │ │ │ ├── user-changed.json │ │ │ ├── user-login-admin-failure.json │ │ │ ├── user-login-failure.json │ │ │ └── webpage-analysis.json │ │ ├── integration/ │ │ │ ├── __init__.py │ │ │ ├── test_api.py │ │ │ ├── test_bench.py │ │ │ ├── test_get_environment.py │ │ │ ├── test_json_settings_encryption_migration.py │ │ │ ├── test_migration_add_schema_field.py │ │ │ ├── test_remove_repository_migration.py │ │ │ ├── test_settings_to_boefje_config_migration.py │ │ │ └── test_sql_repositories.py │ │ ├── katalogus/ │ │ │ ├── __init__.py │ │ │ ├── test_organisation_api.py │ │ │ ├── test_plugin_service.py │ │ │ ├── test_plugins_api.py │ │ │ └── test_settings.py │ │ ├── loading.py │ │ ├── modules/ │ │ │ ├── __init__.py │ │ │ ├── dummy_bad_normalizer_dict_structure/ │ │ │ │ ├── __init__.py │ │ │ │ ├── normalize.py │ │ │ │ └── normalizer.json │ │ │ ├── dummy_bad_normalizer_return_type/ │ │ │ │ ├── __init__.py │ │ │ │ ├── normalize.py │ │ │ │ └── normalizer.json │ │ │ ├── dummy_boefje/ │ │ │ │ ├── __init__.py │ │ │ │ ├── boefje.json │ │ │ │ └── main.py │ │ │ ├── dummy_boefje_environment/ │ │ │ │ ├── __init__.py │ │ │ │ ├── boefje.json │ │ │ │ └── main.py │ │ │ ├── dummy_boefje_environment_with_pycache/ │ │ │ │ ├── __init__.py │ │ │ │ ├── boefje.json │ │ │ │ ├── main.py │ │ │ │ └── some_subdir/ │ │ │ │ └── __init__.py │ │ │ ├── dummy_boefje_invalid_signature/ │ │ │ │ ├── __init__.py │ │ │ │ ├── boefje.json │ │ │ │ └── main.py │ │ │ ├── dummy_boefje_missing_run/ │ │ │ │ ├── __init__.py │ │ │ │ ├── boefje.json │ │ │ │ └── main.py │ │ │ ├── dummy_boefje_runtime_exception/ │ │ │ │ ├── __init__.py │ │ │ │ ├── boefje.json │ │ │ │ └── main.py │ │ │ ├── dummy_normalizer/ │ │ │ │ ├── __init__.py │ │ │ │ ├── normalize.py │ │ │ │ └── normalizer.json │ │ │ ├── dummy_normalizer_import_error/ │ │ │ │ ├── __init__.py │ │ │ │ ├── normalize.py │ │ │ │ └── normalizer.json │ │ │ ├── dummy_oci_boefje_no_main/ │ │ │ │ ├── __init__.py │ │ │ │ └── boefje.json │ │ │ └── kat_test/ │ │ │ ├── __init__.py │ │ │ ├── boefje.json │ │ │ ├── kat_test_2/ │ │ │ │ ├── __init__.py │ │ │ │ ├── boefje.json │ │ │ │ ├── kat_test_3/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── normalize.py │ │ │ │ │ └── normalizer.json │ │ │ │ ├── main.py │ │ │ │ └── schema.json │ │ │ ├── kat_test_4/ │ │ │ │ ├── __init__.py │ │ │ │ ├── boefje.json │ │ │ │ └── schema.json │ │ │ ├── main.py │ │ │ ├── normalize.py │ │ │ ├── normalizer.json │ │ │ └── schema.json │ │ ├── plugins/ │ │ │ ├── __init__.py │ │ │ ├── test_adr_validator.py │ │ │ ├── test_answer_parser.py │ │ │ ├── test_bodyimage.py │ │ │ ├── test_calvin.py │ │ │ ├── test_cve-2023-35078.py │ │ │ ├── test_cve-2024-6387.py │ │ │ ├── test_cve_finding_types.py │ │ │ ├── test_dns.py │ │ │ ├── test_dnssec.py │ │ │ ├── test_fierce.py │ │ │ ├── test_generic_finding_normalizer.py │ │ │ ├── test_leakix.py │ │ │ ├── test_manual.py │ │ │ ├── test_nmap.py │ │ │ ├── test_rdns.py │ │ │ ├── test_report_data.py │ │ │ ├── test_scan_profiles.py │ │ │ ├── test_security_txt.py │ │ │ ├── test_snyk.py │ │ │ ├── test_sslcertificate_normalizer.py │ │ │ ├── test_testssl_sh.py │ │ │ └── test_wappalyzer_normalizer.py │ │ ├── test_api.py │ │ ├── test_app.py │ │ ├── test_job_handler.py │ │ ├── test_models.py │ │ ├── test_nikto_normalizer.py │ │ └── test_tasks.py │ └── tools/ │ ├── __init__.py │ ├── run_boefje.py │ ├── run_normalizer.py │ ├── show_raw.py │ └── upgrade_v1_17_0.py ├── bytes/ │ ├── .ci/ │ │ ├── docker-compose.yml │ │ └── rabbitmq.conf │ ├── .dockerignore │ ├── .gitignore │ ├── Dockerfile │ ├── LICENSE │ ├── MANIFEST.in │ ├── Makefile │ ├── bytes/ │ │ ├── __init__.py │ │ ├── alembic.ini │ │ ├── api/ │ │ │ ├── __init__.py │ │ │ ├── metrics.py │ │ │ ├── models.py │ │ │ ├── root.py │ │ │ └── router.py │ │ ├── auth.py │ │ ├── config.py │ │ ├── database/ │ │ │ ├── __init__.py │ │ │ ├── db.py │ │ │ ├── db_models.py │ │ │ ├── migrations/ │ │ │ │ ├── __init__.py │ │ │ │ ├── env.py │ │ │ │ ├── script.py.mako │ │ │ │ └── versions/ │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_drop_output_add_input.py │ │ │ │ ├── 0003_rename_module_to_normalizer_boefje.py │ │ │ │ ├── 0004_rename_boefje_name_to_boefje_id.py │ │ │ │ ├── 0005_add_secure_hash_link_boefje_meta.py │ │ │ │ ├── 0006_remove_redundant_dispatches_field.py │ │ │ │ ├── 0007_add_raw_file_models.py │ │ │ │ ├── 0008_point_normalizer_to_raw_file.py │ │ │ │ ├── 0009_max_length_on_varchar_s.py │ │ │ │ ├── 0010_longer_retrieval_link_string.py │ │ │ │ ├── 0011_longer_normalizer_name_and_boefje_id.py │ │ │ │ ├── 0011_rename_normalizer_name_to_normalizer_id.py │ │ │ │ ├── 09a2929108d9_add_signing_provider_model.py │ │ │ │ ├── 1dde0213e9fe_remove_all_hash_mime_types.py │ │ │ │ ├── 65a39ab3e224_increase_organization_and_input_ooi_size.py │ │ │ │ ├── __init__.py │ │ │ │ ├── d216ad75177d_add_environment_and_runnable_hash_.py │ │ │ │ ├── e09d8780e34b_nullable_input_ooi.py │ │ │ │ ├── e2f76e95f1e7_.py │ │ │ │ ├── ebc7de8be4e3_increase_organization_id_length.py │ │ │ │ ├── ec68d3eb14b1_remove_redundant_boefje_meta_foreign.py │ │ │ │ └── fa64454868a9_add_index_on_boefjemeta_table_.py │ │ │ └── sql_meta_repository.py │ │ ├── events/ │ │ │ ├── __init__.py │ │ │ ├── events.py │ │ │ └── manager.py │ │ ├── models.py │ │ ├── rabbitmq.py │ │ ├── raw/ │ │ │ ├── __init__.py │ │ │ ├── file_raw_repository.py │ │ │ └── middleware.py │ │ ├── repositories/ │ │ │ ├── __init__.py │ │ │ ├── hash_repository.py │ │ │ ├── meta_repository.py │ │ │ └── raw_repository.py │ │ ├── timestamping/ │ │ │ ├── __init__.py │ │ │ ├── certificates/ │ │ │ │ └── freetsa.crt │ │ │ ├── hashing.py │ │ │ ├── in_memory.py │ │ │ ├── pastebin.py │ │ │ ├── provider.py │ │ │ └── rfc3161.py │ │ └── version.py │ ├── debian/ │ │ ├── control │ │ ├── copyright │ │ ├── dirs │ │ ├── install │ │ ├── kat-bytes.service │ │ ├── kat-bytes.sysusers │ │ ├── postinst │ │ ├── rules │ │ └── triggers │ ├── dev.logging.conf │ ├── entrypoint.sh │ ├── logging.conf │ ├── packaging/ │ │ ├── deb/ │ │ │ ├── Makefile │ │ │ └── data/ │ │ │ ├── etc/ │ │ │ │ └── kat/ │ │ │ │ ├── bytes.conf │ │ │ │ ├── bytes.gunicorn.conf.py │ │ │ │ └── bytes.logging.conf │ │ │ └── usr/ │ │ │ └── bin/ │ │ │ └── update-bytes-db │ │ └── scripts/ │ │ └── build-debian-package.sh │ ├── pyproject.toml │ ├── requirements-dev.txt │ ├── requirements.txt │ ├── setup.py │ ├── sql_migrations/ │ │ ├── 0001_initial.sql │ │ ├── 0002_drop_output_add_input.sql │ │ ├── 0003_rename_module_to_normalizer_boefje.sql │ │ ├── 0004_drop_dispatches_change_input_ooi.sql │ │ ├── 0005_add_secure_hash_link_boefje_meta.sql │ │ ├── 0006_remove_redundant_dispatches_field.sql │ │ ├── 0007_add_raw_file_models.sql │ │ ├── 0008_point_normalizer_to_raw.sql │ │ ├── 0009_max_length_on_varchar_s.sql │ │ ├── 0010_longer_retrieval_link_string.sql │ │ ├── 0011_longer_normalizer_name_and_boefje_id.sql │ │ ├── 0011_rename_normalizer_name_to_normalizer_id.sql │ │ ├── 0012_65a39ab3e224_increate_organization_input_ooi_size.sql │ │ ├── 0013_e09d8780e34b_nullable_input_ooi.sql │ │ ├── 0014_ebc7de8be4e3_increase_organization_id_length.sql │ │ ├── 0015_fa64454868a9_add_indices.sql │ │ ├── 0016_ec68d3eb14b1_remove_redundant_boefje_meta_foreign.sql │ │ ├── 0017_09a2929108d9_add_signing_provider_model.sql │ │ ├── 0018_d216ad75177d_add_environment_and_runnable_hash.sql │ │ └── 0019_1dde0213e9fe_remove_all_hash_mime_types.sql │ └── tests/ │ ├── __init__.py │ ├── client.py │ ├── conftest.py │ ├── integration/ │ │ ├── __init__.py │ │ ├── requests/ │ │ │ └── calvin.http │ │ ├── test_bytes_api.py │ │ ├── test_event.py │ │ ├── test_hash_service.py │ │ ├── test_meta_repository.py │ │ ├── test_migrations.py │ │ └── test_timestamper.py │ ├── loading.py │ ├── seed_database.py │ ├── stubs/ │ │ ├── dummy.json │ │ ├── freetsa.crt │ │ └── login-request.json │ └── unit/ │ ├── __init__.py │ ├── test_api.py │ ├── test_auth.py │ ├── test_context_mapping.py │ ├── test_hash.py │ └── test_raw_repository.py ├── cveapi/ │ ├── Dockerfile │ ├── Makefile │ ├── cveapi.py │ ├── debian/ │ │ ├── control │ │ ├── copyright │ │ ├── kat-cveapi.service │ │ ├── kat-cveapi.sysusers │ │ ├── kat-cveapi.timer │ │ └── rules │ ├── entrypoint.sh │ ├── packaging/ │ │ └── scripts/ │ │ └── build-debian-package.sh │ ├── pyproject.toml │ └── requirements.txt ├── docker-compose.release-example.yml ├── docker-compose.yml ├── docs/ │ ├── settings-doc-templates/ │ │ └── markdown.jinja │ └── source/ │ ├── _static/ │ │ └── openkat.css │ ├── about-openkat/ │ │ ├── index.rst │ │ ├── release-notes/ │ │ │ ├── 1.10.rst │ │ │ ├── 1.11.rst │ │ │ ├── 1.12.rst │ │ │ ├── 1.13.rst │ │ │ ├── 1.14.rst │ │ │ ├── 1.15.rst │ │ │ ├── 1.16.rst │ │ │ ├── 1.17.rst │ │ │ ├── 1.18.rst │ │ │ ├── 1.19.rst │ │ │ ├── 1.20.rst │ │ │ ├── 1.21.rst │ │ │ ├── 1.5.rst │ │ │ ├── 1.6.rst │ │ │ ├── 1.7.rst │ │ │ ├── 1.8.rst │ │ │ ├── 1.9.rst │ │ │ └── index.rst │ │ └── what-is-openkat.rst │ ├── conf.py │ ├── developer-documentation/ │ │ ├── basic-principles/ │ │ │ ├── bits.rst │ │ │ ├── boefjes-whiskers-bits.rst │ │ │ ├── boefjes.rst │ │ │ ├── index.rst │ │ │ ├── introduction.rst │ │ │ ├── modules.rst │ │ │ ├── normalizers.rst │ │ │ ├── origin-types.rst │ │ │ ├── questions-and-configs.rst │ │ │ └── verify-timestamps.rst │ │ ├── boefjes-runner.md │ │ ├── boefjes.md │ │ ├── bytes.md │ │ ├── contributor/ │ │ │ ├── guidelines/ │ │ │ │ ├── contributions.rst │ │ │ │ ├── development.rst │ │ │ │ ├── feature_flow.md │ │ │ │ ├── ideas.rst │ │ │ │ ├── index.rst │ │ │ │ ├── management.rst │ │ │ │ └── security.rst │ │ │ ├── index.rst │ │ │ ├── intro.rst │ │ │ ├── templates/ │ │ │ │ ├── bug_report_template.md │ │ │ │ ├── feature_request_template.md │ │ │ │ ├── index.rst │ │ │ │ ├── pull_request_template_author.md │ │ │ │ ├── pull_request_template_review_code.md │ │ │ │ └── pull_request_template_review_qa.md │ │ │ └── ux-design/ │ │ │ ├── figma.rst │ │ │ └── index.rst │ │ ├── development-tutorial/ │ │ │ ├── creating-bit.md │ │ │ ├── creating-boefje.rst │ │ │ ├── creating-model.md │ │ │ ├── creating-normalizer.md │ │ │ ├── creating-report.md │ │ │ ├── index.rst │ │ │ └── testing-boefje.md │ │ ├── index.rst │ │ ├── mula.md │ │ ├── normalisers-runner.md │ │ ├── octopoes-models.rst │ │ ├── octopoes-research.rst │ │ ├── octopoes.md │ │ ├── qa-test-plan.rst │ │ ├── quick-start.rst │ │ ├── reports.md │ │ └── rocky.md │ ├── index.rst │ ├── installation-and-deployment/ │ │ ├── adding-proxy-to-openkat.rst │ │ ├── cveapi.rst │ │ ├── debugging-troubleshooting.rst │ │ ├── developer-environment.rst │ │ ├── environment-settings/ │ │ │ ├── index.rst │ │ │ └── rocky.md │ │ ├── events-and-logging.rst │ │ ├── external-authentication.rst │ │ ├── faq.rst │ │ ├── gitpod.rst │ │ ├── hardening.rst │ │ ├── index.rst │ │ ├── install.rst │ │ ├── installation-options │ │ ├── local-install.rst │ │ ├── production-debian-environment.rst │ │ ├── production-docker-environment.rst │ │ ├── s3-buckets.rst │ │ ├── scripts.rst │ │ ├── separate-boefje-workers.rst │ │ ├── users-and-organizations.rst │ │ └── windows-install.rst │ └── user-manual/ │ ├── basic-concepts/ │ │ ├── index.rst │ │ ├── objects-and-recursion.rst │ │ └── scan-levels-and-indemnification.rst │ ├── getting-started/ │ │ ├── generate-report.rst │ │ ├── index.rst │ │ ├── introduction.rst │ │ ├── login-and-registration.rst │ │ ├── onboarding.rst │ │ └── start-scanning.rst │ ├── glossary.rst │ ├── index.rst │ └── navigation/ │ ├── crisis-room.rst │ ├── findings.rst │ ├── index.rst │ ├── katalogus.rst │ ├── members.rst │ ├── objects.rst │ ├── overview.rst │ ├── reports.rst │ ├── settings.rst │ ├── tasks.rst │ └── user-settings.rst ├── init-user-db.sh ├── monitoring/ │ ├── config.alloy │ ├── grafana-provisioning/ │ │ ├── datasources/ │ │ │ └── pyroscope.yml │ │ └── plugins/ │ │ └── explore-profiles.yml │ ├── jaeger.yml │ └── prometheus.yml ├── mula/ │ ├── .ci/ │ │ ├── docker-compose.yml │ │ └── rabbitmq.conf │ ├── .dockerignore │ ├── .gitignore │ ├── Dockerfile │ ├── LICENSE │ ├── MANIFEST.in │ ├── Makefile │ ├── debian/ │ │ ├── control │ │ ├── copyright │ │ ├── install │ │ ├── kat-mula.service │ │ ├── kat-mula.sysusers │ │ ├── postinst │ │ ├── rules │ │ └── triggers │ ├── docs/ │ │ ├── api.md │ │ ├── architecture.md │ │ ├── configuration.md │ │ ├── extending.md │ │ └── metrics.md │ ├── entrypoint.sh │ ├── logging.json │ ├── logging.prod.json │ ├── packaging/ │ │ ├── deb/ │ │ │ ├── Makefile │ │ │ └── data/ │ │ │ ├── etc/ │ │ │ │ └── kat/ │ │ │ │ ├── mula.conf │ │ │ │ └── mula.logging.json │ │ │ └── usr/ │ │ │ └── bin/ │ │ │ └── update-mula-db │ │ └── scripts/ │ │ └── build-debian-package.sh │ ├── pyproject.toml │ ├── requirements-dev.txt │ ├── requirements.txt │ ├── scheduler/ │ │ ├── __init__.py │ │ ├── __main__.py │ │ ├── app.py │ │ ├── clients/ │ │ │ ├── __init__.py │ │ │ ├── amqp/ │ │ │ │ ├── __init__.py │ │ │ │ ├── listeners.py │ │ │ │ ├── raw_data.py │ │ │ │ └── scan_profile.py │ │ │ ├── connector.py │ │ │ ├── errors.py │ │ │ └── http/ │ │ │ ├── __init__.py │ │ │ ├── client.py │ │ │ ├── external/ │ │ │ │ ├── __init__.py │ │ │ │ ├── bytes.py │ │ │ │ ├── katalogus.py │ │ │ │ ├── octopoes.py │ │ │ │ └── rocky.py │ │ │ └── service.py │ │ ├── config/ │ │ │ ├── __init__.py │ │ │ └── settings.py │ │ ├── context/ │ │ │ ├── __init__.py │ │ │ └── context.py │ │ ├── models/ │ │ │ ├── __init__.py │ │ │ ├── base.py │ │ │ ├── boefje.py │ │ │ ├── errors.py │ │ │ ├── events.py │ │ │ ├── health.py │ │ │ ├── normalizer.py │ │ │ ├── ooi.py │ │ │ ├── organisation.py │ │ │ ├── plugin.py │ │ │ ├── queue.py │ │ │ ├── raw_data.py │ │ │ ├── schedule.py │ │ │ ├── scheduler.py │ │ │ └── task.py │ │ ├── schedulers/ │ │ │ ├── __init__.py │ │ │ ├── errors.py │ │ │ ├── queue/ │ │ │ │ ├── __init__.py │ │ │ │ ├── errors.py │ │ │ │ └── pq.py │ │ │ ├── rankers/ │ │ │ │ ├── __init__.py │ │ │ │ ├── boefje.py │ │ │ │ ├── normalizer.py │ │ │ │ └── ranker.py │ │ │ ├── scheduler.py │ │ │ └── schedulers/ │ │ │ ├── __init__.py │ │ │ ├── boefje.py │ │ │ ├── normalizer.py │ │ │ └── report.py │ │ ├── server/ │ │ │ ├── __init__.py │ │ │ ├── errors.py │ │ │ ├── handlers/ │ │ │ │ ├── __init__.py │ │ │ │ ├── health.py │ │ │ │ ├── metrics.py │ │ │ │ ├── root.py │ │ │ │ ├── schedulers.py │ │ │ │ ├── schedules.py │ │ │ │ └── tasks.py │ │ │ ├── schemas/ │ │ │ │ ├── __init__.py │ │ │ │ ├── health.py │ │ │ │ ├── schedule.py │ │ │ │ ├── scheduler.py │ │ │ │ └── task.py │ │ │ ├── server.py │ │ │ └── utils/ │ │ │ ├── __init__.py │ │ │ └── pagination.py │ │ ├── storage/ │ │ │ ├── __init__.py │ │ │ ├── connection.py │ │ │ ├── errors.py │ │ │ ├── filters/ │ │ │ │ ├── __init__.py │ │ │ │ ├── casting.py │ │ │ │ ├── comparison.py │ │ │ │ ├── errors.py │ │ │ │ ├── filters.py │ │ │ │ ├── functions.py │ │ │ │ └── operators.py │ │ │ ├── migrations/ │ │ │ │ ├── __init__.py │ │ │ │ ├── alembic.ini │ │ │ │ ├── env.py │ │ │ │ ├── script.py.mako │ │ │ │ └── versions/ │ │ │ │ ├── 0001_initial_migration.py │ │ │ │ ├── 0002_update_tasks.py │ │ │ │ ├── 0003_add_type_field_to_tasks.py │ │ │ │ ├── 0004_add_server_default.py │ │ │ │ ├── 0005_size_limit_hash.py │ │ │ │ ├── 0006_add_jsonb_fields_add_jsonb_fields.py │ │ │ │ ├── 0007_add_cancelled_status_for_tasks.py │ │ │ │ ├── 0008_add_task_schedule.py │ │ │ │ ├── 0009_add_organisation.py │ │ │ │ ├── 0010_add_indices.py │ │ │ │ ├── 0011_add_more_indexes.py │ │ │ │ └── __init__.py │ │ │ ├── stores/ │ │ │ │ ├── __init__.py │ │ │ │ ├── pq.py │ │ │ │ ├── schedule.py │ │ │ │ └── task.py │ │ │ └── utils.py │ │ ├── utils/ │ │ │ ├── __init__.py │ │ │ ├── cron.py │ │ │ ├── datastore.py │ │ │ ├── dict_utils.py │ │ │ ├── errors.py │ │ │ ├── functions.py │ │ │ └── thread.py │ │ └── version.py │ ├── scripts/ │ │ ├── .gitignore │ │ ├── Dockerfile │ │ ├── README.md │ │ ├── __init__.py │ │ ├── benchmark.py │ │ ├── data.csv.example │ │ └── load.py │ ├── setup.py │ ├── tests/ │ │ ├── __init__.py │ │ ├── factories/ │ │ │ ├── __init__.py │ │ │ ├── boefje.py │ │ │ ├── normalizer.py │ │ │ ├── ooi.py │ │ │ ├── organisation.py │ │ │ ├── plugin.py │ │ │ └── raw_data.py │ │ ├── integration/ │ │ │ ├── __init__.py │ │ │ ├── test_api.py │ │ │ ├── test_app.py │ │ │ ├── test_boefje_scheduler.py │ │ │ ├── test_clients.py │ │ │ ├── test_listeners.py │ │ │ ├── test_normalizer_scheduler.py │ │ │ ├── test_pq_store.py │ │ │ ├── test_report_scheduler.py │ │ │ ├── test_schedule_store.py │ │ │ ├── test_scheduler.py │ │ │ └── test_task_store.py │ │ ├── mocks/ │ │ │ ├── __init__.py │ │ │ ├── item.py │ │ │ ├── listener.py │ │ │ ├── queue.py │ │ │ ├── ranker.py │ │ │ ├── scheduler.py │ │ │ ├── services.py │ │ │ └── task.py │ │ ├── simulation/ │ │ │ ├── __init__.py │ │ │ └── test_simulation.py │ │ ├── unit/ │ │ │ ├── __init__.py │ │ │ ├── test_filter.py │ │ │ ├── test_queue.py │ │ │ ├── test_rankers.py │ │ │ └── test_utils.py │ │ └── utils/ │ │ ├── __init__.py │ │ ├── functions.py │ │ ├── json.py │ │ └── memory.py │ └── whitelist.py ├── octopoes/ │ ├── .ci/ │ │ ├── docker-compose.yml │ │ ├── mock_bits/ │ │ │ └── url_classification_mock/ │ │ │ ├── __init__.py │ │ │ ├── bit.py │ │ │ └── url_classification_mock.py │ │ └── wiremock/ │ │ └── mappings/ │ │ └── organisations.json │ ├── .dockerignore │ ├── .editorconfig │ ├── .gitignore │ ├── AUTHORS │ ├── Dockerfile │ ├── LICENSE │ ├── MANIFEST.in │ ├── Makefile │ ├── bits/ │ │ ├── __init__.py │ │ ├── ask_disallowed_domains/ │ │ │ ├── __init__.py │ │ │ ├── ask_disallowed_domains.py │ │ │ ├── bit.py │ │ │ └── question_schema.json │ │ ├── ask_port_specification/ │ │ │ ├── __init__.py │ │ │ ├── ask_port_specification.py │ │ │ ├── bit.py │ │ │ └── question_schema.json │ │ ├── ask_url_params_to_ignore/ │ │ │ ├── __init__.py │ │ │ ├── ask_url_params_to_ignore.py │ │ │ ├── bit.py │ │ │ └── question_schema.json │ │ ├── check_csp_header/ │ │ │ ├── __init__.py │ │ │ ├── bit.py │ │ │ └── check_csp_header.py │ │ ├── check_cve_2021_41773/ │ │ │ ├── __init__.py │ │ │ ├── bit.py │ │ │ └── check_cve_2021_41773.py │ │ ├── check_hsts_header/ │ │ │ ├── __init__.py │ │ │ ├── bit.py │ │ │ └── check_hsts_header.py │ │ ├── cipher_classification/ │ │ │ ├── __init__.py │ │ │ ├── bit.py │ │ │ ├── cipher_classification.py │ │ │ └── list-ciphers-openssl-with-finding-type.csv │ │ ├── default_findingtype_risk/ │ │ │ ├── __init__.py │ │ │ ├── bit.py │ │ │ └── default_findingtype_risk.py │ │ ├── definitions.py │ │ ├── disallowed_csp_hostnames/ │ │ │ ├── __init__.py │ │ │ ├── bit.py │ │ │ └── disallowed_csp_hostnames.py │ │ ├── dns_alias_resolving/ │ │ │ ├── __init__.py │ │ │ ├── bit.py │ │ │ └── dns_alias_resolving.py │ │ ├── dns_resolving/ │ │ │ ├── __init__.py │ │ │ ├── bit.py │ │ │ └── dns_resolving.py │ │ ├── domain_owner_verification/ │ │ │ ├── __init__.py │ │ │ ├── bit.py │ │ │ └── domain_owner_verification.py │ │ ├── expiring_certificate/ │ │ │ ├── __init__.py │ │ │ ├── bit.py │ │ │ └── expiring_certificate.py │ │ ├── https_availability/ │ │ │ ├── __init__.py │ │ │ ├── bit.py │ │ │ └── https_availability.py │ │ ├── https_redirect/ │ │ │ ├── __init__.py │ │ │ ├── bit.py │ │ │ └── https_redirect.py │ │ ├── internetnl/ │ │ │ ├── __init__.py │ │ │ ├── bit.py │ │ │ └── internetnl.py │ │ ├── ipv6_nameservers/ │ │ │ ├── __init__.py │ │ │ ├── bit.py │ │ │ └── ipv6_nameservers.py │ │ ├── ipv6_webservers/ │ │ │ ├── __init__.py │ │ │ ├── bit.py │ │ │ └── ipv6_webservers.py │ │ ├── missing_caa/ │ │ │ ├── __init__.py │ │ │ ├── bit.py │ │ │ └── missing_caa.py │ │ ├── missing_dkim/ │ │ │ ├── __init__.py │ │ │ ├── bit.py │ │ │ └── missing_dkim.py │ │ ├── missing_dmarc/ │ │ │ ├── __init__.py │ │ │ ├── bit.py │ │ │ └── missing_dmarc.py │ │ ├── missing_headers/ │ │ │ ├── __init__.py │ │ │ ├── bit.py │ │ │ └── missing_headers.py │ │ ├── missing_spf/ │ │ │ ├── __init__.py │ │ │ ├── bit.py │ │ │ └── missing_spf.py │ │ ├── nxdomain_flag/ │ │ │ ├── __init__.py │ │ │ ├── bit.py │ │ │ └── nxdomain_flag.py │ │ ├── nxdomain_header_flag/ │ │ │ ├── __init__.py │ │ │ ├── bit.py │ │ │ └── nxdomain_header_flag.py │ │ ├── oois_in_headers/ │ │ │ ├── __init__.py │ │ │ ├── bit.py │ │ │ └── oois_in_headers.py │ │ ├── port_classification_ip/ │ │ │ ├── __init__.py │ │ │ ├── bit.py │ │ │ └── port_classification_ip.py │ │ ├── port_common/ │ │ │ ├── __init__.py │ │ │ ├── bit.py │ │ │ └── port_common.py │ │ ├── resource_discovery/ │ │ │ ├── __init__.py │ │ │ ├── bit.py │ │ │ └── resource_discovery.py │ │ ├── retire_js/ │ │ │ ├── __init__.py │ │ │ ├── bit.py │ │ │ ├── retire_js.py │ │ │ └── retirejs.json │ │ ├── runner.py │ │ ├── spf_discovery/ │ │ │ ├── __init__.py │ │ │ ├── bit.py │ │ │ ├── internetnl_spf_parser.py │ │ │ └── spf_discovery.py │ │ ├── ssl_certificate_hostname/ │ │ │ ├── __init__.py │ │ │ ├── bit.py │ │ │ └── ssl_certificate_hostname.py │ │ ├── two_ipv6_nameservers/ │ │ │ ├── __init__.py │ │ │ ├── bit.py │ │ │ └── two_ipv6_nameservers.py │ │ ├── url_classification/ │ │ │ ├── __init__.py │ │ │ ├── bit.py │ │ │ └── url_classification.py │ │ ├── url_discovery/ │ │ │ ├── __init__.py │ │ │ ├── bit.py │ │ │ └── url_discovery.py │ │ └── website_discovery/ │ │ ├── __init__.py │ │ ├── bit.py │ │ └── website_discovery.py │ ├── conftest.py │ ├── debian/ │ │ ├── control │ │ ├── copyright │ │ ├── install │ │ ├── kat-octopoes.kat-octopoes-worker.service │ │ ├── kat-octopoes.kat-octopoes.service │ │ ├── kat-octopoes.sysusers │ │ ├── postinst │ │ ├── rules │ │ └── triggers │ ├── docs/ │ │ └── v3.md │ ├── entrypoint.sh │ ├── logging.yml │ ├── octopoes/ │ │ ├── __init__.py │ │ ├── api/ │ │ │ ├── __init__.py │ │ │ ├── api.py │ │ │ ├── bulk_router.py │ │ │ ├── models.py │ │ │ └── router.py │ │ ├── config/ │ │ │ ├── __init__.py │ │ │ ├── celery.py │ │ │ └── settings.py │ │ ├── connector/ │ │ │ ├── __init__.py │ │ │ ├── katalogus.py │ │ │ └── octopoes.py │ │ ├── core/ │ │ │ ├── __init__.py │ │ │ ├── app.py │ │ │ └── service.py │ │ ├── events/ │ │ │ ├── __init__.py │ │ │ ├── events.py │ │ │ └── manager.py │ │ ├── models/ │ │ │ ├── __init__.py │ │ │ ├── datetime.py │ │ │ ├── exception.py │ │ │ ├── explanation.py │ │ │ ├── ooi/ │ │ │ │ ├── __init__.py │ │ │ │ ├── certificate.py │ │ │ │ ├── config.py │ │ │ │ ├── dns/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── records.py │ │ │ │ │ └── zone.py │ │ │ │ ├── email_security.py │ │ │ │ ├── findings.py │ │ │ │ ├── geography.py │ │ │ │ ├── monitoring.py │ │ │ │ ├── network.py │ │ │ │ ├── question.py │ │ │ │ ├── reports.py │ │ │ │ ├── scans.py │ │ │ │ ├── service.py │ │ │ │ ├── software.py │ │ │ │ └── web.py │ │ │ ├── origin.py │ │ │ ├── pagination.py │ │ │ ├── path.py │ │ │ ├── persistence.py │ │ │ ├── transaction.py │ │ │ ├── tree.py │ │ │ └── types.py │ │ ├── repositories/ │ │ │ ├── __init__.py │ │ │ ├── ooi_repository.py │ │ │ ├── origin_parameter_repository.py │ │ │ ├── origin_repository.py │ │ │ ├── repository.py │ │ │ └── scan_profile_repository.py │ │ ├── tasks/ │ │ │ ├── __init__.py │ │ │ ├── app.py │ │ │ ├── scanprofiles.py │ │ │ └── tasks.py │ │ ├── types.py │ │ ├── version.py │ │ └── xtdb/ │ │ ├── __init__.py │ │ ├── client.py │ │ ├── exceptions.py │ │ ├── query.py │ │ ├── query_builder.py │ │ └── related_field_generator.py │ ├── packaging/ │ │ ├── deb/ │ │ │ ├── Makefile │ │ │ └── data/ │ │ │ └── etc/ │ │ │ └── kat/ │ │ │ ├── octopoes.conf │ │ │ ├── octopoes.gunicorn.conf.py │ │ │ └── octopoes.logging.yml │ │ └── scripts/ │ │ └── build-debian-package.sh │ ├── prod.logging.yml │ ├── pyproject.toml │ ├── requirements-dev.txt │ ├── requirements.txt │ ├── setup.py │ ├── tests/ │ │ ├── __init__.py │ │ ├── conftest.py │ │ ├── fixtures/ │ │ │ ├── calvin_output_1.json │ │ │ ├── calvin_output_2.json │ │ │ ├── normalizer_output.json │ │ │ ├── normalizer_output_config.json │ │ │ ├── normalizer_output_empty.json │ │ │ ├── normalizer_output_http.json │ │ │ ├── normalizer_output_nxdomain.json │ │ │ ├── regular_manual_declaration.json │ │ │ └── regular_manual_declaration_with_null_values.json │ │ ├── integration/ │ │ │ ├── __init__.py │ │ │ ├── test_api_connector.py │ │ │ ├── test_io.py │ │ │ ├── test_ooi_deletion.py │ │ │ ├── test_ooi_repository.py │ │ │ ├── test_unicode.py │ │ │ └── test_xtdb_client.py │ │ ├── mocks/ │ │ │ ├── __init__.py │ │ │ ├── mock_ooi_types.py │ │ │ └── mock_ooi_types_abstract.py │ │ ├── robot/ │ │ │ ├── 01_scan_profiles.robot │ │ │ ├── 02_list_objects.robot │ │ │ ├── 03_deletion_propagation.robot │ │ │ ├── 04_save_declaration.robot │ │ │ ├── 05_bits.robot │ │ │ ├── 06_scan_profile_inheritance.robot │ │ │ ├── 07_bit_configs.robot │ │ │ ├── 07_rerun_bits.robot │ │ │ ├── 08_findings.robot │ │ │ ├── CeleryMonitor.py │ │ │ ├── __init__.py │ │ │ └── robot.resource │ │ ├── test_api.py │ │ ├── test_bit_ask_ports.py │ │ ├── test_bit_cipher.py │ │ ├── test_bit_csp_header.py │ │ ├── test_bit_default_findingtype_risk.py │ │ ├── test_bit_domain_verification.py │ │ ├── test_bit_expiring_certificate.py │ │ ├── test_bit_missing_headers.py │ │ ├── test_bit_ports.py │ │ ├── test_bit_spf_discovery.py │ │ ├── test_bits.py │ │ ├── test_disallowed_csp_hostnames.py │ │ ├── test_event_manager.py │ │ ├── test_octopoes_service.py │ │ ├── test_ooi.py │ │ ├── test_ooi_repository.py │ │ ├── test_origin_repository.py │ │ ├── test_path.py │ │ ├── test_query.py │ │ ├── test_query_builder_new.py │ │ ├── test_recalculate_scan_profiles.py │ │ ├── test_reference.py │ │ ├── test_reference_node.py │ │ ├── test_scan_profile_repository.py │ │ └── test_type_analysis.py │ └── tools/ │ ├── __init__.py │ ├── analyze-bit-metric.py │ ├── rename-origin-method.py │ ├── run_bit.py │ ├── xtdb-cli.py │ └── xtdb_client.py ├── packaging/ │ ├── debian12/ │ │ └── Dockerfile │ └── ubuntu22.04/ │ └── Dockerfile ├── pyproject.toml ├── requirements.txt ├── rfd/ │ ├── 0001-rfd.md │ ├── 0002-code-of-conduct.md │ ├── 0003-deduplication.md │ ├── README.md │ ├── assets/ │ │ └── .gitkeep │ └── prototypes/ │ └── prototype.md ├── rocky/ │ ├── .ci/ │ │ └── docker-compose.yml │ ├── .dockerignore │ ├── .editorconfig │ ├── .gitignore │ ├── .nvmrc │ ├── .parcelrc │ ├── .prettierignore │ ├── .sassrc │ ├── Dockerfile │ ├── LICENSE │ ├── MANIFEST.in │ ├── Makefile │ ├── OOI_database_seed.json │ ├── account/ │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── apps.py │ │ ├── forms/ │ │ │ ├── __init__.py │ │ │ ├── account_setup.py │ │ │ ├── login.py │ │ │ ├── organization.py │ │ │ ├── password_reset.py │ │ │ └── token.py │ │ ├── management/ │ │ │ ├── __init__.py │ │ │ └── commands/ │ │ │ ├── __init__.py │ │ │ └── create_authtoken.py │ │ ├── migrations/ │ │ │ ├── 0001_initial.py │ │ │ ├── 0001_squashed_0004_authtoken_authtoken_unique_name.py │ │ │ ├── 0002_remove_first_last_name.py │ │ │ ├── 0003_alter_katuser_full_name.py │ │ │ ├── 0004_authtoken_authtoken_unique_name.py │ │ │ ├── 0005_katuser_clearance_level.py │ │ │ └── __init__.py │ │ ├── mixins.py │ │ ├── models.py │ │ ├── templates/ │ │ │ ├── account_detail.html │ │ │ ├── password_reset.html │ │ │ ├── password_reset_confirm.html │ │ │ ├── password_reset_done.html │ │ │ ├── password_reset_email.html │ │ │ ├── password_reset_subject.txt │ │ │ ├── recover_email.html │ │ │ ├── registration_email.html │ │ │ └── registration_subject.txt │ │ ├── urls.py │ │ ├── validators.py │ │ └── views/ │ │ ├── __init__.py │ │ ├── account.py │ │ ├── login.py │ │ ├── password_reset.py │ │ └── recover_email.py │ ├── assets/ │ │ ├── css/ │ │ │ ├── abstracts/ │ │ │ │ ├── alert-colors.scss │ │ │ │ └── mixins.scss │ │ │ ├── components/ │ │ │ │ ├── action-buttons.scss │ │ │ │ ├── block-indented.scss │ │ │ │ ├── button-plain.scss │ │ │ │ ├── cat-loader.scss │ │ │ │ ├── cat-paw-loader.scss │ │ │ │ ├── chapter-numbering.scss │ │ │ │ ├── cytoscape.scss │ │ │ │ ├── dashboard.scss │ │ │ │ ├── destructive.scss │ │ │ │ ├── dropdown-form.scss │ │ │ │ ├── dropdown-list.scss │ │ │ │ ├── dropdown.scss │ │ │ │ ├── filter.scss │ │ │ │ ├── footer-logo.scss │ │ │ │ ├── footer.scss │ │ │ │ ├── form-checkbox.scss │ │ │ │ ├── form-inline.scss │ │ │ │ ├── form.scss │ │ │ │ ├── header-navigation.scss │ │ │ │ ├── hover-block.scss │ │ │ │ ├── input-link.scss │ │ │ │ ├── introduction.scss │ │ │ │ ├── language.scss │ │ │ │ ├── layout-tiles-width-1.scss │ │ │ │ ├── layout.scss │ │ │ │ ├── messages.scss │ │ │ │ ├── notifications.scss │ │ │ │ ├── ooi-summary.scss │ │ │ │ ├── page-meta.scss │ │ │ │ ├── plugins.scss │ │ │ │ ├── print.scss │ │ │ │ ├── print_report.scss │ │ │ │ ├── qr-code.scss │ │ │ │ ├── report-name-table.scss │ │ │ │ ├── report.scss │ │ │ │ ├── risk-level-indicator.scss │ │ │ │ ├── scan-level-indicator.scss │ │ │ │ ├── select.scss │ │ │ │ ├── state-tag.scss │ │ │ │ ├── state-tags.scss │ │ │ │ ├── stepper-variables.scss │ │ │ │ ├── stepper.scss │ │ │ │ ├── sticky-column.scss │ │ │ │ ├── sticky.scss │ │ │ │ ├── system-tag.scss │ │ │ │ ├── table-sortable.scss │ │ │ │ ├── table-state-icons.scss │ │ │ │ ├── table.scss │ │ │ │ ├── toggle.scss │ │ │ │ ├── toolbar.scss │ │ │ │ ├── tree-tables.scss │ │ │ │ ├── user-icon.scss │ │ │ │ └── wait-text.scss │ │ │ ├── helpers/ │ │ │ │ ├── align-right.scss │ │ │ │ ├── is-hidden.scss │ │ │ │ └── uc-first.scss │ │ │ ├── main.scss │ │ │ ├── manon-components.scss │ │ │ ├── report.scss │ │ │ ├── themes/ │ │ │ │ └── soft/ │ │ │ │ ├── fonts/ │ │ │ │ │ ├── fonts.scss │ │ │ │ │ ├── fredoka/ │ │ │ │ │ │ ├── OFL.txt │ │ │ │ │ │ └── fredoka.scss │ │ │ │ │ ├── kat-icons/ │ │ │ │ │ │ └── kat-icons.scss │ │ │ │ │ ├── open-sans/ │ │ │ │ │ │ ├── OFL.txt │ │ │ │ │ │ └── open-sans.scss │ │ │ │ │ └── tabler-icons/ │ │ │ │ │ ├── LICENSE │ │ │ │ │ └── tabler-icons.scss │ │ │ │ ├── fundamentals/ │ │ │ │ │ ├── body-text-set.scss │ │ │ │ │ ├── border-radii.scss │ │ │ │ │ ├── colors.scss │ │ │ │ │ ├── tag-colors.scss │ │ │ │ │ └── tags-6-3.scss │ │ │ │ ├── manon/ │ │ │ │ │ ├── accordion.scss │ │ │ │ │ ├── application-base.scss │ │ │ │ │ ├── article-content-wrapper.scss │ │ │ │ │ ├── article.scss │ │ │ │ │ ├── breadcrumb-bar.scss │ │ │ │ │ ├── button-destructive.scss │ │ │ │ │ ├── button-ghost.scss │ │ │ │ │ ├── button-icon.scss │ │ │ │ │ ├── button.scss │ │ │ │ │ ├── checkbox.scss │ │ │ │ │ ├── code-base.scss │ │ │ │ │ ├── code-block.scss │ │ │ │ │ ├── collapsible.scss │ │ │ │ │ ├── collapsing-element.scss │ │ │ │ │ ├── de-emphasized.scss │ │ │ │ │ ├── description-list.scss │ │ │ │ │ ├── emphasized.scss │ │ │ │ │ ├── expando-rows.scss │ │ │ │ │ ├── filter.scss │ │ │ │ │ ├── footer.scss │ │ │ │ │ ├── form-button.scss │ │ │ │ │ ├── form-fieldset.scss │ │ │ │ │ ├── form-help.scss │ │ │ │ │ ├── form-inline.scss │ │ │ │ │ ├── form-radio.scss │ │ │ │ │ ├── form.scss │ │ │ │ │ ├── header-navigation-collapsible.scss │ │ │ │ │ ├── header-navigation-content-wrapper.scss │ │ │ │ │ ├── header-navigation-link-active.scss │ │ │ │ │ ├── header-navigation-link.scss │ │ │ │ │ ├── header-navigation.scss │ │ │ │ │ ├── headings-base-set.scss │ │ │ │ │ ├── headings.scss │ │ │ │ │ ├── hero.scss │ │ │ │ │ ├── icon.scss │ │ │ │ │ ├── image-square.scss │ │ │ │ │ ├── language-selector-list.scss │ │ │ │ │ ├── layout-column-4.scss │ │ │ │ │ ├── layout-form.scss │ │ │ │ │ ├── layout-set.scss │ │ │ │ │ ├── layout.scss │ │ │ │ │ ├── link.scss │ │ │ │ │ ├── login-meta.scss │ │ │ │ │ ├── logo.scss │ │ │ │ │ ├── main.scss │ │ │ │ │ ├── manon-variables.scss │ │ │ │ │ ├── max-line-length.scss │ │ │ │ │ ├── navigation-collapsible.scss │ │ │ │ │ ├── navigation.scss │ │ │ │ │ ├── nota-bene.scss │ │ │ │ │ ├── notification-block.scss │ │ │ │ │ ├── notification-colors.scss │ │ │ │ │ ├── notification-paragraph.scss │ │ │ │ │ ├── section-content-wrapper.scss │ │ │ │ │ ├── section.scss │ │ │ │ │ ├── sidemenu.scss │ │ │ │ │ ├── spacing.scss │ │ │ │ │ ├── spot-large.scss │ │ │ │ │ ├── table.scss │ │ │ │ │ ├── tabs.scss │ │ │ │ │ ├── tags.scss │ │ │ │ │ ├── text-colors.scss │ │ │ │ │ └── tile.scss │ │ │ │ ├── report.scss │ │ │ │ └── soft.scss │ │ │ └── vendor_overrides/ │ │ │ ├── graph-override.scss │ │ │ ├── manon/ │ │ │ │ ├── button-icon-only.scss │ │ │ │ ├── display-toggle.scss │ │ │ │ ├── dl.scss │ │ │ │ ├── form-fieldset-required.scss │ │ │ │ ├── form-radio.scss │ │ │ │ ├── image-square.scss │ │ │ │ ├── layout-fifty-fifty.scss │ │ │ │ ├── layout-form.scss │ │ │ │ ├── nested-section.scss │ │ │ │ ├── notification.scss │ │ │ │ ├── table.scss │ │ │ │ ├── tabs.scss │ │ │ │ └── tile.scss │ │ │ ├── two-factor.scss │ │ │ └── weasyprint/ │ │ │ ├── accordion.scss │ │ │ ├── application-base.scss │ │ │ ├── button.scss │ │ │ ├── chapter-numbers.scss │ │ │ ├── description-list.scss │ │ │ ├── headings.scss │ │ │ ├── layout-centered.scss │ │ │ ├── pdf-overrides.scss │ │ │ ├── report-manon-components.scss │ │ │ ├── section-wrapper.scss │ │ │ ├── section.scss │ │ │ ├── table-of-contents.scss │ │ │ ├── table.scss │ │ │ ├── tile.scss │ │ │ ├── toolbar.scss │ │ │ ├── ul.scss │ │ │ └── visually-hidden.scss │ │ ├── js/ │ │ │ ├── app.js │ │ │ ├── autoSubmit.js │ │ │ ├── checkboxToggler.js │ │ │ ├── choiceToggle.js │ │ │ ├── components.js │ │ │ ├── dashboard.js │ │ │ ├── dropdown.js │ │ │ ├── enableButtonTimeout.js │ │ │ ├── grabSelectionOnModalOpen.js │ │ │ ├── imports/ │ │ │ │ ├── graph.js │ │ │ │ ├── manon.js │ │ │ │ └── utils.js │ │ │ ├── jsonSchemaToForm.js │ │ │ ├── pluginToggler.js │ │ │ ├── renameReports.js │ │ │ ├── report.js │ │ │ ├── reportActionForms.js │ │ │ ├── sidemenuOl.js │ │ │ ├── stringHelpers.js │ │ │ ├── tabs.js │ │ │ ├── taskDetails.js │ │ │ └── utils.js │ │ └── vendors/ │ │ └── graph/ │ │ ├── css/ │ │ │ └── graph-d3.css │ │ └── js/ │ │ ├── graph-d3.js │ │ └── graph-render.js │ ├── components/ │ │ ├── __init__.py │ │ ├── main.scss │ │ └── modal/ │ │ ├── README.md │ │ ├── __init__.py │ │ ├── modal.py │ │ ├── script.js │ │ ├── style.scss │ │ └── template.html │ ├── crisis_room/ │ │ ├── __init__.py │ │ ├── apps.py │ │ ├── forms.py │ │ ├── management/ │ │ │ ├── __init__.py │ │ │ └── commands/ │ │ │ ├── __init__.py │ │ │ ├── dashboards.py │ │ │ └── recipe_seeder.json │ │ ├── migrations/ │ │ │ ├── 0001_initial.py │ │ │ ├── 0002_create_findings_dashboards.py │ │ │ ├── 0003_alter_dashboarddata_unique_together_and_more.py │ │ │ ├── 0004_change_name_findings_dashboard.py │ │ │ ├── 0005_add_dashboard_permissions_to_groups.py │ │ │ ├── 0006_rename_dashboarddata_dashboarditem.py │ │ │ ├── 0007_alter_dashboarditem_source.py │ │ │ └── __init__.py │ │ ├── models.py │ │ ├── templates/ │ │ │ ├── crisis_room.html │ │ │ ├── crisis_room_dashboards.html │ │ │ ├── crisis_room_findings.html │ │ │ ├── crisis_room_header.html │ │ │ ├── organization_crisis_room.html │ │ │ ├── organization_crisis_room_dashboard_items.html │ │ │ ├── organization_crisis_room_header.html │ │ │ └── partials/ │ │ │ ├── crisis_room_findings_table.html │ │ │ ├── dashboard_finding_list.html │ │ │ ├── dashboard_finding_list_table.html │ │ │ ├── dashboard_item_action_button.html │ │ │ ├── dashboard_ooi_list.html │ │ │ ├── dashboard_ooi_list_table.html │ │ │ ├── delete_dashboard_item_modal.html │ │ │ ├── delete_dashboard_modal.html │ │ │ ├── new_dashboard_item_action_button.html │ │ │ ├── new_dashboard_item_explanation_modal.html │ │ │ ├── new_dashboard_item_modal.html │ │ │ ├── new_dashboard_item_modal_report_section.html │ │ │ ├── new_dashboard_modal.html │ │ │ ├── report_dashboard_item_filter.html │ │ │ └── report_section_action_button.html │ │ ├── templatetags/ │ │ │ ├── __init__.py │ │ │ └── crisis_room.py │ │ ├── urls.py │ │ └── views.py │ ├── database.env-dist │ ├── debian/ │ │ ├── control │ │ ├── copyright │ │ ├── install │ │ ├── kat-rocky-worker.service │ │ ├── kat-rocky.service │ │ ├── kat-rocky.sysusers │ │ ├── postinst │ │ ├── postrm │ │ ├── rules │ │ └── triggers │ ├── docs/ │ │ └── reports.md │ ├── entrypoint.sh │ ├── fmea/ │ │ ├── __init__.py │ │ └── migrations/ │ │ ├── 0001_initial.py │ │ ├── 0001_squashed_0004_remove_failuremode_effect_and_more.py │ │ ├── 0002_auto_20220120_0839.py │ │ ├── 0003_auto_20220203_1534.py │ │ ├── 0004_remove_failuremode_effect_and_more.py │ │ └── __init__.py │ ├── katalogus/ │ │ ├── __init__.py │ │ ├── apps.py │ │ ├── client.py │ │ ├── exceptions.py │ │ ├── forms/ │ │ │ ├── __init__.py │ │ │ ├── katalogus_filter.py │ │ │ └── plugin_settings.py │ │ ├── health.py │ │ ├── templates/ │ │ │ ├── about_plugins.html │ │ │ ├── boefje_detail.html │ │ │ ├── boefje_setup.html │ │ │ ├── boefjes.html │ │ │ ├── change_clearance_level.html │ │ │ ├── clone_settings.html │ │ │ ├── confirmation_clone_settings.html │ │ │ ├── katalogus.html │ │ │ ├── katalogus_settings.html │ │ │ ├── normalizer_detail.html │ │ │ ├── normalizers.html │ │ │ ├── partials/ │ │ │ │ ├── boefje_tile.html │ │ │ │ ├── enable_disable_plugin.html │ │ │ │ ├── katalogus_filter.html │ │ │ │ ├── katalogus_header.html │ │ │ │ ├── katalogus_toolbar.html │ │ │ │ ├── modal_report_types.html │ │ │ │ ├── no_enabling_permission_message.html │ │ │ │ ├── objects_to_scan.html │ │ │ │ ├── plugin_settings_required.html │ │ │ │ ├── plugin_tile.html │ │ │ │ ├── plugin_tile_modal.html │ │ │ │ ├── plugins.html │ │ │ │ ├── plugins_navigation.html │ │ │ │ ├── single_action_checkbox_form.html │ │ │ │ └── single_action_form.html │ │ │ ├── plugin_container_image.html │ │ │ ├── plugin_settings_add.html │ │ │ ├── plugin_settings_delete.html │ │ │ └── plugin_settings_list.html │ │ ├── urls.py │ │ └── views/ │ │ ├── __init__.py │ │ ├── boefje_setup.py │ │ ├── change_clearance_level.py │ │ ├── katalogus.py │ │ ├── katalogus_settings.py │ │ ├── mixins.py │ │ ├── plugin_detail.py │ │ ├── plugin_enable_disable.py │ │ ├── plugin_settings_add.py │ │ ├── plugin_settings_delete.py │ │ ├── plugin_settings_edit.py │ │ └── plugin_settings_list.py │ ├── logging.json │ ├── manage.py │ ├── onboarding/ │ │ ├── __init__.py │ │ ├── apps.py │ │ ├── forms.py │ │ ├── migrations/ │ │ │ └── __init__.py │ │ ├── templates/ │ │ │ ├── partials/ │ │ │ │ ├── cat_loader.html │ │ │ │ ├── onboarding_header.html │ │ │ │ ├── step_1_introduction_text.html │ │ │ │ └── step_2_organization_text.html │ │ │ ├── step_10_report.html │ │ │ ├── step_1_introduction_registration.html │ │ │ ├── step_1a_introduction.html │ │ │ ├── step_2a_organization_setup.html │ │ │ ├── step_2b_organization_update.html │ │ │ ├── step_3_indemnification_setup.html │ │ │ ├── step_4_trusted_acknowledge_clearance_level.html │ │ │ ├── step_5_add_scan_ooi.html │ │ │ ├── step_6_set_clearance_level.html │ │ │ ├── step_7_clearance_level_introduction.html │ │ │ ├── step_8_setup_scan_select_plugins.html │ │ │ └── step_9_choose_report_type.html │ │ ├── urls.py │ │ ├── view_helpers.py │ │ └── views.py │ ├── package.json │ ├── packaging/ │ │ ├── deb/ │ │ │ └── data/ │ │ │ ├── etc/ │ │ │ │ └── kat/ │ │ │ │ └── rocky.conf │ │ │ └── usr/ │ │ │ └── bin/ │ │ │ └── rocky-cli │ │ └── scripts/ │ │ └── build-debian-package.sh │ ├── pyproject.toml │ ├── reports/ │ │ ├── __init__.py │ │ ├── apps.py │ │ ├── forms.py │ │ ├── management/ │ │ │ ├── __init__.py │ │ │ └── commands/ │ │ │ ├── __init__.py │ │ │ └── worker.py │ │ ├── migrations/ │ │ │ └── __init__.py │ │ ├── report_types/ │ │ │ ├── __init__.py │ │ │ ├── aggregate_organisation_report/ │ │ │ │ ├── __init__.py │ │ │ │ ├── appendix.html │ │ │ │ ├── asset_overview.html │ │ │ │ ├── basic_security.html │ │ │ │ ├── findings.html │ │ │ │ ├── recommendations.html │ │ │ │ ├── report.html │ │ │ │ ├── report.py │ │ │ │ ├── rpki.html │ │ │ │ ├── safe_connections.html │ │ │ │ ├── summary.html │ │ │ │ ├── system_specific.html │ │ │ │ ├── system_specific_overview.html │ │ │ │ ├── term_overview.html │ │ │ │ └── vulnerabilities.html │ │ │ ├── concatenated_report/ │ │ │ │ ├── __init__.py │ │ │ │ └── report.py │ │ │ ├── definitions.py │ │ │ ├── dns_report/ │ │ │ │ ├── __init__.py │ │ │ │ ├── report.html │ │ │ │ └── report.py │ │ │ ├── findings_report/ │ │ │ │ ├── __init__.py │ │ │ │ ├── report.html │ │ │ │ └── report.py │ │ │ ├── helpers.py │ │ │ ├── ipv6_report/ │ │ │ │ ├── __init__.py │ │ │ │ ├── report.html │ │ │ │ └── report.py │ │ │ ├── mail_report/ │ │ │ │ ├── __init__.py │ │ │ │ ├── report.html │ │ │ │ └── report.py │ │ │ ├── multi_organization_report/ │ │ │ │ ├── __init__.py │ │ │ │ ├── appendix.html │ │ │ │ ├── asset_overview.html │ │ │ │ ├── basic_security_details.html │ │ │ │ ├── ipv6.html │ │ │ │ ├── open_ports.html │ │ │ │ ├── recommendations.html │ │ │ │ ├── report.html │ │ │ │ ├── report.py │ │ │ │ ├── summary.html │ │ │ │ └── vulnerabilities.html │ │ │ ├── name_server_report/ │ │ │ │ ├── __init__.py │ │ │ │ ├── report.html │ │ │ │ └── report.py │ │ │ ├── open_ports_report/ │ │ │ │ ├── __init__.py │ │ │ │ ├── report.html │ │ │ │ └── report.py │ │ │ ├── rpki_report/ │ │ │ │ ├── __init__.py │ │ │ │ ├── report.html │ │ │ │ └── report.py │ │ │ ├── safe_connections_report/ │ │ │ │ ├── __init__.py │ │ │ │ ├── report.html │ │ │ │ └── report.py │ │ │ ├── systems_report/ │ │ │ │ ├── __init__.py │ │ │ │ ├── report.html │ │ │ │ └── report.py │ │ │ ├── tls_report/ │ │ │ │ ├── __init__.py │ │ │ │ ├── report.html │ │ │ │ └── report.py │ │ │ ├── vulnerability_report/ │ │ │ │ ├── __init__.py │ │ │ │ ├── report.html │ │ │ │ └── report.py │ │ │ └── web_system_report/ │ │ │ ├── __init__.py │ │ │ ├── report.html │ │ │ └── report.py │ │ ├── runner/ │ │ │ ├── __init__.py │ │ │ ├── models.py │ │ │ ├── report_runner.py │ │ │ └── worker.py │ │ ├── serializers.py │ │ ├── templates/ │ │ │ ├── aggregate_report.html │ │ │ ├── aggregate_report_pdf.html │ │ │ ├── forms/ │ │ │ │ └── report_form_fields.html │ │ │ ├── generate_report/ │ │ │ │ ├── export_setup.html │ │ │ │ ├── select_oois.html │ │ │ │ ├── select_report_types.html │ │ │ │ └── setup_scan.html │ │ │ ├── generate_report.html │ │ │ ├── generate_report_pdf.html │ │ │ ├── multi_report.html │ │ │ ├── multi_report_pdf.html │ │ │ ├── partials/ │ │ │ │ ├── export_report_settings.html │ │ │ │ ├── generate_report_header.html │ │ │ │ ├── generate_report_sidemenu.html │ │ │ │ ├── new_report_action_button.html │ │ │ │ ├── plugin_overview_table.html │ │ │ │ ├── report_findings_table.html │ │ │ │ ├── report_header.html │ │ │ │ ├── report_introduction.html │ │ │ │ ├── report_names_form.html │ │ │ │ ├── report_ooi_list.html │ │ │ │ ├── report_setup_scan.html │ │ │ │ ├── report_severity_totals_table.html │ │ │ │ ├── report_sidemenu.html │ │ │ │ ├── report_types_selection.html │ │ │ │ ├── report_types_tiles.html │ │ │ │ ├── report_types_tiles_required_optional.html │ │ │ │ └── return_button.html │ │ │ ├── report_overview/ │ │ │ │ ├── modal_partials/ │ │ │ │ │ ├── delete_modal.html │ │ │ │ │ ├── enable_disable_schedule_modal.html │ │ │ │ │ ├── rename_modal.html │ │ │ │ │ ├── rerun_modal.html │ │ │ │ │ └── share_modal.html │ │ │ │ ├── report_history.html │ │ │ │ ├── report_history_table.html │ │ │ │ ├── report_overview_header.html │ │ │ │ ├── report_overview_navigation.html │ │ │ │ ├── scheduled_reports.html │ │ │ │ ├── scheduled_reports_table.html │ │ │ │ ├── subreports.html │ │ │ │ ├── subreports_header.html │ │ │ │ └── subreports_table.html │ │ │ ├── report_schedules/ │ │ │ │ └── delete_recipe_modal.html │ │ │ └── summary/ │ │ │ ├── ooi_selection.html │ │ │ ├── report_asset_overview.html │ │ │ ├── selected_plugins.html │ │ │ └── service_health.html │ │ ├── templatetags/ │ │ │ ├── __init__.py │ │ │ └── report_extra.py │ │ ├── urls.py │ │ ├── utils.py │ │ ├── views/ │ │ │ ├── __init__.py │ │ │ ├── aggregate_report.py │ │ │ ├── base.py │ │ │ ├── generate_report.py │ │ │ ├── mixins.py │ │ │ ├── multi_report.py │ │ │ ├── report_overview.py │ │ │ └── view_helpers.py │ │ └── viewsets.py │ ├── requirements-dev.txt │ ├── requirements.txt │ ├── rocky/ │ │ ├── __init__.py │ │ ├── apps.py │ │ ├── asgi.py │ │ ├── auth/ │ │ │ ├── __init__.py │ │ │ └── remote_user.py │ │ ├── bytes_client.py │ │ ├── exceptions.py │ │ ├── forms.py │ │ ├── health.py │ │ ├── locale/ │ │ │ ├── de/ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ └── django.po │ │ │ ├── django.pot │ │ │ ├── en@pirate/ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ └── django.po │ │ │ ├── es/ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ └── django.po │ │ │ ├── fr/ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ └── django.po │ │ │ ├── fy/ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ └── django.po │ │ │ ├── it/ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ └── django.po │ │ │ ├── nl/ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ └── django.po │ │ │ ├── pap/ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ └── django.po │ │ │ └── ta/ │ │ │ └── LC_MESSAGES/ │ │ │ └── django.po │ │ ├── messaging.py │ │ ├── middleware/ │ │ │ ├── __init__.py │ │ │ ├── auth_required.py │ │ │ ├── onboarding.py │ │ │ ├── otel.py │ │ │ └── remote_user.py │ │ ├── otel.py │ │ ├── paginator.py │ │ ├── permissions.py │ │ ├── scheduler.py │ │ ├── settings.py │ │ ├── settings_test.py │ │ ├── signals.py │ │ ├── templates/ │ │ │ ├── 403.html │ │ │ ├── 404.html │ │ │ ├── admin/ │ │ │ │ ├── base.html │ │ │ │ ├── change_form.html │ │ │ │ ├── change_list.html │ │ │ │ ├── delete_confirmation.html │ │ │ │ ├── delete_selected_confirmation.html │ │ │ │ ├── popup_response.html │ │ │ │ └── prepopulated_fields_js.html │ │ │ ├── dashboard_client.html │ │ │ ├── dashboard_redteam.html │ │ │ ├── finding_type_add.html │ │ │ ├── findings/ │ │ │ │ ├── finding_add.html │ │ │ │ ├── finding_list.html │ │ │ │ └── findings_filter.html │ │ │ ├── footer.html │ │ │ ├── forms/ │ │ │ │ ├── json_schema_form.html │ │ │ │ └── widgets/ │ │ │ │ ├── checkbox_group_boefje_tiles.html │ │ │ │ ├── checkbox_group_columns.html │ │ │ │ ├── checkbox_group_table.html │ │ │ │ ├── checkbox_option.html │ │ │ │ ├── datalist.html │ │ │ │ ├── input_option.html │ │ │ │ └── widget_label.html │ │ │ ├── graph-d3.html │ │ │ ├── head.html │ │ │ ├── header.html │ │ │ ├── health.html │ │ │ ├── indemnification_add.html │ │ │ ├── indemnification_present.html │ │ │ ├── landing_page.html │ │ │ ├── layouts/ │ │ │ │ └── base.html │ │ │ ├── legal/ │ │ │ │ └── privacy_statement.html │ │ │ ├── oois/ │ │ │ │ ├── error.html │ │ │ │ ├── ooi_add.html │ │ │ │ ├── ooi_add_type_select.html │ │ │ │ ├── ooi_delete.html │ │ │ │ ├── ooi_detail.html │ │ │ │ ├── ooi_detail_add_related_object.html │ │ │ │ ├── ooi_detail_findings_list.html │ │ │ │ ├── ooi_detail_findings_overview.html │ │ │ │ ├── ooi_detail_object.html │ │ │ │ ├── ooi_detail_origins_declarations.html │ │ │ │ ├── ooi_detail_origins_inference.html │ │ │ │ ├── ooi_detail_origins_observations.html │ │ │ │ ├── ooi_edit.html │ │ │ │ ├── ooi_findings.html │ │ │ │ ├── ooi_list.html │ │ │ │ ├── ooi_mute_finding.html │ │ │ │ ├── ooi_page_tabs.html │ │ │ │ ├── ooi_past_due_warning.html │ │ │ │ ├── ooi_summary.html │ │ │ │ └── ooi_tree.html │ │ │ ├── organizations/ │ │ │ │ ├── organization_add.html │ │ │ │ ├── organization_edit.html │ │ │ │ ├── organization_list.html │ │ │ │ ├── organization_member_add.html │ │ │ │ ├── organization_member_add_account_type.html │ │ │ │ ├── organization_member_add_header.html │ │ │ │ ├── organization_member_edit.html │ │ │ │ ├── organization_member_list.html │ │ │ │ ├── organization_member_upload.html │ │ │ │ ├── organization_settings.html │ │ │ │ ├── organization_tags.html │ │ │ │ └── select_clearance_level_radio_input.html │ │ │ ├── partials/ │ │ │ │ ├── boefje_tile_option.html │ │ │ │ ├── current_config.html │ │ │ │ ├── delete_ooi_modal.html │ │ │ │ ├── edit_ooi_clearance_level_modal.html │ │ │ │ ├── elements/ │ │ │ │ │ ├── definition_list_item.html │ │ │ │ │ ├── definition_list_items.html │ │ │ │ │ ├── ooi_add_type_select_form.html │ │ │ │ │ ├── ooi_detail_settings.html │ │ │ │ │ ├── ooi_list_settings_form.html │ │ │ │ │ ├── ooi_report_settings.html │ │ │ │ │ ├── ooi_tree_condensed_table.html │ │ │ │ │ ├── ooi_tree_condensed_table_row.html │ │ │ │ │ ├── ooi_tree_table.html │ │ │ │ │ └── ooi_tree_table_row.html │ │ │ │ ├── explanations.html │ │ │ │ ├── finding_occurrence_definition_list.html │ │ │ │ ├── findings_list_toolbar.html │ │ │ │ ├── form/ │ │ │ │ │ ├── boefje_tiles_form.html │ │ │ │ │ ├── checkbox_group_table_form.html │ │ │ │ │ ├── field_hidden_from_list.html │ │ │ │ │ ├── field_input.html │ │ │ │ │ ├── field_input_checkbox.html │ │ │ │ │ ├── field_input_errors.html │ │ │ │ │ ├── field_input_help_text.html │ │ │ │ │ ├── field_input_hidden.html │ │ │ │ │ ├── field_input_multiselect.html │ │ │ │ │ ├── field_input_radio.html │ │ │ │ │ ├── field_input_wrapper.html │ │ │ │ │ ├── fieldset.html │ │ │ │ │ ├── form_errors.html │ │ │ │ │ └── indemnification_add_form.html │ │ │ │ ├── hyperlink_ooi_id.html │ │ │ │ ├── hyperlink_ooi_type.html │ │ │ │ ├── language-switcher.html │ │ │ │ ├── list_filters.html │ │ │ │ ├── list_paginator.html │ │ │ │ ├── mute_findings_modal.html │ │ │ │ ├── notifications_block.html │ │ │ │ ├── ooi_detail_related_object.html │ │ │ │ ├── ooi_detail_toolbar.html │ │ │ │ ├── ooi_head.html │ │ │ │ ├── ooi_list_filters.html │ │ │ │ ├── ooi_list_toolbar.html │ │ │ │ ├── ooi_report_findings_block.html │ │ │ │ ├── ooi_report_findings_block_table.html │ │ │ │ ├── ooi_report_findings_block_table_expanded_row.html │ │ │ │ ├── ooi_schedule.html │ │ │ │ ├── ooi_summary_block.html │ │ │ │ ├── ooi_summary_finding.html │ │ │ │ ├── ooi_tree_toolbar_bottom.html │ │ │ │ ├── organization_member_list_filters.html │ │ │ │ ├── organization_properties_table.html │ │ │ │ ├── organizations_menu_dropdown.html │ │ │ │ ├── page-meta.html │ │ │ │ ├── pagination.html │ │ │ │ ├── scan_level_indicator.html │ │ │ │ ├── secondary-menu.html │ │ │ │ ├── skip-to-content.html │ │ │ │ └── stepper.html │ │ │ ├── rest_framework/ │ │ │ │ └── api.html │ │ │ ├── robots.txt │ │ │ ├── scan.html │ │ │ ├── scan_profiles/ │ │ │ │ └── scan_profile_detail.html │ │ │ ├── tasks/ │ │ │ │ ├── boefje_task_detail.html │ │ │ │ ├── boefjes.html │ │ │ │ ├── normalizers.html │ │ │ │ ├── ooi_detail_task_list.html │ │ │ │ ├── partials/ │ │ │ │ │ ├── stats.html │ │ │ │ │ ├── tab_navigation.html │ │ │ │ │ ├── task_actions.html │ │ │ │ │ ├── task_filter.html │ │ │ │ │ └── tasks_overview_header.html │ │ │ │ ├── plugin_detail_task_list.html │ │ │ │ └── reports.html │ │ │ ├── two_factor/ │ │ │ │ ├── _base.html │ │ │ │ ├── _base_focus.html │ │ │ │ ├── _wizard_actions.html │ │ │ │ ├── _wizard_forms.html │ │ │ │ ├── core/ │ │ │ │ │ ├── backup_tokens.html │ │ │ │ │ ├── login.html │ │ │ │ │ ├── otp_required.html │ │ │ │ │ ├── phone_register.html │ │ │ │ │ ├── setup.html │ │ │ │ │ └── setup_complete.html │ │ │ │ ├── profile/ │ │ │ │ │ ├── disable.html │ │ │ │ │ └── profile.html │ │ │ │ └── twilio/ │ │ │ │ └── sms_message.html │ │ │ ├── upload_csv.html │ │ │ └── upload_raw.html │ │ ├── templatetags/ │ │ │ ├── __init__.py │ │ │ └── rocky.py │ │ ├── urls.py │ │ ├── version.py │ │ ├── views/ │ │ │ ├── __init__.py │ │ │ ├── bytes_raw.py │ │ │ ├── clients.py │ │ │ ├── finding_add.py │ │ │ ├── finding_list.py │ │ │ ├── finding_type_add.py │ │ │ ├── handler403.py │ │ │ ├── handler404.py │ │ │ ├── health.py │ │ │ ├── indemnification_add.py │ │ │ ├── landing_page.py │ │ │ ├── mixins.py │ │ │ ├── ooi_add.py │ │ │ ├── ooi_delete.py │ │ │ ├── ooi_detail.py │ │ │ ├── ooi_detail_related_object.py │ │ │ ├── ooi_edit.py │ │ │ ├── ooi_findings.py │ │ │ ├── ooi_list.py │ │ │ ├── ooi_mute.py │ │ │ ├── ooi_tree.py │ │ │ ├── ooi_view.py │ │ │ ├── organization_add.py │ │ │ ├── organization_edit.py │ │ │ ├── organization_list.py │ │ │ ├── organization_member_add.py │ │ │ ├── organization_member_edit.py │ │ │ ├── organization_member_list.py │ │ │ ├── organization_settings.py │ │ │ ├── page_actions.py │ │ │ ├── privacy_statement.py │ │ │ ├── rerun_bits.py │ │ │ ├── scan_profile.py │ │ │ ├── scans.py │ │ │ ├── scheduler.py │ │ │ ├── task_detail.py │ │ │ ├── tasks.py │ │ │ ├── upload_csv.py │ │ │ └── upload_raw.py │ │ └── wsgi.py │ ├── setup.py │ ├── tests/ │ │ ├── __init__.py │ │ ├── account/ │ │ │ ├── __init__.py │ │ │ └── test_login.py │ │ ├── conftest.py │ │ ├── integration/ │ │ │ ├── __init__.py │ │ │ ├── conftest.py │ │ │ ├── test_bench.py │ │ │ ├── test_report_runner.py │ │ │ └── test_reports.py │ │ ├── katalogus/ │ │ │ ├── __init__.py │ │ │ ├── test_katalogus.py │ │ │ ├── test_katalogus_boefje_setup.py │ │ │ ├── test_katalogus_plugin_add.py │ │ │ ├── test_katalogus_plugin_delete.py │ │ │ └── test_katalogus_plugin_detail.py │ │ ├── objects/ │ │ │ ├── __init__.py │ │ │ ├── test_objects.py │ │ │ ├── test_objects_add.py │ │ │ ├── test_objects_delete.py │ │ │ ├── test_objects_detail.py │ │ │ ├── test_objects_edit.py │ │ │ ├── test_objects_findings.py │ │ │ ├── test_objects_graph.py │ │ │ ├── test_objects_scan_profile.py │ │ │ └── test_objects_tree.py │ │ ├── onboarding/ │ │ │ ├── __init__.py │ │ │ └── test_onboarding.py │ │ ├── reports/ │ │ │ ├── __init__.py │ │ │ ├── test_aggregate_report_flow.py │ │ │ ├── test_base_report.py │ │ │ ├── test_dns_report.py │ │ │ ├── test_findings_report.py │ │ │ ├── test_generate_report_flow.py │ │ │ ├── test_history_report.py │ │ │ ├── test_ipv6_report.py │ │ │ ├── test_mail_report.py │ │ │ ├── test_multi_report_flow.py │ │ │ ├── test_name_server_report.py │ │ │ ├── test_open_ports_report.py │ │ │ ├── test_plugins.py │ │ │ ├── test_report_overview.py │ │ │ ├── test_report_schedules.py │ │ │ ├── test_report_tasks.py │ │ │ ├── test_rpki_report.py │ │ │ ├── test_safe_connections_report.py │ │ │ ├── test_systems_report.py │ │ │ ├── test_tls_report.py │ │ │ ├── test_vulnerability_report.py │ │ │ └── test_web_systems_report.py │ │ ├── robot/ │ │ │ ├── ci/ │ │ │ │ └── 01_rocky_loads.robot │ │ │ ├── complete_onboarding/ │ │ │ │ ├── 01_onboard_with_all_users.robot │ │ │ │ ├── 02_login_as_redteamer_and_do_stuff.robot │ │ │ │ └── 03_functional_tests.robot │ │ │ ├── skip_onboarding_no_report/ │ │ │ │ └── 01_skip_onboarding_no_report.robot │ │ │ ├── skip_onboarding_with_functional_tests/ │ │ │ │ ├── 01_skip_onboarding_with_functional_tests.robot │ │ │ │ └── 02_functional_tests.robot │ │ │ ├── skip_onboarding_with_report/ │ │ │ │ └── 01_skip_onboarding_with_report.robot │ │ │ └── xxx.resource │ │ ├── scheduler/ │ │ │ ├── __init__.py │ │ │ └── test_scheduler_errors.py │ │ ├── stubs/ │ │ │ ├── aggregate_report_data.json │ │ │ ├── iana_service.html │ │ │ ├── katalogus_boefjes.json │ │ │ ├── katalogus_normalizers.json │ │ │ ├── mock.csv │ │ │ ├── multi_report_data_minvws.json │ │ │ ├── multi_report_data_mispoes.json │ │ │ ├── multi_report_post_processed_data.json │ │ │ ├── question_schema.json │ │ │ ├── snyk_response.html │ │ │ └── wiki.html │ │ ├── test_admin.py │ │ ├── test_api.py │ │ ├── test_api_organization.py │ │ ├── test_boefjes_tasks.py │ │ ├── test_core.py │ │ ├── test_dashboard.py │ │ ├── test_findings_add.py │ │ ├── test_groups_and_permissions.py │ │ ├── test_health.py │ │ ├── test_indemnification.py │ │ ├── test_landing_page.py │ │ ├── test_members.py │ │ ├── test_migrations.py │ │ ├── test_models.py │ │ ├── test_observed_at.py │ │ ├── test_ooi_information.py │ │ ├── test_organization.py │ │ ├── test_privacy_statement.py │ │ ├── test_scans.py │ │ ├── test_upload_csv.py │ │ ├── test_upload_members.py │ │ ├── test_upload_raw.py │ │ ├── test_validators.py │ │ └── test_zip.py │ ├── tools/ │ │ ├── __init__.py │ │ ├── add_ooi_information.py │ │ ├── admin.py │ │ ├── apps.py │ │ ├── context_processors.py │ │ ├── enums.py │ │ ├── fields.py │ │ ├── forms/ │ │ │ ├── __init__.py │ │ │ ├── base.py │ │ │ ├── boefje.py │ │ │ ├── finding_type.py │ │ │ ├── findings.py │ │ │ ├── ooi.py │ │ │ ├── ooi_form.py │ │ │ ├── scheduler.py │ │ │ ├── settings.py │ │ │ ├── upload_csv.py │ │ │ ├── upload_oois.py │ │ │ └── upload_raw.py │ │ ├── management/ │ │ │ ├── __init__.py │ │ │ └── commands/ │ │ │ ├── __init__.py │ │ │ ├── almost_flush.py │ │ │ ├── export_migrations.py │ │ │ ├── makemessages.py │ │ │ ├── setup_dev_account.py │ │ │ └── setup_test_org.py │ │ ├── migrations/ │ │ │ ├── 0001_initial.py │ │ │ ├── 0001_squashed_0041_merge_20230731_1131.py │ │ │ ├── 0002_alter_organization_octopoes_host.py │ │ │ ├── 0003_change_orgazation_host_to_code.py │ │ │ ├── 0004_ooiinformation.py │ │ │ ├── 0005_scanprofile.py │ │ │ ├── 0006_alter_organization_name.py │ │ │ ├── 0007_update_job.py │ │ │ ├── 0008_organizationmember_verified.py │ │ │ ├── 0009_scanprofile_is_source_ooi.py │ │ │ ├── 0010_alter_scanprofile_reference.py │ │ │ ├── 0011_job_input_ooi.py │ │ │ ├── 0012_rename_module_job_boefje_name.py │ │ │ ├── 0013_boefjeconfig.py │ │ │ ├── 0014_drop_dispatches_field.py │ │ │ ├── 0015_alter_job_input_ooi.py │ │ │ ├── 0016_organization_signal_fields.py │ │ │ ├── 0017_alter_organizationmember_foreignkey.py │ │ │ ├── 0018_alter_boefjeconfig_options.py │ │ │ ├── 0019_alter_scanprofile_remove_level_and_user.py │ │ │ ├── 0020_auto_20220524_1324.py │ │ │ ├── 0021_delete_boefjeconfig.py │ │ │ ├── 0022_alter_organization_options.py │ │ │ ├── 0023_delete_scanprofile.py │ │ │ ├── 0024_auto_20221005_1251.py │ │ │ ├── 0025_auto_20221027_1233.py │ │ │ ├── 0026_auto_20221031_1344.py │ │ │ ├── 0027_auto_20230103_1721.py │ │ │ ├── 0028_auto_20230117_1242.py │ │ │ ├── 0029_alter_organizationtag_color.py │ │ │ ├── 0029_set_user_full_name.py │ │ │ ├── 0030_auto_20230227_1458.py │ │ │ ├── 0031_merge_20230301_2012.py │ │ │ ├── 0032_alter_organizationmember_user.py │ │ │ ├── 0033_alter_organization_options.py │ │ │ ├── 0033_auto_20230407_1113.py │ │ │ ├── 0034_alter_organization_options.py │ │ │ ├── 0034_organizationmember_groups.py │ │ │ ├── 0035_update_ooi_delete_perm.py │ │ │ ├── 0035_update_perms_move_and_clear_groups.py │ │ │ ├── 0036_merge_20230504_1629.py │ │ │ ├── 0037_alter_organization_options.py │ │ │ ├── 0038_alter_organization_options.py │ │ │ ├── 0038_delete_job.py │ │ │ ├── 0039_merge_0038_alter_organization_options_0038_delete_job.py │ │ │ ├── 0039_update_permissions.py │ │ │ ├── 0040_admin_inherits_red_teamer_permissions.py │ │ │ ├── 0040_update_admin_permission.py │ │ │ ├── 0041_merge_20230731_1131.py │ │ │ ├── 0042_alter_organization_options.py │ │ │ ├── 0043_alter_organization_options.py │ │ │ ├── 0044_alter_organization_options.py │ │ │ ├── 0045_alter_organization_options.py │ │ │ ├── 0045_update_permissions.py │ │ │ ├── 0046_alter_organization_options.py │ │ │ ├── 0047_alter_organization_code_alter_organization_name.py │ │ │ └── __init__.py │ │ ├── models.py │ │ ├── ooi_helpers.py │ │ ├── permissions.py │ │ ├── serializers.py │ │ ├── templatetags/ │ │ │ ├── __init__.py │ │ │ ├── form_extra.py │ │ │ ├── media_with_nonce.py │ │ │ └── ooi_extra.py │ │ ├── validators.py │ │ ├── view_helpers.py │ │ └── viewsets.py │ └── whitelist.py ├── scripts/ │ ├── backup/ │ │ ├── backup-volumes.sh │ │ └── restore-volumes.sh │ ├── development/ │ │ └── backport.py │ ├── installation/ │ │ ├── openkat-empty-job-queue.sh │ │ ├── openkat-install.sh │ │ ├── openkat-reset.sh │ │ ├── openkat-restart.sh │ │ ├── openkat-show-journal.sh │ │ ├── openkat-start.sh │ │ ├── openkat-status.sh │ │ ├── openkat-stop.sh │ │ └── openkat-update.sh │ ├── migrate-openkat.sh │ └── migrate.md └── sonar-project.properties