Skip to content

[client] Add helpers for background tasks in worker execution #842

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 11 commits into
base: release/current
Choose a base branch
from
2 changes: 1 addition & 1 deletion pycti/__init__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
__version__ = "6.5.2"
__version__ = "6.5.3"

from .api.opencti_api_client import OpenCTIApiClient
from .api.opencti_api_connector import OpenCTIApiConnector
Expand Down
8 changes: 8 additions & 0 deletions pycti/api/opencti_api_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,12 @@

from pycti import __version__
from pycti.api.opencti_api_connector import OpenCTIApiConnector
from pycti.api.opencti_api_draft import OpenCTIApiDraft
from pycti.api.opencti_api_playbook import OpenCTIApiPlaybook
from pycti.api.opencti_api_public_dashboard import OpenCTIApiPublicDashboard
from pycti.api.opencti_api_trash import OpenCTIApiTrash
from pycti.api.opencti_api_work import OpenCTIApiWork
from pycti.api.opencti_api_workspace import OpenCTIApiWorkspace
from pycti.entities.opencti_attack_pattern import AttackPattern
from pycti.entities.opencti_campaign import Campaign
from pycti.entities.opencti_capability import Capability
Expand Down Expand Up @@ -151,6 +155,10 @@ def __init__(

# Define the dependencies
self.work = OpenCTIApiWork(self)
self.trash = OpenCTIApiTrash(self)
self.draft = OpenCTIApiDraft(self)
self.workspace = OpenCTIApiWorkspace(self)
self.public_dashboard = OpenCTIApiPublicDashboard(self)
self.playbook = OpenCTIApiPlaybook(self)
self.connector = OpenCTIApiConnector(self)
self.stix2 = OpenCTIStix2(self)
Expand Down
19 changes: 19 additions & 0 deletions pycti/api/opencti_api_draft.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
class OpenCTIApiDraft:
"""OpenCTIApiDraft"""

def __init__(self, api):
self.api = api

def delete(self, **kwargs):
id = kwargs.get("id", None)
query = """
mutation DraftWorkspaceDelete($id: ID!) {
draftWorkspaceDelete(id: $id)
}
"""
self.api.query(
query,
{
"id": id,
},
)
14 changes: 14 additions & 0 deletions pycti/api/opencti_api_playbook.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,3 +32,17 @@ def playbook_step_execution(self, playbook: dict, bundle: str):
"bundle": bundle,
},
)

def delete(self, **kwargs):
id = kwargs.get("id", None)
query = """
mutation PlaybookDelete($id: ID!) {
playbookDelete(id: $id)
}
"""
self.api.query(
query,
{
"id": id,
},
)
19 changes: 19 additions & 0 deletions pycti/api/opencti_api_public_dashboard.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
class OpenCTIApiPublicDashboard:
"""OpenCTIApiPublicDashboard"""

def __init__(self, api):
self.api = api

def delete(self, **kwargs):
id = kwargs.get("id", None)
query = """
mutation PublicDashboardDelete($id: ID!) {
publicDashboardDelete(id: $id)
}
"""
self.api.query(
query,
{
"id": id,
},
)
41 changes: 41 additions & 0 deletions pycti/api/opencti_api_trash.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
class OpenCTIApiTrash:
"""OpenCTIApiTrash"""

def __init__(self, api):
self.api = api

def restore(self, operation_id: str):
query = """
mutation DeleteOperationRestore($id: ID!) {
deleteOperationRestore(id: $id)
}
"""
self.api.query(
query,
{
"id": operation_id,
},
)

def delete(self, **kwargs):
"""Delete a role given its ID

:param id: ID for the role on the platform.
:type id: str
"""
id = kwargs.get("id", None)
if id is None:
self.api.admin_logger.error("[opencti_role] Missing parameter: id")
return None

query = """
mutation DeleteOperationConfirm($id: ID!) {
deleteOperationConfirm(id: $id) {
}
"""
self.api.query(
query,
{
"id": id,
},
)
14 changes: 14 additions & 0 deletions pycti/api/opencti_api_work.py
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,20 @@ def delete_work(self, work_id: str):
)
return work["data"]

def delete(self, **kwargs):
id = kwargs.get("id", None)
query = """
mutation ConnectorWorksMutation($workId: ID!) {
workEdit(id: $workId) {
delete
}
}"""
work = self.api.query(
query,
{"workId": id},
)
return work["data"]

def wait_for_work_to_finish(self, work_id: str):
status = ""
cnt = 0
Expand Down
19 changes: 19 additions & 0 deletions pycti/api/opencti_api_workspace.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
class OpenCTIApiWorkspace:
"""OpenCTIApiWorkspace"""

def __init__(self, api):
self.api = api

def delete(self, **kwargs):
id = kwargs.get("id", None)
query = """
mutation WorkspaceDelete($id: ID!) {
workspaceDelete(id: $id)
}
"""
self.api.query(
query,
{
"id": id,
},
)
6 changes: 5 additions & 1 deletion pycti/entities/opencti_group.py
Original file line number Diff line number Diff line change
Expand Up @@ -315,12 +315,16 @@ def create(self, **kwargs) -> Optional[Dict]:
)
return self.opencti.process_multiple_fields(result["data"]["groupAdd"])

def delete(self, id: str):
def delete(self, **kwargs):
"""Delete a given group from OpenCTI

:param id: ID of the group to delete.
:type id: str
"""
id = kwargs.get("id", None)
if id is None:
self.opencti.admin_logger.error("[opencti_user] Missing parameter: id")
return None
self.opencti.admin_logger.info("Deleting group", {"id": id})
query = """
mutation GroupDelete($id: ID!) {
Expand Down
7 changes: 4 additions & 3 deletions pycti/entities/opencti_stix.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,16 +11,17 @@ def __init__(self, opencti):

def delete(self, **kwargs):
id = kwargs.get("id", None)
force_delete = kwargs.get("force_delete", True)
if id is not None:
self.opencti.app_logger.info("Deleting Stix element", {"id": id})
query = """
mutation StixEdit($id: ID!) {
mutation StixEdit($id: ID!, $forceDelete: Boolean) {
stixEdit(id: $id) {
delete
delete(forceDelete: $forceDelete)
}
}
"""
self.opencti.query(query, {"id": id})
self.opencti.query(query, {"id": id, "forceDelete": force_delete})
else:
self.opencti.app_logger.error("[opencti_stix] Missing parameters: id")
return None
Expand Down
Loading