% if auth_dict != None:

#### Authentication

Url: ${auth_dict["url"]}
Logged in: ${auth_dict["logged_in"]}
% if auth_form_dict != None and len(auth_form_dict) > 0: Login field: ${auth_form_dict["login_field"]}
Password field: ${auth_form_dict["password_field"]}
% endif

% endif

#### Summary

Category | Number of vulnerabilities found
--- | ---
% for i, vuln_name in enumerate(vulnerabilities):
% if len(vulnerabilities[vuln_name]): ${vuln_name} % else: ${vuln_name} % endif | ${len(vulnerabilities[vuln_name])}
% endfor % for i, anomaly_name in enumerate(anomalies):
% if len(anomalies[anomaly_name]): ${anomaly_name} % else: ${anomaly_name} % endif | ${len(anomalies[anomaly_name])}
% endfor % for i, additional_name in enumerate(additionals):
% if len(additionals[additional_name]): ${additional_name} % else: ${additional_name} % endif | ${len(additionals[additional_name])}
% endfor

% for i, vuln_name in enumerate(vulnerabilities): % if len(vulnerabilities[vuln_name]):

### ${vuln_name}

Description
  ${flaws[vuln_name]["desc"] | h}

% for j, vulnerability in enumerate(vulnerabilities[vuln_name]):

#### ${level_to_emoji(vulnerability["level"])} Vulnerability found in ${vulnerability["path"] | h}

    ${vulnerability["info"] | h}

                                    % for line in vulnerability["http_request"].split("\n"):
                                        ${line | h}

                                    % endfor

% if detailed_report is True and vulnerability["detail"]["response"] is not None:

                                        HTTP ${vulnerability["detail"]["response"]["status_code"] | h}

                                        % if vulnerability["detail"]["response"]["headers"] is not None:
                                            % for header in vulnerability["detail"]["response"]["headers"]:
                                                ${header[0] | h}: ${header[1] | h}

                                            %endfor
                                        %endif

                                        ${vulnerability["detail"]["response"]["body"] | h}

% endif

    ${vulnerability["curl_command"] | h}

    ${vulnerability["wstg"] | h}

% endfor

Solutions
  ${flaws[vuln_name]["sol"]}

##### References

% for ref_name, ref_url in flaws[vuln_name]["ref"].items():
- ${ref_name | h}
% endfor

% endif % endfor % for i, anomaly_name in enumerate(anomalies): % if len(anomalies[anomaly_name]):

### ${anomaly_name}

Description
  ${flaws[anomaly_name]["desc"] | h}

% for j, anomaly in enumerate(anomalies[anomaly_name]):

#### 🤕 Anomaly found in ${anomaly["path"] | h}

    ${anomaly["info"] | h}

                                    % for line in anomaly["http_request"].split("\n"):
                                        ${line | h}

                                    % endfor

% if detailed_report is True and anomaly["detail"]["response"] is not None:

                                        HTTP ${anomaly["detail"]["response"]["status_code"] | h}

                                        % if anomaly["detail"]["response"]["headers"] is not None:
                                            % for header in anomaly["detail"]["response"]["headers"]:
                                                ${header[0] | h}: ${header[1] | h}

                                            %endfor
                                        %endif

                                        ${anomaly["detail"]["response"]["body"] | h}

% endif

    ${anomaly["curl_command"] | h}

    ${anomaly["wstg"] | h}

% endfor

Solutions
  ${flaws[anomaly_name]["sol"]}

##### References

% for ref_name, ref_url in flaws[anomaly_name]["ref"].items():
- ${ref_name | h}
% endfor

% endif % endfor % for i, additional_name in enumerate(additionals): % if len(additionals[additional_name]):

### ${additional_name}

Description
  ${flaws[additional_name]["desc"] | h}

% for j, additional in enumerate(additionals[additional_name]):

#### ${level_to_emoji(additional["level"])} Additional found in ${additional["path"] | h}

    ${additional["info"] | h}

                                    % for line in additional["http_request"].split("\n"):
                                        ${line | h}

                                    % endfor

% if detailed_report is True and additional["detail"]["response"] is not None:

                                        HTTP ${additional["detail"]["response"]["status_code"] | h}

                                        % if additional["detail"]["response"]["headers"] is not None:
                                            % for header in additional["detail"]["response"]["headers"]:
                                                ${header[0] | h}: ${header[1] | h}

                                            %endfor
                                        %endif

                                        ${additional["detail"]["response"]["body"] | h}

% endif

    ${additional["curl_command"] | h}

    ${additional["wstg"] | h}

% endfor

Solutions
  ${flaws[additional_name]["sol"]}

##### References

% for ref_name, ref_url in flaws[additional_name]["ref"].items():
- ${ref_name | h}
% endfor

% endif % endfor