package org.apereo.cas.configuration.model.core;
import org.apereo.cas.CasProtocolConstants;
import org.apereo.cas.configuration.support.Beans;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import java.util.LinkedHashMap;
import java.util.Map;
/**
* This is {@link CasServerProperties}.
*
* @author Misagh Moayyed
* @since 5.0.0
*/
public class CasServerProperties {
private Resource rewriteValveConfigLocation = new ClassPathResource("container/tomcat/rewrite.config");
private String name = "https://cas.example.org:8443";
private String prefix = name.concat("/cas");
private Ajp ajp = new Ajp();
private Http http = new Http();
private HttpProxy httpProxy = new HttpProxy();
private SslValve sslValve = new SslValve();
private ExtendedAccessLog extAccessLog = new ExtendedAccessLog();
public HttpProxy getHttpProxy() {
return httpProxy;
}
public void setHttpProxy(final HttpProxy httpProxy) {
this.httpProxy = httpProxy;
}
public Resource getRewriteValveConfigLocation() {
return rewriteValveConfigLocation;
}
public void setRewriteValveConfigLocation(final Resource rewriteValveConfigLocation) {
this.rewriteValveConfigLocation = rewriteValveConfigLocation;
}
public ExtendedAccessLog getExtAccessLog() {
return extAccessLog;
}
public void setExtAccessLog(final ExtendedAccessLog extAccessLog) {
this.extAccessLog = extAccessLog;
}
public Http getHttp() {
return http;
}
public void setHttp(final Http http) {
this.http = http;
}
public Ajp getAjp() {
return ajp;
}
public void setAjp(final Ajp ajp) {
this.ajp = ajp;
}
public SslValve getSslValve() {
return sslValve;
}
public void setSslValve(final SslValve sslValve) {
this.sslValve = sslValve;
}
public String getName() {
return name;
}
public void setName(final String name) {
this.name = name;
}
public String getPrefix() {
return prefix;
}
public void setPrefix(final String prefix) {
this.prefix = prefix;
}
public String getLoginUrl() {
return getPrefix().concat(CasProtocolConstants.ENDPOINT_LOGIN);
}
public String getLogoutUrl() {
return getPrefix().concat(CasProtocolConstants.ENDPOINT_LOGOUT);
}
public static class Ajp {
private String protocol = "AJP/1.3";
private int port = 8009;
private boolean secure;
private boolean allowTrace;
private String scheme = "http";
private boolean enabled;
private String asyncTimeout = "PT5S";
private boolean enableLookups;
private int maxPostSize = 20971520;
private int proxyPort = -1;
private int redirectPort = -1;
private Map<String, Object> attributes = new LinkedHashMap<>();
public Map<String, Object> getAttributes() {
return attributes;
}
public void setAttributes(final Map<String, Object> attributes) {
this.attributes = attributes;
}
public String getProtocol() {
return protocol;
}
public void setProtocol(final String protocol) {
this.protocol = protocol;
}
public int getPort() {
return port;
}
public void setPort(final int port) {
this.port = port;
}
public boolean isSecure() {
return secure;
}
public void setSecure(final boolean secure) {
this.secure = secure;
}
public boolean isAllowTrace() {
return allowTrace;
}
public void setAllowTrace(final boolean allowTrace) {
this.allowTrace = allowTrace;
}
public String getScheme() {
return scheme;
}
public void setScheme(final String scheme) {
this.scheme = scheme;
}
public boolean isEnabled() {
return enabled;
}
public void setEnabled(final boolean enabled) {
this.enabled = enabled;
}
public long getAsyncTimeout() {
return Beans.newDuration(asyncTimeout).toMillis();
}
public void setAsyncTimeout(final String asyncTimeout) {
this.asyncTimeout = asyncTimeout;
}
public boolean isEnableLookups() {
return enableLookups;
}
public void setEnableLookups(final boolean enableLookups) {
this.enableLookups = enableLookups;
}
public int getMaxPostSize() {
return maxPostSize;
}
public void setMaxPostSize(final int maxPostSize) {
this.maxPostSize = maxPostSize;
}
public int getProxyPort() {
return proxyPort;
}
public void setProxyPort(final int proxyPort) {
this.proxyPort = proxyPort;
}
public int getRedirectPort() {
return redirectPort;
}
public void setRedirectPort(final int redirectPort) {
this.redirectPort = redirectPort;
}
}
public static class ExtendedAccessLog {
private boolean enabled;
private String pattern = "c-ip s-ip cs-uri sc-status time X-threadname x-H(secure) x-H(remoteUser)";
private String suffix = ".log";
private String prefix = "localhost_access_extended";
private String directory;
public String getDirectory() {
return directory;
}
public void setDirectory(final String directory) {
this.directory = directory;
}
public boolean isEnabled() {
return enabled;
}
public void setEnabled(final boolean enabled) {
this.enabled = enabled;
}
public String getPattern() {
return pattern;
}
public void setPattern(final String pattern) {
this.pattern = pattern;
}
public String getSuffix() {
return suffix;
}
public void setSuffix(final String suffix) {
this.suffix = suffix;
}
public String getPrefix() {
return prefix;
}
public void setPrefix(final String prefix) {
this.prefix = prefix;
}
}
public static class HttpProxy {
private boolean enabled;
private String scheme = "https";
private boolean secure = true;
private int redirectPort;
private int proxyPort;
private String protocol = "AJP/1.3";
private Map<String, Object> attributes = new LinkedHashMap<>();
public Map<String, Object> getAttributes() {
return attributes;
}
public void setAttributes(final Map<String, Object> attributes) {
this.attributes = attributes;
}
public String getProtocol() {
return protocol;
}
public void setProtocol(final String protocol) {
this.protocol = protocol;
}
public int getRedirectPort() {
return redirectPort;
}
public void setRedirectPort(final int redirectPort) {
this.redirectPort = redirectPort;
}
public int getProxyPort() {
return proxyPort;
}
public void setProxyPort(final int proxyPort) {
this.proxyPort = proxyPort;
}
public boolean isEnabled() {
return enabled;
}
public void setEnabled(final boolean enabled) {
this.enabled = enabled;
}
public String getScheme() {
return scheme;
}
public void setScheme(final String scheme) {
this.scheme = scheme;
}
public boolean isSecure() {
return secure;
}
public void setSecure(final boolean secure) {
this.secure = secure;
}
}
public static class Http {
private boolean enabled;
private int port = 8080;
private String protocol = "org.apache.coyote.http11.Http11NioProtocol";
private Map<String, Object> attributes = new LinkedHashMap<>();
public Map<String, Object> getAttributes() {
return attributes;
}
public void setAttributes(final Map<String, Object> attributes) {
this.attributes = attributes;
}
public String getProtocol() {
return protocol;
}
public void setProtocol(final String protocol) {
this.protocol = protocol;
}
public boolean isEnabled() {
return enabled;
}
public void setEnabled(final boolean enabled) {
this.enabled = enabled;
}
public int getPort() {
return port;
}
public void setPort(final int port) {
this.port = port;
}
}
public static class SslValve {
// default enabled for this valve should stay false
// it should only be turned on deliberately
private boolean enabled;
private String sslClientCertHeader = "ssl_client_cert";
private String sslCipherHeader = "ssl_cipher";
private String sslSessionIdHeader = "ssl_session_id";
private String sslCipherUserKeySizeHeader = "ssl_cipher_usekeysize";
public boolean isEnabled() {
return enabled;
}
public void setEnabled(final boolean enabled) {
this.enabled = enabled;
}
public String getSslClientCertHeader() {
return sslClientCertHeader;
}
public void setSslClientCertHeader(final String sslClientCertHeader) {
this.sslClientCertHeader = sslClientCertHeader;
}
public String getSslCipherHeader() {
return sslCipherHeader;
}
public void setSslCipherHeader(final String sslCipherHeader) {
this.sslCipherHeader = sslCipherHeader;
}
public String getSslSessionIdHeader() {
return sslSessionIdHeader;
}
public void setSslSessionIdHeader(final String sslSessionIdHeader) {
this.sslSessionIdHeader = sslSessionIdHeader;
}
public String getSslCipherUserKeySizeHeader() {
return sslCipherUserKeySizeHeader;
}
public void setSslCipherUserKeySizeHeader(final String sslCipherUserKeySizeHeader) {
this.sslCipherUserKeySizeHeader = sslCipherUserKeySizeHeader;
}
}
}