1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.syncope.core.persistence.jpa.validation.entity;
20
21 import javax.validation.ConstraintValidatorContext;
22 import org.apache.syncope.common.lib.to.Item;
23 import org.apache.syncope.common.lib.types.EntityViolationType;
24 import org.apache.syncope.core.persistence.api.entity.OIDCC4UIProvider;
25
26 public class OIDCC4UIProviderValidator extends AbstractValidator<OIDCC4UIProviderCheck, OIDCC4UIProvider> {
27
28 @Override
29 public boolean isValid(final OIDCC4UIProvider oidcProvider, final ConstraintValidatorContext context) {
30 context.disableDefaultConstraintViolation();
31
32 if (isHtml(oidcProvider.getKey())) {
33 context.buildConstraintViolationWithTemplate(
34 getTemplate(EntityViolationType.InvalidKey, oidcProvider.getKey())).
35 addPropertyNode("key").addConstraintViolation();
36
37 return false;
38 }
39
40 if (oidcProvider.isSelfRegUnmatching() && oidcProvider.isCreateUnmatching()) {
41 context.buildConstraintViolationWithTemplate(
42 getTemplate(EntityViolationType.Standard,
43 "Either selfRegUnmatching or createUnmatching, not both")).
44 addPropertyNode("selfRegUnmatching").
45 addPropertyNode("createUnmatching").addConstraintViolation();
46
47 return false;
48 }
49
50 long connObjectKeys = oidcProvider.getItems().stream().filter(Item::isConnObjectKey).count();
51 if (!oidcProvider.getItems().isEmpty() && connObjectKeys != 1) {
52 context.buildConstraintViolationWithTemplate(
53 getTemplate(EntityViolationType.InvalidMapping, "Single ConnObjectKey mapping is required")).
54 addPropertyNode("connObjectKey.size").addConstraintViolation();
55 return false;
56 }
57
58 final boolean[] isValid = new boolean[] { true };
59
60 long passwords = oidcProvider.getItems().stream().filter(Item::isPassword).count();
61 if (passwords > 0) {
62 context.buildConstraintViolationWithTemplate(
63 getTemplate(EntityViolationType.InvalidMapping, "No password mapping is allowed")).
64 addPropertyNode("password.size").addConstraintViolation();
65 isValid[0] = false;
66 }
67
68 return isValid[0];
69 }
70 }