SOCRadar v2.3.0: Add complete integration suite#43732
Conversation
It is very important to new joiner
|
Thank you for your contribution. Your generosity and caring are unrivaled! Make sure to register your contribution by filling the Contribution Registration form, so our content wizard @kamalq97 will know the proposed changes are ready to be reviewed. |
|
Hi @Radargoger, thanks for contributing to the XSOAR marketplace. To receive credit for your generous contribution please follow this link. |
🤖 AI-Powered Code Review AvailableHi @kamalq97, @MosheEichler, you can leverage AI-powered code review to assist with this PR! Available Commands:
|
- Fix README.md markdown formatting for pre-commit compliance - Update pack version from 2.2.2 to 2.3.0 - Rename release notes: 2_2_2.md -> 2_3_0.md - Add missing sections: SOCRadar Incidents, Incidents v4 - Fix header spacing and consistent formatting - Correct support email to operation@socradar.io
|
Hi @MosheEichler , Thank you for the review and the feedback! I have addressed all the review comments and made the necessary changes. Just a quick heads-up regarding the Please let me know if there is anything else needed. Thanks again! |
- SOCRadarRapidReputation/README.md: change sublist markers from '-' to '*' to fix brack/markdownlint-cli2 CI failure - SOCRadarIoCEnrichment/README.md: wrap bare URLs with angle brackets
- SOCRadarIncidentsV4/MultiTenant: normalize YAML list indentation style - SOCRadarRapidReputation: add periods to context output descriptions; bump fromversion to 6.10.0 - SOCRadarIoCEnrichment: fix defaultvalue boolean to string format; bump fromversion to 6.10.0 - FeedSOCRadarThreatFeed: bump fromversion to 6.10.0 - Remove trailing newlines from description and metadata files
|
Hi @MosheEichler ,
|
|
Hi @Radargoger, thanks for the detailed status — replying inline on the 3 open items so we can move forward: 1.
|
…hanism
- Change apikey param from type 4 to type 9 (encrypted credential) with
displaypassword and hiddenusername across all three integrations
(FeedSOCRadarThreatFeed, SOCRadarIoCEnrichment, SOCRadarRapidReputation)
- Update params.get("apikey") to params.get("apikey", {}).get("password")
in all three Python files to match type 9 credentials object
- Remove time.sleep(1) from socradar-bulk-check command and replace with
platform-native retry via retries=3, status_list_to_retry=[429],
backoff_factor=1 on _http_request
|
Hi @MosheEichler, thanks for the detailed review! 1. BaseClient → ContentClient migration 2. time.sleep(1) → HTTP retry mechanism retries=3,
status_list_to_retry=[429],
backoff_factor=1,3. API Key — type: 4 → type: 9 - name: apikey
displaypassword: API Key
required: true
type: 9
hiddenusername: true
additionalinfo: API Key to access the SOCRadar service.Also updated the corresponding Python files to read the credential correctly via All changes are in the latest commit |
- Replace enumerate loop with simple for loop in socradar_bulk_check_command since idx was unused after removing time.sleep - Add tests for test_module, process_entity_by_type, socradar_reputation_command, and socradar_bulk_check_command in SOCRadarRapidReputation_test.py - Add tests for test_module, socradar_ioc_enrichment_command, and no-data paths in SOCRadarIoCEnrichment_test.py
|
Hi @Radargoger, the code looks good! We're ready for a demo. Please check this page, and let me know when you're available for one over DFIR. |
- Fix ruff-format: collapse multi-line call in socradar_reputation_command test
- Replace json=None with json={} in all no-data tests so _http_request returns
falsy empty dict instead of failing to parse empty body
- Add mocker.patch("demisto.error") to connection_error test to suppress stdout
output that was triggering the check_std_out_err conftest fixture
…nt tests
- test_test_module_no_response: add mocker fixture and patch demistomock.error
to suppress stdout output from demisto.error() call that triggered check_std_out_err
- test_test_module_connection_error: change mocker.patch("demisto.error") to
mocker.patch("demistomock.error") — "demisto" is not an importable module in CI,
only demistomock is available
test_module calls demisto.error() when is_success is False, which prints to stdout and triggers the check_std_out_err conftest fixture teardown error. Added mocker fixture and patched demistomock.error to suppress the output.
…nant API - severity: was sent as 'severities' (list), API expects 'severity' (comma-separated) - status: was sent as 'status' (list), API expects 'status_list[]' (bracket notation) Single-value status_list without brackets returns 400 from the API - Updated 2_3_0.md release notes to document the fix
|
Hi @MosheEichler, attaching a full demo recording of the v2.2.2 / v2.3.0 pack for your review. What the GIF covers (end-to-end)1. Instance configuration — all three integrations Test passing
API Key uses 2. SOCRadar Rapid Reputation commands (Playground / War Room)
3. SOCRadar IoC Enrichment
4. SOCRadar Threat Feed
5. Error handling / validation
Notes
Let me know if you'd like a focused recording for any specific edge case or flow. |
8b961f2
into
demisto:contrib/Radargoger_socradar-pack-v2.2.2
|
Thank you for your contribution. Your external PR has been merged and the changes are now included in an internal PR for further review. The internal PR will be merged to the master branch within 3 business days. |
* Change risk score scale from 1000 to 100
It is very important to new joiner
* SOCRadar v2.2.2: Add complete integration suite
* Rename 2_2_2.md to 2_3_0.md
* fix: Update SOCRadar pack to v2.3.0 with markdown fixes
- Fix README.md markdown formatting for pre-commit compliance
- Update pack version from 2.2.2 to 2.3.0
- Rename release notes: 2_2_2.md -> 2_3_0.md
- Add missing sections: SOCRadar Incidents, Incidents v4
- Fix header spacing and consistent formatting
- Correct support email to operation@socradar.io
* Update README.md
* Fixed trailing whitespace in all files
* Fix: Update type hints to Python 3.9+ style
* Fix: Update type hints to Python 3.9+ style
* Fix: Resolve PIE810 and mypy type annotation errors
* Fix: Add Union type annotation for indicator_object
* Merge with pre-commit auto-fixes
* Apply pycln: remove unused imports
* Apply black formatting to all Python files
* Apply ruff formatting with --isolated flag
* Fix: Apply ruff formatting to test file
* Apply black formatting with line-length 88
* Fix: Shorten long line to meet line-length 130 requirement
* Fix: Syntax error on line 591 - split merged lines
* Fix: Shorten long lines
* Fixed formatting and linting issues
* Fixed formatting issues
* Fixed formatting
* Docs: Fix markdown formatting and newline issues
* Fix: Revert file permission changes (755 -> 644) for unrelated SOCRadar pack files
* Fix: Apply XSOAR best practices to FeedSOCRadarThreatFeed
- Replace BaseClient with ContentClient
- Use .get() for safe dict access in build_entry_context
- Remove assert, handle None/empty date in date_string_to_iso_format_parsing
- Return None for unknown indicator types to enable auto-detection
- Fix raise_for_status error handling in handle_error_response
* Fix: Apply XSOAR best practices to SOCRadarRapidReputation
- Replace BaseClient with ContentClient
- Fix raise_for_status error handling in handle_error_response
- Use is_ip_valid (accept_v6_ips=False) correctly for IPv4 validation
- Move demisto.params() to main(), pass reliability as parameter
- Use get_hash_type instead of length-based hash detection
* Fix: Apply XSOAR best practices to SOCRadarIoCEnrichment
- Replace BaseClient with ContentClient
- Move include_ai_insights from demisto.params() to Client constructor
- Fix raise_for_status error handling in handle_error_response
- Move demisto.params() to main(), pass reliability as parameter
- Simplify calculate_dbot_score: score-based only (0=Unknown, 1-50=Suspicious, 51-100=Malicious)
* update yaml
* yml changes
* add md file
* Fix: Add unit tests and score mapping for RapidReputation and IoCEnrichment
* Fix: Move demistomock import to line 1 in FeedSOCRadarThreatFeed
XSOAR on-prem runner expects import demistomock as demisto to be the very first import line so it can inject the real demisto object.
* Fix: Revert ContentClient to BaseClient; fix ruff-format issues
ContentClient is not part of CommonServerPython and is not available
in the demisto/python3 Docker image used by these integrations.
The ContentClientApiModule defines a different ContentClient class
designed for content management, not REST API clients.
BaseClient (from CommonServerPython) is the correct base class here.
Note for reviewer: ContentClient requirement cannot be satisfied in
this Docker image context. BaseClient provides identical HTTP
functionality for these integrations.
Also fixed ruff-format violations:
- SOCRadarIoCEnrichment.py: removed extra blank line
- SOCRadarRapidReputation.py: added spaces around / operator
* Fix: Resolve ruff E501, mypy return type, and test data key name issues
- FeedSOCRadarThreatFeed.py: fix convert_to_demisto_indicator_type return
type to Optional[str] since dict.get() can return None (mypy error)
- test_data JSON files: update expected keys to PascalCase to match
build_entry_context output (IndicatorType, FirstSeenDate, LastSeenDate,
FeedMaintainerName, SeenCount) - tests were failing due to key rename
- SOCRadarRapidReputation.py: shorten rate limit help text to fit within
130-char line limit (E501)
* update readme files
* update a readme file
* update readme
* Fix: markdownlint sublist style and bare URLs in README files
- SOCRadarRapidReputation/README.md: change sublist markers from '-' to '*' to fix brack/markdownlint-cli2 CI failure
- SOCRadarIoCEnrichment/README.md: wrap bare URLs with angle brackets
* Fix: YAML formatting, fromversion bumps, and description style fixes
- SOCRadarIncidentsV4/MultiTenant: normalize YAML list indentation style
- SOCRadarRapidReputation: add periods to context output descriptions; bump fromversion to 6.10.0
- SOCRadarIoCEnrichment: fix defaultvalue boolean to string format; bump fromversion to 6.10.0
- FeedSOCRadarThreatFeed: bump fromversion to 6.10.0
- Remove trailing newlines from description and metadata files
* Fix: convert remaining dash list markers to asterisk in RapidReputation README
* Fix: switch API key to type 9, replace time.sleep with HTTP retry mechanism
- Change apikey param from type 4 to type 9 (encrypted credential) with
displaypassword and hiddenusername across all three integrations
(FeedSOCRadarThreatFeed, SOCRadarIoCEnrichment, SOCRadarRapidReputation)
- Update params.get("apikey") to params.get("apikey", {}).get("password")
in all three Python files to match type 9 credentials object
- Remove time.sleep(1) from socradar-bulk-check command and replace with
platform-native retry via retries=3, status_list_to_retry=[429],
backoff_factor=1 on _http_request
* Fix: ruff B007 and increase unit test coverage above 70%
- Replace enumerate loop with simple for loop in socradar_bulk_check_command
since idx was unused after removing time.sleep
- Add tests for test_module, process_entity_by_type, socradar_reputation_command,
and socradar_bulk_check_command in SOCRadarRapidReputation_test.py
- Add tests for test_module, socradar_ioc_enrichment_command, and no-data paths
in SOCRadarIoCEnrichment_test.py
* Fix: resolve CI failures in coverage tests
- Fix ruff-format: collapse multi-line call in socradar_reputation_command test
- Replace json=None with json={} in all no-data tests so _http_request returns
falsy empty dict instead of failing to parse empty body
- Add mocker.patch("demisto.error") to connection_error test to suppress stdout
output that was triggering the check_std_out_err conftest fixture
* Fix: patch demistomock.error instead of demisto.error in IoC Enrichment tests
- test_test_module_no_response: add mocker fixture and patch demistomock.error
to suppress stdout output from demisto.error() call that triggered check_std_out_err
- test_test_module_connection_error: change mocker.patch("demisto.error") to
mocker.patch("demistomock.error") — "demisto" is not an importable module in CI,
only demistomock is available
* Fix: patch demistomock.error in test_test_module_api_failure
test_module calls demisto.error() when is_success is False, which prints
to stdout and triggers the check_std_out_err conftest fixture teardown error.
Added mocker fixture and patched demistomock.error to suppress the output.
* Fix: correct severity and status_list filter param names for multi-tenant API
- severity: was sent as 'severities' (list), API expects 'severity' (comma-separated)
- status: was sent as 'status' (list), API expects 'status_list[]' (bracket notation)
Single-value status_list without brackets returns 400 from the API
- Updated 2_3_0.md release notes to document the fix
---------
Co-authored-by: Radargoger <burak.goger@socradar.io>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>

Contributing to Cortex XSOAR Content
Make sure to register your contribution by filling the contribution registration form
The Pull Request will be reviewed only after the contribution registration form is filled.
Status
Related Issues
Description
This PR adds three new integrations to the SOCRadar pack (v2.2.2):
SOCRadar Rapid Reputation - Fast reputation checking for IPs, domains, URLs, and file hashes with bulk support (up to 100 indicators) and automatic rate limiting.
SOCRadar IoC Enrichment - Deep threat intelligence enrichment with signal strength, confidence levels, activity labels, premium feeds, relations, and optional AI insights.
SOCRadar Threat Feed - Collection-based IoC feed integration for automated indicator ingestion using collection UUIDs with incremental feed capability and comprehensive geolocation data.
All integrations follow Cortex XSOAR best practices, include comprehensive documentation, and are production-ready.
Must have
Changes
Integrations/FeedSOCRadarThreatFeed/(new)Integrations/SOCRadarRapidReputation/(new)Integrations/SOCRadarIoCEnrichment/(new)pack_metadata.jsonto version 2.2.2README.mdwith all three integrationsReleaseNotes/2_2_2.mdTesting
All integrations have been tested with valid SOCRadar API keys:
relates: https://jira-dc.paloaltonetworks.com/browse/CIAC-16413