Skip to content

Commit f7ba888

Browse files
[backend] WIP Update model: authorized members activation via entity(#4538)
1 parent 5b36af0 commit f7ba888

File tree

3 files changed

+34
-25
lines changed

3 files changed

+34
-25
lines changed

opencti-platform/opencti-graphql/src/modules/case/case-incident/case-incident-domain.ts

+9-7
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import type { AuthContext, AuthUser } from '../../../types/user';
2-
import { createEntity } from '../../../database/middleware';
2+
import { createEntity, patchAttribute } from '../../../database/middleware';
33
import type { EntityOptions } from '../../../database/middleware-loader';
44
import { internalLoadById, listEntitiesPaginated, storeLoadById } from '../../../database/middleware-loader';
55
import { BUS_TOPICS } from '../../../config/conf';
6-
import { ABSTRACT_STIX_DOMAIN_OBJECT, buildRefRelationKey } from '../../../schema/general';
6+
import { ABSTRACT_STIX_CORE_OBJECT, ABSTRACT_STIX_DOMAIN_OBJECT, buildRefRelationKey } from '../../../schema/general';
77
import { notify } from '../../../database/redis';
88
import { now } from '../../../utils/format';
99
import { userAddIndividual } from '../../../domain/user';
@@ -16,7 +16,9 @@ import type { CaseIncidentAddInput, MemberAccessInput } from '../../../generated
1616
import { isStixId } from '../../../schema/schemaUtils';
1717
import { RELATION_OBJECT } from '../../../schema/stixRefRelationship';
1818
import { FilterMode } from '../../../generated/graphql';
19-
import { editAuthorizedMembers } from '../../../utils/authorizedMembers';
19+
import { isValidMemberAccessRight } from '../../../utils/access';
20+
import { containsValidAdmin } from '../../../utils/authorizedMembers';
21+
import { FunctionalError } from '../../../config/errors';
2022

2123
export const findById: DomainFindById<BasicStoreEntityCaseIncident> = (context: AuthContext, user: AuthUser, caseIncidentId: string) => {
2224
return storeLoadById(context, user, caseIncidentId, ENTITY_TYPE_CONTAINER_CASE_INCIDENT);
@@ -61,7 +63,7 @@ export const caseIncidentContainsStixObjectOrStixRelationship = async (context:
6163
return caseIncidentFound.edges.length > 0;
6264
};
6365

64-
/* export const caseIncidentEditAuthorizedMembers = async (
66+
export const caseIncidentEditAuthorizedMembers = async (
6567
context: AuthContext,
6668
user: AuthUser,
6769
entityId: string,
@@ -90,14 +92,14 @@ export const caseIncidentContainsStixObjectOrStixRelationship = async (context:
9092
const patch = { authorized_members };
9193
const { element } = await patchAttribute(context, user, entityId, ENTITY_TYPE_CONTAINER_CASE_INCIDENT, patch);
9294
return notify(BUS_TOPICS[ABSTRACT_STIX_CORE_OBJECT].EDIT_TOPIC, element, user);
93-
}; */
95+
};
9496

95-
export const caseIncidentEditAuthorizedMembers = async (
97+
/* export const caseIncidentEditAuthorizedMembers = async (
9698
context: AuthContext,
9799
user: AuthUser,
98100
entityId: string,
99101
input: MemberAccessInput[] | undefined | null
100102
) => {
101103
const requiredCapabilities = ['KNOWLEDGE_KNUPDATE_KNMANAGEAUTHMEMBERS'];
102104
return editAuthorizedMembers(context, user, entityId, input, requiredCapabilities, ENTITY_TYPE_CONTAINER_CASE_INCIDENT);
103-
};
105+
}; */

opencti-platform/opencti-graphql/src/utils/authorizedMembers.ts

+2-4
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,8 @@ import { findById as findOrganization } from '../modules/organization/organizati
1919
import { RELATION_MEMBER_OF, RELATION_PARTICIPATE_TO } from '../schema/internalRelationship';
2020
import { FunctionalError } from '../config/errors';
2121
import { patchAttribute } from '../database/middleware';
22-
import { ENTITY_TYPE_CONTAINER_FEEDBACK } from '../modules/case/feedback/feedback-types';
2322
import { notify } from '../database/redis';
2423
import { BUS_TOPICS } from '../config/conf';
25-
import { ABSTRACT_STIX_CORE_OBJECT } from '../schema/general';
2624

2725
export const getAuthorizedMembers = async (
2826
context: AuthContext,
@@ -88,7 +86,7 @@ export const containsValidAdmin = async (
8886
return authorizedUsers.length > 0;
8987
};
9088

91-
export const editAuthorizedMembers = async (
89+
/* export const editAuthorizedMembers = async (
9290
context: AuthContext,
9391
user: AuthUser,
9492
entityId: string,
@@ -120,4 +118,4 @@ export const editAuthorizedMembers = async (
120118
const { element } = await patchAttribute(context, user, entityId, entityType, patch);
121119
// TODO FIX type error
122120
return notify(BUS_TOPICS[entityType].EDIT_TOPIC, element, user);
123-
};
121+
}; */

opencti-platform/opencti-graphql/tests/02-integration/02-resolvers/case-incident-response-test.ts

+23-14
Original file line numberDiff line numberDiff line change
@@ -136,18 +136,22 @@ describe('Case Incident Response resolver standard behavior', () => {
136136
});
137137

138138
describe('Case Incident Response standard behavior with authorized_members activation from entity', () => {
139-
let caseIncidentResponse: CaseIncident;
139+
let caseIncidentResponseAuthorizedMembersFromEntity: CaseIncident;
140140
it('should Case Incident Response created', async () => {
141141
// Create Case Incident Response
142-
const caseIncidentResponseQueryResult = await queryAsAdmin({
142+
const caseIncidentResponseCreateQueryResult = await queryAsAdmin({
143143
query: CREATE_QUERY,
144144
variables: {
145145
input: {
146146
name: 'Case Incident Response With Authorized Members'
147147
}
148148
}
149149
});
150-
caseIncidentResponse = caseIncidentResponseQueryResult?.data?.caseIncidentAdd;
150+
151+
expect(caseIncidentResponseCreateQueryResult).not.toBeNull();
152+
expect(caseIncidentResponseCreateQueryResult?.data?.caseIncidentAdd.authorized_members).not.toBeUndefined();
153+
expect(caseIncidentResponseCreateQueryResult?.data?.caseIncidentAdd.authorized_members).toEqual([]); // authorized members not activated
154+
caseIncidentResponseAuthorizedMembersFromEntity = caseIncidentResponseCreateQueryResult?.data?.caseIncidentAdd;
151155

152156
// Activate Authorized members
153157
const EDIT_AUTHORIZED_MEMBERS_QUERY = gql`
@@ -170,7 +174,7 @@ describe('Case Incident Response standard behavior with authorized_members activ
170174
await queryAsAdmin({
171175
query: EDIT_AUTHORIZED_MEMBERS_QUERY,
172176
variables: {
173-
id: caseIncidentResponse.id,
177+
id: caseIncidentResponseAuthorizedMembersFromEntity.id,
174178
input: [
175179
{
176180
id: ADMIN_USER.id,
@@ -179,9 +183,14 @@ describe('Case Incident Response standard behavior with authorized_members activ
179183
]
180184
}
181185
});
182-
expect(caseIncidentResponseQueryResult).not.toBeNull();
183-
expect(caseIncidentResponseQueryResult?.data?.caseIncidentAdd.authorized_members).not.toBeUndefined();
184-
expect(caseIncidentResponseQueryResult?.data?.caseIncidentAdd.authorized_members).toEqual([
186+
// Verify if authorized members have been edited
187+
const caseIncidentResponseUpdatedQueryResult = await queryAsAdmin({
188+
query: READ_QUERY,
189+
variables: { id: caseIncidentResponseAuthorizedMembersFromEntity.id }
190+
});
191+
expect(caseIncidentResponseUpdatedQueryResult).not.toBeNull();
192+
expect(caseIncidentResponseUpdatedQueryResult?.data?.caseIncident.authorized_members).not.toBeUndefined();
193+
expect(caseIncidentResponseUpdatedQueryResult?.data?.caseIncident.authorized_members).toEqual([
185194
{
186195
id: ADMIN_USER.id,
187196
access_right: 'admin'
@@ -192,7 +201,7 @@ describe('Case Incident Response standard behavior with authorized_members activ
192201
// Get current User access right
193202
const currentUserAccessRightQueryResult = await queryAsAdmin({
194203
query: READ_QUERY,
195-
variables: { id: caseIncidentResponse.id },
204+
variables: { id: caseIncidentResponseAuthorizedMembersFromEntity.id },
196205
});
197206

198207
expect(currentUserAccessRightQueryResult).not.toBeNull();
@@ -202,17 +211,17 @@ describe('Case Incident Response standard behavior with authorized_members activ
202211
// Delete the case
203212
await queryAsAdmin({
204213
query: DELETE_QUERY,
205-
variables: { id: caseIncidentResponse.id },
214+
variables: { id: caseIncidentResponseAuthorizedMembersFromEntity.id },
206215
});
207216
// Verify is no longer found
208-
const queryResult = await queryAsAdmin({ query: READ_QUERY, variables: { id: caseIncidentResponse.id } });
217+
const queryResult = await queryAsAdmin({ query: READ_QUERY, variables: { id: caseIncidentResponseAuthorizedMembersFromEntity.id } });
209218
expect(queryResult).not.toBeNull();
210219
expect(queryResult?.data?.caseIncident).toBeNull();
211220
});
212221
});
213222

214223
describe('Case Incident Response standard behavior with authorized_members activated via settings', () => {
215-
let caseIncidentResponseAuthorizedMembers: CaseIncident;
224+
let caseIncidentResponseAuthorizedMembersFromSettings: CaseIncident;
216225
it('should Case Incident Response created', async () => {
217226
// Activate authorized members for IR
218227
const ENTITY_SETTINGS_READ_QUERY_BY_TARGET_TYPE = gql`
@@ -272,7 +281,7 @@ describe('Case Incident Response standard behavior with authorized_members activ
272281
access_right: 'admin'
273282
}
274283
]);
275-
caseIncidentResponseAuthorizedMembers = caseIncidentResponseAuthorizedMembersData?.data?.caseIncidentAdd;
284+
caseIncidentResponseAuthorizedMembersFromSettings = caseIncidentResponseAuthorizedMembersData?.data?.caseIncidentAdd;
276285
// Clean
277286
await queryAsAdmin({
278287
query: ENTITY_SETTINGS_UPDATE_QUERY,
@@ -283,10 +292,10 @@ describe('Case Incident Response standard behavior with authorized_members activ
283292
// Delete the case
284293
await queryAsAdmin({
285294
query: DELETE_QUERY,
286-
variables: { id: caseIncidentResponseAuthorizedMembers.id },
295+
variables: { id: caseIncidentResponseAuthorizedMembersFromSettings.id },
287296
});
288297
// Verify is no longer found
289-
const queryResult = await queryAsAdmin({ query: READ_QUERY, variables: { id: caseIncidentResponseAuthorizedMembers.id } });
298+
const queryResult = await queryAsAdmin({ query: READ_QUERY, variables: { id: caseIncidentResponseAuthorizedMembersFromSettings.id } });
290299
expect(queryResult).not.toBeNull();
291300
expect(queryResult?.data?.caseIncident).toBeNull();
292301
});

0 commit comments

Comments
 (0)