Upgrading CAS, Pac4j, Elasticsearch and Swagger UI (#1405)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
diff --git a/.mvn/extensions.xml b/.mvn/extensions.xml
index 0fa026d..01a3142 100644
--- a/.mvn/extensions.xml
+++ b/.mvn/extensions.xml
@@ -21,6 +21,6 @@
<extension>
<groupId>org.apache.maven.extensions</groupId>
<artifactId>maven-build-cache-extension</artifactId>
- <version>1.2.2</version>
+ <version>1.2.3</version>
</extension>
</extensions>
diff --git a/client/am/console/src/main/java/org/apache/syncope/client/console/clientapps/ClientAppModalPanelBuilder.java b/client/am/console/src/main/java/org/apache/syncope/client/console/clientapps/ClientAppModalPanelBuilder.java
index 480b9c5..bc98659 100644
--- a/client/am/console/src/main/java/org/apache/syncope/client/console/clientapps/ClientAppModalPanelBuilder.java
+++ b/client/am/console/src/main/java/org/apache/syncope/client/console/clientapps/ClientAppModalPanelBuilder.java
@@ -20,6 +20,7 @@
import jakarta.ws.rs.core.MediaType;
import java.nio.charset.StandardCharsets;
+import java.time.Duration;
import java.util.ArrayList;
import java.util.Base64;
import java.util.Comparator;
@@ -91,12 +92,29 @@
import org.apache.wicket.model.Model;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.model.util.ListModel;
+import org.apache.wicket.validation.IValidatable;
+import org.apache.wicket.validation.IValidator;
+import org.apache.wicket.validation.ValidationError;
import org.apache.wicket.validation.validator.UrlValidator;
public class ClientAppModalPanelBuilder<T extends ClientAppTO> extends AbstractModalPanelBuilder<T> {
private static final long serialVersionUID = 5945391813567245081L;
+ protected static class DurationValidator implements IValidator<String> {
+
+ private static final long serialVersionUID = 3978328825079032964L;
+
+ @Override
+ public void validate(final IValidatable<String> validatable) {
+ try {
+ Duration.parse(validatable.getValue());
+ } catch (Exception e) {
+ validatable.error(new ValidationError(this));
+ }
+ }
+ }
+
protected final IModel<Map<String, String>> accessPolicies = new LoadableDetachableModel<>() {
private static final long serialVersionUID = -2012833443695917883L;
@@ -522,44 +540,44 @@
new PropertyModel<>(clientAppTO, "metadataSignatureLocation"), false));
AjaxDropDownChoicePanel<MetadataCriteriaDirection> metadataCriteriaDirection =
- new AjaxDropDownChoicePanel<>(
- "field", "metadataCriteriaDirection",
- new PropertyModel<>(clientAppTO, "metadataCriteriaDirection"),
- false);
+ new AjaxDropDownChoicePanel<>(
+ "field", "metadataCriteriaDirection",
+ new PropertyModel<>(clientAppTO, "metadataCriteriaDirection"),
+ false);
metadataCriteriaDirection.setChoices(List.of(MetadataCriteriaDirection.values()));
fields.add(metadataCriteriaDirection);
fields.add(new AjaxTextFieldPanel(
- "field", "metadataCriteriaPattern",
- new PropertyModel<>(clientAppTO, "metadataCriteriaPattern"), false));
+ "field", "metadataCriteriaPattern",
+ new PropertyModel<>(clientAppTO, "metadataCriteriaPattern"), false));
fields.add(new AjaxTextFieldPanel(
- "field", "subjectLocality",
- new PropertyModel<>(clientAppTO, "subjectLocality"), false));
+ "field", "subjectLocality",
+ new PropertyModel<>(clientAppTO, "subjectLocality"), false));
AjaxDropDownChoicePanel<SigningCredentialType> signingCredentialType =
- new AjaxDropDownChoicePanel<>(
- "field", "signingCredentialType",
- new PropertyModel<>(clientAppTO, "signingCredentialType"),
- false);
+ new AjaxDropDownChoicePanel<>(
+ "field", "signingCredentialType",
+ new PropertyModel<>(clientAppTO, "signingCredentialType"),
+ false);
signingCredentialType.setChoices(List.of(SigningCredentialType.values()));
fields.add(signingCredentialType);
AjaxDropDownChoicePanel<SAML2BindingType> logoutResponseBinding =
- new AjaxDropDownChoicePanel<>(
- "field", "logoutResponseBinding",
- new PropertyModel<>(clientAppTO, "logoutResponseBinding"),
- false);
+ new AjaxDropDownChoicePanel<>(
+ "field", "logoutResponseBinding",
+ new PropertyModel<>(clientAppTO, "logoutResponseBinding"),
+ false);
logoutResponseBinding.setChoices(List.of(SAML2BindingType.values()));
fields.add(logoutResponseBinding);
fields.add(new AjaxCheckBoxPanel(
- "field", "logoutResponseEnabled",
- new PropertyModel<>(clientAppTO, "logoutResponseEnabled")));
+ "field", "logoutResponseEnabled",
+ new PropertyModel<>(clientAppTO, "logoutResponseEnabled")));
fields.add(new AjaxCheckBoxPanel(
- "field", "requireSignedRoot",
- new PropertyModel<>(clientAppTO, "requireSignedRoot")));
+ "field", "requireSignedRoot",
+ new PropertyModel<>(clientAppTO, "requireSignedRoot")));
fields.add(new AjaxCheckBoxPanel(
"field", "signAssertions", new PropertyModel<>(clientAppTO, "signAssertions")));
@@ -574,76 +592,76 @@
"field", "encryptAssertions", new PropertyModel<>(clientAppTO, "encryptAssertions")));
fields.add(new AjaxCheckBoxPanel(
- "field", "encryptAttributes",
- new PropertyModel<>(clientAppTO, "encryptAttributes")));
-
- fields.add(new AjaxCheckBoxPanel(
- "field", "skipGeneratingAssertionNameId",
- new PropertyModel<>(clientAppTO, "skipGeneratingAssertionNameId")));
+ "field", "encryptAttributes",
+ new PropertyModel<>(clientAppTO, "encryptAttributes")));
fields.add(new AjaxCheckBoxPanel(
- "field", "skipGeneratingSubjectConfirmationInResponseTo",
- new PropertyModel<>(clientAppTO, "skipGeneratingSubjectConfirmationInResponseTo")));
+ "field", "skipGeneratingAssertionNameId",
+ new PropertyModel<>(clientAppTO, "skipGeneratingAssertionNameId")));
fields.add(new AjaxCheckBoxPanel(
- "field", "skipGeneratingResponseInResponseTo",
- new PropertyModel<>(clientAppTO, "skipGeneratingResponseInResponseTo")));
+ "field", "skipGeneratingSubjectConfirmationInResponseTo",
+ new PropertyModel<>(clientAppTO, "skipGeneratingSubjectConfirmationInResponseTo")));
fields.add(new AjaxCheckBoxPanel(
- "field", "skipGeneratingSubjectConfirmationNotOnOrAfter",
- new PropertyModel<>(clientAppTO, "skipGeneratingSubjectConfirmationNotOnOrAfter")));
+ "field", "skipGeneratingResponseInResponseTo",
+ new PropertyModel<>(clientAppTO, "skipGeneratingResponseInResponseTo")));
fields.add(new AjaxCheckBoxPanel(
- "field", "skipGeneratingSubjectConfirmationRecipient",
- new PropertyModel<>(clientAppTO, "skipGeneratingSubjectConfirmationRecipient")));
+ "field", "skipGeneratingSubjectConfirmationNotOnOrAfter",
+ new PropertyModel<>(clientAppTO, "skipGeneratingSubjectConfirmationNotOnOrAfter")));
fields.add(new AjaxCheckBoxPanel(
- "field", "skipGeneratingSubjectConfirmationRecipient",
- new PropertyModel<>(clientAppTO, "skipGeneratingSubjectConfirmationRecipient")));
+ "field", "skipGeneratingSubjectConfirmationRecipient",
+ new PropertyModel<>(clientAppTO, "skipGeneratingSubjectConfirmationRecipient")));
fields.add(new AjaxCheckBoxPanel(
- "field", "skipGeneratingSubjectConfirmationAddress",
- new PropertyModel<>(clientAppTO, "skipGeneratingSubjectConfirmationAddress")));
+ "field", "skipGeneratingSubjectConfirmationRecipient",
+ new PropertyModel<>(clientAppTO, "skipGeneratingSubjectConfirmationRecipient")));
fields.add(new AjaxCheckBoxPanel(
- "field", "skipGeneratingSubjectConfirmationNotBefore",
- new PropertyModel<>(clientAppTO, "skipGeneratingSubjectConfirmationNotBefore")));
+ "field", "skipGeneratingSubjectConfirmationAddress",
+ new PropertyModel<>(clientAppTO, "skipGeneratingSubjectConfirmationAddress")));
fields.add(new AjaxCheckBoxPanel(
- "field", "skipGeneratingSubjectConfirmationNameId",
- new PropertyModel<>(clientAppTO, "skipGeneratingSubjectConfirmationNameId")));
+ "field", "skipGeneratingSubjectConfirmationNotBefore",
+ new PropertyModel<>(clientAppTO, "skipGeneratingSubjectConfirmationNotBefore")));
fields.add(new AjaxCheckBoxPanel(
- "field", "skipGeneratingNameIdQualifiers",
- new PropertyModel<>(clientAppTO, "skipGeneratingNameIdQualifiers")));
+ "field", "skipGeneratingSubjectConfirmationNameId",
+ new PropertyModel<>(clientAppTO, "skipGeneratingSubjectConfirmationNameId")));
fields.add(new AjaxCheckBoxPanel(
- "field", "skipGeneratingTransientNameId",
- new PropertyModel<>(clientAppTO, "skipGeneratingTransientNameId")));
+ "field", "skipGeneratingNameIdQualifiers",
+ new PropertyModel<>(clientAppTO, "skipGeneratingNameIdQualifiers")));
fields.add(new AjaxCheckBoxPanel(
- "field", "skipValidatingAuthnRequest",
- new PropertyModel<>(clientAppTO, "skipValidatingAuthnRequest")));
+ "field", "skipGeneratingTransientNameId",
+ new PropertyModel<>(clientAppTO, "skipGeneratingTransientNameId")));
fields.add(new AjaxCheckBoxPanel(
- "field", "skipGeneratingServiceProviderNameIdQualifier",
- new PropertyModel<>(clientAppTO, "skipGeneratingServiceProviderNameIdQualifier")));
+ "field", "skipValidatingAuthnRequest",
+ new PropertyModel<>(clientAppTO, "skipValidatingAuthnRequest")));
fields.add(new AjaxCheckBoxPanel(
- "field", "skipGeneratingAuthenticatingAuthority",
- new PropertyModel<>(clientAppTO, "skipGeneratingAuthenticatingAuthority")));
+ "field", "skipGeneratingServiceProviderNameIdQualifier",
+ new PropertyModel<>(clientAppTO, "skipGeneratingServiceProviderNameIdQualifier")));
fields.add(new AjaxCheckBoxPanel(
- "field", "skipGeneratingNameIdQualifier",
- new PropertyModel<>(clientAppTO, "skipGeneratingNameIdQualifier")));
+ "field", "skipGeneratingAuthenticatingAuthority",
+ new PropertyModel<>(clientAppTO, "skipGeneratingAuthenticatingAuthority")));
fields.add(new AjaxCheckBoxPanel(
- "field", "skipGeneratingSessionNotOnOrAfter",
- new PropertyModel<>(clientAppTO, "skipGeneratingSessionNotOnOrAfter")));
+ "field", "skipGeneratingNameIdQualifier",
+ new PropertyModel<>(clientAppTO, "skipGeneratingNameIdQualifier")));
fields.add(new AjaxCheckBoxPanel(
- "field", "validateMetadataCertificates",
- new PropertyModel<>(clientAppTO, "validateMetadataCertificates")));
+ "field", "skipGeneratingSessionNotOnOrAfter",
+ new PropertyModel<>(clientAppTO, "skipGeneratingSessionNotOnOrAfter")));
+
+ fields.add(new AjaxCheckBoxPanel(
+ "field", "validateMetadataCertificates",
+ new PropertyModel<>(clientAppTO, "validateMetadataCertificates")));
fields.add(new AjaxTextFieldPanel(
"field", "requiredAuthenticationContextClass",
@@ -656,9 +674,15 @@
requiredNameIdFormat.addRequiredLabel().setEnabled(true);
fields.add(requiredNameIdFormat);
- fields.add(new AjaxNumberFieldPanel.Builder<Integer>().min(0).build(
- "field", "skewAllowance", Integer.class,
- new PropertyModel<>(clientAppTO, "skewAllowance")));
+ AjaxTextFieldPanel skewAllowance = new AjaxTextFieldPanel(
+ "field", "skewAllowance", new PropertyModel<>(clientAppTO, "skewAllowance"), false);
+ skewAllowance.addValidator(new DurationValidator());
+ fields.add(skewAllowance);
+
+ AjaxTextFieldPanel validityUntil = new AjaxTextFieldPanel(
+ "field", "validityUntil", new PropertyModel<>(clientAppTO, "validityUntil"), false);
+ validityUntil.addValidator(new DurationValidator());
+ fields.add(validityUntil);
fields.add(new AjaxTextFieldPanel(
"field", "nameIdQualifier", new PropertyModel<>(clientAppTO, "nameIdQualifier"), false));
diff --git a/client/am/console/src/main/resources/org/apache/syncope/client/console/clientapps/ClientAppDirectoryPanel.properties b/client/am/console/src/main/resources/org/apache/syncope/client/console/clientapps/ClientAppDirectoryPanel.properties
index a8f5184..bdc0ffe 100644
--- a/client/am/console/src/main/resources/org/apache/syncope/client/console/clientapps/ClientAppDirectoryPanel.properties
+++ b/client/am/console/src/main/resources/org/apache/syncope/client/console/clientapps/ClientAppDirectoryPanel.properties
@@ -106,3 +106,4 @@
userInfoEncryptedResponseEncoding=UserInfo Encrypted Response Encoding
evaluationOrder=Evaluation Order
idp=Identity Provider
+validityUntil=Validity Until
diff --git a/client/am/console/src/main/resources/org/apache/syncope/client/console/clientapps/ClientAppDirectoryPanel_fr_CA.properties b/client/am/console/src/main/resources/org/apache/syncope/client/console/clientapps/ClientAppDirectoryPanel_fr_CA.properties
index 2c3e428..3d7316b 100644
--- a/client/am/console/src/main/resources/org/apache/syncope/client/console/clientapps/ClientAppDirectoryPanel_fr_CA.properties
+++ b/client/am/console/src/main/resources/org/apache/syncope/client/console/clientapps/ClientAppDirectoryPanel_fr_CA.properties
@@ -106,3 +106,4 @@
userInfoEncryptedResponseEncoding=UserInfo Encrypted Response Encoding
evaluationOrder=Evaluation Order
idp=Identity Provider
+validityUntil=Validity Until
diff --git a/client/am/console/src/main/resources/org/apache/syncope/client/console/clientapps/ClientAppDirectoryPanel_it.properties b/client/am/console/src/main/resources/org/apache/syncope/client/console/clientapps/ClientAppDirectoryPanel_it.properties
index d4123f5..96dcd27 100644
--- a/client/am/console/src/main/resources/org/apache/syncope/client/console/clientapps/ClientAppDirectoryPanel_it.properties
+++ b/client/am/console/src/main/resources/org/apache/syncope/client/console/clientapps/ClientAppDirectoryPanel_it.properties
@@ -106,3 +106,4 @@
userInfoEncryptedResponseEncoding=Codifica di cifratura risposta UserInfo
evaluationOrder=Ordine di valutazione
idp=Identity Provider
+validityUntil=Validit\u00e0
diff --git a/client/am/console/src/main/resources/org/apache/syncope/client/console/clientapps/ClientAppDirectoryPanel_ja.properties b/client/am/console/src/main/resources/org/apache/syncope/client/console/clientapps/ClientAppDirectoryPanel_ja.properties
index 06aa5f2..fd95fba 100644
--- a/client/am/console/src/main/resources/org/apache/syncope/client/console/clientapps/ClientAppDirectoryPanel_ja.properties
+++ b/client/am/console/src/main/resources/org/apache/syncope/client/console/clientapps/ClientAppDirectoryPanel_ja.properties
@@ -106,3 +106,4 @@
userInfoEncryptedResponseEncoding=UserInfo Encrypted Response Encoding
evaluationOrder=Evaluation Order
idp=Identity Provider
+validityUntil=Validity Until
diff --git a/client/am/console/src/main/resources/org/apache/syncope/client/console/clientapps/ClientAppDirectoryPanel_pt_BR.properties b/client/am/console/src/main/resources/org/apache/syncope/client/console/clientapps/ClientAppDirectoryPanel_pt_BR.properties
index ceaecd9..a1f4bdd 100644
--- a/client/am/console/src/main/resources/org/apache/syncope/client/console/clientapps/ClientAppDirectoryPanel_pt_BR.properties
+++ b/client/am/console/src/main/resources/org/apache/syncope/client/console/clientapps/ClientAppDirectoryPanel_pt_BR.properties
@@ -106,3 +106,4 @@
userInfoEncryptedResponseEncoding=UserInfo Encrypted Response Encoding
evaluationOrder=Evaluation Order
idp=Identity Provider
+validityUntil=Validity Until
diff --git a/client/am/console/src/main/resources/org/apache/syncope/client/console/clientapps/ClientAppDirectoryPanel_ru.properties b/client/am/console/src/main/resources/org/apache/syncope/client/console/clientapps/ClientAppDirectoryPanel_ru.properties
index 1284cc9..393ce1f 100644
--- a/client/am/console/src/main/resources/org/apache/syncope/client/console/clientapps/ClientAppDirectoryPanel_ru.properties
+++ b/client/am/console/src/main/resources/org/apache/syncope/client/console/clientapps/ClientAppDirectoryPanel_ru.properties
@@ -107,3 +107,4 @@
userInfoEncryptedResponseEncoding=UserInfo Encrypted Response Encoding
evaluationOrder=Evaluation Order
idp=Identity Provider
+validityUntil=Validity Until
diff --git a/common/am/lib/src/main/java/org/apache/syncope/common/lib/to/SAML2SPClientAppTO.java b/common/am/lib/src/main/java/org/apache/syncope/common/lib/to/SAML2SPClientAppTO.java
index 2c3f63c..87f2782 100644
--- a/common/am/lib/src/main/java/org/apache/syncope/common/lib/to/SAML2SPClientAppTO.java
+++ b/common/am/lib/src/main/java/org/apache/syncope/common/lib/to/SAML2SPClientAppTO.java
@@ -51,7 +51,7 @@
private SigningCredentialType signingCredentialType;
- private SAML2BindingType logoutResponseBinding;
+ private SAML2BindingType logoutResponseBinding;
private boolean signAssertions;
@@ -103,7 +103,15 @@
private SAML2SPNameId requiredNameIdFormat;
- private Integer skewAllowance;
+ /**
+ * This settings supports the java.time.Duration syntax.
+ */
+ private String skewAllowance;
+
+ /**
+ * This settings supports the java.time.Duration syntax.
+ */
+ private String validityUntil;
private String nameIdQualifier;
@@ -272,7 +280,7 @@
}
public void setSkipGeneratingSubjectConfirmationInResponseTo(
- final boolean skipGeneratingSubjectConfirmationInResponseTo) {
+ final boolean skipGeneratingSubjectConfirmationInResponseTo) {
this.skipGeneratingSubjectConfirmationInResponseTo = skipGeneratingSubjectConfirmationInResponseTo;
}
@@ -289,7 +297,7 @@
}
public void setSkipGeneratingSubjectConfirmationNotOnOrAfter(
- final boolean skipGeneratingSubjectConfirmationNotOnOrAfter) {
+ final boolean skipGeneratingSubjectConfirmationNotOnOrAfter) {
this.skipGeneratingSubjectConfirmationNotOnOrAfter = skipGeneratingSubjectConfirmationNotOnOrAfter;
}
@@ -298,7 +306,7 @@
}
public void setSkipGeneratingSubjectConfirmationRecipient(
- final boolean skipGeneratingSubjectConfirmationRecipient) {
+ final boolean skipGeneratingSubjectConfirmationRecipient) {
this.skipGeneratingSubjectConfirmationRecipient = skipGeneratingSubjectConfirmationRecipient;
}
@@ -315,7 +323,7 @@
}
public void setSkipGeneratingSubjectConfirmationNotBefore(
- final boolean skipGeneratingSubjectConfirmationNotBefore) {
+ final boolean skipGeneratingSubjectConfirmationNotBefore) {
this.skipGeneratingSubjectConfirmationNotBefore = skipGeneratingSubjectConfirmationNotBefore;
}
@@ -356,7 +364,7 @@
}
public void setSkipGeneratingServiceProviderNameIdQualifier(
- final boolean skipGeneratingServiceProviderNameIdQualifier) {
+ final boolean skipGeneratingServiceProviderNameIdQualifier) {
this.skipGeneratingServiceProviderNameIdQualifier = skipGeneratingServiceProviderNameIdQualifier;
}
@@ -408,14 +416,22 @@
this.requiredNameIdFormat = requiredNameIdFormat;
}
- public Integer getSkewAllowance() {
+ public String getSkewAllowance() {
return skewAllowance;
}
- public void setSkewAllowance(final Integer skewAllowance) {
+ public void setSkewAllowance(final String skewAllowance) {
this.skewAllowance = skewAllowance;
}
+ public String getValidityUntil() {
+ return validityUntil;
+ }
+
+ public void setValidityUntil(final String validityUntil) {
+ this.validityUntil = validityUntil;
+ }
+
public String getNameIdQualifier() {
return nameIdQualifier;
}
@@ -490,10 +506,10 @@
.append(this.encryptAttributes, rhs.encryptAttributes)
.append(this.skipGeneratingAssertionNameId, rhs.skipGeneratingAssertionNameId)
.append(this.skipGeneratingSubjectConfirmationInResponseTo,
- rhs.skipGeneratingSubjectConfirmationInResponseTo)
+ rhs.skipGeneratingSubjectConfirmationInResponseTo)
.append(this.skipGeneratingResponseInResponseTo, rhs.skipGeneratingResponseInResponseTo)
.append(this.skipGeneratingSubjectConfirmationNotOnOrAfter,
- rhs.skipGeneratingSubjectConfirmationNotOnOrAfter)
+ rhs.skipGeneratingSubjectConfirmationNotOnOrAfter)
.append(this.skipGeneratingSubjectConfirmationRecipient, rhs.skipGeneratingSubjectConfirmationRecipient)
.append(this.skipGeneratingSubjectConfirmationAddress, rhs.skipGeneratingSubjectConfirmationAddress)
.append(this.skipGeneratingSubjectConfirmationNotBefore, rhs.skipGeneratingSubjectConfirmationNotBefore)
@@ -502,7 +518,7 @@
.append(this.skipGeneratingTransientNameId, rhs.skipGeneratingTransientNameId)
.append(this.skipValidatingAuthnRequest, rhs.skipValidatingAuthnRequest)
.append(this.skipGeneratingServiceProviderNameIdQualifier,
- rhs.skipGeneratingServiceProviderNameIdQualifier)
+ rhs.skipGeneratingServiceProviderNameIdQualifier)
.append(this.skipGeneratingAuthenticatingAuthority, rhs.skipGeneratingAuthenticatingAuthority)
.append(this.skipGeneratingNameIdQualifier, rhs.skipGeneratingNameIdQualifier)
.append(this.skipGeneratingSessionNotOnOrAfter, rhs.skipGeneratingSessionNotOnOrAfter)
@@ -511,6 +527,7 @@
.append(this.requiredAuthenticationContextClass, rhs.requiredAuthenticationContextClass)
.append(this.requiredNameIdFormat, rhs.requiredNameIdFormat)
.append(this.skewAllowance, rhs.skewAllowance)
+ .append(this.validityUntil, rhs.validityUntil)
.append(this.nameIdQualifier, rhs.nameIdQualifier)
.append(this.assertionAudiences, rhs.assertionAudiences)
.append(this.serviceProviderNameIdQualifier, rhs.serviceProviderNameIdQualifier)
@@ -561,6 +578,7 @@
.append(requiredAuthenticationContextClass)
.append(requiredNameIdFormat)
.append(skewAllowance)
+ .append(validityUntil)
.append(nameIdQualifier)
.append(assertionAudiences)
.append(serviceProviderNameIdQualifier)
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/am/SAML2SPClientApp.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/am/SAML2SPClientApp.java
index 1cde400..5a9d879 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/am/SAML2SPClientApp.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/am/SAML2SPClientApp.java
@@ -100,7 +100,7 @@
boolean isSkipGeneratingSubjectConfirmationInResponseTo();
void setSkipGeneratingSubjectConfirmationInResponseTo(boolean skipGeneratingSubjectConfirmationInResponseTo);
-
+
boolean isSkipGeneratingResponseInResponseTo();
void setSkipGeneratingResponseInResponseTo(boolean skipGeneratingResponseInResponseTo);
@@ -165,9 +165,13 @@
SAML2SPNameId getRequiredNameIdFormat();
- void setSkewAllowance(Integer location);
+ void setSkewAllowance(String skewAllowance);
- Integer getSkewAllowance();
+ String getSkewAllowance();
+
+ void setValidityUntil(String validityUntil);
+
+ String getValidityUntil();
void setNameIdQualifier(String location);
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/am/JPASAML2SPClientApp.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/am/JPASAML2SPClientApp.java
index 3b36352..6de6d26 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/am/JPASAML2SPClientApp.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/am/JPASAML2SPClientApp.java
@@ -70,7 +70,7 @@
private boolean encryptAttributes;
private boolean skipGeneratingAssertionNameId;
-
+
private boolean logoutResponseEnable;
@Column(name = "skipGeneSubjectConfInRespTo")
@@ -118,7 +118,9 @@
private SAML2SPNameId requiredNameIdFormat;
- private Integer skewAllowance;
+ private String skewAllowance;
+
+ private String validityUntil;
private String nameIdQualifier;
@@ -262,7 +264,7 @@
@Override
public void setSubjectLocality(final String subjectLocality) {
- this.subjectLocality = subjectLocality;
+ this.subjectLocality = subjectLocality;
}
@Override
@@ -352,7 +354,7 @@
@Override
public void setSkipGeneratingSubjectConfirmationInResponseTo(
- final boolean skipGeneratingSubjectConfirmationInResponseTo) {
+ final boolean skipGeneratingSubjectConfirmationInResponseTo) {
this.skipGeneratingSubjectConfirmationInResponseTo = skipGeneratingSubjectConfirmationInResponseTo;
}
@@ -373,7 +375,7 @@
@Override
public void setSkipGeneratingSubjectConfirmationNotOnOrAfter(
- final boolean skipGeneratingSubjectConfirmationNotOnOrAfter) {
+ final boolean skipGeneratingSubjectConfirmationNotOnOrAfter) {
this.skipGeneratingSubjectConfirmationNotOnOrAfter = skipGeneratingSubjectConfirmationNotOnOrAfter;
}
@@ -384,7 +386,7 @@
@Override
public void setSkipGeneratingSubjectConfirmationRecipient(
- final boolean skipGeneratingSubjectConfirmationRecipient) {
+ final boolean skipGeneratingSubjectConfirmationRecipient) {
this.skipGeneratingSubjectConfirmationRecipient = skipGeneratingSubjectConfirmationRecipient;
}
@@ -405,7 +407,7 @@
@Override
public void setSkipGeneratingSubjectConfirmationNotBefore(
- final boolean skipGeneratingSubjectConfirmationNotBefore) {
+ final boolean skipGeneratingSubjectConfirmationNotBefore) {
this.skipGeneratingSubjectConfirmationNotBefore = skipGeneratingSubjectConfirmationNotBefore;
}
@@ -456,7 +458,7 @@
@Override
public void setSkipGeneratingServiceProviderNameIdQualifier(
- final boolean skipGeneratingServiceProviderNameIdQualifier) {
+ final boolean skipGeneratingServiceProviderNameIdQualifier) {
this.skipGeneratingServiceProviderNameIdQualifier = skipGeneratingServiceProviderNameIdQualifier;
}
@@ -521,16 +523,26 @@
}
@Override
- public Integer getSkewAllowance() {
+ public String getSkewAllowance() {
return skewAllowance;
}
@Override
- public void setSkewAllowance(final Integer skewAllowance) {
+ public void setSkewAllowance(final String skewAllowance) {
this.skewAllowance = skewAllowance;
}
@Override
+ public String getValidityUntil() {
+ return validityUntil;
+ }
+
+ @Override
+ public void setValidityUntil(final String validityUntil) {
+ this.validityUntil = validityUntil;
+ }
+
+ @Override
public String getNameIdQualifier() {
return nameIdQualifier;
}
diff --git a/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/entity/am/Neo4jSAML2SPClientApp.java b/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/entity/am/Neo4jSAML2SPClientApp.java
index 3f9c120..dbc9fcb 100644
--- a/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/entity/am/Neo4jSAML2SPClientApp.java
+++ b/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/entity/am/Neo4jSAML2SPClientApp.java
@@ -113,7 +113,9 @@
private SAML2SPNameId requiredNameIdFormat;
- private Integer skewAllowance;
+ private String skewAllowance;
+
+ private String validityUntil;
private String nameIdQualifier;
@@ -337,7 +339,7 @@
@Override
public void setSkipGeneratingSubjectConfirmationInResponseTo(
- final boolean skipGeneratingSubjectConfirmationInResponseTo) {
+ final boolean skipGeneratingSubjectConfirmationInResponseTo) {
this.skipGeneratingSubjectConfirmationInResponseTo = skipGeneratingSubjectConfirmationInResponseTo;
}
@@ -358,7 +360,7 @@
@Override
public void setSkipGeneratingSubjectConfirmationNotOnOrAfter(
- final boolean skipGeneratingSubjectConfirmationNotOnOrAfter) {
+ final boolean skipGeneratingSubjectConfirmationNotOnOrAfter) {
this.skipGeneratingSubjectConfirmationNotOnOrAfter = skipGeneratingSubjectConfirmationNotOnOrAfter;
}
@@ -369,7 +371,7 @@
@Override
public void setSkipGeneratingSubjectConfirmationRecipient(
- final boolean skipGeneratingSubjectConfirmationRecipient) {
+ final boolean skipGeneratingSubjectConfirmationRecipient) {
this.skipGeneratingSubjectConfirmationRecipient = skipGeneratingSubjectConfirmationRecipient;
}
@@ -390,7 +392,7 @@
@Override
public void setSkipGeneratingSubjectConfirmationNotBefore(
- final boolean skipGeneratingSubjectConfirmationNotBefore) {
+ final boolean skipGeneratingSubjectConfirmationNotBefore) {
this.skipGeneratingSubjectConfirmationNotBefore = skipGeneratingSubjectConfirmationNotBefore;
}
@@ -441,7 +443,7 @@
@Override
public void setSkipGeneratingServiceProviderNameIdQualifier(
- final boolean skipGeneratingServiceProviderNameIdQualifier) {
+ final boolean skipGeneratingServiceProviderNameIdQualifier) {
this.skipGeneratingServiceProviderNameIdQualifier = skipGeneratingServiceProviderNameIdQualifier;
}
@@ -506,16 +508,26 @@
}
@Override
- public Integer getSkewAllowance() {
+ public String getSkewAllowance() {
return skewAllowance;
}
@Override
- public void setSkewAllowance(final Integer skewAllowance) {
+ public void setSkewAllowance(final String skewAllowance) {
this.skewAllowance = skewAllowance;
}
@Override
+ public String getValidityUntil() {
+ return validityUntil;
+ }
+
+ @Override
+ public void setValidityUntil(final String validityUntil) {
+ this.validityUntil = validityUntil;
+ }
+
+ @Override
public String getNameIdQualifier() {
return nameIdQualifier;
}
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ClientAppDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ClientAppDataBinderImpl.java
index 753c6a4..f5851bc 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ClientAppDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ClientAppDataBinderImpl.java
@@ -148,21 +148,21 @@
clientApp.setEncryptAttributes(clientAppTO.isEncryptAttributes());
clientApp.setSkipGeneratingAssertionNameId(clientAppTO.isSkipGeneratingAssertionNameId());
clientApp.setSkipGeneratingSubjectConfirmationInResponseTo(
- clientAppTO.isSkipGeneratingSubjectConfirmationInResponseTo());
+ clientAppTO.isSkipGeneratingSubjectConfirmationInResponseTo());
clientApp.setSkipGeneratingResponseInResponseTo(clientAppTO.isSkipGeneratingResponseInResponseTo());
clientApp.setSkipGeneratingSubjectConfirmationNotOnOrAfter(
- clientAppTO.isSkipGeneratingSubjectConfirmationNotOnOrAfter());
+ clientAppTO.isSkipGeneratingSubjectConfirmationNotOnOrAfter());
clientApp.setSkipGeneratingSubjectConfirmationRecipient(
- clientAppTO.isSkipGeneratingSubjectConfirmationRecipient());
+ clientAppTO.isSkipGeneratingSubjectConfirmationRecipient());
clientApp.setSkipGeneratingSubjectConfirmationAddress(clientAppTO.isSkipGeneratingSubjectConfirmationAddress());
clientApp.setSkipGeneratingSubjectConfirmationNotBefore(
- clientAppTO.isSkipGeneratingSubjectConfirmationNotBefore());
+ clientAppTO.isSkipGeneratingSubjectConfirmationNotBefore());
clientApp.setSkipGeneratingSubjectConfirmationNameId(clientAppTO.isSkipGeneratingSubjectConfirmationNameId());
clientApp.setSkipGeneratingNameIdQualifiers(clientAppTO.isSkipGeneratingNameIdQualifiers());
clientApp.setSkipGeneratingTransientNameId(clientAppTO.isSkipGeneratingTransientNameId());
clientApp.setSkipValidatingAuthnRequest(clientAppTO.isSkipValidatingAuthnRequest());
clientApp.setSkipGeneratingServiceProviderNameIdQualifier(
- clientAppTO.isSkipGeneratingServiceProviderNameIdQualifier());
+ clientAppTO.isSkipGeneratingServiceProviderNameIdQualifier());
clientApp.setSkipGeneratingAuthenticatingAuthority(clientAppTO.isSkipGeneratingAuthenticatingAuthority());
clientApp.setSkipGeneratingNameIdQualifier(clientAppTO.isSkipGeneratingNameIdQualifier());
clientApp.setSkipGeneratingSessionNotOnOrAfter(clientAppTO.isSkipGeneratingSessionNotOnOrAfter());
@@ -170,6 +170,7 @@
clientApp.setRequiredAuthenticationContextClass(clientAppTO.getRequiredAuthenticationContextClass());
clientApp.setRequiredNameIdFormat(clientAppTO.getRequiredNameIdFormat());
clientApp.setSkewAllowance(clientAppTO.getSkewAllowance());
+ clientApp.setValidityUntil(clientAppTO.getValidityUntil());
clientApp.setNameIdQualifier(clientAppTO.getNameIdQualifier());
clientApp.getAssertionAudiences().clear();
clientApp.getAssertionAudiences().addAll(clientAppTO.getAssertionAudiences());
@@ -244,21 +245,21 @@
clientAppTO.setEncryptAttributes(clientApp.isEncryptAttributes());
clientAppTO.setSkipGeneratingAssertionNameId(clientApp.isSkipGeneratingAssertionNameId());
clientAppTO.setSkipGeneratingSubjectConfirmationInResponseTo(
- clientApp.isSkipGeneratingSubjectConfirmationInResponseTo());
+ clientApp.isSkipGeneratingSubjectConfirmationInResponseTo());
clientAppTO.setSkipGeneratingResponseInResponseTo(clientApp.isSkipGeneratingResponseInResponseTo());
clientAppTO.setSkipGeneratingSubjectConfirmationNotOnOrAfter(
- clientApp.isSkipGeneratingSubjectConfirmationNotOnOrAfter());
+ clientApp.isSkipGeneratingSubjectConfirmationNotOnOrAfter());
clientAppTO.setSkipGeneratingSubjectConfirmationRecipient(
- clientApp.isSkipGeneratingSubjectConfirmationRecipient());
+ clientApp.isSkipGeneratingSubjectConfirmationRecipient());
clientAppTO.setSkipGeneratingSubjectConfirmationAddress(clientApp.isSkipGeneratingSubjectConfirmationAddress());
clientAppTO.setSkipGeneratingSubjectConfirmationNotBefore(
- clientApp.isSkipGeneratingSubjectConfirmationNotBefore());
+ clientApp.isSkipGeneratingSubjectConfirmationNotBefore());
clientAppTO.setSkipGeneratingSubjectConfirmationNameId(clientApp.isSkipGeneratingSubjectConfirmationNameId());
clientAppTO.setSkipGeneratingNameIdQualifiers(clientApp.isSkipGeneratingNameIdQualifiers());
clientAppTO.setSkipGeneratingTransientNameId(clientApp.isSkipGeneratingTransientNameId());
clientAppTO.setSkipValidatingAuthnRequest(clientApp.isSkipValidatingAuthnRequest());
clientAppTO.setSkipGeneratingServiceProviderNameIdQualifier(
- clientApp.isSkipGeneratingServiceProviderNameIdQualifier());
+ clientApp.isSkipGeneratingServiceProviderNameIdQualifier());
clientAppTO.setSkipGeneratingAuthenticatingAuthority(clientApp.isSkipGeneratingAuthenticatingAuthority());
clientAppTO.setSkipGeneratingNameIdQualifier(clientApp.isSkipGeneratingNameIdQualifier());
clientAppTO.setSkipGeneratingSessionNotOnOrAfter(clientApp.isSkipGeneratingSessionNotOnOrAfter());
@@ -266,6 +267,7 @@
clientAppTO.setRequiredAuthenticationContextClass(clientApp.getRequiredAuthenticationContextClass());
clientAppTO.setRequiredNameIdFormat(clientApp.getRequiredNameIdFormat());
clientAppTO.setSkewAllowance(clientApp.getSkewAllowance());
+ clientAppTO.setValidityUntil(clientApp.getValidityUntil());
clientAppTO.setNameIdQualifier(clientApp.getNameIdQualifier());
clientAppTO.getAssertionAudiences().addAll(clientApp.getAssertionAudiences());
clientAppTO.setServiceProviderNameIdQualifier(clientApp.getServiceProviderNameIdQualifier());
diff --git a/fit/wa-reference/src/test/java/org/apache/syncope/fit/sra/OAUTH2SRAITCase.java b/fit/wa-reference/src/test/java/org/apache/syncope/fit/sra/OAUTH2SRAITCase.java
index aa2689b..cec0d75 100644
--- a/fit/wa-reference/src/test/java/org/apache/syncope/fit/sra/OAUTH2SRAITCase.java
+++ b/fit/wa-reference/src/test/java/org/apache/syncope/fit/sra/OAUTH2SRAITCase.java
@@ -66,7 +66,7 @@
@Override
protected void checkLogout(final CloseableHttpResponse response) {
- assertEquals(HttpStatus.SC_NOT_FOUND, response.getStatusLine().getStatusCode());
+ assertEquals(HttpStatus.SC_OK, response.getStatusLine().getStatusCode());
}
@Override
diff --git a/fit/wa-reference/src/test/java/org/apache/syncope/fit/ui/OIDCC4UIITCase.java b/fit/wa-reference/src/test/java/org/apache/syncope/fit/ui/OIDCC4UIITCase.java
index 839a28a..8a65494 100644
--- a/fit/wa-reference/src/test/java/org/apache/syncope/fit/ui/OIDCC4UIITCase.java
+++ b/fit/wa-reference/src/test/java/org/apache/syncope/fit/ui/OIDCC4UIITCase.java
@@ -394,7 +394,6 @@
assertNotNull(passwordResetBody);
// check WA reset password screen
- assertTrue(passwordResetBody.contains("currentPassword"));
assertTrue(passwordResetBody.contains("password"));
assertTrue(passwordResetBody.contains("confirmedPassword"));
assertTrue(passwordResetBody.contains("execution"));
@@ -406,7 +405,6 @@
List<NameValuePair> form = new ArrayList<>();
form.add(new BasicNameValuePair("_eventId", "submit"));
form.add(new BasicNameValuePair("execution", execution));
- form.add(new BasicNameValuePair("currentPassword", password));
form.add(new BasicNameValuePair("password", newpassword));
form.add(new BasicNameValuePair("confirmedPassword", newpassword));
diff --git a/fit/wa-reference/src/test/java/org/apache/syncope/fit/ui/SAML2SP4UIITCase.java b/fit/wa-reference/src/test/java/org/apache/syncope/fit/ui/SAML2SP4UIITCase.java
index 708dc9a..cf2c64f 100644
--- a/fit/wa-reference/src/test/java/org/apache/syncope/fit/ui/SAML2SP4UIITCase.java
+++ b/fit/wa-reference/src/test/java/org/apache/syncope/fit/ui/SAML2SP4UIITCase.java
@@ -379,7 +379,6 @@
responseBody = EntityUtils.toString(response.getEntity());
// check WA reset password screen
- assertTrue(responseBody.contains("currentPassword"));
assertTrue(responseBody.contains("password"));
assertTrue(responseBody.contains("confirmedPassword"));
assertTrue(responseBody.contains("execution"));
@@ -392,7 +391,6 @@
List<NameValuePair> form = new ArrayList<>();
form.add(new BasicNameValuePair("_eventId", "submit"));
form.add(new BasicNameValuePair("execution", execution));
- form.add(new BasicNameValuePair("currentPassword", password));
form.add(new BasicNameValuePair("password", newpassword));
form.add(new BasicNameValuePair("confirmedPassword", newpassword));
diff --git a/pom.xml b/pom.xml
index 0a22458..1616751 100644
--- a/pom.xml
+++ b/pom.xml
@@ -451,7 +451,7 @@
<disruptor.version>4.0.0</disruptor.version>
- <elasticsearch.version>9.4.1</elasticsearch.version>
+ <elasticsearch.version>9.4.2</elasticsearch.version>
<opensearch.version>3.6.0</opensearch.version>
<opensearch-java.version>3.8.0</opensearch-java.version>
@@ -464,13 +464,13 @@
<commons-text.version>1.15.0</commons-text.version>
<commons-codec.version>1.22.0</commons-codec.version>
- <pac4j.version>6.4.3</pac4j.version>
+ <pac4j.version>6.5.2</pac4j.version>
- <cas.version>8.0.0-RC4</cas.version>
+ <cas.version>8.0.0-RC5</cas.version>
<cas-client.version>4.1.1</cas-client.version>
<swagger-core.version>2.2.50</swagger-core.version>
- <swagger-ui.version>5.32.5</swagger-ui.version>
+ <swagger-ui.version>5.32.6</swagger-ui.version>
<jquery-slimscroll.version>1.3.8</jquery-slimscroll.version>
<jquery-cookie.version>1.4.1-1</jquery-cookie.version>
@@ -485,7 +485,7 @@
<chartjs.version>4.4.3</chartjs.version>
<wicket.version>10.9.1</wicket.version>
- <wicketstuff.version>10.9.1</wicketstuff.version>
+ <wicketstuff.version>10.9.2</wicketstuff.version>
<wicket-bootstrap.version>7.0.14</wicket-bootstrap.version>
<wicket-spring-boot.version>5.0.0</wicket-spring-boot.version>
diff --git a/wa/starter/src/main/java/org/apache/syncope/wa/starter/config/WAContext.java b/wa/starter/src/main/java/org/apache/syncope/wa/starter/config/WAContext.java
index 8516f74..abb4ae1 100644
--- a/wa/starter/src/main/java/org/apache/syncope/wa/starter/config/WAContext.java
+++ b/wa/starter/src/main/java/org/apache/syncope/wa/starter/config/WAContext.java
@@ -83,7 +83,7 @@
import org.apereo.cas.configuration.model.support.mfa.gauth.LdapGoogleAuthenticatorMultifactorProperties;
import org.apereo.cas.configuration.model.support.pm.PasswordManagementProperties;
import org.apereo.cas.configuration.support.JpaBeans;
-import org.apereo.cas.consent.ConsentRepository;
+import org.apereo.cas.consent.ConsentRepositoryBuilder;
import org.apereo.cas.gauth.CasGoogleAuthenticator;
import org.apereo.cas.gauth.credential.LdapGoogleAuthenticatorTokenCredentialRepository;
import org.apereo.cas.multitenancy.TenantsManager;
@@ -111,6 +111,7 @@
import org.apereo.cas.util.LdapUtils;
import org.apereo.cas.util.crypto.CipherExecutor;
import org.apereo.cas.util.spring.CasApplicationReadyListener;
+import org.apereo.cas.util.spring.beans.BeanSupplier;
import org.apereo.cas.webauthn.storage.WebAuthnCredentialRepository;
import org.ldaptive.ConnectionFactory;
import org.pac4j.core.client.Client;
@@ -572,8 +573,11 @@
@RefreshScope(proxyMode = ScopedProxyMode.DEFAULT)
@Bean
- public ConsentRepository consentRepository(final WARestClient waRestClient) {
- return new WAConsentRepository(waRestClient);
+ public ConsentRepositoryBuilder waConsentRepositoryBuilder(final WARestClient waRestClient) {
+ return BeanSupplier.of(ConsentRepositoryBuilder.class).
+ supply(() -> () -> new WAConsentRepository(waRestClient)).
+ otherwiseProxy().
+ get();
}
@Bean
diff --git a/wa/starter/src/main/java/org/apache/syncope/wa/starter/mapping/SAML2SPClientAppTOMapper.java b/wa/starter/src/main/java/org/apache/syncope/wa/starter/mapping/SAML2SPClientAppTOMapper.java
index 2a8a163..a93e483 100644
--- a/wa/starter/src/main/java/org/apache/syncope/wa/starter/mapping/SAML2SPClientAppTOMapper.java
+++ b/wa/starter/src/main/java/org/apache/syncope/wa/starter/mapping/SAML2SPClientAppTOMapper.java
@@ -72,11 +72,11 @@
service.setEncryptAssertions(sp.isEncryptAssertions());
service.setSubjectLocality(sp.getSubjectLocality());
service.setLogoutResponseBinding(
- Optional.ofNullable(sp.getLogoutResponseBinding()).map(Enum::name).orElse(null));
+ Optional.ofNullable(sp.getLogoutResponseBinding()).map(Enum::name).orElse(null));
service.setMetadataCriteriaDirection(sp.getMetadataCriteriaDirection().name());
service.setMetadataCriteriaPattern(sp.getMetadataCriteriaPattern());
service.setSigningCredentialType(
- Optional.ofNullable(sp.getSigningCredentialType()).map(Enum::name).orElse(null));
+ Optional.ofNullable(sp.getSigningCredentialType()).map(Enum::name).orElse(null));
service.setEncryptAttributes(sp.isEncryptAttributes());
service.setRequireSignedRoot(sp.isRequireSignedRoot());
service.setLogoutResponseEnabled(sp.isLogoutResponseEnabled());
@@ -98,7 +98,8 @@
service.setValidateMetadataCertificates(sp.isValidateMetadataCertificates());
service.setRequiredAuthenticationContextClass(sp.getRequiredAuthenticationContextClass());
service.setRequiredNameIdFormat(sp.getRequiredNameIdFormat().getNameId());
- service.setSkewAllowance(Optional.ofNullable(sp.getSkewAllowance()).orElse(0));
+ service.setSkewAllowance(Optional.ofNullable(sp.getSkewAllowance()).orElse(null));
+ service.setValidityUntil(Optional.ofNullable(sp.getValidityUntil()).orElse(null));
service.setNameIdQualifier(sp.getNameIdQualifier());
if (!sp.getAssertionAudiences().isEmpty()) {
service.setAssertionAudiences(String.join(",", sp.getAssertionAudiences()));
diff --git a/wa/starter/src/main/java/org/apache/syncope/wa/starter/multitenancy/WATenantsManager.java b/wa/starter/src/main/java/org/apache/syncope/wa/starter/multitenancy/WATenantsManager.java
index ac68ea3..b400b9d 100644
--- a/wa/starter/src/main/java/org/apache/syncope/wa/starter/multitenancy/WATenantsManager.java
+++ b/wa/starter/src/main/java/org/apache/syncope/wa/starter/multitenancy/WATenantsManager.java
@@ -123,4 +123,21 @@
domainOps.list().forEach(domain -> findTenant(domain.getKey()).ifPresent(tenants::add));
return tenants;
}
+
+ @Override
+ public TenantDefinition save(final TenantDefinition tenantDefinition) {
+ // Syncope Domains are managed by Core
+ return tenantDefinition;
+ }
+
+ @Override
+ public boolean delete(final String tenantId) {
+ // Syncope Domains are managed by Core
+ return false;
+ }
+
+ @Override
+ public void load() {
+ // nothing to do
+ }
}