1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.syncope.core.logic;
20
21 import java.util.ArrayList;
22 import java.util.List;
23 import javax.validation.Validator;
24 import org.apache.logging.log4j.Level;
25 import org.apache.logging.log4j.LogManager;
26 import org.apache.logging.log4j.core.LoggerContext;
27 import org.apache.logging.log4j.core.config.LoggerConfig;
28 import org.apache.syncope.common.keymaster.client.api.ConfParamOps;
29 import org.apache.syncope.common.lib.types.AuditLoggerName;
30 import org.apache.syncope.core.logic.audit.AuditAppender;
31 import org.apache.syncope.core.logic.audit.JdbcAuditAppender;
32 import org.apache.syncope.core.logic.init.AuditAccessor;
33 import org.apache.syncope.core.logic.init.AuditLoader;
34 import org.apache.syncope.core.logic.init.ClassPathScanImplementationLookup;
35 import org.apache.syncope.core.logic.init.EntitlementAccessor;
36 import org.apache.syncope.core.logic.init.IdRepoEntitlementLoader;
37 import org.apache.syncope.core.logic.init.IdRepoImplementationTypeLoader;
38 import org.apache.syncope.core.persistence.api.DomainHolder;
39 import org.apache.syncope.core.persistence.api.content.ContentExporter;
40 import org.apache.syncope.core.persistence.api.dao.AccessTokenDAO;
41 import org.apache.syncope.core.persistence.api.dao.AnyObjectDAO;
42 import org.apache.syncope.core.persistence.api.dao.AnySearchDAO;
43 import org.apache.syncope.core.persistence.api.dao.AnyTypeClassDAO;
44 import org.apache.syncope.core.persistence.api.dao.AnyTypeDAO;
45 import org.apache.syncope.core.persistence.api.dao.ApplicationDAO;
46 import org.apache.syncope.core.persistence.api.dao.AuditConfDAO;
47 import org.apache.syncope.core.persistence.api.dao.CASSPClientAppDAO;
48 import org.apache.syncope.core.persistence.api.dao.DelegationDAO;
49 import org.apache.syncope.core.persistence.api.dao.DerSchemaDAO;
50 import org.apache.syncope.core.persistence.api.dao.DynRealmDAO;
51 import org.apache.syncope.core.persistence.api.dao.ExternalResourceDAO;
52 import org.apache.syncope.core.persistence.api.dao.FIQLQueryDAO;
53 import org.apache.syncope.core.persistence.api.dao.GroupDAO;
54 import org.apache.syncope.core.persistence.api.dao.ImplementationDAO;
55 import org.apache.syncope.core.persistence.api.dao.JobStatusDAO;
56 import org.apache.syncope.core.persistence.api.dao.MailTemplateDAO;
57 import org.apache.syncope.core.persistence.api.dao.NotificationDAO;
58 import org.apache.syncope.core.persistence.api.dao.OIDCRPClientAppDAO;
59 import org.apache.syncope.core.persistence.api.dao.PlainSchemaDAO;
60 import org.apache.syncope.core.persistence.api.dao.PolicyDAO;
61 import org.apache.syncope.core.persistence.api.dao.RealmDAO;
62 import org.apache.syncope.core.persistence.api.dao.RelationshipTypeDAO;
63 import org.apache.syncope.core.persistence.api.dao.ReportDAO;
64 import org.apache.syncope.core.persistence.api.dao.ReportExecDAO;
65 import org.apache.syncope.core.persistence.api.dao.RoleDAO;
66 import org.apache.syncope.core.persistence.api.dao.SAML2SPClientAppDAO;
67 import org.apache.syncope.core.persistence.api.dao.SecurityQuestionDAO;
68 import org.apache.syncope.core.persistence.api.dao.TaskDAO;
69 import org.apache.syncope.core.persistence.api.dao.TaskExecDAO;
70 import org.apache.syncope.core.persistence.api.dao.UserDAO;
71 import org.apache.syncope.core.persistence.api.dao.VirSchemaDAO;
72 import org.apache.syncope.core.persistence.api.entity.EntityFactory;
73 import org.apache.syncope.core.persistence.api.entity.policy.PolicyUtilsFactory;
74 import org.apache.syncope.core.persistence.api.entity.task.TaskUtilsFactory;
75 import org.apache.syncope.core.provisioning.api.AnyObjectProvisioningManager;
76 import org.apache.syncope.core.provisioning.api.AuditManager;
77 import org.apache.syncope.core.provisioning.api.GroupProvisioningManager;
78 import org.apache.syncope.core.provisioning.api.ImplementationLookup;
79 import org.apache.syncope.core.provisioning.api.UserProvisioningManager;
80 import org.apache.syncope.core.provisioning.api.data.AccessTokenDataBinder;
81 import org.apache.syncope.core.provisioning.api.data.AnyObjectDataBinder;
82 import org.apache.syncope.core.provisioning.api.data.AnyTypeClassDataBinder;
83 import org.apache.syncope.core.provisioning.api.data.AnyTypeDataBinder;
84 import org.apache.syncope.core.provisioning.api.data.ApplicationDataBinder;
85 import org.apache.syncope.core.provisioning.api.data.AuditDataBinder;
86 import org.apache.syncope.core.provisioning.api.data.DelegationDataBinder;
87 import org.apache.syncope.core.provisioning.api.data.DynRealmDataBinder;
88 import org.apache.syncope.core.provisioning.api.data.FIQLQueryDataBinder;
89 import org.apache.syncope.core.provisioning.api.data.GroupDataBinder;
90 import org.apache.syncope.core.provisioning.api.data.ImplementationDataBinder;
91 import org.apache.syncope.core.provisioning.api.data.NotificationDataBinder;
92 import org.apache.syncope.core.provisioning.api.data.PolicyDataBinder;
93 import org.apache.syncope.core.provisioning.api.data.RealmDataBinder;
94 import org.apache.syncope.core.provisioning.api.data.RelationshipTypeDataBinder;
95 import org.apache.syncope.core.provisioning.api.data.ReportDataBinder;
96 import org.apache.syncope.core.provisioning.api.data.RoleDataBinder;
97 import org.apache.syncope.core.provisioning.api.data.SchemaDataBinder;
98 import org.apache.syncope.core.provisioning.api.data.SecurityQuestionDataBinder;
99 import org.apache.syncope.core.provisioning.api.data.TaskDataBinder;
100 import org.apache.syncope.core.provisioning.api.data.UserDataBinder;
101 import org.apache.syncope.core.provisioning.api.job.JobManager;
102 import org.apache.syncope.core.provisioning.api.notification.NotificationJobDelegate;
103 import org.apache.syncope.core.provisioning.api.notification.NotificationManager;
104 import org.apache.syncope.core.provisioning.api.propagation.PropagationManager;
105 import org.apache.syncope.core.provisioning.api.propagation.PropagationTaskExecutor;
106 import org.apache.syncope.core.provisioning.api.rules.RuleEnforcer;
107 import org.apache.syncope.core.provisioning.java.utils.TemplateUtils;
108 import org.apache.syncope.core.spring.security.SecurityProperties;
109 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
110 import org.springframework.boot.logging.LoggingSystem;
111 import org.springframework.context.annotation.Bean;
112 import org.springframework.context.annotation.Configuration;
113 import org.springframework.context.annotation.EnableAspectJAutoProxy;
114 import org.springframework.scheduling.quartz.SchedulerFactoryBean;
115
116 @EnableAspectJAutoProxy(proxyTargetClass = false)
117 @Configuration(proxyBeanMethods = false)
118 public class IdRepoLogicContext {
119
120 @ConditionalOnMissingBean
121 @Bean
122 public LogicInvocationHandler logicInvocationHandler(
123 final NotificationManager notificationManager,
124 final AuditManager auditManager) {
125
126 return new LogicInvocationHandler(notificationManager, auditManager);
127 }
128
129 @ConditionalOnMissingBean
130 @Bean
131 public ImplementationLookup implementationLookup() {
132 return new ClassPathScanImplementationLookup();
133 }
134
135 @ConditionalOnMissingBean
136 @Bean
137 public AuditAccessor auditAccessor(final AuditConfDAO auditConfDAO, final LoggingSystem loggingSystem) {
138 return new AuditAccessor(auditConfDAO, loggingSystem);
139 }
140
141 @ConditionalOnMissingBean
142 @Bean
143 public AuditLoader auditLoader(
144 final AuditAccessor auditAccessor,
145 final List<AuditAppender> auditAppenders) {
146
147 return new AuditLoader(auditAccessor, auditAppenders);
148 }
149
150 @ConditionalOnMissingBean(name = "defaultAuditAppenders")
151 @Bean
152 public List<AuditAppender> defaultAuditAppenders(final DomainHolder domainHolder) {
153 List<AuditAppender> auditAppenders = new ArrayList<>();
154
155 LoggerContext logCtx = (LoggerContext) LogManager.getContext(false);
156 domainHolder.getDomains().forEach((domain, dataSource) -> {
157 AuditAppender appender = new JdbcAuditAppender(domain, dataSource);
158
159 LoggerConfig logConf = new LoggerConfig(AuditLoggerName.getAuditLoggerName(domain), null, false);
160 logConf.addAppender(appender.getTargetAppender(), Level.DEBUG, null);
161 logConf.setLevel(Level.DEBUG);
162 logCtx.getConfiguration().addLogger(logConf.getName(), logConf);
163
164 auditAppenders.add(appender);
165 });
166
167 return auditAppenders;
168 }
169
170 @ConditionalOnMissingBean
171 @Bean
172 public EntitlementAccessor entitlementAccessor(final AnyTypeDAO anyTypeDAO) {
173 return new EntitlementAccessor(anyTypeDAO);
174 }
175
176 @ConditionalOnMissingBean
177 @Bean
178 public IdRepoEntitlementLoader idRepoEntitlementLoader(final EntitlementAccessor entitlementAccessor) {
179 return new IdRepoEntitlementLoader(entitlementAccessor);
180 }
181
182 @ConditionalOnMissingBean
183 @Bean
184 public IdRepoImplementationTypeLoader idRepoImplementationTypeLoader() {
185 return new IdRepoImplementationTypeLoader();
186 }
187
188 @ConditionalOnMissingBean
189 @Bean
190 public AccessTokenLogic accessTokenLogic(
191 final AccessTokenDataBinder binder,
192 final AccessTokenDAO accessTokenDAO,
193 final SecurityProperties securityProperties) {
194
195 return new AccessTokenLogic(securityProperties, binder, accessTokenDAO);
196 }
197
198 @ConditionalOnMissingBean
199 @Bean
200 public AnyObjectLogic anyObjectLogic(
201 final AnyObjectDataBinder binder,
202 final TemplateUtils templateUtils,
203 final RealmDAO realmDAO,
204 final AnyTypeDAO anyTypeDAO,
205 final AnyObjectDAO anyObjectDAO,
206 final AnySearchDAO anySearchDAO,
207 final AnyObjectProvisioningManager provisioningManager) {
208
209 return new AnyObjectLogic(
210 realmDAO,
211 anyTypeDAO,
212 templateUtils,
213 anyObjectDAO,
214 anySearchDAO,
215 binder,
216 provisioningManager);
217 }
218
219 @ConditionalOnMissingBean
220 @Bean
221 public AnyTypeClassLogic anyTypeClassLogic(
222 final AnyTypeClassDataBinder binder,
223 final AnyTypeClassDAO anyTypeClassDAO) {
224
225 return new AnyTypeClassLogic(binder, anyTypeClassDAO);
226 }
227
228 @ConditionalOnMissingBean
229 @Bean
230 public AnyTypeLogic anyTypeLogic(
231 final AnyTypeDataBinder binder,
232 final AnyTypeDAO anyTypeDAO,
233 final AnyObjectDAO anyObjectDAO) {
234
235 return new AnyTypeLogic(binder, anyTypeDAO, anyObjectDAO);
236 }
237
238 @ConditionalOnMissingBean
239 @Bean
240 public ApplicationLogic applicationLogic(
241 final ApplicationDataBinder binder,
242 final ApplicationDAO applicationDAO) {
243
244 return new ApplicationLogic(binder, applicationDAO);
245 }
246
247 @ConditionalOnMissingBean
248 @Bean
249 public AuditLogic auditLogic(
250 final AuditConfDAO auditConfDAO,
251 final ExternalResourceDAO externalResourceDAO,
252 final EntityFactory entityFactory,
253 final AuditDataBinder binder,
254 final AuditManager auditManager,
255 final List<AuditAppender> auditAppenders,
256 final LoggingSystem loggingSystem) {
257
258 return new AuditLogic(
259 auditConfDAO,
260 externalResourceDAO,
261 entityFactory,
262 binder,
263 auditManager,
264 auditAppenders,
265 loggingSystem);
266 }
267
268 @ConditionalOnMissingBean
269 @Bean
270 public CommandLogic commandLogic(final ImplementationDAO implementationDAO, final Validator validator) {
271 return new CommandLogic(implementationDAO, validator);
272 }
273
274 @ConditionalOnMissingBean
275 @Bean
276 public FIQLQueryLogic fiqlQueryLogic(
277 final FIQLQueryDataBinder binder,
278 final UserDAO userDAO,
279 final FIQLQueryDAO fiqlQueryDAO) {
280
281 return new FIQLQueryLogic(binder, fiqlQueryDAO, userDAO);
282 }
283
284 @ConditionalOnMissingBean
285 @Bean
286 public DelegationLogic delegationLogic(
287 final DelegationDataBinder binder,
288 final UserDAO userDAO,
289 final DelegationDAO delegationDAO) {
290
291 return new DelegationLogic(binder, delegationDAO, userDAO);
292 }
293
294 @ConditionalOnMissingBean
295 @Bean
296 public DynRealmLogic dynRealmLogic(
297 final DynRealmDataBinder binder,
298 final DynRealmDAO dynRealmDAO) {
299
300 return new DynRealmLogic(binder, dynRealmDAO);
301 }
302
303 @ConditionalOnMissingBean
304 @Bean
305 public GroupLogic groupLogic(
306 final GroupProvisioningManager provisioningManager,
307 final JobManager jobManager,
308 final TemplateUtils templateUtils,
309 final EntityFactory entityFactory,
310 final RealmDAO realmDAO,
311 final AnyTypeDAO anyTypeDAO,
312 final UserDAO userDAO,
313 final GroupDAO groupDAO,
314 final AnySearchDAO anySearchDAO,
315 final SchedulerFactoryBean scheduler,
316 final TaskDAO taskDAO,
317 final GroupDataBinder groupDataBinder,
318 final TaskDataBinder taskDataBinder,
319 final ImplementationDAO implementationDAO,
320 final SecurityProperties securityProperties) {
321
322 return new GroupLogic(
323 realmDAO,
324 anyTypeDAO,
325 templateUtils,
326 userDAO,
327 groupDAO,
328 securityProperties,
329 anySearchDAO,
330 implementationDAO,
331 taskDAO,
332 groupDataBinder,
333 provisioningManager,
334 taskDataBinder,
335 jobManager,
336 scheduler,
337 entityFactory);
338 }
339
340 @ConditionalOnMissingBean
341 @Bean
342 public ImplementationLogic implementationLogic(
343 final ImplementationDataBinder binder,
344 final PlainSchemaDAO plainSchemaDAO,
345 final RealmDAO realmDAO,
346 final PolicyDAO policyDAO,
347 final ReportDAO reportDAO,
348 final TaskDAO taskDAO,
349 final ExternalResourceDAO externalResourceDAO,
350 final ImplementationDAO implementationDAO,
351 final NotificationDAO notificationDAO) {
352
353 return new ImplementationLogic(
354 binder,
355 implementationDAO,
356 reportDAO,
357 policyDAO,
358 externalResourceDAO,
359 taskDAO,
360 realmDAO,
361 plainSchemaDAO,
362 notificationDAO);
363 }
364
365 @ConditionalOnMissingBean
366 @Bean
367 public MailTemplateLogic mailTemplateLogic(
368 final MailTemplateDAO mailTemplateDAO,
369 final EntityFactory entityFactory,
370 final NotificationDAO notificationDAO) {
371
372 return new MailTemplateLogic(mailTemplateDAO, notificationDAO, entityFactory);
373 }
374
375 @ConditionalOnMissingBean
376 @Bean
377 public NotificationLogic notificationLogic(
378 final NotificationDataBinder binder,
379 final JobManager jobManager,
380 final JobStatusDAO jobStatusDAO,
381 final SchedulerFactoryBean scheduler,
382 final NotificationDAO notificationDAO) {
383
384 return new NotificationLogic(jobManager, scheduler, jobStatusDAO, notificationDAO, binder);
385 }
386
387 @ConditionalOnMissingBean
388 @Bean
389 public PolicyLogic policyLogic(
390 final PolicyDataBinder binder,
391 final PolicyDAO policyDAO,
392 final PolicyUtilsFactory policyUtilsFactory) {
393
394 return new PolicyLogic(policyDAO, binder, policyUtilsFactory);
395 }
396
397 @ConditionalOnMissingBean
398 @Bean
399 public RealmLogic realmLogic(
400 final RealmDataBinder binder,
401 final RealmDAO realmDAO,
402 final AnySearchDAO anySearchDAO,
403 final TaskDAO taskDAO,
404 final CASSPClientAppDAO casSPClientAppDAO,
405 final OIDCRPClientAppDAO oidcRPClientAppDAO,
406 final SAML2SPClientAppDAO saml2SPClientAppDAO,
407 final PropagationManager propagationManager,
408 final PropagationTaskExecutor taskExecutor) {
409
410 return new RealmLogic(
411 realmDAO,
412 anySearchDAO,
413 taskDAO,
414 casSPClientAppDAO,
415 oidcRPClientAppDAO,
416 saml2SPClientAppDAO,
417 binder,
418 propagationManager,
419 taskExecutor);
420 }
421
422 @ConditionalOnMissingBean
423 @Bean
424 public RelationshipTypeLogic relationshipTypeLogic(
425 final RelationshipTypeDataBinder binder,
426 final RelationshipTypeDAO relationshipTypeDAO) {
427
428 return new RelationshipTypeLogic(binder, relationshipTypeDAO);
429 }
430
431 @ConditionalOnMissingBean
432 @Bean
433 public ReportLogic reportLogic(
434 final JobManager jobManager,
435 final ReportDataBinder binder,
436 final SchedulerFactoryBean scheduler,
437 final JobStatusDAO jobStatusDAO,
438 final ReportDAO reportDAO,
439 final EntityFactory entityFactory,
440 final ReportExecDAO reportExecDAO) {
441
442 return new ReportLogic(
443 jobManager,
444 scheduler,
445 jobStatusDAO,
446 reportDAO,
447 reportExecDAO,
448 binder,
449 entityFactory);
450 }
451
452 @ConditionalOnMissingBean
453 @Bean
454 public RoleLogic roleLogic(
455 final RoleDataBinder binder,
456 final RoleDAO roleDAO) {
457
458 return new RoleLogic(binder, roleDAO);
459 }
460
461 @ConditionalOnMissingBean
462 @Bean
463 public SchemaLogic schemaLogic(
464 final SchemaDataBinder binder,
465 final VirSchemaDAO virSchemaDAO,
466 final AnyTypeClassDAO anyTypeClassDAO,
467 final DerSchemaDAO derSchemaDAO,
468 final PlainSchemaDAO plainSchemaDAO) {
469
470 return new SchemaLogic(plainSchemaDAO, derSchemaDAO, virSchemaDAO, anyTypeClassDAO, binder);
471 }
472
473 @ConditionalOnMissingBean
474 @Bean
475 public SecurityQuestionLogic securityQuestionLogic(
476 final SecurityQuestionDataBinder binder,
477 final UserDAO userDAO,
478 final SecurityQuestionDAO securityQuestionDAO) {
479
480 return new SecurityQuestionLogic(securityQuestionDAO, userDAO, binder);
481 }
482
483 @ConditionalOnMissingBean
484 @Bean
485 public SyncopeLogic syncopeLogic(
486 final RealmDAO realmDAO,
487 final AnyTypeDAO anyTypeDAO,
488 final GroupDAO groupDAO,
489 final AnySearchDAO anySearchDAO,
490 final GroupDataBinder groupDataBinder,
491 final ConfParamOps confParamOps,
492 final ContentExporter exporter) {
493
494 return new SyncopeLogic(
495 realmDAO,
496 anyTypeDAO,
497 groupDAO,
498 anySearchDAO,
499 groupDataBinder,
500 confParamOps,
501 exporter);
502 }
503
504 @ConditionalOnMissingBean
505 @Bean
506 public TaskLogic taskLogic(
507 final JobManager jobManager,
508 final PropagationTaskExecutor taskExecutor,
509 final TaskExecDAO taskExecDAO,
510 final TaskDAO taskDAO,
511 final SchedulerFactoryBean scheduler,
512 final JobStatusDAO jobStatusDAO,
513 final ExternalResourceDAO externalResourceDAO,
514 final NotificationJobDelegate notificationJobDelegate,
515 final TaskDataBinder taskDataBinder,
516 final TaskUtilsFactory taskUtilsFactory,
517 final NotificationDAO notificationDAO) {
518
519 return new TaskLogic(
520 jobManager,
521 scheduler,
522 jobStatusDAO,
523 taskDAO,
524 taskExecDAO,
525 externalResourceDAO,
526 notificationDAO,
527 taskDataBinder,
528 taskExecutor,
529 notificationJobDelegate,
530 taskUtilsFactory);
531 }
532
533 @ConditionalOnMissingBean
534 @Bean
535 public UserLogic userLogic(
536 final UserDataBinder binder,
537 final TemplateUtils templateUtils,
538 final RealmDAO realmDAO,
539 final AnyTypeDAO anyTypeDAO,
540 final UserDAO userDAO,
541 final GroupDAO groupDAO,
542 final AnySearchDAO anySearchDAO,
543 final ExternalResourceDAO resourceDAO,
544 final AccessTokenDAO accessTokenDAO,
545 final DelegationDAO delegationDAO,
546 final ConfParamOps confParamOps,
547 final UserProvisioningManager provisioningManager,
548 final SyncopeLogic syncopeLogic,
549 final RuleEnforcer ruleEnforcer) {
550
551 return new UserLogic(
552 realmDAO,
553 anyTypeDAO,
554 templateUtils,
555 userDAO,
556 groupDAO,
557 anySearchDAO,
558 resourceDAO,
559 accessTokenDAO,
560 delegationDAO,
561 confParamOps,
562 binder,
563 provisioningManager,
564 syncopeLogic,
565 ruleEnforcer);
566 }
567 }