/
kremls
/
python-course-junior
Обзор
Документация
Войти
/
kremls
/
python-course-junior
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
03-projects/secure-code-scanner/day-002/string_utils.py
106 строк
2 KB
kremls
day-001 and day-002 done
10 май 2026, 10:27
10 май 2026, 10:27
3821b62
Код
Авторство
О чём код?
def normalize_text(value: str | None) -> str: if value is None: return "" return value.strip() def normalize_severity(value: str | None) -> str: return normalize_text(value).upper() def parse_severity(value: str | None) -> str: allowed_values = ("LOW", "MEDIUM", "HIGH", "CRITICAL") normalized = normalize_severity(value) if normalized in allowed_values: return normalized return "LOW" def is_valid_cve(value: str | None) -> bool: normalized = normalize_text(value).upper() parts = normalized.split("-") if len(parts) != 3: return False prefix, year, number = parts if prefix != "CVE": return False if not year.isdigit() or len(year) != 4: return False if not number.isdigit() or len(number) < 4: return False return True def normalize_cve(value: str | None) -> str: normalized = normalize_text(value).upper() if is_valid_cve(normalized): return normalized return "" def normalize_rule_id(value: str | None) -> str: default_value = "PY000" normalized = normalize_text(value).upper() if len(normalized) != 5: return default_value prefix = normalized[:2] numeric_part = normalized[2:] if prefix != "PY": return default_value if not numeric_part.isdigit(): return default_value return normalized def sanitize_for_log(value: str | None) -> str: normalized = normalize_text(value) return ( normalized .replace("\r", "\\r") .replace("\n", "\\n") .replace("\t", "\\t") ) def normalize_line_number(value: int) -> int: if value < 1: return 1 return value def format_finding( filename: str, line_number: int, rule_id: str, severity: str, message: str, ) -> str: safe_filename = sanitize_for_log(filename) safe_line_number = normalize_line_number(line_number) safe_rule_id = sanitize_for_log(normalize_rule_id(rule_id)) safe_message = sanitize_for_log(message) normalized_severity = parse_severity(severity) return ( f"{safe_filename}:{safe_line_number} " f"[{normalized_severity}] " f"{safe_rule_id}: {safe_message}" )