socketsecurity 2.7.1__tar.gz → 2.7.2__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.
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/.github/workflows/python-tests.yml +20 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/CHANGELOG.md +8 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/PKG-INFO +1 -1
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/docs/cli-reference.md +1 -1
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/pyproject.toml +1 -1
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/socketsecurity/__init__.py +1 -1
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/socketsecurity/config.py +5 -3
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/socketsecurity/core/cli_client.py +1 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/socketsecurity/core/helper/__init__.py +2 -1
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/socketsecurity/core/helper/socket_facts_loader.py +3 -3
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/socketsecurity/core/lazy_file_loader.py +1 -3
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/socketsecurity/core/messages.py +1 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/socketsecurity/core/resource_utils.py +0 -1
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/socketsecurity/core/scm/client.py +1 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/socketsecurity/core/scm/gitlab.py +4 -3
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/socketsecurity/core/socket_config.py +3 -4
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/socketsecurity/core/tools/reachability.py +13 -16
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/socketsecurity/output.py +9 -6
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/socketsecurity/plugins/formatters/slack.py +1 -1
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/socketsecurity/plugins/jira.py +6 -3
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/socketsecurity/plugins/manager.py +1 -1
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/socketsecurity/plugins/slack.py +8 -5
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/socketsecurity/plugins/teams.py +3 -1
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/socketsecurity/plugins/webhook.py +3 -1
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/socketsecurity/socketcli.py +6 -8
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/core/test_diff_alerts.py +0 -1
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/unit/test_cli_config.py +1 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/unit/test_client.py +7 -5
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/unit/test_config.py +5 -3
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/unit/test_disable_ignore.py +0 -2
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/unit/test_gitlab_auth.py +2 -1
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/unit/test_gitlab_auth_fallback.py +6 -5
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/unit/test_gitlab_commit_status.py +1 -3
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/unit/test_gitlab_format.py +1 -2
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/unit/test_include_dirs.py +0 -2
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/unit/test_reachability.py +8 -8
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/unit/test_socketcli.py +5 -3
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/uv.lock +1 -1
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/.github/CODEOWNERS +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/.github/PULL_REQUEST_TEMPLATE/bug-fix.md +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/.github/PULL_REQUEST_TEMPLATE/feature.md +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/.github/PULL_REQUEST_TEMPLATE/improvement.md +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/.github/actions/setup-docker/action.yml +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/.github/actions/setup-hatch/action.yml +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/.github/actions/setup-sfw/action.yml +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/.github/dependabot.yml +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/.github/workflows/dependency-review.yml +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/.github/workflows/docker-stable.yml +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/.github/workflows/e2e-test.yml +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/.github/workflows/package-check.yml +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/.github/workflows/pr-preview.yml +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/.github/workflows/release.yml +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/.github/workflows/version-check.yml +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/.github/zizmor.yml +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/.gitignore +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/.hooks/sync_version.py +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/.pre-commit-config.yaml +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/.python-version +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/CONTRIBUTING.md +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/Dockerfile +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/Dockerfile.preview +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/LICENSE +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/Makefile +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/README.md +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/benchmarks/manifest_discovery.py +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/docs/ci-cd.md +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/docs/development.md +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/docs/troubleshooting.md +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/examples/config/sarif-dashboard-parity.json +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/examples/config/sarif-dashboard-parity.toml +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/examples/config/sarif-diff-ci-cd.json +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/examples/config/sarif-diff-ci-cd.toml +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/examples/config/sarif-instance-detail.json +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/examples/config/sarif-instance-detail.toml +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/instructions/gitlab-commit-status/uat.md +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/pytest.ini +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/scripts/build_container.sh +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/scripts/build_container_flexible.sh +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/scripts/deploy-test-docker.sh +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/scripts/deploy-test-pypi.sh +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/scripts/docker-entrypoint.sh +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/scripts/run.sh +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/session.md +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/socket.yml +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/socketsecurity/core/__init__.py +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/socketsecurity/core/alert_selection.py +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/socketsecurity/core/classes.py +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/socketsecurity/core/cli_run.py +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/socketsecurity/core/exceptions.py +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/socketsecurity/core/git_interface.py +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/socketsecurity/core/log_uploader.py +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/socketsecurity/core/logging.py +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/socketsecurity/core/scm/__init__.py +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/socketsecurity/core/scm/base.py +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/socketsecurity/core/scm/github.py +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/socketsecurity/core/scm_comments.py +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/socketsecurity/core/streaming.py +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/socketsecurity/core/utils.py +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/socketsecurity/fossa_compat.py +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/socketsecurity/plugins/__init__.py +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/socketsecurity/plugins/base.py +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/socketsecurity/plugins/formatters/__init__.py +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/__init__.py +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/core/conftest.py +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/core/create_diff_input.json +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/core/test_diff_generation.py +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/core/test_diff_scan_polling.py +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/core/test_facts_compression.py +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/core/test_has_manifest_files.py +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/core/test_invalid_facts_marker.py +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/core/test_package_and_alerts.py +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/core/test_sdk_methods.py +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/core/test_supporting_methods.py +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/data/fullscans/create_response.json +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/data/fullscans/diff/stream_diff.json +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/data/fullscans/diff/stream_diff_full.json +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/data/fullscans/head_scan/metadata.json +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/data/fullscans/head_scan/stream_scan.json +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/data/fullscans/head_scan/stream_scan_full.json +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/data/fullscans/new_scan/metadata.json +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/data/fullscans/new_scan/stream_scan.json +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/data/repos/repo_info_error.json +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/data/repos/repo_info_no_head.json +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/data/repos/repo_info_success.json +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/data/settings/security-policy.json +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/e2e/fixtures/simple-npm/index.js +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/e2e/fixtures/simple-npm/package.json +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/e2e/fixtures/simple-pypi/requirements.txt +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/e2e/reach-facts-probe.sh +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/e2e/validate-gitlab.sh +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/e2e/validate-json.sh +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/e2e/validate-reachability.sh +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/e2e/validate-sarif.sh +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/e2e/validate-scan.sh +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/fixtures/fossa/README.md +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/fixtures/fossa/fossa-analyze-empty.json +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/fixtures/fossa/fossa-analyze-populated.json +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/fixtures/fossa/fossa-sbom-empty-deep.json +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/fixtures/fossa/fossa-sbom-populated.json +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/unit/__init__.py +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/unit/test_alert_selection.py +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/unit/test_cli_run.py +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/unit/test_dependency_overview.py +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/unit/test_exclude_paths.py +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/unit/test_fossa_compat.py +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/unit/test_fossa_parity.py +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/unit/test_full_scan_retry.py +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/unit/test_git_interface.py +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/unit/test_github_buildkite_config.py +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/unit/test_ignore_telemetry_filtering.py +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/unit/test_log_uploader.py +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/unit/test_manifest_discovery.py +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/unit/test_output.py +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/unit/test_pr_comment_rendering.py +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/unit/test_slack_plugin.py +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/unit/test_streaming.py +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/tests/unit/test_tier1_finalize.py +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/workflows/bitbucket-pipelines.yml +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/workflows/buildkite.yml +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/workflows/github-actions.yml +0 -0
- {socketsecurity-2.7.1 → socketsecurity-2.7.2}/workflows/gitlab-ci.yml +0 -0
|
@@ -67,6 +67,26 @@ jobs:
|
|
|
67
67
|
uv export --no-hashes --no-emit-project --format requirements-txt > /tmp/req-audit.txt
|
|
68
68
|
uvx pip-audit --strict --progress-spinner off --disable-pip --no-deps -r /tmp/req-audit.txt
|
|
69
69
|
|
|
70
|
+
ruff:
|
|
71
|
+
runs-on: ubuntu-latest
|
|
72
|
+
timeout-minutes: 10
|
|
73
|
+
steps:
|
|
74
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
75
|
+
with:
|
|
76
|
+
fetch-depth: 1
|
|
77
|
+
persist-credentials: false
|
|
78
|
+
- name: 🐍 setup python
|
|
79
|
+
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
|
80
|
+
with:
|
|
81
|
+
python-version: ${{ env.PYTHON_VERSION }}
|
|
82
|
+
- name: 🛠️ install deps
|
|
83
|
+
run: |
|
|
84
|
+
python -m pip install --upgrade pip
|
|
85
|
+
pip install uv
|
|
86
|
+
uv sync --extra dev
|
|
87
|
+
- name: 🧹 run ruff
|
|
88
|
+
run: uv run ruff check
|
|
89
|
+
|
|
70
90
|
unsupported-python-install:
|
|
71
91
|
runs-on: ubuntu-latest
|
|
72
92
|
timeout-minutes: 10
|
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 2.7.2
|
|
4
|
+
|
|
5
|
+
### Changed: bump pinned @coana-tech/cli to 15.10.39
|
|
6
|
+
|
|
7
|
+
- Bumped the pinned reachability engine (`@coana-tech/cli`) from `15.10.36` to
|
|
8
|
+
`15.10.39`. See the [Coana changelogs](https://docs.coana.tech/changelogs) for
|
|
9
|
+
engine changes.
|
|
10
|
+
|
|
3
11
|
## 2.7.1
|
|
4
12
|
|
|
5
13
|
### Changed: bump pinned @coana-tech/cli to 15.10.36
|
|
@@ -275,7 +275,7 @@ If you don't want to provide the Socket API Token every time then you can use th
|
|
|
275
275
|
| Parameter | Required | Default | Description |
|
|
276
276
|
|:---------------------------------|:---------|:--------|:---------------------------------------------------------------------------------------------------------------------------|
|
|
277
277
|
| `--reach` | False | False | Enable reachability analysis to identify which vulnerable functions are actually called by your code. Creates a full application reachability scan (`scan_type=socket_tier1`). |
|
|
278
|
-
| `--reach-version` | False | 15.10.
|
|
278
|
+
| `--reach-version` | False | 15.10.39 | Version of @coana-tech/cli to use. Defaults to the pinned version that ships with this CLI release, so the engine only changes when you upgrade the Socket CLI. Pass `latest` to always use the newest published version (opt-in auto-update), or an explicit version (e.g. `1.2.3`) to pin it. |
|
|
279
279
|
| `--reach-analysis-timeout` | False | 10m | Timeout for each reachability analysis run, e.g. `90s`, `10m` or `1h`. Omitted by default, so coana applies its own default (`10m`). Alias: `--reach-timeout` |
|
|
280
280
|
| `--reach-analysis-memory-limit` | False | 8GB | Memory limit for each reachability analysis run, e.g. `512MB` or `8GB`. Omitted by default, so coana applies its own default (`8GB`). Alias: `--reach-memory-limit` |
|
|
281
281
|
| `--reach-concurrency` | False | 1 | Control parallel analysis execution (must be >= 1). Omitted by default, so coana applies its own default. |
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import argparse
|
|
2
|
+
import json
|
|
2
3
|
import logging
|
|
3
4
|
import os
|
|
5
|
+
import tomllib
|
|
4
6
|
from dataclasses import asdict, dataclass, field
|
|
5
7
|
from typing import List, Optional
|
|
6
|
-
|
|
8
|
+
|
|
7
9
|
from socketdev import INTEGRATION_TYPES, IntegrationType
|
|
8
|
-
|
|
9
|
-
import
|
|
10
|
+
|
|
11
|
+
from socketsecurity import __version__
|
|
10
12
|
|
|
11
13
|
|
|
12
14
|
def get_plugin_config_from_env(prefix: str) -> dict:
|
{socketsecurity-2.7.1 → socketsecurity-2.7.2}/socketsecurity/core/helper/socket_facts_loader.py
RENAMED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
import json
|
|
4
4
|
import logging
|
|
5
|
-
from pathlib import Path
|
|
6
|
-
from typing import Dict, Any, Optional, List
|
|
7
5
|
from copy import deepcopy
|
|
6
|
+
from pathlib import Path
|
|
7
|
+
from typing import Any, Dict, List, Optional
|
|
8
8
|
|
|
9
9
|
logger = logging.getLogger(__name__)
|
|
10
10
|
|
|
@@ -65,7 +65,7 @@ def load_socket_facts(file_path: str = ".socket.facts.json") -> Optional[Dict[st
|
|
|
65
65
|
return None
|
|
66
66
|
|
|
67
67
|
if 'components' not in data:
|
|
68
|
-
logger.warning(
|
|
68
|
+
logger.warning("Socket facts file missing 'components' key")
|
|
69
69
|
|
|
70
70
|
return data
|
|
71
71
|
|
|
@@ -2,9 +2,10 @@ import json
|
|
|
2
2
|
import os
|
|
3
3
|
import sys
|
|
4
4
|
from dataclasses import dataclass
|
|
5
|
-
from typing import Optional
|
|
5
|
+
from typing import Optional
|
|
6
6
|
|
|
7
7
|
import requests
|
|
8
|
+
|
|
8
9
|
from socketsecurity import USER_AGENT
|
|
9
10
|
from socketsecurity.core import log
|
|
10
11
|
from socketsecurity.core.classes import Comment
|
|
@@ -140,7 +141,7 @@ class Gitlab:
|
|
|
140
141
|
except requests.exceptions.HTTPError as e:
|
|
141
142
|
# Check if this is an authentication error (401)
|
|
142
143
|
if e.response and e.response.status_code == 401:
|
|
143
|
-
log.debug(
|
|
144
|
+
log.debug("Authentication failed with initial headers, trying fallback method")
|
|
144
145
|
|
|
145
146
|
# Determine the fallback headers
|
|
146
147
|
original_headers = kwargs.get('headers', self.config.headers)
|
|
@@ -153,7 +154,7 @@ class Gitlab:
|
|
|
153
154
|
|
|
154
155
|
# Re-raise the original exception if it's not an auth error or fallback failed
|
|
155
156
|
raise
|
|
156
|
-
except Exception
|
|
157
|
+
except Exception:
|
|
157
158
|
# Handle other types of exceptions that don't have response attribute
|
|
158
159
|
raise
|
|
159
160
|
|
|
@@ -1,12 +1,11 @@
|
|
|
1
|
+
import os
|
|
1
2
|
from dataclasses import dataclass, field
|
|
2
|
-
from typing import
|
|
3
|
+
from typing import List, Optional, Set
|
|
3
4
|
from urllib.parse import urlparse
|
|
4
|
-
from typing import Set, List
|
|
5
|
-
import os
|
|
6
5
|
|
|
7
6
|
from socketdev.core.issues import AllIssues
|
|
8
|
-
from socketsecurity import __version__
|
|
9
7
|
|
|
8
|
+
from socketsecurity import __version__
|
|
10
9
|
|
|
11
10
|
default_exclude_dirs = {
|
|
12
11
|
"node_modules", "bower_components", "jspm_packages", # JS/TS
|
|
@@ -1,15 +1,16 @@
|
|
|
1
|
-
from socketdev import socketdev
|
|
2
|
-
from typing import List, Optional, Dict, Any, Final
|
|
3
1
|
import atexit
|
|
2
|
+
import json
|
|
3
|
+
import logging
|
|
4
4
|
import os
|
|
5
|
+
import pathlib
|
|
5
6
|
import platform
|
|
6
7
|
import shutil
|
|
7
8
|
import subprocess
|
|
8
|
-
import json
|
|
9
|
-
import pathlib
|
|
10
|
-
import logging
|
|
11
9
|
import sys
|
|
12
10
|
import tempfile
|
|
11
|
+
from typing import Any, Dict, Final, List, Optional
|
|
12
|
+
|
|
13
|
+
from socketdev import socketdev
|
|
13
14
|
|
|
14
15
|
from socketsecurity import __version__
|
|
15
16
|
|
|
@@ -18,7 +19,7 @@ log = logging.getLogger(__name__)
|
|
|
18
19
|
# Pinned @coana-tech/cli version. Bumped deliberately per Python CLI release so the
|
|
19
20
|
# reachability engine version only changes through a standard pip upgrade (advance notice).
|
|
20
21
|
# Pass --reach-version latest to opt into the newest published version instead.
|
|
21
|
-
DEFAULT_COANA_CLI_VERSION: Final = "15.10.
|
|
22
|
+
DEFAULT_COANA_CLI_VERSION: Final = "15.10.39"
|
|
22
23
|
|
|
23
24
|
# Resolved @coana-tech/cli script paths from the npm-install fallback, keyed by version.
|
|
24
25
|
# Lives for the process lifetime so repeated fallback invocations install only once
|
|
@@ -55,7 +56,7 @@ class ReachabilityAnalyzer:
|
|
|
55
56
|
|
|
56
57
|
def _resolve_coana_package_spec(self, version: Optional[str] = None) -> str:
|
|
57
58
|
"""
|
|
58
|
-
Resolve the @coana-tech/cli package spec to run (e.g. '@coana-tech/cli@15.10.
|
|
59
|
+
Resolve the @coana-tech/cli package spec to run (e.g. '@coana-tech/cli@15.10.39').
|
|
59
60
|
|
|
60
61
|
Args:
|
|
61
62
|
version: Coana CLI version to use.
|
|
@@ -64,7 +65,7 @@ class ReachabilityAnalyzer:
|
|
|
64
65
|
- '<semver>': that exact version.
|
|
65
66
|
|
|
66
67
|
Returns:
|
|
67
|
-
str: The package specifier to use with npx (e.g. '@coana-tech/cli@15.10.
|
|
68
|
+
str: The package specifier to use with npx (e.g. '@coana-tech/cli@15.10.39').
|
|
68
69
|
"""
|
|
69
70
|
return f"@coana-tech/cli@{self._resolve_coana_version(version)}"
|
|
70
71
|
|
|
@@ -77,7 +78,7 @@ class ReachabilityAnalyzer:
|
|
|
77
78
|
self,
|
|
78
79
|
org_slug: str,
|
|
79
80
|
target_directory: str,
|
|
80
|
-
tar_hash:
|
|
81
|
+
tar_hash: str,
|
|
81
82
|
output_path: str = ".socket.facts.json",
|
|
82
83
|
timeout: Optional[str] = None,
|
|
83
84
|
memory_limit: Optional[str] = None,
|
|
@@ -151,9 +152,7 @@ class ReachabilityAnalyzer:
|
|
|
151
152
|
|
|
152
153
|
# Add conditional arguments. timeout/memory_limit are forwarded verbatim; coana owns
|
|
153
154
|
# unit parsing/validation (e.g. '90s', '8GB'). We coerce to str only for subprocess
|
|
154
|
-
# safety — config-file values can arrive as ints via argparse set_defaults
|
|
155
|
-
# `is not None` (not truthiness) so an explicit empty string still reaches coana and
|
|
156
|
-
# triggers coana's own error, rather than being silently dropped.
|
|
155
|
+
# safety — config-file values can arrive as ints via argparse set_defaults.
|
|
157
156
|
if timeout is not None:
|
|
158
157
|
coana_args.extend(["--analysis-timeout", str(timeout)])
|
|
159
158
|
|
|
@@ -170,9 +169,7 @@ class ReachabilityAnalyzer:
|
|
|
170
169
|
if detailed_analysis_log_file:
|
|
171
170
|
coana_args.append("--print-analysis-log-file")
|
|
172
171
|
|
|
173
|
-
|
|
174
|
-
if tar_hash:
|
|
175
|
-
coana_args.extend(["--run-without-docker", "--manifests-tar-hash", tar_hash])
|
|
172
|
+
coana_args.extend(["--run-without-docker", "--manifests-tar-hash", tar_hash])
|
|
176
173
|
|
|
177
174
|
if ecosystems:
|
|
178
175
|
coana_args.extend(["--purl-types"] + ecosystems)
|
|
@@ -262,7 +259,7 @@ class ReachabilityAnalyzer:
|
|
|
262
259
|
# Extract scan ID from output file
|
|
263
260
|
scan_id = self._extract_scan_id(output_path)
|
|
264
261
|
|
|
265
|
-
log.info(
|
|
262
|
+
log.info("Reachability analysis completed successfully")
|
|
266
263
|
if scan_id:
|
|
267
264
|
log.info(f"Scan ID: {scan_id}")
|
|
268
265
|
|
|
@@ -2,18 +2,21 @@ import json
|
|
|
2
2
|
import logging
|
|
3
3
|
from pathlib import Path
|
|
4
4
|
from typing import Any, Dict, Optional
|
|
5
|
-
|
|
6
|
-
from
|
|
7
|
-
|
|
8
|
-
from .fossa_compat import build_fossa_report_payload
|
|
9
|
-
from socketsecurity.plugins.manager import PluginManager
|
|
5
|
+
|
|
6
|
+
from socketdev import socketdev
|
|
7
|
+
|
|
10
8
|
from socketsecurity.core.alert_selection import (
|
|
11
9
|
clone_diff_with_selected_alerts,
|
|
12
10
|
filter_alerts_by_reachability,
|
|
13
11
|
load_components_with_alerts,
|
|
14
12
|
select_diff_alerts,
|
|
15
13
|
)
|
|
16
|
-
from
|
|
14
|
+
from socketsecurity.plugins.manager import PluginManager
|
|
15
|
+
|
|
16
|
+
from .config import CliConfig
|
|
17
|
+
from .core.classes import Diff, Issue
|
|
18
|
+
from .core.messages import Messages
|
|
19
|
+
from .fossa_compat import build_fossa_report_payload
|
|
17
20
|
|
|
18
21
|
|
|
19
22
|
class OutputHandler:
|
|
@@ -1,9 +1,12 @@
|
|
|
1
|
-
from .base import Plugin
|
|
2
|
-
import requests
|
|
3
1
|
import base64
|
|
4
|
-
|
|
2
|
+
|
|
3
|
+
import requests
|
|
4
|
+
|
|
5
5
|
from socketsecurity.config import CliConfig
|
|
6
6
|
from socketsecurity.core import log
|
|
7
|
+
from socketsecurity.core.classes import Diff
|
|
8
|
+
|
|
9
|
+
from .base import Plugin
|
|
7
10
|
|
|
8
11
|
|
|
9
12
|
class JiraPlugin(Plugin):
|
|
@@ -1,22 +1,25 @@
|
|
|
1
1
|
import logging
|
|
2
2
|
import os
|
|
3
|
+
|
|
3
4
|
import requests
|
|
5
|
+
|
|
4
6
|
from socketsecurity.config import CliConfig
|
|
5
|
-
from .base import Plugin
|
|
6
|
-
from socketsecurity.core.classes import Diff
|
|
7
|
-
from socketsecurity.core.messages import Messages
|
|
8
7
|
from socketsecurity.core.alert_selection import (
|
|
9
8
|
clone_diff_with_selected_alerts,
|
|
10
9
|
filter_alerts_by_reachability,
|
|
11
10
|
select_diff_alerts,
|
|
12
11
|
)
|
|
12
|
+
from socketsecurity.core.classes import Diff
|
|
13
13
|
from socketsecurity.core.helper.socket_facts_loader import (
|
|
14
|
-
|
|
14
|
+
convert_to_alerts,
|
|
15
15
|
get_components_with_vulnerabilities,
|
|
16
|
-
|
|
16
|
+
load_socket_facts,
|
|
17
17
|
)
|
|
18
|
+
from socketsecurity.core.messages import Messages
|
|
18
19
|
from socketsecurity.plugins.formatters.slack import format_socket_facts_for_slack
|
|
19
20
|
|
|
21
|
+
from .base import Plugin
|
|
22
|
+
|
|
20
23
|
logger = logging.getLogger(__name__)
|
|
21
24
|
|
|
22
25
|
|
|
@@ -391,14 +391,11 @@ def main_code():
|
|
|
391
391
|
|
|
392
392
|
# Find manifest files in scan paths (excluding .socket.facts.json to avoid circular dependency)
|
|
393
393
|
log.info("Finding manifest files for reachability analysis...")
|
|
394
|
-
manifest_files = [
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
# Filter out .socket.facts.json files from manifest upload
|
|
400
|
-
scan_manifests = [f for f in scan_manifests if not f.endswith('.socket.facts.json')]
|
|
401
|
-
manifest_files.extend(scan_manifests)
|
|
394
|
+
manifest_files = [
|
|
395
|
+
# Always find all manifest files for the tar hash upload
|
|
396
|
+
f for scan_path in scan_paths for f in core.find_files(scan_path)
|
|
397
|
+
if not f.endswith('.socket.facts.json')
|
|
398
|
+
]
|
|
402
399
|
|
|
403
400
|
if not manifest_files:
|
|
404
401
|
log.warning("No manifest files found for reachability analysis")
|
|
@@ -410,6 +407,7 @@ def main_code():
|
|
|
410
407
|
try:
|
|
411
408
|
# Get org_slug early (we'll need it)
|
|
412
409
|
org_slug = core.config.org_slug
|
|
410
|
+
assert org_slug
|
|
413
411
|
|
|
414
412
|
# Upload manifest files
|
|
415
413
|
tar_hash = sdk.uploadmanifests.upload_manifest_files(
|
|
@@ -1,9 +1,12 @@
|
|
|
1
|
-
import pytest
|
|
2
1
|
from unittest.mock import Mock, patch
|
|
2
|
+
|
|
3
|
+
import pytest
|
|
3
4
|
import requests
|
|
5
|
+
|
|
4
6
|
from socketsecurity.core.cli_client import CliClient
|
|
5
|
-
from socketsecurity.core.socket_config import SocketConfig
|
|
6
7
|
from socketsecurity.core.exceptions import APIFailure
|
|
8
|
+
from socketsecurity.core.socket_config import SocketConfig
|
|
9
|
+
|
|
7
10
|
|
|
8
11
|
@pytest.fixture
|
|
9
12
|
def config():
|
|
@@ -100,14 +103,14 @@ def test_request_ssl_verification(client):
|
|
|
100
103
|
client.request("test/path")
|
|
101
104
|
|
|
102
105
|
args, kwargs = mock_request.call_args
|
|
103
|
-
assert kwargs['verify']
|
|
106
|
+
assert kwargs['verify'] # Default is True
|
|
104
107
|
|
|
105
108
|
# Test with SSL verification disabled
|
|
106
109
|
client.config.allow_unverified_ssl = True
|
|
107
110
|
client.request("test/path")
|
|
108
111
|
|
|
109
112
|
args, kwargs = mock_request.call_args
|
|
110
|
-
assert kwargs['verify']
|
|
113
|
+
assert not kwargs['verify']
|
|
111
114
|
|
|
112
115
|
def test_request_with_payload(client):
|
|
113
116
|
"""Test request with payload data"""
|
|
@@ -154,7 +157,6 @@ def test_post_telemetry_events_sends_individually(client):
|
|
|
154
157
|
|
|
155
158
|
def test_post_telemetry_events_continues_on_failure(client):
|
|
156
159
|
"""Test that a failed event does not prevent subsequent events from being sent"""
|
|
157
|
-
import json
|
|
158
160
|
|
|
159
161
|
events = [
|
|
160
162
|
{"event_kind": "user-action", "artifact_purl": "pkg:npm/foo@1.0.0"},
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
import tomllib
|
|
1
2
|
from pathlib import Path
|
|
3
|
+
|
|
2
4
|
import pytest
|
|
3
|
-
|
|
4
|
-
import tomllib
|
|
5
|
-
from socketsecurity.core.socket_config import SocketConfig
|
|
5
|
+
|
|
6
6
|
from socketsecurity.config import CliConfig
|
|
7
|
+
from socketsecurity.core.socket_config import SocketConfig
|
|
8
|
+
|
|
7
9
|
|
|
8
10
|
def test_config_default_values():
|
|
9
11
|
"""Test that config initializes with correct default values"""
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
"""Tests for the --disable-ignore flag."""
|
|
2
2
|
|
|
3
|
-
import pytest
|
|
4
3
|
from dataclasses import dataclass
|
|
5
4
|
|
|
6
5
|
from socketsecurity.config import CliConfig
|
|
@@ -8,7 +7,6 @@ from socketsecurity.core.classes import Comment, Diff, Issue
|
|
|
8
7
|
from socketsecurity.core.messages import Messages
|
|
9
8
|
from socketsecurity.core.scm_comments import Comments
|
|
10
9
|
|
|
11
|
-
|
|
12
10
|
# --- CLI flag parsing tests ---
|
|
13
11
|
|
|
14
12
|
class TestDisableIgnoreFlag:
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
"""Integration test demonstrating GitLab authentication fallback"""
|
|
2
2
|
import os
|
|
3
|
-
from unittest.mock import
|
|
3
|
+
from unittest.mock import MagicMock, patch
|
|
4
|
+
|
|
4
5
|
import pytest
|
|
5
6
|
|
|
6
|
-
from socketsecurity.core.scm.gitlab import Gitlab
|
|
7
|
+
from socketsecurity.core.scm.gitlab import Gitlab
|
|
7
8
|
from socketsecurity.socketcli import CliClient
|
|
8
9
|
|
|
9
10
|
|
|
@@ -37,7 +38,7 @@ class TestGitlabAuthFallback:
|
|
|
37
38
|
gitlab = Gitlab(client=mock_client)
|
|
38
39
|
|
|
39
40
|
# This should trigger the fallback mechanism
|
|
40
|
-
|
|
41
|
+
gitlab.get_comments_for_pr()
|
|
41
42
|
|
|
42
43
|
# Verify two requests were made
|
|
43
44
|
assert mock_client.request.call_count == 2
|
|
@@ -79,7 +80,7 @@ class TestGitlabAuthFallback:
|
|
|
79
80
|
gitlab = Gitlab(client=mock_client)
|
|
80
81
|
|
|
81
82
|
# This should trigger the fallback mechanism
|
|
82
|
-
|
|
83
|
+
gitlab.get_comments_for_pr()
|
|
83
84
|
|
|
84
85
|
# Verify two requests were made
|
|
85
86
|
assert mock_client.request.call_count == 2
|
|
@@ -140,7 +141,7 @@ class TestGitlabAuthFallback:
|
|
|
140
141
|
gitlab = Gitlab(client=mock_client)
|
|
141
142
|
|
|
142
143
|
# This should succeed on first try
|
|
143
|
-
|
|
144
|
+
gitlab.get_comments_for_pr()
|
|
144
145
|
|
|
145
146
|
# Verify only one request was made
|
|
146
147
|
assert mock_client.request.call_count == 1
|
|
@@ -6,8 +6,6 @@ normally-excluded directory (e.g. build) lets Core.find_files discover manifests
|
|
|
6
6
|
import types
|
|
7
7
|
from unittest.mock import MagicMock
|
|
8
8
|
|
|
9
|
-
import pytest
|
|
10
|
-
|
|
11
9
|
from socketsecurity.config import CliConfig
|
|
12
10
|
from socketsecurity.core import Core
|
|
13
11
|
from socketsecurity.core.socket_config import (
|