OctoxLabs
Octox Labs Cyber Security Asset Management platform.
Data Enrichment & Threat Intelligence · OctoxLabs
Details
| ID | OctoxLabs |
|---|---|
| Provider | OctoXLabs |
| Category | Data Enrichment & Threat Intelligence |
| From Version | 6.0.0 |
| Docker Image | demisto/octoxlabs:1.0.0.10133006 |
| Supported Modules | Agentix XSIAM |
README
Octox Labs Cyber Security Asset Management platform
This integration was integrated and tested with version 4.5.0 of OctoxLabs
Configure OctoxLabs in Cortex
| Parameter | Description | Required |
|---|---|---|
| IP | Your Octox Labs Platform IP | True |
| API Key | Your Octox Labs API Key. (https://github.com/octoxlabs/py-octoxlabs#getting-started) | True |
| HTTPS Proxy | Your HTTPS Proxy URL | False |
| No Verify | Don’t Verify SSL | False |
Commands
You can execute these commands from the CLI, as part of an automation, or in a playbook.
After you successfully execute a command, a DBot message appears in the War Room with the command details.
octoxlabs-get-adapters
Fetch octoxlabs all adapters
Base Command
octoxlabs-get-adapters
Input
There are no input arguments for this command.
Context Output
| Path | Type | Description |
|---|---|---|
| OctoxLabs.Adapters.count | Number | Adapters count |
| OctoxLabs.Adapters.results.id | Number | Adapter id |
| OctoxLabs.Adapters.results.name | String | Adapter name |
| OctoxLabs.Adapters.results.slug | String | Adapter slug |
| OctoxLabs.Adapters.results.description | String | Adapter description |
| OctoxLabs.Adapters.results.groups | Unknown | List<string> Adapter groups |
| OctoxLabs.Adapters.results.beta | Boolean | Adapter is beta? |
| OctoxLabs.Adapters.results.status | Number | Adapter status |
| OctoxLabs.Adapters.results.hr_status | String | Adapter human readable status |
octoxlabs-get-connections
Fetch octoxlabs connections
Base Command
octoxlabs-get-connections
Input
| Argument Name | Description | Required |
|---|---|---|
| page | Page number. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| OctoxLabs.Connections.count | Number | Connections count |
| OctoxLabs.Connections.results.id | Number | Connection id |
| OctoxLabs.Connections.results.adapter_id | Number | Connection adapter id |
| OctoxLabs.Connections.results.adapter_name | String | Connection adapter name |
| OctoxLabs.Connections.results.name | String | Connection name |
| OctoxLabs.Connections.results.status | Boolean | Connection status |
| OctoxLabs.Connections.results.description | String | Connection description |
| OctoxLabs.Connections.results.enabled | Boolean | Connection is enabled? |
octoxlabs-get-discoveries
Fetch octoxlabs discoveries
Base Command
octoxlabs-get-discoveries
Input
| Argument Name | Description | Required |
|---|---|---|
| page | Page number. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| OctoxLabs.Discoveries.count | Number | Total discovery count |
| OctoxLabs.Discoveries.results.id | Number | Discovery id |
| OctoxLabs.Discoveries.results.start_time | String | Discovery start time |
| OctoxLabs.Discoveries.results.end_time | String | Discovery end time |
| OctoxLabs.Discoveries.results.status | Number | Discovery status |
| OctoxLabs.Discoveries.results.hr_status | String | Discovery human readable status |
| OctoxLabs.Discoveries.results.progress | Number | Discovery progress |
octoxlabs-get-last-discovery
Get last success discovery
Base Command
octoxlabs-get-last-discovery
Input
There are no input arguments for this command.
Context Output
| Path | Type | Description |
|---|---|---|
| OctoxLabs.Discovery.id | Number | Last discovery id |
| OctoxLabs.Discovery.start_time | String | Last discovery start time |
| OctoxLabs.Discovery.end_time | String | Last discovery end time |
| OctoxLabs.Discovery.status | Number | Last discovery status |
| OctoxLabs.Discovery.hr_status | String | Last discovery human readable status |
| OctoxLabs.Discovery.progress | Number | Last discovery progress |
octoxlabs-search-devices
Search in your devices
Base Command
octoxlabs-search-devices
Input
| Argument Name | Description | Required |
|---|---|---|
| query | Query. | Optional |
| fields | Fields. | Optional |
| page | Page. | Optional |
| size | Size. | Optional |
| discovery_id | Specific Discovery Id. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| OctoxLabs.Devices.count | Number | Total devices count |
| OctoxLabs.Devices.results | Unknown | List<Dict> Device information |
octoxlabs-get-device
Fetch your device
Base Command
octoxlabs-get-device
Input
| Argument Name | Description | Required |
|---|---|---|
| hostname | Your device hostname. | Required |
| discovery_id | Your device at specific discovery. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| OctoxLabs.Device | Unknown | <Dict> Octoxlabs Device |
octoxlabs-get-queries
Fetch your queries
Base Command
octoxlabs-get-queries
Input
| Argument Name | Description | Required |
|---|---|---|
| page | Query list page. | Optional |
| search | Search text. | Optional |
| size | Query list size. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| OctoxLabs.Queries.count | Number | Queries count |
| OctoxLabs.Queries.results.id | Number | Query id |
| OctoxLabs.Queries.results.name | String | Query name |
| OctoxLabs.Queries.results.text | String | Query text |
| OctoxLabs.Queries.results.tags | Unknown | List<str> Query tags |
| OctoxLabs.Queries.results.count | Number | Query device count |
| OctoxLabs.Queries.results.is_public | Boolean | Query is public? |
| OctoxLabs.Queries.results.created_at | String | Query created at |
| OctoxLabs.Queries.results.updated_at | String | Query updated at |
| OctoxLabs.Queries.results.username | String | Query creator |
| OctoxLabs.Queries.results.is_temporary | Boolean | Query is temporary |
octoxlabs-get-query-by-id
Fetch your queries by id
Base Command
octoxlabs-get-query-by-id
Input
| Argument Name | Description | Required |
|---|---|---|
| query_id | Query id. | Required |
Context Output
| Path | Type | Description |
|---|---|---|
| OctoxLabs.Queries.results.id | Number | Query id |
| OctoxLabs.Queries.results.name | String | Query name |
| OctoxLabs.Queries.results.text | String | Query text |
| OctoxLabs.Queries.results.tags | Unknown | List<str> Query tags |
| OctoxLabs.Queries.results.count | Number | Query device count |
| OctoxLabs.Queries.results.is_public | Boolean | Query is public? |
| OctoxLabs.Queries.results.created_at | String | Query created at |
| OctoxLabs.Queries.results.updated_at | String | Query updated at |
| OctoxLabs.Queries.results.username | String | Query creator |
| OctoxLabs.Queries.results.is_temporary | Boolean | Query is temporary |
octoxlabs-get-query-by-name
Fetch your queries by id
Base Command
octoxlabs-get-query-by-name
Input
| Argument Name | Description | Required |
|---|---|---|
| query_name | Query name. | Required |
Context Output
| Path | Type | Description |
|---|---|---|
| OctoxLabs.Queries.results.id | Number | Query id |
| OctoxLabs.Queries.results.name | String | Query name |
| OctoxLabs.Queries.results.text | String | Query text |
| OctoxLabs.Queries.results.tags | Unknown | List<str> Query tags |
| OctoxLabs.Queries.results.count | Number | Query device count |
| OctoxLabs.Queries.results.is_public | Boolean | Query is public? |
| OctoxLabs.Queries.results.created_at | String | Query created at |
| OctoxLabs.Queries.results.updated_at | String | Query updated at |
| OctoxLabs.Queries.results.username | String | Query creator |
| OctoxLabs.Queries.results.is_temporary | Boolean | Query is temporary |
octoxlabs-get-user-by-username
Fetch your Users by username
Base Command
octoxlabs-get-user-by-username
Input
| Argument Name | Description | Required |
|---|---|---|
| username | User username. | Required |
Context Output
| Path | Type | Description |
|---|---|---|
| OctoxLabs.User.results.id | Number | User id. |
| OctoxLabs.User.results.email | String | User email. |
| OctoxLabs.User.results.username | String | User username. |
| OctoxLabs.User.results.name | String | User name. |
| OctoxLabs.User.results.first_name | String | User first name |
| OctoxLabs.User.results.last_name | String | User last name |
| OctoxLabs.User.results.is_active | Boolean | User is active |
| OctoxLabs.User.results.is_ldap | Boolean | User is ldap |
| OctoxLabs.Users.results.groups | Unknown | List<Dict> User groups |
octoxlabs-get-groups
Fetch your Groups
Base Command
octoxlabs-get-groups
Input
| Argument Name | Description | Required |
|---|---|---|
| page | Group list page. | Optional |
| search | Search text. | Optional |
| size | Group list size. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| OctoxLabs.Groups.count | Number | Groups count. |
| OctoxLabs.Groups.results.id | Number | Group id. |
| OctoxLabs.Groups.results.name | String | Group name. |
| OctoxLabs.Groups.results.users_count | Number | Group users count. |
octoxlabs-get-companies
Fetch your Companies
Base Command
octoxlabs-get-companies
Input
| Argument Name | Description | Required |
|---|---|---|
| page | Company list page. | Optional |
| search | Search text. | Optional |
| size | Company list size. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| OctoxLabs.Companies.count | Number | Companies count. |
| OctoxLabs.Companies.results.id | Number | Company id. |
| OctoxLabs.Companies.results.name | String | Company name. |
| OctoxLabs.Companies.results.domain | String | Company domain. |
| OctoxLabs.Companies.results.is_active | Boolean | Company is active. |
octoxlabs-get-domain-by-domain-name
Fetch your Domain by Domain name.
Base Command
octoxlabs-get-domain-by-domain-name
Input
| Argument Name | Description | Required |
|---|---|---|
| domain_name | Domain name. | Required |
Context Output
| Path | Type | Description |
|---|---|---|
| OctoxLabs.Domain.results.id | Number | Domain id. |
| OctoxLabs.Domain.results.domain | String | Domain domain. |
| OctoxLabs.Domain.results.tenant_name | String | Domain tenant name. |
| OctoxLabs.Domain.results.tenant | Number | Domain tenant. |
octoxlabs-get-company-by-id
Fetch your Company by id.
Base Command
octoxlabs-get-company-by-id
Input
| Argument Name | Description | Required |
|---|---|---|
| company_id | Company id. | Required |
Context Output
| Path | Type | Description |
|---|---|---|
| OctoxLabs.Company.results.id | Number | Company id. |
| OctoxLabs.Company.results.name | String | Company name. |
| OctoxLabs.Company.results.domain | String | Company domain. |
| OctoxLabs.Company.results.is_active | Boolean | Company is active. |
octoxlabs-get-permissions
Fetch your Permissions
Base Command
octoxlabs-get-permissions
Input
| Argument Name | Description | Required |
|---|---|---|
| page | Permission list page. | Optional |
| search | Search text. | Optional |
| size | Permission list size. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| OctoxLabs.Permissions.count | Number | Permissions count. |
| OctoxLabs.Permissions.results.id | Number | Permission id. |
| OctoxLabs.Permissions.results.name | String | Permission name. |
| OctoxLabs.Permissions.results.app | String | Permission app. |
octoxlabs-get-domains
Fetch your Domains
Base Command
octoxlabs-get-domains
Input
| Argument Name | Description | Required |
|---|---|---|
| page | Domain list page. | Optional |
| search | Search text. | Optional |
| size | Domain list size. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| OctoxLabs.Domains.count | Number | Domains count. |
| OctoxLabs.Domains.results.id | Number | Domain id. |
| OctoxLabs.Domains.results.domain | String | Domain domain. |
| OctoxLabs.Domains.results.tenant_name | String | Domain tenant name. |
| OctoxLabs.Domains.results.tenant | Number | Domain tenant. |
octoxlabs-get-domain-by-id
Fetch your Domain by id.
Base Command
octoxlabs-get-domain-by-id
Input
| Argument Name | Description | Required |
|---|---|---|
| domain_id | Domain id. | Required |
Context Output
| Path | Type | Description |
|---|---|---|
| OctoxLabs.Domain.results.id | Number | Domain id. |
| OctoxLabs.Domain.results.domain | String | Domain domain. |
| OctoxLabs.Domain.results.tenant_name | String | Domain tenant name. |
| OctoxLabs.Domain.results.tenant | Number | Domain tenant. |
octoxlabs-get-company-by-name
Fetch your Company by name.
Base Command
octoxlabs-get-company-by-name
Input
| Argument Name | Description | Required |
|---|---|---|
| company_name | Company name. | Required |
Context Output
| Path | Type | Description |
|---|---|---|
| OctoxLabs.Company.count | Number | Companies count. |
| OctoxLabs.Company.results.id | Number | Company id. |
| OctoxLabs.Company.results.name | String | Company name. |
| OctoxLabs.Company.results.domain | String | Company domain. |
| OctoxLabs.Company.results.is_active | Boolean | Company is active. |
octoxlabs-get-users
Fetch your Users
Base Command
octoxlabs-get-users
Input
| Argument Name | Description | Required |
|---|---|---|
| page | User list page. | Optional |
| search | Search text. | Optional |
| size | User list size. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| OctoxLabs.Users.count | Number | Users count. |
| OctoxLabs.Users.results.id | Number | User id. |
| OctoxLabs.Users.results.email | String | User email. |
| OctoxLabs.Users.results.username | String | User username. |
| OctoxLabs.Users.results.name | String | User name. |
| OctoxLabs.Users.results.first_name | String | User first name |
| OctoxLabs.Users.results.last_name | String | User last name |
| OctoxLabs.Users.results.is_active | Boolean | User is active |
| OctoxLabs.Users.results.is_ldap | Boolean | User is ldap |
| OctoxLabs.Users.results.groups | Unknown | List<Dict> User groups |
octoxlabs-get-user-by-id
Fetch your User by id
Base Command
octoxlabs-get-user-by-id
Input
| Argument Name | Description | Required |
|---|---|---|
| user_id | User id. | Required |
Context Output
| Path | Type | Description |
|---|---|---|
| OctoxLabs.User.results.id | Number | User id. |
| OctoxLabs.User.results.email | String | User email. |
| OctoxLabs.User.results.username | String | User username. |
| OctoxLabs.User.results.name | String | User name. |
| OctoxLabs.User.results.first_name | String | User first name |
| OctoxLabs.User.results.last_name | String | User last name |
| OctoxLabs.User.results.is_active | Boolean | User is active |
| OctoxLabs.User.results.is_ldap | Boolean | User is ldap |
| OctoxLabs.User.results.groups | Unknown | List<Dict> User groups |
octoxlabs-search-scroll-users
Search in your users.
Base Command
octoxlabs-search-scroll-users
Input
| Argument Name | Description | Required |
|---|---|---|
| query | Query. | Optional |
| fields | Fields. | Optional |
| size | Size. (Default: 50). | Optional |
| discovery_id | Specific Discovery Id. | Optional |
| scroll_id | Specific Scroll Id. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| OctoxLabs.ScrolledUsers.count | Number | Total users count. |
| OctoxLabs.ScrolledUsers.scroll_id | String | Specific Scroll Id |
| OctoxLabs.ScrolledUsers.results | Unknown | List Users information. |
octoxlabs-get-application-detail
Fetch your application.
Base Command
octoxlabs-get-application-detail
Input
| Argument Name | Description | Required |
|---|---|---|
| application_id | Your application id. | Required |
| discovery_id | Your device at specific discovery. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| OctoxLabs.Application | Unknown | <Dict> Octoxlabs Application. |
octoxlabs-search-scroll-avm
Search in your AVM.
Base Command
octoxlabs-search-scroll-avm
Input
| Argument Name | Description | Required |
|---|---|---|
| query | Query. | Optional |
| size | Size. | Optional |
| discovery_id | Specific Discovery Id. | Optional |
| scroll_id | Specific Scroll Id. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| OctoxLabs.ScrolledAVM.count | Number | Total vulnerabilities count. |
| OctoxLabs.ScrolledAVM.scroll_id | String | Specific Scroll Id |
| OctoxLabs.ScrolledAVM.results | Unknown | List Vulnerability information. |
octoxlabs-search-scroll-devices
Search in your devices.
Base Command
octoxlabs-search-scroll-devices
Input
| Argument Name | Description | Required |
|---|---|---|
| query | Query. | Optional |
| fields | Fields. | Optional |
| size | Size. (Default: 50). | Optional |
| discovery_id | Specific Discovery Id. | Optional |
| scroll_id | Specific Scroll Id. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| OctoxLabs.ScrolledDevices.count | Number | Total devices count. |
| OctoxLabs.ScrolledDevices.scroll_id | String | Specific Scroll Id |
| OctoxLabs.ScrolledDevices.results | Unknown | List Device information. |
octoxlabs-search-applications
Search in your Applications
Base Command
octoxlabs-search-applications
Input
| Argument Name | Description | Required |
|---|---|---|
| query | Query. | Optional |
| fields | Fields. | Optional |
| page | Page. (Default: 1). | Optional |
| size | Size. (Default: 50). | Optional |
| discovery_id | Specific Discovery Id. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| OctoxLabs.Applications.count | Number | Total applications count. |
| OctoxLabs.Applications.results | Unknown | List Application information. |
octoxlabs-search-avm
Search in your AVM
Base Command
octoxlabs-search-avm
Input
| Argument Name | Description | Required |
|---|---|---|
| query | Query. | Optional |
| fields | Fields. | Optional |
| page | Page. (Default: 1). | Optional |
| size | Size. (Default: 50). | Optional |
| discovery_id | Specific Discovery Id. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| OctoxLabs.AVM.count | Number | Total vulnerabilities count. |
| OctoxLabs.AVM.results | Unknown | List Vulnerability information. |
octoxlabs-search-scroll-applications
Search in your applications.
Base Command
octoxlabs-search-scroll-applications
Input
| Argument Name | Description | Required |
|---|---|---|
| query | Query. | Optional |
| fields | Fields. | Optional |
| size | Size. (Default: 50). | Optional |
| discovery_id | Specific Discovery Id. | Optional |
| scroll_id | Specific Scroll Id. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| OctoxLabs.ScrolledApplications.count | Number | Total applications count. |
| OctoxLabs.ScrolledApplications.scroll_id | String | Specific Scroll Id |
| OctoxLabs.ScrolledApplications.results | Unknown | List Application information. |
octoxlabs-get-user-inventory-detail
Fetch your user.
Base Command
octoxlabs-get-user-inventory-detail
Input
| Argument Name | Description | Required |
|---|---|---|
| username | Your user username. | Required |
| discovery_id | Your device at specific discovery. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| OctoxLabs.UserInv | Unknown | <Dict> Octoxlabs User. |
octoxlabs-search-users-inventory
Search in your User Inventory.
Base Command
octoxlabs-search-users-inventory
Input
| Argument Name | Description | Required |
|---|---|---|
| query | Query. | Optional |
| fields | Fields. | Optional |
| page | Page. (Default: 1). | Optional |
| size | Size. (Default: 50). | Optional |
| discovery_id | Specific Discovery Id. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| OctoxLabs.UserInventory.count | Number | Total users count. |
| OctoxLabs.UserInventory.results | Unknown | List User information. |
Configuration parameters
octox_ip— IP (required)octox_token— (required)https_proxy— HTTPS Proxyno_verify— No Verify
Commands (29)
-
octoxlabs-get-adaptersFetch octoxlabs all adapters.
-
octoxlabs-get-application-detailFetch your application.
-
octoxlabs-get-companiesFetch your Companies.
-
octoxlabs-get-company-by-idFetch your Company by id.
-
octoxlabs-get-company-by-nameFetch your Company by name.
-
octoxlabs-get-connectionsFetch octoxlabs connections.
-
octoxlabs-get-deviceFetch your device.
-
octoxlabs-get-discoveriesFetch octoxlabs discoveries.
-
octoxlabs-get-domain-by-domain-nameFetch your Domain by Domain name.
-
octoxlabs-get-domain-by-idFetch your Domain by id.
-
octoxlabs-get-domainsFetch your Domains.
-
octoxlabs-get-groupsFetch your Groups.
-
octoxlabs-get-last-discoveryGet last success discovery.
-
octoxlabs-get-permissionsFetch your Permissions.
-
octoxlabs-get-queriesFetch your queries.
-
octoxlabs-get-query-by-idFetch your queries by id.
-
octoxlabs-get-query-by-nameFetch your queries by id.
-
octoxlabs-get-user-by-idFetch your User by id.
-
octoxlabs-get-user-by-usernameFetch your Users by username.
-
octoxlabs-get-user-inventory-detailFetch your user.
-
octoxlabs-get-usersFetch your Users.
-
octoxlabs-search-applicationsSearch in your Applications
-
octoxlabs-search-avmSearch in your AVM
-
octoxlabs-search-devicesSearch in your devices.
-
octoxlabs-search-scroll-applicationsSearch in your applications.
-
octoxlabs-search-scroll-avmSearch in your AVM.
-
octoxlabs-search-scroll-devicesSearch in your devices.
-
octoxlabs-search-scroll-usersSearch in your users.
-
octoxlabs-search-users-inventorySearch in your User Inventory.
"""Base Integration for Cortex XSOAR - Unit Tests file Pytest Unit Tests: all funcion names must start with "test_" More details: https://xsoar.pan.dev/docs/integrations/unit-testing You must add at least a Unit Test function for every XSOAR command you are implementing with your integration """ import json import pytest import requests_mock as rm from OctoxLabs import convert_to_json, run_command from octoxlabs import OctoxLabs from octoxlabs.exceptions import NotFound from octoxlabs.models.adapter import Adapter @pytest.fixture() def octox_client(requests_mock) -> OctoxLabs: requests_mock.post("/api/token/token", json={"access": "token"}) return OctoxLabs(ip="octoxlabs.test", token="xsoar") def util_load_json(path): with open(path, encoding="utf-8") as f: return json.loads(f.read()) def test_convert_to_json(): adapter = Adapter( id=1, name="Active Directory", slug="active-directory", description="Active directory description", groups=["ad"], beta=False, status=1, ) data = convert_to_json( obj=adapter, keys=[ "id", "name", "slug", "description", "groups", "beta", "status", "hr_status", ], ) assert data["id"] == 1 assert data["name"] == "Active Directory" assert data["slug"] == "active-directory" assert data["description"] == "Active directory description" assert data["groups"] == ["ad"] assert data["beta"] is False assert data["status"] == 1 assert data["hr_status"] == "Done" def test_run_command_exception(octox_client): with pytest.raises(Exception): run_command(octox=octox_client, command_name="no-command", args={}) def test_test_module(requests_mock, octox_client): requests_mock.get("/api/ping", json={"pong": "ok"}) assert run_command(octox=octox_client, command_name="test-module", args={}) == "ok" def test_get_adapters(requests_mock, octox_client): adapter_data = util_load_json(path="test_data/get_adapters.json") requests_mock.get("/adapters/adapters", json=adapter_data) result = run_command(octox=octox_client, command_name="octoxlabs-get-adapters", args={}) data = result.outputs assert data["count"] == 2 assert data["results"][0]["name"] == "Netskope" def test_get_connections(requests_mock, octox_client): connections_data = util_load_json(path="test_data/get_connections.json") requests_mock.get("/adapters/connections", json=connections_data) result = run_command(octox=octox_client, command_name="octoxlabs-get-connections", args={}) data = result.outputs assert data["count"] == 2 assert data["results"][0]["adapter_name"] == "Active Directory" assert data["results"][0]["name"] == "Insecure AD" def test_search_devices_parameters(octox_client): with rm.mock() as m: m.post("/devices/devices", json={"count": 0, "results": []}) run_command( octox=octox_client, command_name="octoxlabs-search-devices", args={"fields": "Adapters, Hostname"}, ) run_command(octox=octox_client, command_name="octoxlabs-search-devices", args={}) first_request = m.request_history[0] first_data = first_request.json() assert first_data["fields"] == ["Adapters", "Hostname"] last_request = m.request_history[1] last_data = last_request.json() assert last_data["fields"] is None def test_get_queries(requests_mock, octox_client): queries_data = util_load_json(path="test_data/get_queries.json") requests_mock.get("/queries/queries", json=queries_data) result = run_command(octox=octox_client, command_name="octoxlabs-get-queries", args={}) first_data = result.outputs assert first_data["count"] == 1 assert first_data["results"][0]["id"] == 142 def test_get_query_by_id(requests_mock, octox_client): query_data = util_load_json(path="test_data/get_query.json") requests_mock.get("/queries/queries/142", json=query_data) result = run_command( octox=octox_client, command_name="octoxlabs-get-query-by-id", args={"query_id": 142}, ) data = result.outputs assert data["id"] == 142 assert data["tags"] == ["cisco"] def test_get_query_by_name(requests_mock, octox_client): queries_data = util_load_json(path="test_data/get_queries.json") requests_mock.get( "/queries/queries?search=error", json={"count": 1, "results": [{"name": "not cisco"}]}, ) with pytest.raises(NotFound): run_command( octox=octox_client, command_name="octoxlabs-get-query-by-name", args={"query_name": "error"}, ) requests_mock.get("/queries/queries?search=cisco ise machines", json=queries_data) result = run_command( octox=octox_client, command_name="octoxlabs-get-query-by-name", args={"query_name": "cisco ise machines"}, ) data = result.outputs assert data["name"] == "cisco ise machines" def test_get_companies(requests_mock, octox_client): companies_data = util_load_json(path="test_data/get_companies.json") requests_mock.get("/companies/companies", json=companies_data) result = run_command(octox=octox_client, command_name="octoxlabs-get-companies", args={}) first_data = result.outputs assert first_data["count"] == 1 assert first_data["results"][0]["name"] == "Octoxlabs" def test_get_company_by_id(requests_mock, octox_client): company_data = util_load_json(path="test_data/get_company.json") requests_mock.get("/companies/companies/1", json=company_data) result = run_command( octox=octox_client, command_name="octoxlabs-get-company-by-id", args={"company_id": 1}, ) first_data = result.outputs assert first_data["name"] == "Octoxlabs" def test_get_company_by_name(requests_mock, octox_client): company_data = util_load_json(path="test_data/get_companies.json") requests_mock.get("/companies/companies", json=company_data) result = run_command( octox=octox_client, command_name="octoxlabs-get-company-by-name", args={"company_name": "Octoxlabs"}, ) first_data = result.outputs assert first_data["name"] == "Octoxlabs" def test_get_domains(requests_mock, octox_client): domains_data = util_load_json(path="test_data/get_domains.json") requests_mock.get("/companies/domains", json=domains_data) result = run_command(octox=octox_client, command_name="octoxlabs-get-domains", args={}) first_data = result.outputs assert first_data["count"] == 1 assert first_data["results"][0]["tenant_name"] == "Octoxlabs" def test_get_domain_by_id(requests_mock, octox_client): domain_data = util_load_json(path="test_data/get_domain.json") requests_mock.get("/companies/domains/1", json=domain_data) result = run_command( octox=octox_client, command_name="octoxlabs-get-domain-by-id", args={"domain_id": 1}, ) first_data = result.outputs assert first_data["tenant_name"] == "Octoxlabs" def test_get_domain_by_domain_name(requests_mock, octox_client): domain_data = util_load_json(path="test_data/get_domains.json") requests_mock.get("/companies/domains", json=domain_data) result = run_command( octox=octox_client, command_name="octoxlabs-get-domain-by-domain-name", args={"domain_name": "localhost"}, ) first_data = result.outputs assert first_data["domain"] == "localhost" def test_get_users(requests_mock, octox_client): users_data = util_load_json(path="test_data/get_users.json") requests_mock.get("/users/users", json=users_data) result = run_command(octox=octox_client, command_name="octoxlabs-get-users", args={}) first_data = result.outputs assert first_data["count"] == 1 assert first_data["results"][0]["name"] == "XSOAR OctoxLabs" def test_get_user_by_id(requests_mock, octox_client): user_data = util_load_json(path="test_data/get_user.json") requests_mock.get("/users/users/1", json=user_data) result = run_command(octox=octox_client, command_name="octoxlabs-get-user-by-id", args={"user_id": 1}) first_data = result.outputs assert first_data["name"] == "XSOAR OctoxLabs" def test_get_user_by_username(requests_mock, octox_client): users_data = util_load_json(path="test_data/get_users.json") requests_mock.get("/users/users", json=users_data) result = run_command( octox=octox_client, command_name="octoxlabs-get-user-by-username", args={"username": "xsoar"}, ) first_data = result.outputs assert first_data["username"] == "xsoar" def test_get_groups(requests_mock, octox_client): groups_data = util_load_json(path="test_data/get_groups.json") requests_mock.get("/users/groups", json=groups_data) result = run_command(octox=octox_client, command_name="octoxlabs-get-groups", args={}) first_data = result.outputs assert first_data["count"] == 2 assert first_data["results"][0]["name"] == "Auditors" def test_get_permissions(requests_mock, octox_client): permissions_data = util_load_json(path="test_data/get_permissions.json") requests_mock.get("/users/permissions", json=permissions_data) result = run_command(octox=octox_client, command_name="octoxlabs-get-permissions", args={}) first_data = result.outputs assert first_data["count"] == 1 assert first_data["results"][0]["app"] == "activities" def test_get_scroll_devices(requests_mock, octox_client): devices_data = util_load_json(path="test_data/get_devices.json") devices_data["scroll_id"] = "scroll-id" requests_mock.post("/devices/devices", json=devices_data) result = run_command(octox=octox_client, command_name="octoxlabs-search-scroll-devices", args={}) first_data = result.outputs assert first_data["count"] == 1 assert first_data["results"][0]["Hostname"] == ["dev-1"] devices_data["results"] = [] requests_mock.post("/devices/devices", json=devices_data) second_result = run_command( octox=octox_client, command_name="octoxlabs-search-scroll-devices", args={"scroll_id": "scroll-id"}, ) second_data = second_result.outputs assert second_data["count"] == 1 assert not second_data["results"] def test_get_scroll_users(requests_mock, octox_client): users_data = util_load_json(path="test_data/get_users_inv.json") users_data["scroll_id"] = "scroll-id" requests_mock.post("/userinventory/users", json=users_data) result = run_command(octox=octox_client, command_name="octoxlabs-search-scroll-users", args={}) first_data = result.outputs assert first_data["count"] == 1 assert first_data["results"][0]["Username"] == ["octouser-1"] users_data["results"] = [] requests_mock.post("/userinventory/users", json=users_data) second_result = run_command( octox=octox_client, command_name="octoxlabs-search-scroll-users", args={"scroll_id": "scroll-id"}, ) second_data = second_result.outputs assert second_data["count"] == 1 assert not second_data["results"] def test_get_scroll_applications(requests_mock, octox_client): app_data = util_load_json(path="test_data/get_applications.json") app_data["scroll_id"] = "scroll-id" requests_mock.post("/appinventory/applications", json=app_data) result = run_command(octox=octox_client, command_name="octoxlabs-search-scroll-applications", args={}) first_data = result.outputs assert first_data["count"] == 1 assert first_data["results"][0]["Groups"] == ["hp"] app_data["results"] = [] requests_mock.post("/appinventory/applications", json=app_data) second_result = run_command( octox=octox_client, command_name="octoxlabs-search-scroll-applications", args={"scroll_id": "scroll-id"}, ) second_data = second_result.outputs assert second_data["count"] == 1 assert not second_data["results"] def test_get_scroll_avm(requests_mock, octox_client): avm_data = util_load_json(path="test_data/get_avm.json") avm_data["scroll_id"] = "scroll-id" requests_mock.post("/avm/vulnerabilities", json=avm_data) result = run_command(octox=octox_client, command_name="octoxlabs-search-scroll-avm", args={}) first_data = result.outputs assert first_data["count"] == 1 assert first_data["results"][0]["Id"] == ["CVE-2024-21423"] avm_data["results"] = [] requests_mock.post("/avm/vulnerabilities", json=avm_data) second_result = run_command( octox=octox_client, command_name="octoxlabs-search-scroll-avm", args={"scroll_id": "scroll-id"}, ) second_data = second_result.outputs assert second_data["count"] == 1 assert not second_data["results"] def test_search_devices(requests_mock, octox_client): devices_data = util_load_json(path="test_data/get_devices.json") requests_mock.post("/devices/devices", json=devices_data) result = run_command(octox=octox_client, command_name="octoxlabs-search-devices", args={}) first_data = result.outputs assert first_data["count"] == 1 assert first_data["results"][0]["Hostname"] == ["dev-1"] def test_search_users_inventory(requests_mock, octox_client): users_data = util_load_json(path="test_data/get_users_inv.json") requests_mock.post("/userinventory/users", json=users_data) result = run_command(octox=octox_client, command_name="octoxlabs-search-users-inventory", args={}) first_data = result.outputs assert first_data["count"] == 1 assert first_data["results"][0]["Username"] == ["octouser-1"] def test_search_applications(requests_mock, octox_client): app_data = util_load_json(path="test_data/get_applications.json") requests_mock.post("/appinventory/applications", json=app_data) result = run_command(octox=octox_client, command_name="octoxlabs-search-applications", args={}) first_data = result.outputs assert first_data["count"] == 1 assert first_data["results"][0]["Groups"] == ["hp"] def test_search_avm(requests_mock, octox_client): avm_data = util_load_json(path="test_data/get_avm.json") requests_mock.post("/avm/vulnerabilities", json=avm_data) result = run_command(octox=octox_client, command_name="octoxlabs-search-avm", args={}) first_data = result.outputs assert first_data["count"] == 1 assert first_data["results"][0]["Id"] == ["CVE-2024-21423"] def test_get_user_detail(requests_mock, octox_client): users_data = util_load_json(path="test_data/get_user_inv_detail.json") requests_mock.post("/userinventory/users/None", json=users_data) requests_mock.get("/discoveries/last", json={"id": 1}) result = run_command(octox=octox_client, command_name="octoxlabs-get-user-inventory-detail", args={}) first_data = result.outputs assert first_data["Username"] == "octouser-1" def test_get_application_detail(requests_mock, octox_client): app_data = util_load_json(path="test_data/get_application_detail.json") requests_mock.post("/appinventory/applications/None", json=app_data) requests_mock.get("/discoveries/last", json={"id": 1}) result = run_command(octox=octox_client, command_name="octoxlabs-get-application-detail", args={}) first_data = result.outputs assert first_data["Count"] == 1174 def test_get_device_detail(requests_mock, octox_client): device_data = util_load_json(path="test_data/get_device_detail.json") requests_mock.post("/devices/devices/None", json=device_data) requests_mock.get("/discoveries/last", json={"id": 1}) result = run_command(octox=octox_client, command_name="octoxlabs-get-device", args={}) first_data = result.outputs assert first_data["Hostname"] == "dev-1"