/**
* 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.keycloak.internal;
import org.jboss.shrinkwrap.api.Node;
import org.jboss.shrinkwrap.api.asset.Asset;
import org.jboss.shrinkwrap.impl.base.ArchiveBase;
import org.jboss.shrinkwrap.impl.base.AssignableBase;
import org.wildfly.swarm.keycloak.Secured;
import org.wildfly.swarm.spi.api.JARArchive;
import org.wildfly.swarm.undertow.descriptors.SecurityConstraint;
import org.wildfly.swarm.undertow.descriptors.WebXmlAsset;
/**
* @author Bob McWhirter
* @author Ken Finnigan
*/
public class SecuredImpl extends AssignableBase<ArchiveBase<?>> implements Secured {
/**
* Constructs a new instance using the underlying specified archive, which is required
*
* @param archive
*/
public SecuredImpl(ArchiveBase<?> archive) {
super(archive);
Node node = getArchive().as(JARArchive.class).get("WEB-INF/web.xml");
if (node == null) {
this.asset = new WebXmlAsset();
getArchive().as(JARArchive.class).add(this.asset);
} else {
Asset asset = node.getAsset();
if (!(asset instanceof WebXmlAsset)) {
this.asset = new WebXmlAsset(asset.openStream());
getArchive().as(JARArchive.class).add(this.asset);
} else {
this.asset = (WebXmlAsset) asset;
}
}
getArchive().as(JARArchive.class).addModule("org.wildfly.swarm.keycloak", "deployment");
getArchive().as(JARArchive.class).addAsServiceProvider("io.undertow.servlet.ServletExtension", "org.wildfly.swarm.keycloak.deployment.SecurityContextServletExtension");
// Setup web.xml
this.asset.setContextParam("resteasy.scan", "true");
this.asset.setLoginConfig("KEYCLOAK", "ignored");
}
@Override
public SecurityConstraint protect() {
return this.asset.protect();
}
@Override
public SecurityConstraint protect(String urlPattern) {
return this.asset.protect(urlPattern);
}
private WebXmlAsset asset;
}