package org.wildfly.swarm.jolokia.access; import java.util.ArrayList; import java.util.List; /** * API for jolokia-access.xml configuration. * * @author Bob McWhirter */ public class JolokiaAccess { public JolokiaAccess() { } public JolokiaAccess host(String host) { this.hosts.add(host); return this; } public JolokiaAccess command(String command) { this.commands.add(command); return this; } public JolokiaAccess httpMethod(String method) { this.methods.add(method); return this; } public JolokiaAccess allowOrigin(String origin) { this.origins.add(origin); return this; } public JolokiaAccess strictChecking() { this.strictChecking = true; return this; } public JolokiaAccess allow(Section.Consumer config) { Section rule = Section.allow(); config.accept(rule); this.sections.add(rule); return this; } public JolokiaAccess deny(Section.Consumer config) { Section rule = Section.deny(); config.accept(rule); this.sections.add(rule); return this; } public String toXML() { StringBuilder builder = new StringBuilder(); builder.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"); builder.append("<restrict>\n"); if (!this.hosts.isEmpty()) { builder.append(" <remote>\n"); this.hosts.forEach(e -> { builder.append(" <host>").append(e).append("</host>\n"); }); builder.append(" </remote>\n"); } if (!this.methods.isEmpty()) { builder.append(" <http>\n"); this.methods.forEach(e -> { builder.append(" <method>").append(e).append("</method>\n"); }); builder.append(" </http>\n"); } if (!this.origins.isEmpty()) { builder.append(" <cors>\n"); this.origins.forEach(e -> { builder.append(" <allow-origin>").append(e).append("</allow-origin>\n"); }); if (this.strictChecking) { builder.append(" <strict-checking/>\n"); } builder.append(" </cors>\n"); } if (!this.commands.isEmpty()) { builder.append(" <commands>\n"); this.commands.forEach(e -> { builder.append(" <command>").append(e).append("</command>\n"); }); builder.append(" </commands>\n"); } if (!this.sections.isEmpty()) { this.sections.forEach(e -> { builder.append(" <" + e.type() + ">\n"); e.mbeans().forEach(mbean -> { builder.append(" <mbean>\n"); builder.append(" <name>").append(mbean.name()).append("</name>\n"); mbean.attributes().forEach(attr -> { builder.append(" <attribute>").append(mbean.name()).append("</attribute>\n"); }); mbean.operations().forEach(attr -> { builder.append(" <operation>").append(mbean.name()).append("</operation>\n"); }); builder.append(" </mbean>\n"); }); builder.append(" </" + e.type() + ">\n"); }); } builder.append("</restrict>\n"); return builder.toString(); } private List<String> hosts = new ArrayList<>(); private List<String> origins = new ArrayList<>(); private List<String> methods = new ArrayList<>(); private List<String> commands = new ArrayList<>(); private boolean strictChecking = false; private List<Section> sections = new ArrayList<>(); public interface Supplier extends java.util.function.Supplier<JolokiaAccess> { } public interface Consumer extends java.util.function.Consumer<JolokiaAccess> { } }