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.
from CommonServerPython import * # noqa # pylint: disable=unused-wildcard-import from CommonServerUserPython import * # noqa from octoxlabs import OctoxLabs import urllib3 from typing import Any from collections.abc import Callable # from Packs.Base.Scripts.CommonServerPython.CommonServerPython import CommandResults # Disable insecure warnings urllib3.disable_warnings() # pylint: disable=no-member """ CONSTANTS """ """ HELPER FUNCTIONS """ def convert_to_json(obj: object, keys: list[str]) -> dict[str, Any]: return {k: getattr(obj, k, None) for k in keys} def run_command(octox: OctoxLabs, command_name: str, args: dict[str, Any]) -> CommandResults: commands: dict[str, Callable] = { "test-module": test_module, "octoxlabs-get-adapters": get_adapters, "octoxlabs-get-connections": get_connections, "octoxlabs-get-discoveries": get_discoveries, "octoxlabs-get-last-discovery": get_last_discovery, "octoxlabs-search-devices": search_devices, "octoxlabs-search-users-inventory": search_users_inventory, "octoxlabs-search-applications": search_applications, "octoxlabs-search-avm": search_avm, "octoxlabs-get-device": get_device, "octoxlabs-get-user-inventory-detail": get_user_inventory_detail, "octoxlabs-get-application-detail": get_application_detail, "octoxlabs-get-queries": get_queries, "octoxlabs-get-query-by-id": get_query_by_id, "octoxlabs-get-query-by-name": get_query_by_name, "octoxlabs-get-companies": get_companies, "octoxlabs-get-company-by-id": get_company_by_id, "octoxlabs-get-company-by-name": get_company_by_name, "octoxlabs-get-domains": get_domains, "octoxlabs-get-domain-by-id": get_domain_by_id, "octoxlabs-get-domain-by-domain-name": get_domain_by_domain_name, "octoxlabs-get-users": get_users, "octoxlabs-get-user-by-id": get_user_by_id, "octoxlabs-get-user-by-username": get_user_by_username, "octoxlabs-get-groups": get_groups, "octoxlabs-get-permissions": get_permissions, "octoxlabs-search-scroll-devices": search_scroll_devices, "octoxlabs-search-scroll-users": search_scroll_users, "octoxlabs-search-scroll-applications": search_scroll_applications, "octoxlabs-search-scroll-avm": search_scroll_avm, } command_function: Callable | None = commands.get(command_name, None) if command_function: return command_function(octox=octox, args=args) raise Exception("No command.") """ COMMAND FUNCTIONS """ def test_module(octox: OctoxLabs, *_, **__) -> str: """Tests API connectivity and authentication' Returning 'ok' indicates that the integration works like it is supposed to. Connection to the service is successful. Raises exceptions if something goes wrong. :type octox: ``octoxlabs.OctoxLabs`` :param octoxlabs.OctoxLabs: client to use :return: 'ok' if test passed, anything else will fail the test. :rtype: ``str`` """ octox.ping() return "ok" def get_adapters(octox: OctoxLabs, *_, **__) -> CommandResults: count, adapters = octox.get_adapters() return CommandResults( outputs_prefix="OctoxLabs.Adapters", outputs={ "count": count, "results": [ convert_to_json( obj=a, keys=[ "id", "name", "slug", "description", "groups", "beta", "status", "hr_status", ], ) for a in adapters ], }, ) def get_connections(octox: OctoxLabs, args: dict[str, Any]) -> CommandResults: page = args.get("page", 1) count, connections = octox.get_connections(page=page) return CommandResults( outputs_prefix="OctoxLabs.Connections", outputs={ "count": count, "results": [ convert_to_json( obj=c, keys=[ "id", "adapter_id", "adapter_name", "name", "status", "description", "enabled", ], ) for c in connections ], }, ) def get_discoveries(octox: OctoxLabs, args: dict[str, Any]) -> CommandResults: page = args.get("page", 1) count, discoveries = octox.get_discoveries(page=page) return CommandResults( outputs_prefix="OctoxLabs.Discoveries", outputs={ "count": count, "results": [ convert_to_json( d, keys=[ "id", "start_time", "end_time", "status", "hr_status", "progress", ], ) for d in discoveries ], }, ) def get_last_discovery(octox: OctoxLabs, *_, **__) -> CommandResults: discovery = octox.get_last_discovery() return CommandResults( outputs_prefix="OctoxLabs.Discovery", outputs=convert_to_json( obj=discovery, keys=["id", "start_time", "end_time", "status", "hr_status", "progress"], ), ) def search_devices(octox: OctoxLabs, args: dict[str, Any]) -> CommandResults: fields = args.get("fields", None) if isinstance(fields, str): fields = [f.strip() for f in fields.split(",")] count, devices = octox.search_devices( query=args.get("query", ""), fields=fields, page=args.get("page", 1), size=args.get("size", 50), discovery_id=args.get("discovery_id", None), ) return CommandResults( outputs_prefix="OctoxLabs.Devices", outputs={ "count": count, "results": devices, }, ) def get_device(octox: OctoxLabs, args: dict[str, Any]) -> CommandResults: device = octox.get_device_detail(hostname=args.get("hostname"), discovery_id=args.get("discovery_id", None)) return CommandResults(outputs_prefix="OctoxLabs.Device", outputs=device) def get_queries(octox: OctoxLabs, args: dict[str, Any]) -> CommandResults: count, queries = octox.get_queries( page=args.get("page", 1), search=args.get("search", ""), size=args.get("size", 20), ) return CommandResults( outputs_prefix="OctoxLabs.Queries", outputs={ "count": count, "results": [ convert_to_json( q, keys=[ "id", "name", "text", "tags", "count", "is_public", "created_at", "updated_at", "username", "is_temporary", ], ) for q in queries ], }, ) def get_query_by_id(octox: OctoxLabs, args: dict[str, Any]) -> CommandResults: query = octox.get_query_by_id(query_id=args.get("query_id")) return CommandResults( outputs_prefix="OctoxLabs.Query", outputs=convert_to_json( obj=query, keys=[ "id", "name", "text", "tags", "count", "is_public", "created_at", "updated_at", "username", "is_temporary", ], ), ) def get_query_by_name(octox: OctoxLabs, args: dict[str, Any]) -> CommandResults: query = octox.get_query_by_name(query_name=args.get("query_name")) return CommandResults( outputs_prefix="OctoxLabs.Query", outputs=convert_to_json( obj=query, keys=[ "id", "name", "text", "tags", "count", "is_public", "created_at", "updated_at", "username", "is_temporary", ], ), ) def get_companies(octox: OctoxLabs, args: dict[str, Any]) -> CommandResults: count, companies = octox.get_companies( page=args.get("page", 1), search=args.get("search", ""), size=args.get("size", 20), ) return CommandResults( outputs_prefix="OctoxLabs.Companies", outputs={ "count": count, "results": [ convert_to_json( c, keys=[ "id", "name", "domain", "is_active", ], ) for c in companies ], }, ) def get_company_by_id(octox: OctoxLabs, args: dict[str, Any]) -> CommandResults: company = octox.get_company_by_id(company_id=args.get("company_id")) return CommandResults( outputs_prefix="OctoxLabs.Company", outputs=convert_to_json( obj=company, keys=[ "id", "name", "domain", "is_active", ], ), ) def get_company_by_name(octox: OctoxLabs, args: dict[str, Any]) -> CommandResults: company = octox.get_company_by_name(company_name=args.get("company_name")) return CommandResults( outputs_prefix="OctoxLabs.Company", outputs=convert_to_json( obj=company, keys=[ "id", "name", "domain", "is_active", ], ), ) def get_domains(octox: OctoxLabs, args: dict[str, Any]) -> CommandResults: count, domains = octox.get_domains( page=args.get("page", 1), search=args.get("search", ""), size=args.get("size", 20), ) return CommandResults( outputs_prefix="OctoxLabs.Domains", outputs={ "count": count, "results": [ convert_to_json( d, keys=[ "id", "domain", "tenant_name", "tenant", ], ) for d in domains ], }, ) def get_domain_by_id(octox: OctoxLabs, args: dict[str, Any]) -> CommandResults: domain = octox.get_domain_by_id(domain_id=args.get("domain_id")) return CommandResults( outputs_prefix="OctoxLabs.Domain", outputs=convert_to_json( obj=domain, keys=[ "id", "domain", "tenant_name", "tenant", ], ), ) def get_domain_by_domain_name(octox: OctoxLabs, args: dict[str, Any]) -> CommandResults: domain = octox.get_domains_by_domain_name(domain_name=args.get("domain_name")) return CommandResults( outputs_prefix="OctoxLabs.Domain", outputs=convert_to_json( obj=domain, keys=[ "id", "domain", "tenant_name", "tenant", "is_primary", ], ), ) def get_users(octox: OctoxLabs, args: dict[str, Any]) -> CommandResults: count, users = octox.get_users( page=args.get("page", 1), search=args.get("search", ""), size=args.get("size", 20), ) return CommandResults( outputs_prefix="OctoxLabs.Users", outputs={ "count": count, "results": [ convert_to_json( u, keys=[ "id", "name", "email", "username", "first_name", "last_name", "is_active", "is_ldap", "groups", ], ) for u in users ], }, ) def get_user_by_id(octox: OctoxLabs, args: dict[str, Any]) -> CommandResults: user = octox.get_user_by_id(user_id=args.get("user_id")) return CommandResults( outputs_prefix="OctoxLabs.User", outputs=convert_to_json( obj=user, keys=[ "id", "name", "email", "username", "first_name", "last_name", "is_active", "is_ldap", "groups", ], ), ) def get_user_by_username(octox: OctoxLabs, args: dict[str, Any]) -> CommandResults: user = octox.get_user_by_username(username=args.get("username")) return CommandResults( outputs_prefix="OctoxLabs.User", outputs=convert_to_json( obj=user, keys=[ "id", "name", "email", "username", "first_name", "last_name", "is_active", "is_ldap", "groups", ], ), ) def get_groups(octox: OctoxLabs, args: dict[str, Any]) -> CommandResults: count, groups = octox.get_groups( page=args.get("page", 1), search=args.get("search", ""), size=args.get("size", 20), ) return CommandResults( outputs_prefix="OctoxLabs.Groups", outputs={ "count": count, "results": [ convert_to_json( g, keys=["id", "name", "users_count"], ) for g in groups ], }, ) def get_permissions(octox: OctoxLabs, args: dict[str, Any]) -> CommandResults: count, permissions = octox.get_permissions( page=args.get("page", 1), search=args.get("search", ""), size=args.get("size", 20), ) return CommandResults( outputs_prefix="OctoxLabs.Permissions", outputs={ "count": count, "results": [ convert_to_json( p, keys=["id", "name", "app"], ) for p in permissions ], }, ) def search_users_inventory(octox: OctoxLabs, args: dict[str, Any]) -> CommandResults: fields = args.get("fields", None) if isinstance(fields, str): fields = [f.strip() for f in fields.split(",")] count, users = octox.search_users( query=args.get("query", ""), fields=fields, page=args.get("page", 1), size=args.get("size", 50), discovery_id=args.get("discovery_id", None), ) return CommandResults( outputs_prefix="OctoxLabs.UsersInventory", outputs={ "count": count, "results": users, }, ) def search_applications(octox: OctoxLabs, args: dict[str, Any]) -> CommandResults: fields = args.get("fields", None) if isinstance(fields, str): fields = [f.strip() for f in fields.split(",")] count, applications = octox.search_applications( query=args.get("query", ""), fields=fields, page=args.get("page", 1), size=args.get("size", 50), discovery_id=args.get("discovery_id", None), ) return CommandResults( outputs_prefix="OctoxLabs.Applications", outputs={ "count": count, "results": applications, }, ) def search_avm(octox: OctoxLabs, args: dict[str, Any]) -> CommandResults: count, avm = octox.search_avm( query=args.get("query", ""), page=args.get("page", 1), size=args.get("size", 50), discovery_id=args.get("discovery_id", None), ) return CommandResults( outputs_prefix="OctoxLabs.AVM", outputs={ "count": count, "results": avm, }, ) def get_user_inventory_detail(octox: OctoxLabs, args: dict[str, Any]) -> CommandResults: user = octox.get_user_inventory_detail(username=args.get("username"), discovery_id=args.get("discovery_id", None)) return CommandResults(outputs_prefix="OctoxLabs.UserInv", outputs=user) def get_application_detail(octox: OctoxLabs, args: dict[str, Any]) -> CommandResults: application = octox.get_application_detail( application_id=args.get("application_id"), discovery_id=args.get("discovery_id", None), ) return CommandResults(outputs_prefix="OctoxLabs.Application", outputs=application) def search_scroll_devices(octox: OctoxLabs, args: dict[str, Any]) -> CommandResults: fields = args.get("fields", None) if isinstance(fields, str): fields = [f.strip() for f in fields.split(",")] count, scroll_id, devices = octox.search_scroll_devices( query=args.get("query", ""), fields=fields, scroll_id=args.get("scroll_id", None), size=args.get("size", 50), discovery_id=args.get("discovery_id", None), ) return CommandResults( outputs_prefix="OctoxLabs.ScrolledDevices", outputs={ "count": count, "scroll_id": scroll_id, "results": devices, }, ) def search_scroll_users(octox: OctoxLabs, args: dict[str, Any]) -> CommandResults: fields = args.get("fields", None) if isinstance(fields, str): fields = [f.strip() for f in fields.split(",")] count, scroll_id, users = octox.search_scroll_users( query=args.get("query", ""), fields=fields, scroll_id=args.get("scroll_id", None), size=args.get("size", 50), discovery_id=args.get("discovery_id", None), ) return CommandResults( outputs_prefix="OctoxLabs.ScrolledUsers", outputs={ "count": count, "scroll_id": scroll_id, "results": users, }, ) def search_scroll_applications(octox: OctoxLabs, args: dict[str, Any]) -> CommandResults: fields = args.get("fields", None) if isinstance(fields, str): fields = [f.strip() for f in fields.split(",")] count, scroll_id, applications = octox.search_scroll_applications( query=args.get("query", ""), fields=fields, scroll_id=args.get("scroll_id", None), size=args.get("size", 50), discovery_id=args.get("discovery_id", None), ) return CommandResults( outputs_prefix="OctoxLabs.ScrolledApplications", outputs={ "count": count, "scroll_id": scroll_id, "results": applications, }, ) def search_scroll_avm(octox: OctoxLabs, args: dict[str, Any]) -> CommandResults: count, scroll_id, avm = octox.search_scroll_avm( query=args.get("query", ""), scroll_id=args.get("scroll_id", None), size=args.get("size", 50), discovery_id=args.get("discovery_id", None), ) return CommandResults( outputs_prefix="OctoxLabs.ScrolledAVM", outputs={ "count": count, "scroll_id": scroll_id, "results": avm, }, ) """ MAIN FUNCTION """ def main() -> None: # pragma: no cover """main function, parses params and runs command functions :return: :rtype: """ ip = demisto.params().get("octox_ip") token = demisto.params().get("octox_token", {"password": ""}).get("password") https_proxy = demisto.params().get("https_proxy", None) no_verify = demisto.params().get("no_verify", True) demisto.debug(f"Command being called is {demisto.command()}") try: octox = OctoxLabs(ip=ip, token=token, https_proxy=https_proxy, no_verify=no_verify) return_results(run_command(octox=octox, command_name=demisto.command(), args=demisto.args())) # Log exceptions and return errors except Exception as e: return_error(f"Failed to execute {demisto.command()} command.\nError:\n{e!s} \nArgs:\n{demisto.args()}") """ ENTRY POINT """ if __name__ in ("__main__", "__builtin__", "builtins"): # pragma: no cover main()