/**
* Copyright 2015-2016 Red Hat, Inc, and individual contributors.
*
* 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.wildfly.swarm.management;
import javax.annotation.PostConstruct;
import org.wildfly.swarm.config.ManagementCoreService;
import org.wildfly.swarm.config.management.HTTPInterfaceManagementInterfaceConsumer;
import org.wildfly.swarm.config.runtime.AttributeDocumentation;
import org.wildfly.swarm.spi.api.Defaultable;
import org.wildfly.swarm.spi.api.Fraction;
import org.wildfly.swarm.spi.api.annotations.Configurable;
import org.wildfly.swarm.spi.api.annotations.MarshalDMR;
import static org.wildfly.swarm.management.ManagementProperties.DEFAULT_HTTPS_PORT;
import static org.wildfly.swarm.management.ManagementProperties.DEFAULT_HTTP_PORT;
import static org.wildfly.swarm.spi.api.Defaultable.bool;
import static org.wildfly.swarm.spi.api.Defaultable.integer;
/**
* @author Bob McWhirter
*/
@MarshalDMR
@Configurable("swarm.management")
public class ManagementFraction extends ManagementCoreService<ManagementFraction> implements Fraction<ManagementFraction> {
public ManagementFraction() {
}
public static ManagementFraction createDefaultFraction() {
return new ManagementFraction().applyDefaults();
}
@PostConstruct
public void postConstruct() {
applyDefaults();
}
public static final String JSON_FORMATTER = "json-formatter";
public static final String AUDIT_LOG_FILE = "audit-log.log";
public static final String FILE_HANDLER = "file";
public ManagementFraction applyDefaults() {
httpInterfaceManagementInterface();
auditAccess((access) -> {
access.jsonFormatter(JSON_FORMATTER, (formatter) -> {
});
access.fileHandler(FILE_HANDLER, (handler) -> {
handler.formatter(JSON_FORMATTER);
handler.path(AUDIT_LOG_FILE);
handler.relativeTo("user.dir");
});
access.auditLogLogger((logger) -> {
logger.logBoot(true);
logger.logReadOnly(true);
logger.enabled(false);
logger.handler(FILE_HANDLER);
});
});
return this;
}
@Override
public ManagementFraction httpInterfaceManagementInterface() {
return httpInterfaceManagementInterface((iface) -> {
});
}
@SuppressWarnings("unchecked")
@Override
public ManagementFraction httpInterfaceManagementInterface(HTTPInterfaceManagementInterfaceConsumer consumer) {
return super.httpInterfaceManagementInterface((iface) -> {
iface.consoleEnabled(false);
iface.httpUpgradeEnabled(true);
iface.socketBinding("management-http");
consumer.accept(iface);
});
}
public ManagementFraction securityRealm(String childKey, EnhancedSecurityRealmConsumer consumer) {
return securityRealm(() -> {
EnhancedSecurityRealm realm = new EnhancedSecurityRealm(childKey);
consumer.accept(realm);
return realm;
});
}
public ManagementFraction httpPort(int port) {
this.httpPort.set(port);
return this;
}
public int httpPort() {
return this.httpPort.get();
}
public ManagementFraction httpsPort(int port) {
this.httpsPort.set(port);
return this;
}
public int httpsPort() {
return this.httpsPort.get();
}
public ManagementFraction httpDisable(boolean httpDisable) {
this.httpDisable.set(httpDisable);
return this;
}
public boolean isHttpDisable() {
return this.httpDisable.get();
}
public ManagementFraction enableDefaultAuditAccess() {
subresources().auditAccess().subresources().auditLogLogger().enabled(true);
return this;
}
@AttributeDocumentation("Port for HTTP access to management interface")
@Configurable("swarm.management.http.port")
private Defaultable<Integer> httpPort = integer(DEFAULT_HTTP_PORT);
@AttributeDocumentation("Port for HTTPS access to management interface")
@Configurable("swarm.management.https.port")
private Defaultable<Integer> httpsPort = integer(DEFAULT_HTTPS_PORT);
@AttributeDocumentation("Flag to disable HTTP access to management interface")
@Configurable("swarm.management.http.disable")
private Defaultable<Boolean> httpDisable = bool(false);
}