/* * Copyright 2016 Red Hat, Inc. and/or its affiliates * and other contributors as indicated by the @author tags. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.keycloak.broker.saml; import org.keycloak.models.IdentityProviderModel; import org.keycloak.saml.common.util.XmlKeyInfoKeyNameTransformer; /** * @author Pedro Igor */ public class SAMLIdentityProviderConfig extends IdentityProviderModel { public static final XmlKeyInfoKeyNameTransformer DEFAULT_XML_KEY_INFO_KEY_NAME_TRANSFORMER = XmlKeyInfoKeyNameTransformer.NONE; public SAMLIdentityProviderConfig() { } public SAMLIdentityProviderConfig(IdentityProviderModel identityProviderModel) { super(identityProviderModel); } public String getSingleSignOnServiceUrl() { return getConfig().get("singleSignOnServiceUrl"); } public void setSingleSignOnServiceUrl(String singleSignOnServiceUrl) { getConfig().put("singleSignOnServiceUrl", singleSignOnServiceUrl); } public String getSingleLogoutServiceUrl() { return getConfig().get("singleLogoutServiceUrl"); } public void setSingleLogoutServiceUrl(String singleLogoutServiceUrl) { getConfig().put("singleLogoutServiceUrl", singleLogoutServiceUrl); } public boolean isValidateSignature() { return Boolean.valueOf(getConfig().get("validateSignature")); } public void setValidateSignature(boolean validateSignature) { getConfig().put("validateSignature", String.valueOf(validateSignature)); } public boolean isForceAuthn() { return Boolean.valueOf(getConfig().get("forceAuthn")); } public void setForceAuthn(boolean forceAuthn) { getConfig().put("forceAuthn", String.valueOf(forceAuthn)); } /** * @deprecated Prefer {@link #getSigningCertificates()}} * @param signingCertificate */ public String getSigningCertificate() { return getConfig().get(SIGNING_CERTIFICATE_KEY); } /** * @deprecated Prefer {@link #addSigningCertificate(String)}} * @param signingCertificate */ public void setSigningCertificate(String signingCertificate) { getConfig().put(SIGNING_CERTIFICATE_KEY, signingCertificate); } public void addSigningCertificate(String signingCertificate) { String crt = getConfig().get(SIGNING_CERTIFICATE_KEY); if (crt == null || crt.isEmpty()) { getConfig().put(SIGNING_CERTIFICATE_KEY, signingCertificate); } else { // Note that "," is not coding character per PEM format specification: // see https://tools.ietf.org/html/rfc1421, section 4.3.2.4 Step 4: Printable Encoding getConfig().put(SIGNING_CERTIFICATE_KEY, crt + "," + signingCertificate); } } public String[] getSigningCertificates() { String crt = getConfig().get(SIGNING_CERTIFICATE_KEY); if (crt == null || crt.isEmpty()) { return new String[] { }; } // Note that "," is not coding character per PEM format specification: // see https://tools.ietf.org/html/rfc1421, section 4.3.2.4 Step 4: Printable Encoding return crt.split(","); } public static final String SIGNING_CERTIFICATE_KEY = "signingCertificate"; public String getNameIDPolicyFormat() { return getConfig().get("nameIDPolicyFormat"); } public void setNameIDPolicyFormat(String nameIDPolicyFormat) { getConfig().put("nameIDPolicyFormat", nameIDPolicyFormat); } public boolean isWantAuthnRequestsSigned() { return Boolean.valueOf(getConfig().get("wantAuthnRequestsSigned")); } public void setWantAuthnRequestsSigned(boolean wantAuthnRequestsSigned) { getConfig().put("wantAuthnRequestsSigned", String.valueOf(wantAuthnRequestsSigned)); } public boolean isWantAssertionsSigned() { return Boolean.valueOf(getConfig().get("wantAssertionsSigned")); } public void setWantAssertionsSigned(boolean wantAssertionsSigned) { getConfig().put("wantAssertionsSigned", String.valueOf(wantAssertionsSigned)); } public boolean isWantAssertionsEncrypted() { return Boolean.valueOf(getConfig().get("wantAssertionsEncrypted")); } public void setWantAssertionsEncrypted(boolean wantAssertionsEncrypted) { getConfig().put("wantAssertionsEncrypted", String.valueOf(wantAssertionsEncrypted)); } public boolean isAddExtensionsElementWithKeyInfo() { return Boolean.valueOf(getConfig().get("addExtensionsElementWithKeyInfo")); } public void setAddExtensionsElementWithKeyInfo(boolean addExtensionsElementWithKeyInfo) { getConfig().put("addExtensionsElementWithKeyInfo", String.valueOf(addExtensionsElementWithKeyInfo)); } public String getSignatureAlgorithm() { return getConfig().get("signatureAlgorithm"); } public void setSignatureAlgorithm(String signatureAlgorithm) { getConfig().put("signatureAlgorithm", signatureAlgorithm); } public String getEncryptionPublicKey() { return getConfig().get("encryptionPublicKey"); } public void setEncryptionPublicKey(String encryptionPublicKey) { getConfig().put("encryptionPublicKey", encryptionPublicKey); } public boolean isPostBindingAuthnRequest() { return Boolean.valueOf(getConfig().get("postBindingAuthnRequest")); } public void setPostBindingAuthnRequest(boolean postBindingAuthnRequest) { getConfig().put("postBindingAuthnRequest", String.valueOf(postBindingAuthnRequest)); } public boolean isPostBindingResponse() { return Boolean.valueOf(getConfig().get("postBindingResponse")); } public void setPostBindingResponse(boolean postBindingResponse) { getConfig().put("postBindingResponse", String.valueOf(postBindingResponse)); } public boolean isPostBindingLogout() { String postBindingLogout = getConfig().get("postBindingLogout"); if (postBindingLogout == null) { // To maintain unchanged behavior when adding this field, we set the inital value to equal that // of the binding for the response: return isPostBindingResponse(); } return Boolean.valueOf(postBindingLogout); } public void setPostBindingLogout(boolean postBindingLogout) { getConfig().put("postBindingLogout", String.valueOf(postBindingLogout)); } public boolean isBackchannelSupported() { return Boolean.valueOf(getConfig().get("backchannelSupported")); } public void setBackchannelSupported(boolean backchannel) { getConfig().put("backchannelSupported", String.valueOf(backchannel)); } /** * Always returns non-{@code null} result. * @return Configured ransformer of {@link #DEFAULT_XML_KEY_INFO_KEY_NAME_TRANSFORMER} if not set. */ public XmlKeyInfoKeyNameTransformer getXmlSigKeyInfoKeyNameTransformer() { return XmlKeyInfoKeyNameTransformer.from(getConfig().get("xmlSigKeyInfoKeyNameTransformer"), DEFAULT_XML_KEY_INFO_KEY_NAME_TRANSFORMER); } public void setXmlSigKeyInfoKeyNameTransformer(XmlKeyInfoKeyNameTransformer xmlSigKeyInfoKeyNameTransformer) { getConfig().put("xmlSigKeyInfoKeyNameTransformer", xmlSigKeyInfoKeyNameTransformer == null ? null : xmlSigKeyInfoKeyNameTransformer.name()); } }