Skip to content
This repository was archived by the owner on Dec 5, 2025. It is now read-only.

Commit db19858

Browse files
committed
Merge branch 'master' into release/current
2 parents 187b584 + de2acac commit db19858

File tree

5 files changed

+102
-12
lines changed

5 files changed

+102
-12
lines changed
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
name: Check signed commits in PR
2+
on: [pull_request,pull_request_target]
3+
jobs:
4+
check-signed-commits:
5+
name: Check signed commits in PR
6+
runs-on: ubuntu-latest
7+
permissions:
8+
contents: read
9+
pull-requests: write
10+
steps:
11+
- name: Information about how to sign commits see https://docs.github.com/en/authentication/managing-commit-signature-verification/signing-commits
12+
# "with comment" below does not work for forks.
13+
run: |
14+
echo "If you need to sign commits, Please see https://docs.github.com/en/authentication/managing-commit-signature-verification/signing-commits"
15+
- name: Check signed commits in PR on fail see above information.
16+
uses: 1Password/check-signed-commits-action@v1
17+
with:
18+
comment: |
19+
Thank you for your contribution, but we need you to sign your commits. Please see https://docs.github.com/en/authentication/managing-commit-signature-verification/signing-commits

pycti/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# -*- coding: utf-8 -*-
2-
__version__ = "6.7.6"
2+
__version__ = "6.7.7"
33

44
from .api.opencti_api_client import OpenCTIApiClient
55
from .api.opencti_api_connector import OpenCTIApiConnector

pycti/utils/opencti_stix2.py

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2511,6 +2511,10 @@ def apply_patch(self, item):
25112511
self.opencti.notification.update_field(
25122512
id=item_id, input=field_patch_without_files
25132513
)
2514+
elif item["type"] == "user":
2515+
self.opencti.user.update_field(
2516+
id=item_id, input=field_patch_without_files
2517+
)
25142518
else:
25152519
self.opencti.stix_domain_object.update_field(
25162520
id=item_id, input=field_patch_without_files
@@ -2583,6 +2587,65 @@ def organization_unshare(self, item):
25832587
item["id"], organization_ids, sharing_direct_container
25842588
)
25852589

2590+
def element_add_organizations(self, item):
2591+
organization_ids = self.opencti.get_attribute_in_extension(
2592+
"organization_ids", item
2593+
)
2594+
if organization_ids is None:
2595+
organization_ids = item["organization_ids"]
2596+
if item["type"] == "user":
2597+
for organization_id in organization_ids:
2598+
self.opencti.user.add_organization(
2599+
id=item["id"], organization_id=organization_id
2600+
)
2601+
else:
2602+
raise ValueError(
2603+
"Add organizations operation not compatible with type",
2604+
{"type": item["type"]},
2605+
)
2606+
2607+
def element_remove_organizations(self, item):
2608+
organization_ids = self.opencti.get_attribute_in_extension(
2609+
"organization_ids", item
2610+
)
2611+
if organization_ids is None:
2612+
organization_ids = item["organization_ids"]
2613+
if item["type"] == "user":
2614+
for organization_id in organization_ids:
2615+
self.opencti.user.delete_organization(
2616+
id=item["id"], organization_id=organization_id
2617+
)
2618+
else:
2619+
raise ValueError(
2620+
"Remove organizations operation not compatible with type",
2621+
{"type": item["type"]},
2622+
)
2623+
2624+
def element_add_groups(self, item):
2625+
group_ids = self.opencti.get_attribute_in_extension("group_ids", item)
2626+
if group_ids is None:
2627+
group_ids = item["group_ids"]
2628+
if item["type"] == "user":
2629+
for group_id in group_ids:
2630+
self.opencti.user.add_membership(id=item["id"], group_id=group_id)
2631+
else:
2632+
raise ValueError(
2633+
"Add groups operation not compatible with type", {"type": item["type"]}
2634+
)
2635+
2636+
def element_remove_groups(self, item):
2637+
group_ids = self.opencti.get_attribute_in_extension("group_ids", item)
2638+
if group_ids is None:
2639+
group_ids = item["group_ids"]
2640+
if item["type"] == "user":
2641+
for group_id in group_ids:
2642+
self.opencti.user.delete_membership(id=item["id"], group_id=group_id)
2643+
else:
2644+
raise ValueError(
2645+
"Remove groups operation not compatible with type",
2646+
{"type": item["type"]},
2647+
)
2648+
25862649
def element_operation_delete(self, item, operation):
25872650
# If data is stix, just use the generic stix function for deletion
25882651
force_delete = operation == "delete_force"
@@ -2665,6 +2728,14 @@ def apply_opencti_operation(self, item, operation):
26652728
self.opencti.stix_core_object.ask_enrichments(
26662729
element_id=item["id"], connector_ids=connector_ids
26672730
)
2731+
elif operation == "add_organizations":
2732+
self.element_add_organizations(item)
2733+
elif operation == "remove_organizations":
2734+
self.element_remove_organizations(item)
2735+
elif operation == "add_groups":
2736+
self.element_add_groups(item)
2737+
elif operation == "remove_groups":
2738+
self.element_remove_groups(item)
26682739
else:
26692740
raise ValueError(
26702741
"Not supported opencti_operation",

requirements.txt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,13 @@ PyYAML~=6.0
88
pydantic~=2.11.3
99
requests~=2.32.3
1010
setuptools~=80.9.0
11-
cachetools~=5.5.0
12-
prometheus-client~=0.21.1
13-
opentelemetry-api~=1.32.0
14-
opentelemetry-sdk~=1.32.0
11+
cachetools~=6.1.0
12+
prometheus-client~=0.22.1
13+
opentelemetry-api~=1.35.0
14+
opentelemetry-sdk~=1.35.0
1515
deprecation~=2.1.0
1616
fastapi>=0.116.1,<0.117.0
17-
uvicorn[standard]>=0.33.0,<0.35.0
17+
uvicorn[standard]>=0.35.0,<0.36.0
1818
# OpenCTI
1919
filigran-sseclient>=1.0.2
2020
stix2~=3.0.1

setup.cfg

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -44,13 +44,13 @@ install_requires =
4444
PyYAML~=6.0
4545
requests~=2.32.3
4646
setuptools~=80.9.0
47-
cachetools~=5.5.0
48-
prometheus-client~=0.21.1
49-
opentelemetry-api~=1.32.0
50-
opentelemetry-sdk~=1.32.0
47+
cachetools~=6.1.0
48+
prometheus-client~=0.22.1
49+
opentelemetry-api~=1.35.0
50+
opentelemetry-sdk~=1.35.0
5151
deprecation~=2.1.0
5252
fastapi>=0.116.1,<0.117.0
53-
uvicorn[standard]>=0.33.0,<0.35.0
53+
uvicorn[standard]>=0.35.0,<0.36.0
5454
# OpenCTI
5555
filigran-sseclient>=1.0.2
5656
stix2~=3.0.1
@@ -62,7 +62,7 @@ dev =
6262
isort~=6.0.0
6363
types-pytz~=2025.2.0.20250326
6464
pre-commit~=4.2.0
65-
pytest-cases~=3.8.0
65+
pytest-cases~=3.9.1
6666
pytest-cov~=6.2.1
6767
pytest_randomly~=3.16.0
6868
pytest~=8.4.1

0 commit comments

Comments
 (0)