proofctl 0.5.0__tar.gz → 0.5.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {proofctl-0.5.0/proofctl.egg-info → proofctl-0.5.1}/PKG-INFO +1 -1
- {proofctl-0.5.0 → proofctl-0.5.1}/proofctl/checkers/terraform.py +33 -3
- {proofctl-0.5.0 → proofctl-0.5.1/proofctl.egg-info}/PKG-INFO +1 -1
- {proofctl-0.5.0 → proofctl-0.5.1}/pyproject.toml +1 -1
- {proofctl-0.5.0 → proofctl-0.5.1}/LICENSE +0 -0
- {proofctl-0.5.0 → proofctl-0.5.1}/MANIFEST.in +0 -0
- {proofctl-0.5.0 → proofctl-0.5.1}/README.md +0 -0
- {proofctl-0.5.0 → proofctl-0.5.1}/proofctl/__init__.py +0 -0
- {proofctl-0.5.0 → proofctl-0.5.1}/proofctl/_globmatch.py +0 -0
- {proofctl-0.5.0 → proofctl-0.5.1}/proofctl/baseline.py +0 -0
- {proofctl-0.5.0 → proofctl-0.5.1}/proofctl/checkers/__init__.py +0 -0
- {proofctl-0.5.0 → proofctl-0.5.1}/proofctl/checkers/base.py +0 -0
- {proofctl-0.5.0 → proofctl-0.5.1}/proofctl/checkers/dockerfile.py +0 -0
- {proofctl-0.5.0 → proofctl-0.5.1}/proofctl/checkers/hcl_utils.py +0 -0
- {proofctl-0.5.0 → proofctl-0.5.1}/proofctl/checkers/imports.py +0 -0
- {proofctl-0.5.0 → proofctl-0.5.1}/proofctl/checkers/leakage.py +0 -0
- {proofctl-0.5.0 → proofctl-0.5.1}/proofctl/checkers/llm_integration.py +0 -0
- {proofctl-0.5.0 → proofctl-0.5.1}/proofctl/checkers/placeholders.py +0 -0
- {proofctl-0.5.0 → proofctl-0.5.1}/proofctl/checkers/quality.py +0 -0
- {proofctl-0.5.0 → proofctl-0.5.1}/proofctl/checkers/secrets.py +0 -0
- {proofctl-0.5.0 → proofctl-0.5.1}/proofctl/checkers/security.py +0 -0
- {proofctl-0.5.0 → proofctl-0.5.1}/proofctl/checkers/shell_checker.py +0 -0
- {proofctl-0.5.0 → proofctl-0.5.1}/proofctl/checkers/terragrunt.py +0 -0
- {proofctl-0.5.0 → proofctl-0.5.1}/proofctl/checkers/variants.py +0 -0
- {proofctl-0.5.0 → proofctl-0.5.1}/proofctl/checkers/yaml_checker.py +0 -0
- {proofctl-0.5.0 → proofctl-0.5.1}/proofctl/cli.py +0 -0
- {proofctl-0.5.0 → proofctl-0.5.1}/proofctl/config.py +0 -0
- {proofctl-0.5.0 → proofctl-0.5.1}/proofctl/engine.py +0 -0
- {proofctl-0.5.0 → proofctl-0.5.1}/proofctl/fixer.py +0 -0
- {proofctl-0.5.0 → proofctl-0.5.1}/proofctl/models.py +0 -0
- {proofctl-0.5.0 → proofctl-0.5.1}/proofctl/registry.py +0 -0
- {proofctl-0.5.0 → proofctl-0.5.1}/proofctl/reporters/__init__.py +0 -0
- {proofctl-0.5.0 → proofctl-0.5.1}/proofctl/reporters/html_reporter.py +0 -0
- {proofctl-0.5.0 → proofctl-0.5.1}/proofctl/reporters/json_reporter.py +0 -0
- {proofctl-0.5.0 → proofctl-0.5.1}/proofctl/reporters/terminal.py +0 -0
- {proofctl-0.5.0 → proofctl-0.5.1}/proofctl.egg-info/SOURCES.txt +0 -0
- {proofctl-0.5.0 → proofctl-0.5.1}/proofctl.egg-info/dependency_links.txt +0 -0
- {proofctl-0.5.0 → proofctl-0.5.1}/proofctl.egg-info/entry_points.txt +0 -0
- {proofctl-0.5.0 → proofctl-0.5.1}/proofctl.egg-info/requires.txt +0 -0
- {proofctl-0.5.0 → proofctl-0.5.1}/proofctl.egg-info/top_level.txt +0 -0
- {proofctl-0.5.0 → proofctl-0.5.1}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: proofctl
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.1
|
|
4
4
|
Summary: Zero-dependency linter for Python, Terraform, Dockerfiles, Kubernetes, and GitHub Actions — catches AI slop and security misconfigurations pre-commit
|
|
5
5
|
Author-email: Kolawolu Odunola <kolawolu.o@gmail.com>
|
|
6
6
|
License: MIT
|
|
@@ -3477,6 +3477,36 @@ class TerraformChecker(HclFileChecker):
|
|
|
3477
3477
|
re.IGNORECASE,
|
|
3478
3478
|
)
|
|
3479
3479
|
|
|
3480
|
+
# Suffixes that mark a variable name as a reference identifier rather
|
|
3481
|
+
# than the secret value itself. ``var.db_password_secret_id`` is the
|
|
3482
|
+
# *name* of a Secret Manager secret (fetched at runtime via gcloud)
|
|
3483
|
+
# — not the password value — so embedding it in metadata is safe.
|
|
3484
|
+
# AI-013 must NOT fire on names matching these suffixes.
|
|
3485
|
+
_ID_SUFFIX_RE = re.compile(
|
|
3486
|
+
r"_(?:id|name|arn|uri|url|email|self_link|version|"
|
|
3487
|
+
r"key_id|key_name|secret_id|secret_name)$",
|
|
3488
|
+
re.IGNORECASE,
|
|
3489
|
+
)
|
|
3490
|
+
|
|
3491
|
+
@classmethod
|
|
3492
|
+
def _sensitive_var_match(cls, line_text: str) -> "re.Match[str] | None":
|
|
3493
|
+
"""Return a match on a secret-shaped var name, or None.
|
|
3494
|
+
|
|
3495
|
+
Wraps ``_SENSITIVE_VAR_NAME_RE.search`` with a suffix filter:
|
|
3496
|
+
names ending in ``_id``, ``_name``, ``_arn``, ``_uri``, ``_email``,
|
|
3497
|
+
``_self_link``, ``_version``, ``_secret_id``, ``_secret_name``,
|
|
3498
|
+
``_key_id``, ``_key_name``, ``_url`` are reference identifiers
|
|
3499
|
+
(pointers to other resources) rather than secret values themselves.
|
|
3500
|
+
They are safe to embed in metadata because the actual secret is
|
|
3501
|
+
fetched at runtime by the consumer.
|
|
3502
|
+
"""
|
|
3503
|
+
for m in cls._SENSITIVE_VAR_NAME_RE.finditer(line_text):
|
|
3504
|
+
name = m.group(1)
|
|
3505
|
+
if cls._ID_SUFFIX_RE.search(name):
|
|
3506
|
+
continue
|
|
3507
|
+
return m
|
|
3508
|
+
return None
|
|
3509
|
+
|
|
3480
3510
|
@staticmethod
|
|
3481
3511
|
def _line_range_of_attr(
|
|
3482
3512
|
block: HclBlock, attr_name: str
|
|
@@ -3552,14 +3582,14 @@ class TerraformChecker(HclFileChecker):
|
|
|
3552
3582
|
lo, hi = rng
|
|
3553
3583
|
for offset in range(lo, hi + 1):
|
|
3554
3584
|
line_text = b.raw_lines[offset]
|
|
3555
|
-
m = self.
|
|
3585
|
+
m = self._sensitive_var_match(line_text)
|
|
3556
3586
|
if m:
|
|
3557
3587
|
_emit(b, b.start_line + offset, m.group(1),
|
|
3558
3588
|
"metadata_startup_script")
|
|
3559
3589
|
# 2. Scan nested metadata { ... } blocks (HCL block form).
|
|
3560
3590
|
for md in b.nested("metadata"):
|
|
3561
3591
|
for offset, line_text in enumerate(md.raw_lines):
|
|
3562
|
-
m = self.
|
|
3592
|
+
m = self._sensitive_var_match(line_text)
|
|
3563
3593
|
if m:
|
|
3564
3594
|
_emit(b, md.start_line + offset, m.group(1),
|
|
3565
3595
|
"metadata block")
|
|
@@ -3569,7 +3599,7 @@ class TerraformChecker(HclFileChecker):
|
|
|
3569
3599
|
lo, hi = rng
|
|
3570
3600
|
for offset in range(lo, hi + 1):
|
|
3571
3601
|
line_text = b.raw_lines[offset]
|
|
3572
|
-
m = self.
|
|
3602
|
+
m = self._sensitive_var_match(line_text)
|
|
3573
3603
|
if m:
|
|
3574
3604
|
_emit(b, b.start_line + offset, m.group(1),
|
|
3575
3605
|
"metadata block")
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: proofctl
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.1
|
|
4
4
|
Summary: Zero-dependency linter for Python, Terraform, Dockerfiles, Kubernetes, and GitHub Actions — catches AI slop and security misconfigurations pre-commit
|
|
5
5
|
Author-email: Kolawolu Odunola <kolawolu.o@gmail.com>
|
|
6
6
|
License: MIT
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "proofctl"
|
|
7
|
-
version = "0.5.
|
|
7
|
+
version = "0.5.1"
|
|
8
8
|
description = "Zero-dependency linter for Python, Terraform, Dockerfiles, Kubernetes, and GitHub Actions — catches AI slop and security misconfigurations pre-commit"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = { text = "MIT" }
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|