(level: str, text: str)
| 1046 | return out |
| 1047 | |
| 1048 | def _add_issue(level: str, text: str) -> None: |
| 1049 | msg = str(text).strip() |
| 1050 | if not msg: |
| 1051 | return |
| 1052 | weak_set = _collect_weak_tls_from_text(msg) |
| 1053 | if weak_set: |
| 1054 | nonlocal weak_tls_best, weak_tls_msg |
| 1055 | if weak_set.issubset(weak_tls_best): |
| 1056 | return |
| 1057 | weak_tls_best |= weak_set |
| 1058 | ordered = [v for v in ("SSLv*", "TLS 1.0", "TLS 1.1") if v in weak_tls_best] |
| 1059 | weak_tls_msg = f"Weak TLS versions detected: {', '.join(ordered)}." |
| 1060 | # Replace prior weak-tls messages so only the most complete one remains. |
| 1061 | issues[:] = [(lv, m) for lv, m in issues if "weak tls versions detected" not in m.lower()] |
| 1062 | seen_msgs_copy = {m for _, m in issues} |
| 1063 | seen_msgs.clear() |
| 1064 | seen_msgs.update(seen_msgs_copy) |
| 1065 | if weak_tls_msg in seen_msgs: |
| 1066 | return |
| 1067 | seen_msgs.add(weak_tls_msg) |
| 1068 | issues.append((level, weak_tls_msg)) |
| 1069 | return |
| 1070 | if msg in seen_msgs: |
| 1071 | return |
| 1072 | seen_msgs.add(msg) |
| 1073 | issues.append((level, msg)) |
| 1074 | |
| 1075 | if http_code is None and https_code is None: |
| 1076 | _add_issue("warn", "No HTTP/HTTPS response received. Check DNS, firewall, or timeout.") |
no test coverage detected