{% extends "base_generic.html" %} {% load determine_primary bleach_tags custom_tags extra_fields report_tags settings_tags static json_enc %} {% block pagetitle %}{{ project.client }} {{ project.project_type }} Details{% endblock %} {% block content %}
Project

{% if project.codename %}{{ project.codename }}{% else %}Project {{ project.id }}{% endif %}

{{ project.client.name }} {{ project.project_type }} {{ project.start_date|date:"DATE_FORMAT" }} – {{ project.end_date|date:"DATE_FORMAT" }}
{% if project.tags.all %}
{% for tag in project.tags.names %}{{ tag|bleach }}{% endfor %}
{% endif %}
{% comment %} Navigation Tabs Load tabs via AJAX so badges update with delete actions {% endcomment %}
{% comment %} Planning Tab {% endcomment %}

Project Details

Project Status
{{ project_status.label }}
{{ project_status.help }}
Codename
{% if project.codename %}{{ project.codename }}{% else %}Not provided{% endif %}
Execution Dates
{{ project.start_date|date:"DATE_FORMAT" }} – {{ project.end_date|date:"DATE_FORMAT" }}
Working Hours
{% if project.start_time and project.end_time %}{{ project.start_time|date:"G:i" }} to {{ project.end_time|date:"G:i" }} ({{ project.timezone }}){% else %}Not provided{% endif %}
Slack Channel
{% if project.slack_channel %}{{ project.slack_channel }}{% else %}Not provided{% endif %}

Project Description

{% if project.description %} {{ project.description|bleach }} {% else %}

No description has been added for this project. Add a description.

{% endif %}
{% comment %} Calendar Section {% endcomment %}
Schedule

Project Calendar

{% comment %} People Tab {% endcomment %}
{% comment %} Assignment Section {% endcomment %}

Project Team Assignments

Operators assigned here can access the project and track their role, working dates, and assignment notes.

{% if request.user|is_privileged %} Add & Edit Assignments {% endif %}
{% if project.projectassignment_set.all %}
{% if request.user|is_privileged %} {% endif %} {% for operator in project.projectassignment_set.all %} {% if request.user|is_privileged %} {% endif %} {% endfor %}
Operator Role Dates NoteOptions
{% if operator.operator.name %} {{ operator.operator.name }} {% else %} Missing Full Name ({{ operator.operator.username|capfirst }}) {% endif %} {{ operator.role }} {{ operator.start_date|date:"DATE_FORMAT" }} –
{{ operator.end_date|date:"DATE_FORMAT" }}
{% if operator.description %} {{ operator.description|bleach }} {% else %} Not provided {% endif %}
{% else %}

No assignments yet

Assign operators to record their roles and working dates for this engagement.

{% endif %}
{% include "snippets/project_contacts_table.html" %}
{% comment %} Invitations {% endcomment %} {% if request.user|is_privileged %}

Invited Collaborators

Invited users can view this project without appearing as assigned operators.

Add & Edit Invitations
{% if project.projectinvite_set.all %}
{% for invite in project.projectinvite_set.all %} {% endfor %}
Name Comment Options
{% if invite.user.name %} {{ invite.user.name }} {% else %} Missing Full Name ({{ invite.user.username|capfirst }}) {% endif %} {{ invite.comment|bleach }}
{% else %}

No invitations yet

Invite users who need project visibility without an operator assignment.

{% endif %}
{% endif %}
{% comment %} White Cards Tab {% endcomment %}

White Cards

Client-provided access, accounts, and actions that keep the assessment moving.

Manage White Cards
{% if project.whitecard_set.all %}
{% for card in project.whitecard_set.all %}
Assessment enablement
{% if card.title %}{{ card.title }}{% else %}Untitled white card{% endif %}
Provided {% if card.issued %} {% else %} Time not recorded {% endif %}
{% if card.description %} {{ card.description|bleach }} {% else %}

No supporting details were recorded.

{% endif %}
{% endfor %}
{% else %}

No white cards yet

Record client-provided access or actions that enable the assessment.

{% endif %}
{% comment %} Scope Tab {% endcomment %}

Scope Lists

Break large scopes into useful categories, such as external assets or individual objectives.

Add & Edit Scope Lists
{% if project.projectscope_set.all %}
{% for list in project.projectscope_set.all %} {% with scope_limit=5 %} {% endwith %} {% endfor %}
Name Preview Description Options
{{ list.name }}
scope_limit %} title="The first {{ scope_limit }} of {{ list.count_lines }} line{{ list.count_lines|pluralize }}" {% else %} title="The full scope, {{ list.count_lines }} line{{ list.count_lines|pluralize }}" {% endif %} > {{ list.scope|get_scope_preview:scope_limit|linebreaks }} {% if list.count_lines > scope_limit %} Expand for more ... {% endif %}
{{ list.description|bleach }}
{% else %}

No scope lists yet

Attach a scope list to organize the systems and boundaries included in the assessment.

{% endif %}
{% include "snippets/project_objectives.html" %}
{% comment %} Targets Tab {% endcomment %}

Targets

Call out specific targets, track compromise status, and retain operational context.

Add & Edit Targets
{% if project.projecttarget_set.all %}
{% for target in project.projecttarget_set.all %} {% endfor %}
Owned Target Note Options
{% if target.ip_address and target.hostname %} {{ target.hostname }} ({{ target.ip_address }}) {% elif target.ip_address %} {{ target.ip_address }} {% elif target.hostname %} {{ target.hostname }} {% endif %} {{ target.description|bleach }}
{% else %}

No targets yet

Add targets to track in-scope hosts and their current assessment state.

{% endif %}
{% comment %} Logging Tab {% endcomment %}

Operation Logs

Start a new operation log for this project or import an existing log.

{% if project.oplog_set.all %}
{% for log in project.oplog_set.all %} {% endfor %}
ID Name Last Activity Export CSV
{{ log.id }} {{ log.name }} {% if log.entries.all %} {% with log.entries.all.first as latest %} {{ latest.start_date }} {% endwith %} {% else %} No entries yet {% endif %}
{% else %}

No operation logs yet

Start an activity log to record operator actions and supporting evidence.

{% endif %}
{% comment %} Reporting Section {% endcomment %}
Export

Generate Project Documents

Generate JSON project data or select a project template for documents such as a statement of work or rules of engagement. Report data is not available in this export.

Format

Project Reports & Findings

Open a related report to view and edit its findings.

{% if not project.complete %} Add a Report {% endif %}
{% if project.complete %}
This project is complete, so additional reports cannot be created.
{% endif %} {% if project.report_set.all %}
{% for report in project.report_set.all %} {% if report.complete %} {% if report.delivered %} {% else %} {% endif %} {% else %} {% endif %} {% endfor %}
Title Status Last Update Created By Options
{{ report.title }}DeliveredComplete, Awaiting DeliveryIn Progress{{ report.last_update|date:"DATE_FORMAT" }} {% if report.created_by %}{{ report.created_by }}{% else %}Unknown{% endif %}
{% for report in project.report_set.all %} {% if report.reportfindinglink_set.all %}
Report findings
Findings in {{ report.title }}
Open report
{% group_by_severity report.reportfindinglink_set.all as severity_groups %} {% for group, values in severity_groups.items %} {% if values.findings %} {% for finding in values.findings %} {% endfor %} {% endif %} {% endfor %}
Finding CVSS Owner Status
{{ group }} {{ values.findings|length }}
{{ finding.title }} {% if finding.added_as_blank %} {% endif %} {% if finding.cvss_score %} {{ finding.cvss_score }} {% else %}Not scored{% endif %} {% if finding.assigned_to == request.user %} You {% elif finding.assigned_to %} {{ finding.assigned_to }} {% else %} Unassigned {% endif %} {% if finding.complete %}Ready{% else %}Needs Editing{% endif %}
{% else %}

No findings in {{ report.title }}

This report does not contain any findings yet.

{% endif %} {% endfor %} {% else %}

No reports yet

Create a report to begin organizing findings, observations, and evidence.

{% endif %}
{% comment %} Infrastructure Tab {% endcomment %}

Project Infrastructure

Review checked-out domains and servers, add project cloud servers, and connect domains or subdomains to their infrastructure.

{% comment %} Domain Section {% endcomment %}
Domains
{% comment %} Search Section {% endcomment %} {% if project.history_set.all %}
{% for domain in project.history_set.all %} {% endfor %}
Domain Name Purpose Date Range Checked Out By Options
{{ domain.domain.name }} {{ domain.activity_type }} {{ domain.start_date|date:"DATE_FORMAT" }} –
{{ domain.end_date|date:"DATE_FORMAT" }}
{% if domain.operator %} {% if domain.operator.name %} {{ domain.operator.name }} ({{ domain.operator.username }}) {% else %} Missing Full Name ({{ domain.operator.username }}) {% endif %} {% else %} Unknown/Deleted user {% endif %}
{% else %}

No domains yet

Check out a domain when the engagement needs reusable infrastructure.

{% endif %} {% comment %} Server Section {% endcomment %}
Servers
Add a Cloud Server
{% comment %} Search Section {% endcomment %} {% if project.serverhistory_set.all or project.transientserver_set.all %}
{% for server in project.serverhistory_set.all %} {% get_primary_address server.server as primary_address %} {% endfor %} {% for server in project.transientserver_set.all %} {% endfor %}
Other Addresses Name Purpose Role Provider Checked Out By Options
{{ primary_address }} {% if server.server.auxserveraddress_set %} {% for addy in server.server.auxserveraddress_set.all %} {% endfor %} {% else %} Not provided {% endif %} {{ server.server.name }} {{ server.activity_type }} {{ server.server_role }} {{ server.server.server_provider }} {% if server.operator %} {% if server.operator.name %} {{ server.operator.name }} ({{ server.operator.username }}) {% else %} Missing Full Name ({{ server.operator.username }}) {% endif %} {% else %} Unknown/Deleted user {% endif %}
{{ server.ip_address }} {{ server.aux_address|join:"
" }}
{{ server.name }} {{ server.activity_type }} {{ server.server_role }} {{ server.server_provider }} Not applicable
{% else %}

No servers yet

Check out a server when the engagement needs reusable infrastructure.

{% endif %} {% comment %} DNS Section {% endcomment %} {% comment %} Determine if at least one server and one domain {% endcomment %}
Domain and Server Connections

Associate project domains and subdomains with the servers that handle their traffic.

{% if project.transientserver_set.all or project.serverhistory_set.all and project.history_set.all %} Associate Domain + Server {% endif %}
{% if project.transientserver_set.all or project.serverhistory_set.all and project.history_set.all %} {% if project.domainserverconnection_set.all %}
{% for connection in project.domainserverconnection_set.all %} {% if connection.static_server %} {% else %} {% endif %} {% if connection.endpoint %} {% else %} {% endif %} {% endfor %}
Domain Server IP Server name CDN Endpoint Options
{{ connection.subdomain }}.{{ connection.domain.domain.name }}{{ connection.static_server.server.ip_address }} {{ connection.static_server.server.name }}{{ connection.transient_server.ip_address }} {{ connection.transient_server.name }}{{ connection.endpoint }}No endpoint
{% else %}

No connections yet

Domains and servers are available, but none have been associated.

{% endif %} {% else %}

Connections unavailable

Add or check out at least one domain and one server before creating an association.

{% endif %}
{% comment %} Deconflictions Tab {% endcomment %}

Deconfliction Events

Track client detections from the initial report through team attribution and closeout.

Record a Deconfliction
{% if project.deconfliction_set.all %}
{% for event in project.deconfliction_set.all %} {% with log_entries=event.log_entries %}
Client detection
{{ event.title|title }}
{% if event.status %}{{ event.status }}{% else %}Status not set{% endif %} {% if event.response_timestamp %} Team response recorded {% else %} Awaiting team response {% endif %}
  1. 1 · Client detection {% if event.alert_timestamp %} {{ event.alert_timestamp|date:"d M Y @ H:i:s e" }} {% else %} Detection time not recorded {% endif %} {% if event.alert_source %}{{ event.alert_source }}{% else %}Alert source not recorded{% endif %}
  2. 2 · Report received {{ event.report_timestamp|date:"d M Y @ H:i:s e" }} Deconfliction opened with the team
  3. 3 · Team attribution {% if event.response_timestamp %} {{ event.response_timestamp|date:"d M Y @ H:i:s e" }} {% else %} Response pending {% endif %} {% if event.response_timestamp %} Responded in {{ event.response_timestamp|timeuntil:event.report_timestamp }} {% else %} Confirm whether the activity belonged to the assessment {% endif %}
Living record
Investigation & client closeout
{% if event.description %} {{ event.description|bleach }} {% else %}

No investigation or closeout notes have been recorded.

{% endif %}

Use this record for attribution updates and any additional information received from the client.

{% endwith %} {% endfor %}
{% else %}

No deconfliction events yet

Record a client detection when the team is asked to confirm whether activity belongs to the assessment.

{% endif %}
{% comment %} BloodHound Tab {% endcomment %} {% if bh_api %}

BloodHound

Review directory coverage and Enterprise exposure data for this project.

{% if project.has_bloodhound_api %} Project data source Project BloodHound connection {{ project.bloodhound_api_root_url }}

Fetched results are stored for this project.

{% elif global_bloodhound_config.has_bloodhound_api %} Shared data source Global BloodHound connection {{ global_bloodhound_config.bloodhound_api_root_url }}

Fetching here refreshes the shared cache for every project using this fallback.

{% else %} Data source BloodHound integration unavailable

Configure a project or global connection to fetch directory data.

{% endif %}
{% if project.has_bloodhound_api or global_bloodhound_config.has_bloodhound_api %}
{% csrf_token %}
{% csrf_token %}
{% endif %}
{% include "snippets/bloodhound_info.html" with res=bh_api.bloodhound_results only %}
{% endif %}

Collaborative Notes

Capture shared project notes with live collaboration.

Loading...

{% comment %} Extra Fields Tab {% endcomment %} {% if project_extra_fields_spec %}

Extra Fields

Project-level values are available to templates using the reference shown on each card. Report-aware expressions are rendered from report detail pages.

Edit Extra Fields
{% for field_spec in project_extra_fields_spec %}
{{ field_spec.display_name }}
{% if field_spec.type == "rich_text" %} Rich Text {% else %} {{ field_spec.get_type_display }} {% endif %}
Template reference project.extra_fields.{{ field_spec.internal_name }}
Current value
{% if field_spec.type == "rich_text" %} Formatted content is available in Preview. {% elif field_spec.type == "json" %} Structured content is available in View JSON. {% else %} {% include "user_extra_fields/field.html" with extra_fields=project.extra_fields field_spec=field_spec preview_report=False %} {% endif %}
{% if field_spec.type == "rich_text" or field_spec.type == "json" %}
{% if field_spec.type == "rich_text" %} {% else %} {% endif %}
{% endif %}
{% endfor %}
{% endif %} {% comment %} Notes Tab {% endcomment %} {% if project.projectnote_set.all %}

Project Legacy Comments

Add a Comment
{% if project.projectnote_set.all %}
{% for note in project.projectnote_set.all reversed %}
{{ note.note|bleach }}
{% if request.user == note.operator or request.user|is_privileged %} {% endif %}
{% if note.operator %} {{ note.operator.username }} {% else %} Deleted user {% endif %}
{% endfor %}
{% else %}

No legacy comments yet

Use this area only for comments retained from the legacy project workflow.

{% endif %}
{% endif %}
{% endblock %} {% block morescripts %} {% get_solo "commandcenter.ReportConfiguration" as report_config %} {% comment %} Generate modals for displaying the scope lists {% endcomment %} {% for list in project.projectscope_set.all %} {% endfor %} {% comment %} Generate modals for displaying log entries for deconfliction events {% endcomment %} {% for event in project.deconfliction_set.all %} {% endfor %} {% comment %} Include the reusable delete confirmation modal and related scripts {% endcomment %} {% include "confirm_delete_modal.html" %} {% include "confirm_archive_modal.html" %} {% comment %} Insert modals for RichText previews on extra fields {% endcomment %} {% if project_extra_fields_spec %} {% for field_spec in project_extra_fields_spec %} {% url 'rolodex:project_extra_field_json' project.id field_spec.internal_name as extra_field_json_url %} {% url 'rolodex:project_extra_field_richtext' project.id field_spec.internal_name as extra_field_richtext_url %} {% include "user_extra_fields/extra_field_modal.html" with extra_fields=project.extra_fields field_spec=field_spec lazy_json_url=extra_field_json_url lazy_richtext_url=extra_field_richtext_url preview_report=False %} {% endfor %} {% include "user_extra_fields/lazy_json_modal_script.html" %} {% include "user_extra_fields/lazy_richtext_modal_script.html" %} {% endif %} {% comment %} Insert modals for additional infrastructure entry details {% endcomment %} {% for checkout in project.history_set.all %} {% include "snippets/domain_checkout_detail_modal.html" with checkout=checkout %} {% endfor %} {% for checkout in project.serverhistory_set.all %} {% include "snippets/server_checkout_detail_modal.html" with checkout=checkout %} {% endfor %} {% for vps in project.transientserver_set.all %} {% include "snippets/vps_detail_modal.html" with vps=vps %} {% endfor %} {% include "collab_editing/attrs_snippet.html" %} {% endblock %}