1
+ import { fromJS , List , Map } from 'immutable' ;
1
2
import { schema } from 'normalizr' ;
2
- import * as R from 'ramda' ;
3
3
4
4
import locale from '../utils/BrowserLanguage.js' ;
5
5
@@ -261,40 +261,18 @@ user.define({ user_organization: organization });
261
261
const maps = ( key , state ) => state . referential . getIn ( [ 'entities' , key ] ) ;
262
262
const entities = ( key , state ) => maps ( key , state ) . valueSeq ( ) ;
263
263
const entity = ( id , key , state ) => state . referential . getIn ( [ 'entities' , key , id ] ) ;
264
- const me = ( state ) => {
265
- return state . referential . getIn ( [ 'entities' , 'users' , state . app . getIn ( [ 'logged' , 'user' ] ) ] ) ;
266
- } ;
267
-
268
- const getInjectWithParsedInjectorContractContent = ( i ) => {
269
- if ( ! i ) {
270
- return i ;
271
- }
272
- return ( {
273
- ...i ,
274
- inject_injector_contract : {
275
- ...i . inject_injector_contract ,
276
- injector_contract_content_parsed : i . inject_injector_contract ?. injector_contract_content
277
- ? JSON . parse ( i . inject_injector_contract . injector_contract_content )
278
- : null ,
279
- } ,
280
- } ) ;
281
- } ;
282
- const getInjectsWithParsedInjectorContractContent = ( injects ) => {
283
- if ( R . isEmpty ( injects ) ) {
284
- return injects ;
285
- }
286
- return injects . map ( getInjectWithParsedInjectorContractContent ) ;
287
- } ;
264
+ const me = state => state . referential . getIn ( [ 'entities' , 'users' , state . app . getIn ( [ 'logged' , 'user' ] ) ] ) ;
288
265
289
266
export const storeHelper = state => ( {
290
267
logged : ( ) => state . app . get ( 'logged' ) ,
291
268
getMe : ( ) => me ( state ) ,
269
+ getMeAdmin : ( ) => me ( state ) ?. get ( 'user_admin' ) ?? false ,
292
270
getMeTokens : ( ) => entities ( 'tokens' , state ) . filter (
293
- t => t . token_user === me ( state ) ?. user_id ,
271
+ t => t . get ( ' token_user' ) === me ( state ) ?. get ( ' user_id' ) ,
294
272
) ,
295
273
getUserLang : ( ) => {
296
274
const rawPlatformLang = state . referential . getIn ( [ 'entities' , 'platformParameters' , 'parameters' , 'platform_lang' ] ) ?? 'auto' ;
297
- const rawUserLang = me ( state ) ?. user_lang ?? 'auto' ;
275
+ const rawUserLang = me ( state ) ?. get ( ' user_lang' ) ?? 'auto' ;
298
276
const platformLang = rawPlatformLang !== 'auto' ? rawPlatformLang : locale ;
299
277
const userLang = rawUserLang !== 'auto' ? rawUserLang : platformLang ;
300
278
return userLang ;
@@ -304,37 +282,38 @@ export const storeHelper = state => ({
304
282
getExercises : ( ) => entities ( 'exercises' , state ) ,
305
283
getExercisesMap : ( ) => maps ( 'exercises' , state ) ,
306
284
getExercise : id => entity ( id , 'exercises' , state ) ,
307
- getExerciseComchecks : id => entities ( 'comchecks' , state ) . filter ( i => i . comcheck_exercise === id ) ,
308
- getExerciseTeams : id => entities ( 'teams' , state ) . filter ( i => i . team_exercises ?. includes ( id ) ) ,
309
- getExerciseVariables : id => entities ( 'variables' , state ) . filter ( i => i . variable_exercise === id ) ,
310
- getExerciseArticles : id => entities ( 'articles' , state ) . filter ( i => i . article_exercise === id ) ,
311
- getExerciseInjects : id => getInjectsWithParsedInjectorContractContent ( entities ( 'injects' , state ) . filter ( i => i . inject_exercise === id ) ) ,
285
+ getExerciseComchecks : id => entities ( 'comchecks' , state ) . filter ( i => i . get ( ' comcheck_exercise' ) === id ) ,
286
+ getExerciseTeams : id => entities ( 'teams' , state ) . filter ( i => i . get ( ' team_exercises' ) ?. includes ( id ) ) ,
287
+ getExerciseVariables : id => entities ( 'variables' , state ) . filter ( i => i . get ( ' variable_exercise' ) === id ) ,
288
+ getExerciseArticles : id => entities ( 'articles' , state ) . filter ( i => i . get ( ' article_exercise' ) === id ) ,
289
+ getExerciseInjects : id => entities ( 'injects' , state ) . filter ( i => i . get ( ' inject_exercise' ) === id ) ,
312
290
getExerciseCommunications : id => entities ( 'communications' , state ) . filter (
313
- i => i . communication_exercise === id ,
291
+ i => i . get ( ' communication_exercise' ) === id ,
314
292
) ,
315
- getExerciseObjectives : id => entities ( 'objectives' , state ) . filter ( o => o . objective_exercise === id ) ,
316
- getExerciseLogs : id => entities ( 'logs' , state ) . filter ( l => l . log_exercise === id ) ,
293
+ getExerciseObjectives : id => entities ( 'objectives' , state ) . filter ( o => o . get ( ' objective_exercise' ) === id ) ,
294
+ getExerciseLogs : id => entities ( 'logs' , state ) . filter ( l => l . get ( ' log_exercise' ) === id ) ,
317
295
getExerciseLessonsCategories : id => entities ( 'lessonscategorys' , state ) . filter (
318
- l => l . lessons_category_exercise === id ,
296
+ l => l . get ( ' lessons_category_exercise' ) === id ,
319
297
) ,
320
298
getExerciseLessonsQuestions : id => entities ( 'lessonsquestions' , state ) . filter (
321
- l => l . lessons_question_exercise === id ,
299
+ l => l . get ( ' lessons_question_exercise' ) === id ,
322
300
) ,
323
301
getExerciseLessonsAnswers : exerciseId => entities ( 'lessonsanswers' , state ) . filter (
324
- l => l . lessons_answer_exercise === exerciseId ,
302
+ l => l . get ( ' lessons_answer_exercise' ) === exerciseId ,
325
303
) ,
326
304
getExerciseUserLessonsAnswers : ( exerciseId , userId ) => entities ( 'lessonsanswers' , state ) . filter (
327
- l => l . lessons_answer_exercise === exerciseId
328
- && l . lessons_answer_user === userId ,
305
+ l => l . get ( ' lessons_answer_exercise' ) === exerciseId
306
+ && l . get ( ' lessons_answer_user' ) === userId ,
329
307
) ,
330
- getExerciseReports : exerciseId => entities ( 'reports' , state ) . filter ( l => l . report_exercise === exerciseId ) ,
308
+ isExercise : id => ! maps ( 'exercises' , state ) ?. get ( id ) ?. isEmpty ( ) ,
309
+ getExerciseReports : exerciseId => entities ( 'reports' , state ) . filter ( l => l . get ( 'report_exercise' ) === exerciseId ) ,
331
310
// report
332
311
getReport : id => entity ( id , 'reports' , state ) ,
333
312
// comcheck
334
313
getComcheck : id => entity ( id , 'comchecks' , state ) ,
335
314
getComcheckStatus : id => entity ( id , 'comcheckstatuses' , state ) ,
336
315
getComcheckStatuses : id => entities ( 'comcheckstatuses' , state ) . filter (
337
- i => i . comcheckstatus_comcheck === id ,
316
+ i => i . get ( ' comcheckstatus_comcheck' ) === id ,
338
317
) ,
339
318
getChannelReader : id => entity ( id , 'channelreaders' , state ) ,
340
319
getChallengesReader : id => entity ( id , 'challengesreaders' , state ) ,
@@ -346,52 +325,46 @@ export const storeHelper = state => ({
346
325
getOrganizationsMap : ( ) => maps ( 'organizations' , state ) ,
347
326
// objectives
348
327
getObjective : id => entity ( id , 'objectives' , state ) ,
349
- getObjectiveEvaluations : id => entities ( 'evaluations' , state ) . filter ( e => e . evaluation_objective === id ) ,
328
+ getObjectiveEvaluations : id => entities ( 'evaluations' , state ) . filter ( e => e . get ( ' evaluation_objective' ) === id ) ,
350
329
// tags
351
330
getTag : id => entity ( id , 'tags' , state ) ,
352
331
getTags : ( ) => entities ( 'tags' , state ) ,
353
332
getTagsMap : ( ) => maps ( 'tags' , state ) ,
354
333
// injects
355
- getInject : id => getInjectWithParsedInjectorContractContent ( entity ( id , 'injects' , state ) ) ,
334
+ getInject : id => entity ( id , 'injects' , state ) ,
356
335
getAtomicTesting : id => entity ( id , 'atomics' , state ) ,
357
336
getAtomicTestingDetail : id => entity ( id , 'atomicdetails' , state ) ,
358
337
getAtomicTestings : ( ) => entities ( 'atomics' , state ) ,
359
- getTargetResults : ( id , injectId ) => entities ( 'targetresults' , state ) . filter ( r => ( r . target_id === id ) && ( r . target_inject_id === injectId ) ) ,
360
- getInjectsMap : ( ) => getInjectsWithParsedInjectorContractContent ( entities ( 'injects' , state ) ) . reduce ( ( map , i ) => {
361
- map [ i . inject_id ] = i ;
362
- return map ;
363
- } , { } ) ,
364
- getNextInjects : ( ) => {
365
- const sortFn = ( a , b ) => new Date ( a . inject_date ) . getTime ( ) - new Date ( b . inject_date ) . getTime ( ) ;
366
- const injects = entities ( 'injects' , state ) . filter (
367
- i => i . inject_date !== null && i . inject_status === null ,
368
- ) ;
369
- return R . take ( 6 , R . sort ( sortFn , injects ) ) ;
370
- } ,
338
+ getTargetResults : ( id , injectId ) => entities ( 'targetresults' , state ) . filter ( r => ( r . get ( 'target_id' ) === id ) && ( r . get ( 'target_inject_id' ) === injectId ) ) ,
339
+ getInjectsMap : ( ) => maps ( 'injects' , state ) ,
371
340
getInjectCommunications : id => entities ( 'communications' , state ) . filter (
372
- i => i . communication_inject === id ,
341
+ i => i . get ( ' communication_inject' ) === id ,
373
342
) ,
374
343
// injectexpectation
375
344
getInjectExpectations : ( ) => entities ( 'injectexpectations' , state ) ,
376
345
getExerciseInjectExpectations : id => entities ( 'injectexpectations' , state ) . filter (
377
- i => i . inject_expectation_exercise === id ,
346
+ i => i . get ( ' inject_expectation_exercise' ) === id ,
378
347
) ,
379
348
getInjectExpectationsMap : ( ) => maps ( 'injectexpectations' , state ) ,
380
349
// documents
381
350
getDocuments : ( ) => entities ( 'documents' , state ) ,
382
351
getDocumentsMap : ( ) => maps ( 'documents' , state ) ,
383
352
// teams
384
353
getTeam : id => entity ( id , 'teams' , state ) ,
385
- getTeamUsers : id => entities ( 'users' , state ) . filter ( u => ( entity ( id , 'teams' , state ) || { } ) . team_users ?. includes (
386
- u . user_id ,
387
- ) ) ,
388
- getTeamExerciseInjects : id => entities ( 'injects' , state ) . filter ( i => ( entity ( id , 'teams' , state ) || { } ) . team_exercise_injects ?. includes (
389
- i . inject_id ,
390
- ) ) ,
354
+ getTeamUsers : ( id ) => {
355
+ const team = entity ( id , 'teams' , state ) ;
356
+ if ( ! team ) return List ( [ ] ) ;
357
+ return team . get ( 'team_users' ) . map ( tu => entity ( tu , 'users' , state ) ) ;
358
+ } ,
359
+ getTeamExerciseInjects : ( id ) => {
360
+ const team = entity ( id , 'teams' , state ) ;
361
+ if ( ! team ) return List ( [ ] ) ;
362
+ return team . get ( 'team_exercise_injects' ) . map ( te => entity ( te , 'injects' , state ) ) ;
363
+ } ,
391
364
getTeams : ( ) => entities ( 'teams' , state ) ,
392
365
getTeamsMap : ( ) => maps ( 'teams' , state ) ,
393
366
getPlatformSettings : ( ) => {
394
- return state . referential . getIn ( [ 'entities' , 'platformParameters' , 'parameters' ] ) || { } ;
367
+ return state . referential . getIn ( [ 'entities' , 'platformParameters' , 'parameters' ] ) || Map ( { } ) ;
395
368
} ,
396
369
getPlatformName : ( ) => {
397
370
return state . referential . getIn ( [ 'entities' , 'platformParameters' , 'parameters' , 'platform_name' ] ) || 'OpenBAS - Breach and Attack Simulation Platform' ;
@@ -415,13 +388,10 @@ export const storeHelper = state => ({
415
388
// injector contracts
416
389
getInjectorContract : ( id ) => {
417
390
const i = entity ( id , 'injector_contracts' , state ) ;
418
- if ( ! i ) {
391
+ if ( i . isEmpty ( ) ) {
419
392
return i ;
420
393
}
421
- return ( {
422
- ...i ,
423
- ...JSON . parse ( i . injector_contract_content ) ,
424
- } ) ;
394
+ return i . merge ( fromJS ( JSON . parse ( i . get ( 'injector_contract_content' ) ) ) ) ;
425
395
} ,
426
396
getInjectorContracts : ( ) => entities ( 'injector_contracts' , state ) ,
427
397
// collectors
@@ -446,19 +416,19 @@ export const storeHelper = state => ({
446
416
getArticlesMap : ( ) => maps ( 'articles' , state ) ,
447
417
// challenges
448
418
getChallenges : ( ) => entities ( 'challenges' , state ) ,
449
- getExerciseChallenges : id => entities ( 'challenges' , state ) . filter ( c => c . challenge_exercises . includes ( id ) ) ,
419
+ getExerciseChallenges : id => entities ( 'challenges' , state ) . filter ( c => c . get ( ' challenge_exercises' ) . includes ( id ) ) ,
450
420
getChallengesMap : ( ) => maps ( 'challenges' , state ) ,
451
421
// lessons templates
452
422
getLessonsTemplate : id => entity ( id , 'lessonstemplates' , state ) ,
453
423
getLessonsTemplates : ( ) => entities ( 'lessonstemplates' , state ) ,
454
424
getLessonsTemplatesMap : ( ) => maps ( 'lessonstemplates' , state ) ,
455
425
getLessonsTemplateCategories : id => entities ( 'lessonstemplatecategorys' , state ) . filter (
456
- c => c . lessons_template_category_template === id ,
426
+ c => c . get ( ' lessons_template_category_template' ) === id ,
457
427
) ,
458
428
getLessonsTemplateQuestions : ( ) => entities ( 'lessonstemplatequestions' , state ) ,
459
429
getLessonsTemplateQuestionsMap : ( ) => maps ( 'lessonstemplatequestions' , state ) ,
460
430
getLessonsTemplateCategoryQuestions : id => entities ( 'lessonstemplatequestions' , state ) . filter (
461
- c => c . lessons_template_question_category === id ,
431
+ c => c . get ( ' lessons_template_question_category' ) === id ,
462
432
) ,
463
433
// assets
464
434
getEndpoint : id => entity ( id , 'endpoints' , state ) ,
@@ -476,19 +446,21 @@ export const storeHelper = state => ({
476
446
getScenarios : ( ) => entities ( 'scenarios' , state ) ,
477
447
getScenariosMap : ( ) => maps ( 'scenarios' , state ) ,
478
448
getScenario : id => entity ( id , 'scenarios' , state ) ,
479
- getScenarioTeams : id => entities ( 'teams' , state ) . filter ( i => i . team_scenarios . includes ( id ) ) ,
480
- getScenarioVariables : id => entities ( 'variables' , state ) . filter ( i => i . variable_scenario === id ) ,
481
- getScenarioArticles : id => entities ( 'articles' , state ) . filter ( i => i . article_scenario === id ) ,
482
- getScenarioChallenges : id => entities ( 'challenges' , state ) . filter ( c => c . challenge_scenarios . includes ( id ) ) ,
483
- getScenarioInjects : id => getInjectsWithParsedInjectorContractContent ( entities ( 'injects' , state ) . filter ( i => i . inject_scenario === id ) ) ,
484
- getTeamScenarioInjects : id => entities ( 'injects' , state ) . filter ( i => ( entity ( id , 'teams' , state ) || { } ) . team_scenario_injects ?. includes (
485
- i . inject_id ,
486
- ) ) ,
487
- getScenarioObjectives : id => entities ( 'objectives' , state ) . filter ( o => o . objective_scenario === id ) ,
449
+ getScenarioTeams : id => entities ( 'teams' , state ) . filter ( i => i . get ( 'team_scenarios' ) . includes ( id ) ) ,
450
+ getScenarioVariables : id => entities ( 'variables' , state ) . filter ( i => i . get ( 'variable_scenario' ) === id ) ,
451
+ getScenarioArticles : id => entities ( 'articles' , state ) . filter ( i => i . get ( 'article_scenario' ) === id ) ,
452
+ getScenarioChallenges : id => entities ( 'challenges' , state ) . filter ( c => c . get ( 'challenge_scenarios' ) . includes ( id ) ) ,
453
+ getScenarioInjects : id => entities ( 'injects' , state ) . filter ( i => i . get ( 'inject_scenario' ) === id ) ,
454
+ getTeamScenarioInjects : ( id ) => {
455
+ const team = entity ( id , 'teams' , state ) ;
456
+ if ( ! team ) return List ( [ ] ) ;
457
+ return team . get ( 'team_scenario_injects' ) . map ( te => entity ( te , 'injects' , state ) ) ;
458
+ } ,
459
+ getScenarioObjectives : id => entities ( 'objectives' , state ) . filter ( o => o . get ( 'objective_scenario' ) === id ) ,
488
460
getScenarioLessonsCategories : id => entities ( 'lessonscategorys' , state ) . filter (
489
- l => l . lessons_category_scenario === id ,
461
+ l => l . get ( ' lessons_category_scenario' ) === id ,
490
462
) ,
491
463
getScenarioLessonsQuestions : id => entities ( 'lessonsquestions' , state ) . filter (
492
- l => l . lessons_question_scenario === id ,
464
+ l => l . get ( ' lessons_question_scenario' ) === id ,
493
465
) ,
494
466
} ) ;
0 commit comments