diff --git a/distribution/feature-pack-builds/README.md b/distribution/feature-pack-builds/README.md
new file mode 100644
index 0000000000..fe4c55a49f
--- /dev/null
+++ b/distribution/feature-pack-builds/README.md
@@ -0,0 +1,25 @@
+Keycloak Feature Pack Builds
+============================
+
+The feature pack builds rely on WildFly Feature packs to create different combinations
+of Keycloak server/adapter and WildFly web/full.
+
+Types of Builds Created
+--------------------
+The three directories under feature-pack-builds are _adapter-only_, _server-only_, and _server-and-adapter_.
+
+* **adapter-only** - A WildFly server with the Keycloak adapter subsystem added. This build is based on the WildFly Web Feature Pack. **keycloak-adapter-feature-pack** contains all the modules needed to run the Keycloak WildFly Adapter. Therefore, the build is _org.wildfly:wildfly-web-feature-pack_ + _org.keycloak:keycloak-adapter-feature-pack_.
+* **server-only** - A WildFly server with the Keycloak adapter subsystem added. This build is based on the WildFly Full Feature Pack. **keycloak-server-feature-pack** contains all the modules needed to run the Keycloak Server without those already provided by the full WildFly Server. Therefore, the build is _org.wildfly:wildfly-feature-pack_ + _org.keycloak:keycloak-server-feature-pack_.
+* **server-and-adapter** is the same thing as **server-only** except it also includes **keycloak-adapter-feature-pack**. Therefore, the build is _org.wildfly:wildfly-feature-pack_ + _org.keycloak:keycloak-server-feature-pack_ + _org.keycloak:keycloak-adapter-feature-pack_.
+
+Building
+--------
+Each of the three types of builds in turn creates a build version and a dist version.
+
+The build version is a server that uses the new WildFly 9 feature whereby maven artifacts are not bundled with the server. Instead, they are looked up in a repository.
+
+For the dist version, these artifacts are copied into the server itself and no maven repo is required.
+
+By default, the dist version does not get built. To build it, specify the jboss-release profile:
+
+_mvn install -Pjboss-release_
diff --git a/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/assembly.xml b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/assembly.xml
new file mode 100644
index 0000000000..526c08dcef
--- /dev/null
+++ b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/assembly.xml
@@ -0,0 +1,39 @@
+
+
+
+
+ feature-pack
+
+ zip
+
+ false
+
+
+ target/${project.build.finalName}
+
+
+
+
diff --git a/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/feature-pack-build.xml b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/feature-pack-build.xml
new file mode 100644
index 0000000000..e55c8d94bf
--- /dev/null
+++ b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/feature-pack-build.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/pom.xml b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/pom.xml
new file mode 100644
index 0000000000..ee690f1002
--- /dev/null
+++ b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/pom.xml
@@ -0,0 +1,176 @@
+
+
+
+ org.keycloak
+ adapter-only-builds
+ 1.3.0.Beta1-SNAPSHOT
+ ../pom.xml
+
+ 4.0.0
+
+ org.keycloak
+ keycloak-adapter-feature-pack
+
+ Keycloak Feature Pack: Adapter
+ pom
+
+
+
+ com.github.relaxng
+ relaxngDatatype
+
+
+ com.sun.istack
+ istack-commons-runtime
+
+
+ com.sun.istack
+ istack-commons-tools
+
+
+ com.sun.xml.bind.external
+ rngom
+
+
+ com.sun.xsom
+ xsom
+
+
+ io.netty
+ netty-all
+
+
+ org.glassfish.jaxb
+ jaxb-core
+
+
+ org.glassfish.jaxb
+ jaxb-runtime
+
+
+ org.glassfish.jaxb
+ jaxb-xjc
+
+
+ org.glassfish.jaxb
+ codemodel
+
+
+ org.glassfish.jaxb
+ txw2
+
+
+ org.jboss.spec.javax.xml.bind
+ jboss-jaxb-api_2.2_spec
+
+
+ org.jboss.xnio.netty
+ netty-xnio-transport
+
+
+ joda-time
+ joda-time
+
+
+ org.apache.httpcomponents
+ httpmime
+
+
+ org.apache.james
+ apache-mime4j
+
+
+ org.bouncycastle
+ bcprov-jdk15on
+
+
+ org.bouncycastle
+ bcpkix-jdk15on
+
+
+ org.keycloak
+ keycloak-wildfly-adapter-subsystem
+
+
+ org.keycloak
+ keycloak-undertow-adapter
+
+
+ org.slf4j
+ jcl-over-slf4j
+
+
+ org.wildfly
+ wildfly-web-feature-pack
+ zip
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-resources-plugin
+
+
+
+ org.wildfly.build
+ wildfly-feature-pack-build-maven-plugin
+
+
+ feature-pack-build
+
+ build
+
+ compile
+
+ feature-pack-build.xml
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-assembly-plugin
+
+
+ assemble
+ package
+
+ single
+
+
+
+ assembly.xml
+
+ true
+ ${project.build.finalName}
+ false
+ target/
+ target/assembly/work
+ gnu
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/configuration/domain/subsystems.xml b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/configuration/domain/subsystems.xml
new file mode 100644
index 0000000000..3bff333a15
--- /dev/null
+++ b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/configuration/domain/subsystems.xml
@@ -0,0 +1,15 @@
+
+
+
+
+ logging.xml
+ ee.xml
+ io.xml
+ jmx.xml
+ naming.xml
+ request-controller.xml
+ security.xml
+ undertow.xml
+ keycloak-adapter.xml
+
+
diff --git a/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/configuration/domain/template.xml b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/configuration/domain/template.xml
new file mode 100644
index 0000000000..33a0ac7a10
--- /dev/null
+++ b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/configuration/domain/template.xml
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/configuration/standalone/subsystems.xml b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/configuration/standalone/subsystems.xml
new file mode 100644
index 0000000000..765f01846c
--- /dev/null
+++ b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/configuration/standalone/subsystems.xml
@@ -0,0 +1,17 @@
+
+
+
+
+ logging.xml
+ deployment-scanner.xml
+ ee.xml
+ io.xml
+ jmx.xml
+ naming.xml
+ request-controller.xml
+ security.xml
+ security-manager.xml
+ undertow.xml
+ keycloak-adapter.xml
+
+
diff --git a/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/configuration/standalone/template.xml b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/configuration/standalone/template.xml
new file mode 100644
index 0000000000..d0a8130109
--- /dev/null
+++ b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/configuration/standalone/template.xml
@@ -0,0 +1,81 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/content/README.md b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/content/README.md
new file mode 100644
index 0000000000..e7b122b46e
--- /dev/null
+++ b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/content/README.md
@@ -0,0 +1,2 @@
+This directory intentionally left empty. The Feature Pack plugin barfs if there is no content
+directory. But Git won't save an empty directory. Thus, we need this readme file.
\ No newline at end of file
diff --git a/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/com/github/relaxng/main/module.xml b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/com/github/relaxng/main/module.xml
new file mode 100644
index 0000000000..c4985dd641
--- /dev/null
+++ b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/com/github/relaxng/main/module.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/com/sun/istack/main/module.xml b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/com/sun/istack/main/module.xml
new file mode 100644
index 0000000000..e876e160fd
--- /dev/null
+++ b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/com/sun/istack/main/module.xml
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/com/sun/xml/bind/main/module.xml b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/com/sun/xml/bind/main/module.xml
new file mode 100644
index 0000000000..90c2a2aa45
--- /dev/null
+++ b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/com/sun/xml/bind/main/module.xml
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/com/sun/xml/txw2/main/module.xml b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/com/sun/xml/txw2/main/module.xml
new file mode 100644
index 0000000000..8b31f98700
--- /dev/null
+++ b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/com/sun/xml/txw2/main/module.xml
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/com/sun/xsom/main/module.xml b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/com/sun/xsom/main/module.xml
new file mode 100644
index 0000000000..bb0d1bbf68
--- /dev/null
+++ b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/com/sun/xsom/main/module.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/io/netty/main/module.xml b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/io/netty/main/module.xml
new file mode 100644
index 0000000000..f841695197
--- /dev/null
+++ b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/io/netty/main/module.xml
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/javax/xml/bind/api/main/module.xml b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/javax/xml/bind/api/main/module.xml
new file mode 100644
index 0000000000..fdb649fa1d
--- /dev/null
+++ b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/javax/xml/bind/api/main/module.xml
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/net/iharder/base64/main/module.xml b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/net/iharder/base64/main/module.xml
new file mode 100644
index 0000000000..ba7043089f
--- /dev/null
+++ b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/net/iharder/base64/main/module.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/org/apache/commons/codec/main/module.xml b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/org/apache/commons/codec/main/module.xml
new file mode 100644
index 0000000000..cf9cb86d56
--- /dev/null
+++ b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/org/apache/commons/codec/main/module.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/org/apache/commons/logging/main/module.xml b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/org/apache/commons/logging/main/module.xml
new file mode 100644
index 0000000000..f7362e3dce
--- /dev/null
+++ b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/org/apache/commons/logging/main/module.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/org/apache/httpcomponents/main/module.xml b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/org/apache/httpcomponents/main/module.xml
new file mode 100644
index 0000000000..39aab46a30
--- /dev/null
+++ b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/org/apache/httpcomponents/main/module.xml
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/org/apache/james/mime4j/main/module.xml b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/org/apache/james/mime4j/main/module.xml
new file mode 100644
index 0000000000..95de37e9d8
--- /dev/null
+++ b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/org/apache/james/mime4j/main/module.xml
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/org/bouncycastle/main/module.xml b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/org/bouncycastle/main/module.xml
new file mode 100644
index 0000000000..eaa05578bf
--- /dev/null
+++ b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/org/bouncycastle/main/module.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/org/codehaus/jackson/jackson-core-asl/main/module.xml b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/org/codehaus/jackson/jackson-core-asl/main/module.xml
new file mode 100644
index 0000000000..a4e269232d
--- /dev/null
+++ b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/org/codehaus/jackson/jackson-core-asl/main/module.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/org/codehaus/jackson/jackson-mapper-asl/main/module.xml b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/org/codehaus/jackson/jackson-mapper-asl/main/module.xml
new file mode 100644
index 0000000000..5e62a8a63b
--- /dev/null
+++ b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/org/codehaus/jackson/jackson-mapper-asl/main/module.xml
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/org/codehaus/jackson/jackson-xc/main/module.xml b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/org/codehaus/jackson/jackson-xc/main/module.xml
new file mode 100644
index 0000000000..25b7520744
--- /dev/null
+++ b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/org/codehaus/jackson/jackson-xc/main/module.xml
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/org/jboss/xnio/netty/netty-xnio-transport/main/module.xml b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/org/jboss/xnio/netty/netty-xnio-transport/main/module.xml
new file mode 100644
index 0000000000..1f3215d2d2
--- /dev/null
+++ b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/org/jboss/xnio/netty/netty-xnio-transport/main/module.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/org/joda/time/main/module.xml b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/org/joda/time/main/module.xml
new file mode 100644
index 0000000000..c4b1b52621
--- /dev/null
+++ b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/org/joda/time/main/module.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-adapter-core/main/module.xml b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-adapter-core/main/module.xml
new file mode 100644
index 0000000000..07dcd06352
--- /dev/null
+++ b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-adapter-core/main/module.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-adapter-subsystem/main/module.xml b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-adapter-subsystem/main/module.xml
new file mode 100644
index 0000000000..f7cd89005d
--- /dev/null
+++ b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-adapter-subsystem/main/module.xml
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-core/main/module.xml b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-core/main/module.xml
new file mode 100644
index 0000000000..b23c589155
--- /dev/null
+++ b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-core/main/module.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-jboss-adapter-core/main/module.xml b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-jboss-adapter-core/main/module.xml
new file mode 100644
index 0000000000..6e5b217ba5
--- /dev/null
+++ b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-jboss-adapter-core/main/module.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-undertow-adapter/main/module.xml b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-undertow-adapter/main/module.xml
new file mode 100644
index 0000000000..9ba1cb291a
--- /dev/null
+++ b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-undertow-adapter/main/module.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-wildfly-adapter/main/module.xml b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-wildfly-adapter/main/module.xml
new file mode 100644
index 0000000000..df7cc036c8
--- /dev/null
+++ b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-wildfly-adapter/main/module.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/org/slf4j/jcl-over-slf4j/main/module.xml b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/org/slf4j/jcl-over-slf4j/main/module.xml
new file mode 100644
index 0000000000..c29c8fc0ae
--- /dev/null
+++ b/distribution/feature-pack-builds/adapter-only/adapter-feature-pack/src/main/resources/modules/system/layers/base/org/slf4j/jcl-over-slf4j/main/module.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/adapter-only/adapter-only-build/assembly.xml b/distribution/feature-pack-builds/adapter-only/adapter-only-build/assembly.xml
new file mode 100644
index 0000000000..704449a131
--- /dev/null
+++ b/distribution/feature-pack-builds/adapter-only/adapter-only-build/assembly.xml
@@ -0,0 +1,36 @@
+
+
+
+
+ thin-server
+
+ zip
+
+ false
+
+
+ target
+
+
+ ${project.build.finalName}/**
+
+
+
+
diff --git a/distribution/feature-pack-builds/adapter-only/adapter-only-build/pom.xml b/distribution/feature-pack-builds/adapter-only/adapter-only-build/pom.xml
new file mode 100644
index 0000000000..95f05ec1d3
--- /dev/null
+++ b/distribution/feature-pack-builds/adapter-only/adapter-only-build/pom.xml
@@ -0,0 +1,88 @@
+
+
+
+ org.keycloak
+ adapter-only-builds
+ 1.3.0.Beta1-SNAPSHOT
+ ../pom.xml
+
+ 4.0.0
+
+ org.keycloak
+ keycloak-adapter-only-build
+
+ Keycloak WildFly Build: Adapter Only
+ pom
+
+
+
+ org.keycloak
+ keycloak-adapter-feature-pack
+ ${project.version}
+ zip
+
+
+
+
+
+
+ org.wildfly.build
+ wildfly-server-provisioning-maven-plugin
+
+
+ server-provisioning
+
+ build
+
+ compile
+
+ server-provisioning.xml
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-assembly-plugin
+
+
+ assemble
+ package
+
+ single
+
+
+
+ assembly.xml
+
+ true
+ ${project.build.finalName}
+ false
+ ${project.build.directory}
+ ${project.build.directory}/assembly/work
+ gnu
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/adapter-only/adapter-only-build/server-provisioning.xml b/distribution/feature-pack-builds/adapter-only/adapter-only-build/server-provisioning.xml
new file mode 100644
index 0000000000..13de0ef371
--- /dev/null
+++ b/distribution/feature-pack-builds/adapter-only/adapter-only-build/server-provisioning.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/distribution/feature-pack-builds/adapter-only/adapter-only-dist/assembly.xml b/distribution/feature-pack-builds/adapter-only/adapter-only-dist/assembly.xml
new file mode 100644
index 0000000000..704449a131
--- /dev/null
+++ b/distribution/feature-pack-builds/adapter-only/adapter-only-dist/assembly.xml
@@ -0,0 +1,36 @@
+
+
+
+
+ thin-server
+
+ zip
+
+ false
+
+
+ target
+
+
+ ${project.build.finalName}/**
+
+
+
+
diff --git a/distribution/feature-pack-builds/adapter-only/adapter-only-dist/pom.xml b/distribution/feature-pack-builds/adapter-only/adapter-only-dist/pom.xml
new file mode 100644
index 0000000000..4f1ca1a774
--- /dev/null
+++ b/distribution/feature-pack-builds/adapter-only/adapter-only-dist/pom.xml
@@ -0,0 +1,92 @@
+
+
+
+ org.keycloak
+ adapter-only-builds
+ 1.3.0.Beta1-SNAPSHOT
+ ../pom.xml
+
+ 4.0.0
+
+ org.keycloak
+ keycloak-adapter-only-dist
+
+ Keycloak WildFly Dist: Adapter Only
+ pom
+
+
+
+ org.keycloak
+ keycloak-adapter-feature-pack
+ ${project.version}
+ zip
+
+
+
+
+
+ jboss-release
+
+
+
+ org.wildfly.build
+ wildfly-server-provisioning-maven-plugin
+
+
+ server-provisioning
+
+ build
+
+ compile
+
+ server-provisioning.xml
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-assembly-plugin
+
+
+ assemble
+ package
+
+ single
+
+
+
+ assembly.xml
+
+ true
+ ${project.build.finalName}
+ false
+ ${project.build.directory}
+ ${project.build.directory}/assembly/work
+ gnu
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/adapter-only/adapter-only-dist/server-provisioning.xml b/distribution/feature-pack-builds/adapter-only/adapter-only-dist/server-provisioning.xml
new file mode 100644
index 0000000000..b9f46bc9eb
--- /dev/null
+++ b/distribution/feature-pack-builds/adapter-only/adapter-only-dist/server-provisioning.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/distribution/feature-pack-builds/adapter-only/pom.xml b/distribution/feature-pack-builds/adapter-only/pom.xml
new file mode 100644
index 0000000000..bd57e0bc36
--- /dev/null
+++ b/distribution/feature-pack-builds/adapter-only/pom.xml
@@ -0,0 +1,21 @@
+
+
+ feature-pack-builds
+ org.keycloak
+ 1.3.0.Beta1-SNAPSHOT
+ ../pom.xml
+
+ Adapter Only Builds
+
+ 4.0.0
+
+ adapter-only-builds
+ pom
+
+
+ adapter-feature-pack
+ adapter-only-build
+ adapter-only-dist
+
+
diff --git a/distribution/feature-pack-builds/pom.xml b/distribution/feature-pack-builds/pom.xml
new file mode 100644
index 0000000000..a35b3f7a6f
--- /dev/null
+++ b/distribution/feature-pack-builds/pom.xml
@@ -0,0 +1,21 @@
+
+
+ distribution-pom
+ org.keycloak
+ 1.3.0.Beta1-SNAPSHOT
+ ../pom.xml
+
+ Feature Pack Builds
+
+ 4.0.0
+
+ feature-pack-builds
+ pom
+
+
+ adapter-only
+ server-only
+ server-and-adapter
+
+
diff --git a/distribution/feature-pack-builds/server-and-adapter/pom.xml b/distribution/feature-pack-builds/server-and-adapter/pom.xml
new file mode 100644
index 0000000000..9616217531
--- /dev/null
+++ b/distribution/feature-pack-builds/server-and-adapter/pom.xml
@@ -0,0 +1,20 @@
+
+
+ feature-pack-builds
+ org.keycloak
+ 1.3.0.Beta1-SNAPSHOT
+ ../pom.xml
+
+ Builds with both server and adapter
+
+ 4.0.0
+
+ server-and-adapter
+ pom
+
+
+ server-and-adapter-build
+ server-and-adapter-dist
+
+
diff --git a/distribution/feature-pack-builds/server-and-adapter/server-and-adapter-build/assembly.xml b/distribution/feature-pack-builds/server-and-adapter/server-and-adapter-build/assembly.xml
new file mode 100644
index 0000000000..704449a131
--- /dev/null
+++ b/distribution/feature-pack-builds/server-and-adapter/server-and-adapter-build/assembly.xml
@@ -0,0 +1,36 @@
+
+
+
+
+ thin-server
+
+ zip
+
+ false
+
+
+ target
+
+
+ ${project.build.finalName}/**
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-and-adapter/server-and-adapter-build/pom.xml b/distribution/feature-pack-builds/server-and-adapter/server-and-adapter-build/pom.xml
new file mode 100644
index 0000000000..2bc3a0a697
--- /dev/null
+++ b/distribution/feature-pack-builds/server-and-adapter/server-and-adapter-build/pom.xml
@@ -0,0 +1,93 @@
+
+
+
+ org.keycloak
+ server-and-adapter
+ 1.3.0.Beta1-SNAPSHOT
+ ../pom.xml
+
+ 4.0.0
+
+ org.keycloak
+ keycloak-server-and-adapter-build
+
+ Keycloak WildFly Build: Server and Adapter
+ pom
+
+
+
+ org.keycloak
+ keycloak-server-feature-pack
+ ${project.version}
+ zip
+
+
+ org.keycloak
+ keycloak-adapter-feature-pack
+ ${project.version}
+ zip
+
+
+
+
+
+
+ org.wildfly.build
+ wildfly-server-provisioning-maven-plugin
+
+
+ server-provisioning
+
+ build
+
+ compile
+
+ server-provisioning.xml
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-assembly-plugin
+
+
+ assemble
+ package
+
+ single
+
+
+
+ assembly.xml
+
+ true
+ ${project.build.finalName}
+ false
+ ${project.build.directory}
+ ${project.build.directory}/assembly/work
+ gnu
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-and-adapter/server-and-adapter-build/server-provisioning.xml b/distribution/feature-pack-builds/server-and-adapter/server-and-adapter-build/server-provisioning.xml
new file mode 100644
index 0000000000..f83f51720d
--- /dev/null
+++ b/distribution/feature-pack-builds/server-and-adapter/server-and-adapter-build/server-provisioning.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/distribution/feature-pack-builds/server-and-adapter/server-and-adapter-dist/assembly.xml b/distribution/feature-pack-builds/server-and-adapter/server-and-adapter-dist/assembly.xml
new file mode 100644
index 0000000000..704449a131
--- /dev/null
+++ b/distribution/feature-pack-builds/server-and-adapter/server-and-adapter-dist/assembly.xml
@@ -0,0 +1,36 @@
+
+
+
+
+ thin-server
+
+ zip
+
+ false
+
+
+ target
+
+
+ ${project.build.finalName}/**
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-and-adapter/server-and-adapter-dist/pom.xml b/distribution/feature-pack-builds/server-and-adapter/server-and-adapter-dist/pom.xml
new file mode 100644
index 0000000000..4a492fddc3
--- /dev/null
+++ b/distribution/feature-pack-builds/server-and-adapter/server-and-adapter-dist/pom.xml
@@ -0,0 +1,98 @@
+
+
+
+ org.keycloak
+ server-and-adapter
+ 1.3.0.Beta1-SNAPSHOT
+ ../pom.xml
+
+ 4.0.0
+
+ org.keycloak
+ keycloak-server-and-adapter-dist
+
+ Keycloak WildFly Dist: Server and Adapter
+ pom
+
+
+
+ org.keycloak
+ keycloak-server-feature-pack
+ ${project.version}
+ zip
+
+
+ org.keycloak
+ keycloak-adapter-feature-pack
+ ${project.version}
+ zip
+
+
+
+
+
+ jboss-release
+
+
+
+ org.wildfly.build
+ wildfly-server-provisioning-maven-plugin
+
+
+ server-provisioning
+
+ build
+
+ compile
+
+ server-provisioning.xml
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-assembly-plugin
+
+
+ assemble
+ package
+
+ single
+
+
+
+ assembly.xml
+
+ true
+ ${project.build.finalName}
+ false
+ ${project.build.directory}
+ ${project.build.directory}/assembly/work
+ gnu
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-and-adapter/server-and-adapter-dist/server-provisioning.xml b/distribution/feature-pack-builds/server-and-adapter/server-and-adapter-dist/server-provisioning.xml
new file mode 100644
index 0000000000..83253d7c56
--- /dev/null
+++ b/distribution/feature-pack-builds/server-and-adapter/server-and-adapter-dist/server-provisioning.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/distribution/feature-pack-builds/server-only/pom.xml b/distribution/feature-pack-builds/server-only/pom.xml
new file mode 100644
index 0000000000..af41711f53
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/pom.xml
@@ -0,0 +1,21 @@
+
+
+ feature-pack-builds
+ org.keycloak
+ 1.3.0.Beta1-SNAPSHOT
+ ../pom.xml
+
+ Server Only Builds
+
+ 4.0.0
+
+ server-only-builds
+ pom
+
+
+ server-feature-pack
+ server-only-build
+ server-only-dist
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/assembly.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/assembly.xml
new file mode 100644
index 0000000000..eaee2caa59
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/assembly.xml
@@ -0,0 +1,53 @@
+
+
+
+
+ feature-pack
+
+ zip
+
+ false
+
+
+
+
+ target/${project.build.finalName}
+
+ true
+
+ **/module.xml
+
+
+
+ target/${project.build.finalName}
+
+ false
+
+ **/module.xml
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/feature-pack-build.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/feature-pack-build.xml
new file mode 100644
index 0000000000..8737c28576
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/feature-pack-build.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/pom.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/pom.xml
new file mode 100644
index 0000000000..fd9d37f602
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/pom.xml
@@ -0,0 +1,149 @@
+
+
+
+ org.keycloak
+ server-only-builds
+ 1.3.0.Beta1-SNAPSHOT
+ ../pom.xml
+
+ 4.0.0
+
+ keycloak-server-feature-pack
+
+ Keycloak Feature Pack: Server
+ pom
+
+
+
+ org.keycloak
+ keycloak-dependencies-server-all
+ ${project.version}
+ pom
+
+
+ org.keycloak.subsystem
+ keycloak-server
+ ${project.version}
+ war
+
+
+ org.keycloak
+ keycloak-wildfly-server-subsystem
+ ${project.version}
+
+
+ org.keycloak
+ keycloak-wildfly-extensions
+ ${project.version}
+
+
+ org.wildfly
+ wildfly-feature-pack
+ zip
+
+
+
+ org.keycloak
+ keycloak-undertow-adapter
+
+
+ org.keycloak.subsystem
+ keycloak-server
+ war
+ ${project.version}
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-resources-plugin
+
+
+
+ org.wildfly.build
+ wildfly-feature-pack-build-maven-plugin
+
+
+ feature-pack-build
+
+ build
+
+ compile
+
+ feature-pack-build.xml
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-assembly-plugin
+
+
+ assemble
+ package
+
+ single
+
+
+
+ assembly.xml
+
+ true
+ ${project.build.finalName}
+ false
+ target/
+ target/assembly/work
+ gnu
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-dependency-plugin
+
+
+ copy
+ prepare-package
+
+ copy
+
+
+
+
+ org.keycloak.subsystem
+ keycloak-server
+ ${project.version}
+ war
+ true
+ ${project.build.directory}/${project.build.finalName}/modules/system/layers/base/org/keycloak/keycloak-server-subsystem/main/auth-server
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/configuration/domain/subsystems.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/configuration/domain/subsystems.xml
new file mode 100644
index 0000000000..2dde48f173
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/configuration/domain/subsystems.xml
@@ -0,0 +1,138 @@
+
+
+
+
+
+ logging.xml
+ batch.xml
+ bean-validation.xml
+ keycloak-datasources.xml
+ ee.xml
+ ejb3.xml
+ io.xml
+ infinispan.xml
+ jaxrs.xml
+ jca.xml
+ jdr.xml
+ jmx.xml
+ jpa.xml
+ jsf.xml
+ mail.xml
+ naming.xml
+ pojo.xml
+ remoting.xml
+ resource-adapters.xml
+ request-controller.xml
+ sar.xml
+ security.xml
+ security-manager.xml
+ transactions.xml
+ undertow.xml
+ webservices.xml
+ weld.xml
+ keycloak-server.xml
+
+
+
+ logging.xml
+ batch.xml
+ bean-validation.xml
+ keycloak-datasources.xml
+ ee.xml
+ ejb3.xml
+ io.xml
+ infinispan.xml
+ jaxrs.xml
+ jca.xml
+ jdr.xml
+ jgroups.xml
+ jmx.xml
+ jpa.xml
+ jsf.xml
+ mail.xml
+ mod_cluster.xml
+ naming.xml
+ pojo.xml
+ remoting.xml
+ resource-adapters.xml
+ request-controller.xml
+ sar.xml
+ security.xml
+ security-manager.xml
+ transactions.xml
+ undertow.xml
+ webservices.xml
+ weld.xml
+ keycloak-server.xml
+
+
+
+ logging.xml
+ batch.xml
+ bean-validation.xml
+ keycloak-datasources.xml
+ ee.xml
+ ejb3.xml
+ io.xml
+ infinispan.xml
+ iiop-openjdk.xml
+ jaxrs.xml
+ jca.xml
+ jdr.xml
+ jmx.xml
+ jpa.xml
+ jsf.xml
+ jsr77.xml
+ mail.xml
+ messaging.xml
+ naming.xml
+ pojo.xml
+ remoting.xml
+ resource-adapters.xml
+ request-controller.xml
+ sar.xml
+ security.xml
+ security-manager.xml
+ transactions.xml
+ undertow.xml
+ webservices.xml
+ weld.xml
+ keycloak-server.xml
+
+
+
+ logging.xml
+ batch.xml
+ bean-validation.xml
+ keycloak-datasources.xml
+ ee.xml
+ ejb3.xml
+ io.xml
+ infinispan.xml
+ iiop-openjdk.xml
+ jaxrs.xml
+ jca.xml
+ jdr.xml
+ jgroups.xml
+ jmx.xml
+ jpa.xml
+ jsf.xml
+ jsr77.xml
+ mail.xml
+ messaging.xml
+ mod_cluster.xml
+ naming.xml
+ pojo.xml
+ remoting.xml
+ resource-adapters.xml
+ request-controller.xml
+ sar.xml
+ security.xml
+ security-manager.xml
+ transactions.xml
+ undertow.xml
+ webservices.xml
+ weld.xml
+ keycloak-server.xml
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/configuration/domain/template.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/configuration/domain/template.xml
new file mode 100644
index 0000000000..cf3ccccd33
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/configuration/domain/template.xml
@@ -0,0 +1,88 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/configuration/standalone/subsystems.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/configuration/standalone/subsystems.xml
new file mode 100644
index 0000000000..fad3c38b14
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/configuration/standalone/subsystems.xml
@@ -0,0 +1,35 @@
+
+
+
+
+ logging.xml
+ batch.xml
+ bean-validation.xml
+ keycloak-datasources.xml
+ deployment-scanner.xml
+ ee.xml
+ ejb3.xml
+ io.xml
+ infinispan.xml
+ jaxrs.xml
+ jca.xml
+ jdr.xml
+ jmx.xml
+ jpa.xml
+ jsf.xml
+ mail.xml
+ naming.xml
+ pojo.xml
+ remoting.xml
+ resource-adapters.xml
+ request-controller.xml
+ sar.xml
+ security-manager.xml
+ security.xml
+ transactions.xml
+ undertow.xml
+ webservices.xml
+ weld.xml
+ keycloak-server.xml
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/configuration/standalone/template.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/configuration/standalone/template.xml
new file mode 100644
index 0000000000..2260468fff
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/configuration/standalone/template.xml
@@ -0,0 +1,87 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/content/standalone/configuration/keycloak-server.json b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/content/standalone/configuration/keycloak-server.json
new file mode 100644
index 0000000000..9f0d03ea5d
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/content/standalone/configuration/keycloak-server.json
@@ -0,0 +1,72 @@
+{
+ "admin": {
+ "realm": "master"
+ },
+
+ "eventsStore": {
+ "provider": "jpa",
+ "jpa": {
+ "exclude-events": [ "REFRESH_TOKEN" ]
+ }
+ },
+
+ "realm": {
+ "provider": "jpa"
+ },
+
+ "user": {
+ "provider": "jpa"
+ },
+
+ "userSessions": {
+ "provider" : "mem"
+ },
+
+ "realmCache": {
+ "provider": "mem"
+ },
+
+ "userCache": {
+ "provider": "mem",
+ "mem": {
+ "maxSize": 20000
+ }
+ },
+
+ "timer": {
+ "provider": "basic"
+ },
+
+ "theme": {
+ "default": "keycloak",
+ "staticMaxAge": 2592000,
+ "cacheTemplates": true,
+ "cacheThemes": true,
+ "folder": {
+ "dir": "${jboss.server.config.dir}/themes"
+ }
+ },
+
+ "login": {
+ "provider": "freemarker"
+ },
+
+ "account": {
+ "provider": "freemarker"
+ },
+
+ "email": {
+ "provider": "freemarker"
+ },
+
+ "scheduled": {
+ "interval": 900
+ },
+
+ "connectionsJpa": {
+ "default": {
+ "dataSource": "java:jboss/datasources/KeycloakDS",
+ "databaseSchema": "update"
+ }
+ }
+}
\ No newline at end of file
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/com/google/zxing/core/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/com/google/zxing/core/main/module.xml
new file mode 100644
index 0000000000..cc18aaaf7a
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/com/google/zxing/core/main/module.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/com/google/zxing/javase/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/com/google/zxing/javase/main/module.xml
new file mode 100644
index 0000000000..b73ba9b34b
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/com/google/zxing/javase/main/module.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/de/idyl/winzipaes/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/de/idyl/winzipaes/main/module.xml
new file mode 100644
index 0000000000..10f1103cfd
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/de/idyl/winzipaes/main/module.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/net/iharder/base64/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/net/iharder/base64/main/module.xml
new file mode 100644
index 0000000000..ba7043089f
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/net/iharder/base64/main/module.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/freemarker/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/freemarker/main/module.xml
new file mode 100644
index 0000000000..2043bef613
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/freemarker/main/module.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-account-api/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-account-api/main/module.xml
new file mode 100644
index 0000000000..d36887e584
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-account-api/main/module.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-account-freemarker/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-account-freemarker/main/module.xml
new file mode 100644
index 0000000000..1512a9e6b9
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-account-freemarker/main/module.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-adapter-core/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-adapter-core/main/module.xml
new file mode 100644
index 0000000000..07dcd06352
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-adapter-core/main/module.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-broker-core/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-broker-core/main/module.xml
new file mode 100644
index 0000000000..f9837268fb
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-broker-core/main/module.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-broker-oidc/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-broker-oidc/main/module.xml
new file mode 100644
index 0000000000..1a75cd11bf
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-broker-oidc/main/module.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-broker-saml/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-broker-saml/main/module.xml
new file mode 100644
index 0000000000..839d9f92fb
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-broker-saml/main/module.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-connections-file/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-connections-file/main/module.xml
new file mode 100644
index 0000000000..ef1f1b2eee
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-connections-file/main/module.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-connections-http-client/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-connections-http-client/main/module.xml
new file mode 100755
index 0000000000..f52288ebd9
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-connections-http-client/main/module.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-connections-infinispan/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-connections-infinispan/main/module.xml
new file mode 100644
index 0000000000..94a9f1a2f4
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-connections-infinispan/main/module.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-connections-jpa-liquibase/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-connections-jpa-liquibase/main/module.xml
new file mode 100644
index 0000000000..8ade3fd971
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-connections-jpa-liquibase/main/module.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-connections-jpa/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-connections-jpa/main/module.xml
new file mode 100644
index 0000000000..ef36ac3d59
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-connections-jpa/main/module.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-connections-mongo-update/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-connections-mongo-update/main/module.xml
new file mode 100644
index 0000000000..621f06d920
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-connections-mongo-update/main/module.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-connections-mongo/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-connections-mongo/main/module.xml
new file mode 100644
index 0000000000..504023f5e5
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-connections-mongo/main/module.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-core-jaxrs/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-core-jaxrs/main/module.xml
new file mode 100644
index 0000000000..c773354615
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-core-jaxrs/main/module.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-core/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-core/main/module.xml
new file mode 100644
index 0000000000..b23c589155
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-core/main/module.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-email-api/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-email-api/main/module.xml
new file mode 100644
index 0000000000..ed433b52c8
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-email-api/main/module.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-email-freemarker/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-email-freemarker/main/module.xml
new file mode 100644
index 0000000000..a0c371fb66
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-email-freemarker/main/module.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-events-api/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-events-api/main/module.xml
new file mode 100644
index 0000000000..2f8c152b0c
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-events-api/main/module.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-events-email/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-events-email/main/module.xml
new file mode 100644
index 0000000000..255f8302b4
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-events-email/main/module.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-events-jboss-logging/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-events-jboss-logging/main/module.xml
new file mode 100644
index 0000000000..5a6fe2b92b
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-events-jboss-logging/main/module.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-events-jpa/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-events-jpa/main/module.xml
new file mode 100644
index 0000000000..12c859e74c
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-events-jpa/main/module.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-events-mongo/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-events-mongo/main/module.xml
new file mode 100644
index 0000000000..4e48e7f69b
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-events-mongo/main/module.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-export-import-api/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-export-import-api/main/module.xml
new file mode 100644
index 0000000000..2e503352f7
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-export-import-api/main/module.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-export-import-dir/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-export-import-dir/main/module.xml
new file mode 100644
index 0000000000..1cda32b5ee
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-export-import-dir/main/module.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-export-import-single-file/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-export-import-single-file/main/module.xml
new file mode 100644
index 0000000000..a390929490
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-export-import-single-file/main/module.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-export-import-zip/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-export-import-zip/main/module.xml
new file mode 100644
index 0000000000..a33365dfd3
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-export-import-zip/main/module.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-forms-common-freemarker/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-forms-common-freemarker/main/module.xml
new file mode 100644
index 0000000000..c6c6325375
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-forms-common-freemarker/main/module.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-forms-common-themes/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-forms-common-themes/main/module.xml
new file mode 100644
index 0000000000..0e12a97f6f
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-forms-common-themes/main/module.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-invalidation-cache-infinispan/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-invalidation-cache-infinispan/main/module.xml
new file mode 100644
index 0000000000..572ab38840
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-invalidation-cache-infinispan/main/module.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-invalidation-cache-model/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-invalidation-cache-model/main/module.xml
new file mode 100644
index 0000000000..1844bc806f
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-invalidation-cache-model/main/module.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-jboss-adapter-core/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-jboss-adapter-core/main/module.xml
new file mode 100644
index 0000000000..6e5b217ba5
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-jboss-adapter-core/main/module.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-js-adapter/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-js-adapter/main/module.xml
new file mode 100644
index 0000000000..d99ac75cad
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-js-adapter/main/module.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-kerberos-federation/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-kerberos-federation/main/module.xml
new file mode 100644
index 0000000000..4f9da8b55c
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-kerberos-federation/main/module.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-ldap-federation/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-ldap-federation/main/module.xml
new file mode 100644
index 0000000000..e8c9e4dbd8
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-ldap-federation/main/module.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-login-api/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-login-api/main/module.xml
new file mode 100644
index 0000000000..ff6f6ac456
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-login-api/main/module.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-login-freemarker/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-login-freemarker/main/module.xml
new file mode 100644
index 0000000000..1cb5c4182e
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-login-freemarker/main/module.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-model-api/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-model-api/main/module.xml
new file mode 100644
index 0000000000..14a0a869c6
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-model-api/main/module.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-model-file/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-model-file/main/module.xml
new file mode 100644
index 0000000000..e3ae276601
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-model-file/main/module.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-model-jpa/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-model-jpa/main/module.xml
new file mode 100644
index 0000000000..4f50b7ad1d
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-model-jpa/main/module.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-model-mongo/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-model-mongo/main/module.xml
new file mode 100644
index 0000000000..702406c95d
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-model-mongo/main/module.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-model-sessions-infinispan/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-model-sessions-infinispan/main/module.xml
new file mode 100644
index 0000000000..23f94b144d
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-model-sessions-infinispan/main/module.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-model-sessions-jpa/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-model-sessions-jpa/main/module.xml
new file mode 100644
index 0000000000..2033069957
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-model-sessions-jpa/main/module.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-model-sessions-mem/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-model-sessions-mem/main/module.xml
new file mode 100644
index 0000000000..6a1d1019ca
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-model-sessions-mem/main/module.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-model-sessions-mongo/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-model-sessions-mongo/main/module.xml
new file mode 100644
index 0000000000..69936807f8
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-model-sessions-mongo/main/module.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-saml-core/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-saml-core/main/module.xml
new file mode 100644
index 0000000000..c09490e180
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-saml-core/main/module.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-saml-protocol/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-saml-protocol/main/module.xml
new file mode 100644
index 0000000000..fc0cd15d47
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-saml-protocol/main/module.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-server-subsystem/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-server-subsystem/main/module.xml
new file mode 100644
index 0000000000..5233767d0d
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-server-subsystem/main/module.xml
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-server/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-server/main/module.xml
new file mode 100644
index 0000000000..6c877817cf
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-server/main/module.xml
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-services/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-services/main/module.xml
new file mode 100644
index 0000000000..598d5dda44
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-services/main/module.xml
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-social-core/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-social-core/main/module.xml
new file mode 100644
index 0000000000..836d5d6b5b
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-social-core/main/module.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-social-facebook/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-social-facebook/main/module.xml
new file mode 100644
index 0000000000..4c22779011
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-social-facebook/main/module.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-social-github/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-social-github/main/module.xml
new file mode 100644
index 0000000000..9197bb0c96
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-social-github/main/module.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-social-google/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-social-google/main/module.xml
new file mode 100644
index 0000000000..bb56189ffd
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-social-google/main/module.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-social-linkedin/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-social-linkedin/main/module.xml
new file mode 100644
index 0000000000..db385431c9
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-social-linkedin/main/module.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-social-stackoverflow/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-social-stackoverflow/main/module.xml
new file mode 100644
index 0000000000..5af13cef39
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-social-stackoverflow/main/module.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-social-twitter/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-social-twitter/main/module.xml
new file mode 100644
index 0000000000..cf56209f4a
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-social-twitter/main/module.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-timer-api/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-timer-api/main/module.xml
new file mode 100644
index 0000000000..77049169ad
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-timer-api/main/module.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-timer-basic/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-timer-basic/main/module.xml
new file mode 100644
index 0000000000..e2279f9a3a
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-timer-basic/main/module.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-undertow-adapter/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-undertow-adapter/main/module.xml
new file mode 100644
index 0000000000..9ba1cb291a
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-undertow-adapter/main/module.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-wildfly-adapter/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-wildfly-adapter/main/module.xml
new file mode 100644
index 0000000000..df7cc036c8
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-wildfly-adapter/main/module.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-wildfly-extensions/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-wildfly-extensions/main/module.xml
new file mode 100644
index 0000000000..05a48e5fb5
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/keycloak/keycloak-wildfly-extensions/main/module.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/liquibase/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/liquibase/main/module.xml
new file mode 100644
index 0000000000..d75eef002a
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/liquibase/main/module.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/mongodb/mongo-java-driver/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/mongodb/mongo-java-driver/main/module.xml
new file mode 100644
index 0000000000..bb4acdd80e
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/mongodb/mongo-java-driver/main/module.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/twitter4j/main/module.xml b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/twitter4j/main/module.xml
new file mode 100644
index 0000000000..70b84dcc78
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-feature-pack/src/main/resources/modules/system/layers/base/org/twitter4j/main/module.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-only-build/assembly.xml b/distribution/feature-pack-builds/server-only/server-only-build/assembly.xml
new file mode 100644
index 0000000000..704449a131
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-only-build/assembly.xml
@@ -0,0 +1,36 @@
+
+
+
+
+ thin-server
+
+ zip
+
+ false
+
+
+ target
+
+
+ ${project.build.finalName}/**
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-only-build/pom.xml b/distribution/feature-pack-builds/server-only/server-only-build/pom.xml
new file mode 100644
index 0000000000..5d88347eb1
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-only-build/pom.xml
@@ -0,0 +1,87 @@
+
+
+
+ org.keycloak
+ server-only-builds
+ 1.3.0.Beta1-SNAPSHOT
+ ../pom.xml
+
+ 4.0.0
+
+ org.keycloak
+ keycloak-server-only-build
+
+ Keycloak WildFly Build: Server Only
+ pom
+
+
+
+ org.keycloak
+ keycloak-server-feature-pack
+ ${project.version}
+ zip
+
+
+
+
+
+
+ org.wildfly.build
+ wildfly-server-provisioning-maven-plugin
+
+
+ server-provisioning
+
+ build
+
+ compile
+
+ server-provisioning.xml
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-assembly-plugin
+
+
+ assemble
+ package
+
+ single
+
+
+
+ assembly.xml
+
+ true
+ ${project.build.finalName}
+ false
+ ${project.build.directory}
+ ${project.build.directory}/assembly/work
+ gnu
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-only-build/server-provisioning.xml b/distribution/feature-pack-builds/server-only/server-only-build/server-provisioning.xml
new file mode 100644
index 0000000000..9e4b4f368f
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-only-build/server-provisioning.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/distribution/feature-pack-builds/server-only/server-only-dist/assembly.xml b/distribution/feature-pack-builds/server-only/server-only-dist/assembly.xml
new file mode 100644
index 0000000000..1d7cc51697
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-only-dist/assembly.xml
@@ -0,0 +1,36 @@
+
+
+
+
+ full-server
+
+ zip
+
+ false
+
+
+ target
+
+
+ ${project.build.finalName}/**
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-only-dist/pom.xml b/distribution/feature-pack-builds/server-only/server-only-dist/pom.xml
new file mode 100644
index 0000000000..4f13fbc899
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-only-dist/pom.xml
@@ -0,0 +1,92 @@
+
+
+
+ org.keycloak
+ server-only-builds
+ 1.3.0.Beta1-SNAPSHOT
+ ../pom.xml
+
+ 4.0.0
+
+ org.keycloak
+ keycloak-server-only-dist
+
+ Keycloak WildFly Dist: Server Only
+ pom
+
+
+
+ org.keycloak
+ keycloak-server-feature-pack
+ ${project.version}
+ zip
+
+
+
+
+
+ jboss-release
+
+
+
+ org.wildfly.build
+ wildfly-server-provisioning-maven-plugin
+
+
+ server-provisioning
+
+ build
+
+ compile
+
+ server-provisioning.xml
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-assembly-plugin
+
+
+ assemble
+ package
+
+ single
+
+
+
+ assembly.xml
+
+ true
+ ${project.build.finalName}
+ false
+ ${project.build.directory}
+ ${project.build.directory}/assembly/work
+ gnu
+
+
+
+
+
+
+
+
+
diff --git a/distribution/feature-pack-builds/server-only/server-only-dist/server-provisioning.xml b/distribution/feature-pack-builds/server-only/server-only-dist/server-provisioning.xml
new file mode 100644
index 0000000000..d414b952a0
--- /dev/null
+++ b/distribution/feature-pack-builds/server-only/server-only-dist/server-provisioning.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/distribution/modules/build.xml b/distribution/modules/build.xml
index 0fdcfa481c..e7ede69426 100755
--- a/distribution/modules/build.xml
+++ b/distribution/modules/build.xml
@@ -336,8 +336,11 @@
-
-
+
+
+
+
+
diff --git a/distribution/modules/pom.xml b/distribution/modules/pom.xml
index da8260d400..501e422f5c 100755
--- a/distribution/modules/pom.xml
+++ b/distribution/modules/pom.xml
@@ -56,7 +56,13 @@
org.keycloak
- keycloak-subsystem
+ keycloak-wildfly-server-subsystem
+ ${project.version}
+
+
+ org.keycloak
+ keycloak-wildfly-adapter-subsystem
+ ${project.version}
org.keycloak.subsystem
@@ -174,7 +180,7 @@
keycloak-server
war
true
- ${project.build.directory}/modules/org/keycloak/keycloak-subsystem/main/auth-server
+ ${project.build.directory}/modules/org/keycloak/keycloak-server-subsystem/main/auth-server
diff --git a/distribution/modules/src/main/resources/modules/org/keycloak/keycloak-adapter-subsystem/main/module.xml b/distribution/modules/src/main/resources/modules/org/keycloak/keycloak-adapter-subsystem/main/module.xml
new file mode 100755
index 0000000000..3408a92aa3
--- /dev/null
+++ b/distribution/modules/src/main/resources/modules/org/keycloak/keycloak-adapter-subsystem/main/module.xml
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/distribution/modules/src/main/resources/modules/org/keycloak/keycloak-subsystem/main/module.xml b/distribution/modules/src/main/resources/modules/org/keycloak/keycloak-server-subsystem/main/module.xml
similarity index 99%
rename from distribution/modules/src/main/resources/modules/org/keycloak/keycloak-subsystem/main/module.xml
rename to distribution/modules/src/main/resources/modules/org/keycloak/keycloak-server-subsystem/main/module.xml
index 3953a408a7..e877fe41ca 100755
--- a/distribution/modules/src/main/resources/modules/org/keycloak/keycloak-subsystem/main/module.xml
+++ b/distribution/modules/src/main/resources/modules/org/keycloak/keycloak-server-subsystem/main/module.xml
@@ -22,7 +22,7 @@
~ 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-->
-
+
diff --git a/distribution/modules/src/main/resources/modules/org/keycloak/keycloak-server/main/module.xml b/distribution/modules/src/main/resources/modules/org/keycloak/keycloak-server/main/module.xml
index ddf24752d0..9a7229ff8c 100755
--- a/distribution/modules/src/main/resources/modules/org/keycloak/keycloak-server/main/module.xml
+++ b/distribution/modules/src/main/resources/modules/org/keycloak/keycloak-server/main/module.xml
@@ -10,6 +10,7 @@
+
@@ -57,7 +58,7 @@
-
+
diff --git a/distribution/pom.xml b/distribution/pom.xml
index d09fbb8312..516e94f6cc 100755
--- a/distribution/pom.xml
+++ b/distribution/pom.xml
@@ -37,5 +37,6 @@
server-overlay
src-dist
subsystem-war
+ feature-pack-builds
diff --git a/distribution/server-overlay/src/main/xslt/standalone.xsl b/distribution/server-overlay/src/main/xslt/standalone.xsl
index 0180557725..9e7d309d54 100755
--- a/distribution/server-overlay/src/main/xslt/standalone.xsl
+++ b/distribution/server-overlay/src/main/xslt/standalone.xsl
@@ -16,7 +16,8 @@
-
+
+
@@ -38,7 +39,7 @@
-
+
true
auth
diff --git a/examples/demo-template/admin-access-app/src/main/webapp/WEB-INF/jboss-deployment-structure.xml b/examples/demo-template/admin-access-app/src/main/webapp/WEB-INF/jboss-deployment-structure.xml
index 97c5645855..9c1bac9b36 100755
--- a/examples/demo-template/admin-access-app/src/main/webapp/WEB-INF/jboss-deployment-structure.xml
+++ b/examples/demo-template/admin-access-app/src/main/webapp/WEB-INF/jboss-deployment-structure.xml
@@ -3,7 +3,7 @@
-
+
\ No newline at end of file
diff --git a/examples/demo-template/customer-app/src/main/webapp/WEB-INF/jboss-deployment-structure.xml b/examples/demo-template/customer-app/src/main/webapp/WEB-INF/jboss-deployment-structure.xml
index 97c5645855..9c1bac9b36 100755
--- a/examples/demo-template/customer-app/src/main/webapp/WEB-INF/jboss-deployment-structure.xml
+++ b/examples/demo-template/customer-app/src/main/webapp/WEB-INF/jboss-deployment-structure.xml
@@ -3,7 +3,7 @@
-
+
\ No newline at end of file
diff --git a/examples/demo-template/pom.xml b/examples/demo-template/pom.xml
index 2e10aa1848..eb179f09e2 100755
--- a/examples/demo-template/pom.xml
+++ b/examples/demo-template/pom.xml
@@ -37,4 +37,25 @@
third-party
third-party-cdi
+
+
+
+ no-keycloak-json
+
+
+ no-keycloak-json
+
+
+
+
+
+ maven-war-plugin
+
+ **/keycloak.json
+
+
+
+
+
+
diff --git a/examples/demo-template/product-app/src/main/webapp/WEB-INF/jboss-deployment-structure.xml b/examples/demo-template/product-app/src/main/webapp/WEB-INF/jboss-deployment-structure.xml
index 97c5645855..9c1bac9b36 100755
--- a/examples/demo-template/product-app/src/main/webapp/WEB-INF/jboss-deployment-structure.xml
+++ b/examples/demo-template/product-app/src/main/webapp/WEB-INF/jboss-deployment-structure.xml
@@ -3,7 +3,7 @@
-
+
\ No newline at end of file
diff --git a/examples/demo-template/third-party-cdi/src/main/webapp/WEB-INF/jboss-deployment-structure.xml b/examples/demo-template/third-party-cdi/src/main/webapp/WEB-INF/jboss-deployment-structure.xml
index 97c5645855..9c1bac9b36 100755
--- a/examples/demo-template/third-party-cdi/src/main/webapp/WEB-INF/jboss-deployment-structure.xml
+++ b/examples/demo-template/third-party-cdi/src/main/webapp/WEB-INF/jboss-deployment-structure.xml
@@ -3,7 +3,7 @@
-
+
\ No newline at end of file
diff --git a/examples/demo-template/third-party/src/main/webapp/WEB-INF/jboss-deployment-structure.xml b/examples/demo-template/third-party/src/main/webapp/WEB-INF/jboss-deployment-structure.xml
index 97c5645855..9c1bac9b36 100755
--- a/examples/demo-template/third-party/src/main/webapp/WEB-INF/jboss-deployment-structure.xml
+++ b/examples/demo-template/third-party/src/main/webapp/WEB-INF/jboss-deployment-structure.xml
@@ -3,7 +3,7 @@
-
+
\ No newline at end of file
diff --git a/integration/keycloak-as7-subsystem/pom.xml b/integration/keycloak-as7-subsystem/pom.xml
index 7eb6c225f9..f1ee2ed8f3 100755
--- a/integration/keycloak-as7-subsystem/pom.xml
+++ b/integration/keycloak-as7-subsystem/pom.xml
@@ -71,25 +71,25 @@
org.jboss.as
jboss-as-naming
- 7.1.1.Final
+ ${jboss.version}
org.jboss.as
jboss-as-server
- 7.1.1.Final
+ ${jboss.version}
org.jboss.as
jboss-as-ee
- 7.1.1.Final
+ ${jboss.version}
org.jboss.as
jboss-as-web
- 7.1.1.Final
+ ${jboss.version}
diff --git a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/Environment.java b/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/Environment.java
deleted file mode 100644
index ceb1d51fad..0000000000
--- a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/Environment.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright 2014 Red Hat Inc. and/or its affiliates and other contributors
- * as indicated by the @author tags. All rights reserved.
- *
- * 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.subsystem.extension;
-
-import org.jboss.as.version.Version;
-import org.jboss.modules.Module;
-import org.jboss.modules.ModuleIdentifier;
-import org.jboss.modules.ModuleLoadException;
-
-/**
- * Allows the Keycloak subsystem to learn about its environment.
- *
- * @author Stan Silvert ssilvert@redhat.com (C) 2014 Red Hat Inc.
- */
-public class Environment {
- private static final ModuleIdentifier KEYCLOAK_SUBSYSTEM = ModuleIdentifier.create("org.keycloak.keycloak-subsystem");
-
- private static final boolean isWildFly = findIsWildFly();
-
- public Environment() {
- }
-
- private static boolean findIsWildFly() {
- try {
- return !Version.AS_VERSION.startsWith("7");
- } catch (Exception e) {
- return false;
- }
- }
-
- public Module getSubsysModule() {
- // Unfortunately, we can't cache this because unit tests will fail
- try {
- return Module.getModuleFromCallerModuleLoader(KEYCLOAK_SUBSYSTEM);
- } catch (ModuleLoadException e) {
- throw new IllegalStateException("Can't find Keycloak subsystem.", e);
- }
- }
-
- public static boolean isWildFly() {
- return isWildFly;
- }
-}
diff --git a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/KeycloakAdapterConfigDeploymentProcessorEAP6.java b/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/KeycloakAdapterConfigDeploymentProcessorEAP6.java
deleted file mode 100755
index dc2d8e76d0..0000000000
--- a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/KeycloakAdapterConfigDeploymentProcessorEAP6.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Copyright 2014 Red Hat Inc. and/or its affiliates and other contributors
- * as indicated by the @author tags. All rights reserved.
- *
- * 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.subsystem.extension;
-
-import org.jboss.as.server.deployment.DeploymentPhaseContext;
-import org.jboss.as.server.deployment.DeploymentUnit;
-import org.jboss.as.server.deployment.DeploymentUnitProcessingException;
-import org.jboss.as.server.deployment.DeploymentUnitProcessor;
-import org.jboss.as.web.deployment.WarMetaData;
-import org.jboss.logging.Logger;
-import org.jboss.metadata.javaee.spec.ParamValueMetaData;
-import org.jboss.metadata.web.jboss.JBossWebMetaData;
-import org.jboss.metadata.web.jboss.ValveMetaData;
-import org.jboss.metadata.web.spec.LoginConfigMetaData;
-import org.keycloak.adapters.jbossweb.KeycloakAuthenticatorValve;
-import org.keycloak.subsystem.logging.KeycloakLogger;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Pass authentication data (keycloak.json) as a servlet context param so it can be read by the KeycloakServletExtension.
- * This is used for EAP6.
- *
- * @author Stan Silvert ssilvert@redhat.com (C) 2014 Red Hat Inc.
- */
-
-// Note: Even though this class closely resembles the WildFly KeycloakAdapterConfigDeploymentProcessor
-// it can not be easily refactored because the WarMetaData classes are of different types.
-public class KeycloakAdapterConfigDeploymentProcessorEAP6 implements DeploymentUnitProcessor {
- protected Logger log = Logger.getLogger(KeycloakAdapterConfigDeploymentProcessorEAP6.class);
-
- @Override
- public void deploy(DeploymentPhaseContext phaseContext) throws DeploymentUnitProcessingException {
- DeploymentUnit deploymentUnit = phaseContext.getDeploymentUnit();
- String deploymentName = deploymentUnit.getName();
-
- KeycloakAdapterConfigService service = KeycloakAdapterConfigService.getInstance();
- //log.info("********* CHECK KEYCLOAK DEPLOYMENT: " + deploymentName);
- if (service.isSecureDeployment(deploymentName)) {
- addKeycloakAuthData(phaseContext, deploymentName, service);
- return;
- }
-
- // else check to see if KEYCLOAK is specified as login config
- WarMetaData warMetaData = deploymentUnit.getAttachment(WarMetaData.ATTACHMENT_KEY);
- if (warMetaData == null) return;
- JBossWebMetaData webMetaData = warMetaData.getMergedJBossWebMetaData();
- if (webMetaData == null) return;
-
- LoginConfigMetaData loginConfig = webMetaData.getLoginConfig();
- if (loginConfig != null && "KEYCLOAK".equalsIgnoreCase(loginConfig.getAuthMethod())) {
- addValve(webMetaData);
- }
- }
-
- private void addKeycloakAuthData(DeploymentPhaseContext phaseContext, String deploymentName, KeycloakAdapterConfigService service) {
- DeploymentUnit deploymentUnit = phaseContext.getDeploymentUnit();
- WarMetaData warMetaData = deploymentUnit.getAttachment(WarMetaData.ATTACHMENT_KEY);
-
- addJSONData(service.getJSON(deploymentName), warMetaData);
- JBossWebMetaData webMetaData = warMetaData.getMergedJBossWebMetaData();
- if (webMetaData == null) {
- webMetaData = new JBossWebMetaData();
- warMetaData.setMergedJBossWebMetaData(webMetaData);
- }
- addValve(webMetaData);
-
- LoginConfigMetaData loginConfig = webMetaData.getLoginConfig();
- if (loginConfig == null) {
- loginConfig = new LoginConfigMetaData();
- webMetaData.setLoginConfig(loginConfig);
- }
- loginConfig.setAuthMethod("KEYCLOAK");
- loginConfig.setRealmName(service.getRealmName(deploymentName));
- KeycloakLogger.ROOT_LOGGER.deploymentSecured(deploymentName);
- }
-
- private void addValve(JBossWebMetaData webMetaData) {
- List valves = webMetaData.getValves();
- if (valves == null) {
- valves = new ArrayList(1);
- webMetaData.setValves(valves);
- }
- ValveMetaData valve = new ValveMetaData();
- valve.setValveClass(KeycloakAuthenticatorValve.class.getName());
- valve.setModule("org.keycloak.keycloak-as7-adapter");
- //log.info("******* adding Keycloak valve to: " + deploymentName);
- valves.add(valve);
- }
-
- private void addJSONData(String json, WarMetaData warMetaData) {
- JBossWebMetaData webMetaData = warMetaData.getMergedJBossWebMetaData();
- if (webMetaData == null) {
- webMetaData = new JBossWebMetaData();
- warMetaData.setMergedJBossWebMetaData(webMetaData);
- }
-
- List contextParams = webMetaData.getContextParams();
- if (contextParams == null) {
- contextParams = new ArrayList();
- }
-
- ParamValueMetaData param = new ParamValueMetaData();
- param.setParamName(KeycloakAdapterConfigDeploymentProcessor.AUTH_DATA_PARAM_NAME);
- param.setParamValue(json);
- contextParams.add(param);
-
- webMetaData.setContextParams(contextParams);
- }
-
- @Override
- public void undeploy(DeploymentUnit du) {
-
- }
-
-}
diff --git a/integration/keycloak-subsystem/src/main/resources/META-INF/services/org.jboss.as.controller.Extension b/integration/keycloak-subsystem/src/main/resources/META-INF/services/org.jboss.as.controller.Extension
deleted file mode 100644
index 6a7d631da0..0000000000
--- a/integration/keycloak-subsystem/src/main/resources/META-INF/services/org.jboss.as.controller.Extension
+++ /dev/null
@@ -1 +0,0 @@
-org.keycloak.subsystem.extension.KeycloakExtension
diff --git a/integration/keycloak-subsystem/src/main/resources/subsystem-templates/keycloak.xml b/integration/keycloak-subsystem/src/main/resources/subsystem-templates/keycloak.xml
deleted file mode 100644
index 8a6256704d..0000000000
--- a/integration/keycloak-subsystem/src/main/resources/subsystem-templates/keycloak.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
-
- org.keycloak.keycloak-subsystem
-
-
-
-
-
-
-
-
- master
- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC4siLKUew0WYxdtq6/rwk4Uj/4amGFFnE/yzIxQVU0PUqz3QBRVkUWpDj0K6ZnS5nzJV/y6DHLEy7hjZTdRDphyF1sq09aDOYnVpzu8o2sIlMM8q5RnUyEfIyUZqwo8pSZDJ90fS0s+IDUJNCSIrAKO3w1lqZDHL6E/YFHXyzkvQIDAQAB
- http://localhost:8080/auth
- EXTERNAL
- web-console
- 0aa31d98-e0aa-404c-b6e0-e771dba1e798
- true
-
-
- master
- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC4siLKUew0WYxdtq6/rwk4Uj/4amGFFnE/yzIxQVU0PUqz3QBRVkUWpDj0K6ZnS5nzJV/y6DHLEy7hjZTdRDphyF1sq09aDOYnVpzu8o2sIlMM8q5RnUyEfIyUZqwo8pSZDJ90fS0s+IDUJNCSIrAKO3w1lqZDHL6E/YFHXyzkvQIDAQAB
- http://localhost:8080/auth
- EXTERNAL
- http-endpoint
- 2769a4a2-5be0-454f-838f-f33b7755b667
- true
-
-
-
-
-
-
diff --git a/integration/keycloak-subsystem/src/test/java/org/keycloak/subsystem/extension/SubsystemParsingTestCase.java b/integration/keycloak-subsystem/src/test/java/org/keycloak/subsystem/extension/SubsystemParsingTestCase.java
deleted file mode 100755
index 911fed4530..0000000000
--- a/integration/keycloak-subsystem/src/test/java/org/keycloak/subsystem/extension/SubsystemParsingTestCase.java
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * Copyright 2013 Red Hat Inc. and/or its affiliates and other contributors
- * as indicated by the @author tags. All rights reserved.
- *
- * 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.subsystem.extension;
-
-
-import junit.framework.Assert;
-import org.jboss.as.controller.PathAddress;
-import org.jboss.as.controller.PathElement;
-import org.jboss.as.subsystem.test.AbstractSubsystemTest;
-import org.jboss.as.subsystem.test.KernelServices;
-import org.jboss.dmr.ModelNode;
-import org.junit.Test;
-
-import java.util.List;
-
-import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.*;
-
-
-/**
- * Tests all management expects for subsystem, parsing, marshaling, model definition and other
- * Here is an example that allows you a fine grained controller over what is tested and how. So it can give you ideas what can be done and tested.
- * If you have no need for advanced testing of subsystem you look at {@link SubsystemBaseParsingTestCase} that testes same stuff but most of the code
- * is hidden inside of test harness
- *
- * @author Kabir Khan
- */
-public class SubsystemParsingTestCase extends AbstractSubsystemTest {
-
- public SubsystemParsingTestCase() {
- super(KeycloakExtension.SUBSYSTEM_NAME, new KeycloakExtension());
- }
-
- @Test
- public void testJson() throws Exception {
- ModelNode node = new ModelNode();
- node.get("realm").set("demo");
- node.get("resource").set("customer-portal");
- node.get("realm-public-key").set("MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCrVrCuTtArbgaZzL1hvh0xtL5mc7o0NqPVnYXkLvgcwiC3BjLGw1tGEGoJaXDuSaRllobm53JBhjx33UNv+5z/UMG4kytBWxheNVKnL6GgqlNabMaFfPLPCF8kAgKnsi79NMo+n6KnSY8YeUmec/p2vjO2NjsSAVcWEQMVhJ31LwIDAQAB");
- node.get("auth-url").set("http://localhost:8080/auth-server/rest/realms/demo/protocol/openid-connect/login");
- node.get("code-url").set("http://localhost:8080/auth-server/rest/realms/demo/protocol/openid-connect/access/codes");
- node.get("ssl-required").set("external");
- node.get("expose-token").set(true);
- ModelNode credential = new ModelNode();
- credential.get("password").set("password");
- node.get("credentials").set(credential);
-
- System.out.println("json=" + node.toJSONString(false));
- }
- /**
- * Tests that the xml is parsed into the correct operations
- */
- @Test
- public void testParseSubsystem() throws Exception {
- //Parse the subsystem xml into operations
- String subsystemXml =
- "" +
- "";
- List operations = super.parse(subsystemXml);
-
- ///Check that we have the expected number of operations
- Assert.assertEquals(1, operations.size());
-
- //Check that each operation has the correct content
- ModelNode addSubsystem = operations.get(0);
- Assert.assertEquals(ADD, addSubsystem.get(OP).asString());
- PathAddress addr = PathAddress.pathAddress(addSubsystem.get(OP_ADDR));
- Assert.assertEquals(1, addr.size());
- PathElement element = addr.getElement(0);
- Assert.assertEquals(SUBSYSTEM, element.getKey());
- Assert.assertEquals(KeycloakExtension.SUBSYSTEM_NAME, element.getValue());
- }
-
- /**
- * Test that the model created from the xml looks as expected
- */
- @Test
- public void testInstallIntoController() throws Exception {
- //Parse the subsystem xml and install into the controller
- String subsystemXml =
- "" +
- "";
- KernelServices services = super.installInController(subsystemXml);
-
- //Read the whole model and make sure it looks as expected
- ModelNode model = services.readWholeModel();
- Assert.assertTrue(model.get(SUBSYSTEM).hasDefined(KeycloakExtension.SUBSYSTEM_NAME));
- }
-
- /**
- * Starts a controller with a given subsystem xml and then checks that a second
- * controller started with the xml marshalled from the first one results in the same model
- */
- @Test
- public void testParseAndMarshalModel() throws Exception {
- //Parse the subsystem xml and install into the first controller
- //TODO: Figure out why this fails
- String subsystemXml =
- "" +
- "";
- KernelServices servicesA = super.installInController(subsystemXml);
- //Get the model and the persisted xml from the first controller
- ModelNode modelA = servicesA.readWholeModel();
- String marshalled = servicesA.getPersistedSubsystemXml();
-
- //Install the persisted xml from the first controller into a second controller
- KernelServices servicesB = super.installInController(marshalled);
- ModelNode modelB = servicesB.readWholeModel();
-
- //Make sure the models from the two controllers are identical
- super.compare(modelA, modelB);
- }
-
- /**
- * Starts a controller with the given subsystem xml and then checks that a second
- * controller started with the operations from its describe action results in the same model
- */
- @Test
- public void testDescribeHandler() throws Exception {
- //Parse the subsystem xml and install into the first controller
- String subsystemXml =
- "" +
- "";
- KernelServices servicesA = super.installInController(subsystemXml);
- //Get the model and the describe operations from the first controller
- ModelNode modelA = servicesA.readWholeModel();
- ModelNode describeOp = new ModelNode();
- describeOp.get(OP).set(DESCRIBE);
- describeOp.get(OP_ADDR).set(
- PathAddress.pathAddress(
- PathElement.pathElement(SUBSYSTEM, KeycloakExtension.SUBSYSTEM_NAME)).toModelNode());
- List operations = super.checkResultAndGetContents(servicesA.executeOperation(describeOp)).asList();
-
-
- //Install the describe options from the first controller into a second controller
- KernelServices servicesB = super.installInController(operations);
- ModelNode modelB = servicesB.readWholeModel();
-
- //Make sure the models from the two controllers are identical
- super.compare(modelA, modelB);
- }
-
- /**
- * Tests that the subsystem can be removed
- */
- @Test
- public void testSubsystemRemoval() throws Exception {
- //Parse the subsystem xml and install into the first controller
- String subsystemXml =
- "" +
- "";
- KernelServices services = super.installInController(subsystemXml);
- //Checks that the subsystem was removed from the model
- super.assertRemoveSubsystemResources(services);
-
- //TODO Chek that any services that were installed were removed here
- }
-}
diff --git a/integration/pom.xml b/integration/pom.xml
index f79be4ec40..5c1f1328c8 100755
--- a/integration/pom.xml
+++ b/integration/pom.xml
@@ -22,9 +22,7 @@
as7-eap6/adapter
jetty
undertow
- wildfly-adapter
- wildfly-extensions
- keycloak-subsystem
+ wildfly
keycloak-as7-subsystem
js
installed
diff --git a/integration/wildfly/pom.xml b/integration/wildfly/pom.xml
new file mode 100644
index 0000000000..25df76d261
--- /dev/null
+++ b/integration/wildfly/pom.xml
@@ -0,0 +1,22 @@
+
+
+ keycloak-parent
+ org.keycloak
+ 1.3.0.Beta1-SNAPSHOT
+ ../../pom.xml
+
+ Keycloak WildFly Integration
+
+ 4.0.0
+
+ keycloak-wildfly-integration-pom
+ pom
+
+
+ wildfly-adapter
+ wildfly-extensions
+ wildfly-server-subsystem
+ wildfly-adapter-subsystem
+
+
\ No newline at end of file
diff --git a/integration/wildfly/wildfly-adapter-subsystem/pom.xml b/integration/wildfly/wildfly-adapter-subsystem/pom.xml
new file mode 100755
index 0000000000..0a28a652e3
--- /dev/null
+++ b/integration/wildfly/wildfly-adapter-subsystem/pom.xml
@@ -0,0 +1,105 @@
+
+
+
+ 4.0.0
+
+
+ org.keycloak
+ keycloak-parent
+ 1.3.0.Beta1-SNAPSHOT
+ ../../../pom.xml
+
+
+ keycloak-wildfly-adapter-subsystem
+ Keycloak Adapter Subsystem
+
+ jar
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+ false
+ true
+
+
+ jboss.home
+ ${jboss.home}
+
+
+
+ **/*TestCase.java
+
+
+
+
+
+
+
+
+ org.wildfly.core
+ wildfly-controller
+ provided
+
+
+ org.wildfly.core
+ wildfly-server
+ provided
+
+
+ org.wildfly
+ wildfly-web-common
+ provided
+
+
+ org.jboss.logging
+ jboss-logging-annotations
+ ${jboss-logging-tools.version}
+
+ provided
+ true
+
+
+
+ org.jboss.logging
+ jboss-logging-processor
+
+ provided
+ true
+
+
+
+ org.wildfly.core
+ wildfly-subsystem-test-framework
+ test
+
+
+ junit
+ junit
+ test
+
+
+ org.keycloak
+ keycloak-wildfly-adapter
+ ${project.version}
+
+
+
diff --git a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/CredentialAddHandler.java b/integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/extension/CredentialAddHandler.java
similarity index 81%
rename from integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/CredentialAddHandler.java
rename to integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/extension/CredentialAddHandler.java
index 17f7928198..2b9852c32e 100755
--- a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/CredentialAddHandler.java
+++ b/integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/extension/CredentialAddHandler.java
@@ -15,17 +15,13 @@
* the License.
*/
-package org.keycloak.subsystem.extension;
+package org.keycloak.subsystem.adapter.extension;
import org.jboss.as.controller.AbstractAddStepHandler;
import org.jboss.as.controller.AttributeDefinition;
import org.jboss.as.controller.OperationContext;
import org.jboss.as.controller.OperationFailedException;
-import org.jboss.as.controller.ServiceVerificationHandler;
import org.jboss.dmr.ModelNode;
-import org.jboss.msc.service.ServiceController;
-
-import java.util.List;
/**
* Add a credential to a deployment.
@@ -39,7 +35,7 @@ public class CredentialAddHandler extends AbstractAddStepHandler {
}
@Override
- protected void performRuntime(OperationContext context, ModelNode operation, ModelNode model, ServiceVerificationHandler verificationHandler, List> newControllers) throws OperationFailedException {
+ protected void performRuntime(OperationContext context, ModelNode operation, ModelNode model) throws OperationFailedException {
KeycloakAdapterConfigService ckService = KeycloakAdapterConfigService.getInstance();
ckService.addCredential(operation, context.resolveExpressions(model));
}
diff --git a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/CredentialDefinition.java b/integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/extension/CredentialDefinition.java
similarity index 97%
rename from integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/CredentialDefinition.java
rename to integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/extension/CredentialDefinition.java
index 212f8fa51c..77dfd9db22 100755
--- a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/CredentialDefinition.java
+++ b/integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/extension/CredentialDefinition.java
@@ -14,7 +14,7 @@
* License for the specific language governing permissions and limitations under
* the License.
*/
-package org.keycloak.subsystem.extension;
+package org.keycloak.subsystem.adapter.extension;
import org.jboss.as.controller.AttributeDefinition;
import org.jboss.as.controller.PathElement;
@@ -36,7 +36,6 @@ public class CredentialDefinition extends SimpleResourceDefinition {
protected static final AttributeDefinition VALUE =
new SimpleAttributeDefinitionBuilder("value", ModelType.STRING, false)
- .setXmlName("value")
.setAllowExpression(true)
.setValidator(new StringLengthValidator(1, Integer.MAX_VALUE, false, true))
.build();
diff --git a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/CredentialReadWriteAttributeHandler.java b/integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/extension/CredentialReadWriteAttributeHandler.java
similarity index 97%
rename from integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/CredentialReadWriteAttributeHandler.java
rename to integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/extension/CredentialReadWriteAttributeHandler.java
index 75b334d3dd..7aff17f171 100644
--- a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/CredentialReadWriteAttributeHandler.java
+++ b/integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/extension/CredentialReadWriteAttributeHandler.java
@@ -15,7 +15,7 @@
* the License.
*/
-package org.keycloak.subsystem.extension;
+package org.keycloak.subsystem.adapter.extension;
import org.jboss.as.controller.AbstractWriteAttributeHandler;
import org.jboss.as.controller.OperationContext;
diff --git a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/CredentialRemoveHandler.java b/integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/extension/CredentialRemoveHandler.java
similarity index 96%
rename from integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/CredentialRemoveHandler.java
rename to integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/extension/CredentialRemoveHandler.java
index 0023d41cc1..36923f08df 100644
--- a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/CredentialRemoveHandler.java
+++ b/integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/extension/CredentialRemoveHandler.java
@@ -15,7 +15,7 @@
* the License.
*/
-package org.keycloak.subsystem.extension;
+package org.keycloak.subsystem.adapter.extension;
import org.jboss.as.controller.AbstractRemoveStepHandler;
import org.jboss.as.controller.OperationContext;
diff --git a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/KeycloakAdapterConfigDeploymentProcessor.java b/integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/extension/KeycloakAdapterConfigDeploymentProcessor.java
similarity index 98%
rename from integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/KeycloakAdapterConfigDeploymentProcessor.java
rename to integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/extension/KeycloakAdapterConfigDeploymentProcessor.java
index bebf6dbe54..f6246273e2 100755
--- a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/KeycloakAdapterConfigDeploymentProcessor.java
+++ b/integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/extension/KeycloakAdapterConfigDeploymentProcessor.java
@@ -15,7 +15,7 @@
* the License.
*/
-package org.keycloak.subsystem.extension;
+package org.keycloak.subsystem.adapter.extension;
import org.jboss.as.server.deployment.DeploymentPhaseContext;
import org.jboss.as.server.deployment.DeploymentUnit;
@@ -26,7 +26,7 @@ import org.jboss.logging.Logger;
import org.jboss.metadata.javaee.spec.ParamValueMetaData;
import org.jboss.metadata.web.jboss.JBossWebMetaData;
import org.jboss.metadata.web.spec.LoginConfigMetaData;
-import org.keycloak.subsystem.logging.KeycloakLogger;
+import org.keycloak.subsystem.adapter.logging.KeycloakLogger;
import java.util.ArrayList;
import java.util.List;
diff --git a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/KeycloakAdapterConfigService.java b/integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/extension/KeycloakAdapterConfigService.java
similarity index 88%
rename from integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/KeycloakAdapterConfigService.java
rename to integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/extension/KeycloakAdapterConfigService.java
index 81bb610138..c6f616adce 100755
--- a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/KeycloakAdapterConfigService.java
+++ b/integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/extension/KeycloakAdapterConfigService.java
@@ -15,11 +15,10 @@
* the License.
*/
-package org.keycloak.subsystem.extension;
+package org.keycloak.subsystem.adapter.extension;
import org.jboss.dmr.ModelNode;
import org.jboss.dmr.Property;
-import org.jboss.logging.Logger;
import java.util.HashMap;
import java.util.Map;
@@ -33,7 +32,7 @@ import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ADD
* @author Stan Silvert ssilvert@redhat.com (C) 2013 Red Hat Inc.
*/
public final class KeycloakAdapterConfigService {
- protected Logger log = Logger.getLogger(KeycloakAdapterConfigService.class);
+
private static final String CREDENTIALS_JSON_NAME = "credentials";
private static final KeycloakAdapterConfigService INSTANCE = new KeycloakAdapterConfigService();
@@ -47,30 +46,10 @@ public final class KeycloakAdapterConfigService {
// keycloak-secured deployments
private final Map secureDeployments = new HashMap();
- // key=auth-server deployment name; value=web-context
- private final Map webContexts = new HashMap();
-
-
private KeycloakAdapterConfigService() {
}
- public void addServerDeployment(String deploymentName, String webContext) {
- this.webContexts.put(deploymentName, webContext);
- }
-
- public String getWebContext(String deploymentName) {
- return webContexts.get(deploymentName);
- }
-
- public void removeServerDeployment(String deploymentName) {
- this.webContexts.remove(deploymentName);
- }
-
- public boolean isWebContextUsed(String webContext) {
- return webContexts.containsValue(webContext);
- }
-
public void addRealm(ModelNode operation, ModelNode model) {
this.realms.put(realmNameFromOp(operation), model.clone());
}
@@ -197,8 +176,4 @@ public final class KeycloakAdapterConfigService {
return this.secureDeployments.containsKey(deploymentName);
}
-
- public boolean isKeycloakServerDeployment(String deploymentName) {
- return this.webContexts.containsKey(deploymentName);
- }
}
diff --git a/integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/extension/KeycloakDependencyProcessor.java b/integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/extension/KeycloakDependencyProcessor.java
new file mode 100755
index 0000000000..3e968b4af6
--- /dev/null
+++ b/integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/extension/KeycloakDependencyProcessor.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright 2013 Red Hat Inc. and/or its affiliates and other contributors
+ * as indicated by the @author tags. All rights reserved.
+ *
+ * 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.subsystem.adapter.extension;
+
+import org.jboss.as.server.deployment.Attachments;
+import org.jboss.as.server.deployment.DeploymentPhaseContext;
+import org.jboss.as.server.deployment.DeploymentUnit;
+import org.jboss.as.server.deployment.DeploymentUnitProcessingException;
+import org.jboss.as.server.deployment.DeploymentUnitProcessor;
+import org.jboss.as.server.deployment.module.ModuleDependency;
+import org.jboss.as.server.deployment.module.ModuleSpecification;
+import org.jboss.modules.Module;
+import org.jboss.modules.ModuleIdentifier;
+import org.jboss.modules.ModuleLoader;
+
+/**
+ *
+ * @author Stan Silvert ssilvert@redhat.com (C) 2013 Red Hat Inc.
+ */
+public abstract class KeycloakDependencyProcessor implements DeploymentUnitProcessor {
+
+ private static final ModuleIdentifier KEYCLOAK_JBOSS_CORE_ADAPTER = ModuleIdentifier.create("org.keycloak.keycloak-jboss-adapter-core");
+ private static final ModuleIdentifier KEYCLOAK_CORE_ADAPTER = ModuleIdentifier.create("org.keycloak.keycloak-adapter-core");
+ private static final ModuleIdentifier KEYCLOAK_CORE = ModuleIdentifier.create("org.keycloak.keycloak-core");
+
+ @Override
+ public void deploy(DeploymentPhaseContext phaseContext) throws DeploymentUnitProcessingException {
+ final DeploymentUnit deploymentUnit = phaseContext.getDeploymentUnit();
+
+ // Next phase, need to detect if this is a Keycloak deployment. If not, don't add the modules.
+
+ final ModuleSpecification moduleSpecification = deploymentUnit.getAttachment(Attachments.MODULE_SPECIFICATION);
+ final ModuleLoader moduleLoader = Module.getBootModuleLoader();
+ addCommonModules(moduleSpecification, moduleLoader);
+ addPlatformSpecificModules(moduleSpecification, moduleLoader);
+ }
+
+ private void addCommonModules(ModuleSpecification moduleSpecification, ModuleLoader moduleLoader) {
+ // ModuleDependency(ModuleLoader moduleLoader, ModuleIdentifier identifier, boolean optional, boolean export, boolean importServices, boolean userSpecified)
+ moduleSpecification.addSystemDependency(new ModuleDependency(moduleLoader, KEYCLOAK_JBOSS_CORE_ADAPTER, false, false, false, false));
+ moduleSpecification.addSystemDependency(new ModuleDependency(moduleLoader, KEYCLOAK_CORE_ADAPTER, false, false, false, false));
+ moduleSpecification.addSystemDependency(new ModuleDependency(moduleLoader, KEYCLOAK_CORE, false, false, false, false));
+ }
+
+ abstract protected void addPlatformSpecificModules(ModuleSpecification moduleSpecification, ModuleLoader moduleLoader);
+
+ @Override
+ public void undeploy(DeploymentUnit du) {
+
+ }
+
+}
diff --git a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/KeycloakDependencyProcessorEAP6.java b/integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/extension/KeycloakDependencyProcessorWildFly.java
similarity index 66%
rename from integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/KeycloakDependencyProcessorEAP6.java
rename to integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/extension/KeycloakDependencyProcessorWildFly.java
index 7c084d11d1..a11bd01d68 100755
--- a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/KeycloakDependencyProcessorEAP6.java
+++ b/integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/extension/KeycloakDependencyProcessorWildFly.java
@@ -15,7 +15,7 @@
* the License.
*/
-package org.keycloak.subsystem.extension;
+package org.keycloak.subsystem.adapter.extension;
import org.jboss.as.server.deployment.module.ModuleDependency;
import org.jboss.as.server.deployment.module.ModuleSpecification;
@@ -23,17 +23,19 @@ import org.jboss.modules.ModuleIdentifier;
import org.jboss.modules.ModuleLoader;
/**
- * Adds platform-specific modules for EAP6
+ * Add platform-specific modules for WildFly.
*
* @author Stan Silvert ssilvert@redhat.com (C) 2014 Red Hat Inc.
*/
-public class KeycloakDependencyProcessorEAP6 extends KeycloakDependencyProcessor {
+public class KeycloakDependencyProcessorWildFly extends KeycloakDependencyProcessor {
- private static final ModuleIdentifier KEYCLOAK_AS7_ADAPTER = ModuleIdentifier.create("org.keycloak.keycloak-as7-adapter");
+ private static final ModuleIdentifier KEYCLOAK_WILDFLY_ADAPTER = ModuleIdentifier.create("org.keycloak.keycloak-wildfly-adapter");
+ private static final ModuleIdentifier KEYCLOAK_UNDERTOW_ADAPTER = ModuleIdentifier.create("org.keycloak.keycloak-undertow-adapter");
@Override
protected void addPlatformSpecificModules(ModuleSpecification moduleSpecification, ModuleLoader moduleLoader) {
// ModuleDependency(ModuleLoader moduleLoader, ModuleIdentifier identifier, boolean optional, boolean export, boolean importServices, boolean userSpecified)
- moduleSpecification.addSystemDependency(new ModuleDependency(moduleLoader, KEYCLOAK_AS7_ADAPTER, false, false, true, false));
+ moduleSpecification.addSystemDependency(new ModuleDependency(moduleLoader, KEYCLOAK_WILDFLY_ADAPTER, false, false, true, false));
+ moduleSpecification.addSystemDependency(new ModuleDependency(moduleLoader, KEYCLOAK_UNDERTOW_ADAPTER, false, false, false, false));
}
}
diff --git a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/KeycloakExtension.java b/integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/extension/KeycloakExtension.java
similarity index 82%
rename from integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/KeycloakExtension.java
rename to integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/extension/KeycloakExtension.java
index 1816ad27ba..31f69572e2 100755
--- a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/KeycloakExtension.java
+++ b/integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/extension/KeycloakExtension.java
@@ -14,18 +14,18 @@
* License for the specific language governing permissions and limitations under
* the License.
*/
-package org.keycloak.subsystem.extension;
+package org.keycloak.subsystem.adapter.extension;
-import org.keycloak.subsystem.extension.authserver.AuthServerDefinition;
import org.jboss.as.controller.Extension;
import org.jboss.as.controller.ExtensionContext;
+import org.jboss.as.controller.ModelVersion;
import org.jboss.as.controller.PathElement;
import org.jboss.as.controller.ResourceDefinition;
import org.jboss.as.controller.SubsystemRegistration;
import org.jboss.as.controller.descriptions.StandardResourceDescriptionResolver;
import org.jboss.as.controller.parsing.ExtensionParsingContext;
import org.jboss.as.controller.registry.ManagementResourceRegistration;
-import org.keycloak.subsystem.logging.KeycloakLogger;
+import org.keycloak.subsystem.adapter.logging.KeycloakLogger;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.SUBSYSTEM;
@@ -38,16 +38,13 @@ import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.SUB
public class KeycloakExtension implements Extension {
public static final String SUBSYSTEM_NAME = "keycloak";
- public static final String NAMESPACE = "urn:jboss:domain:keycloak:1.0";
+ public static final String NAMESPACE = "urn:jboss:domain:keycloak:1.1";
private static final KeycloakSubsystemParser PARSER = new KeycloakSubsystemParser();
static final PathElement PATH_SUBSYSTEM = PathElement.pathElement(SUBSYSTEM, SUBSYSTEM_NAME);
private static final String RESOURCE_NAME = KeycloakExtension.class.getPackage().getName() + ".LocalDescriptions";
- private static final int MANAGEMENT_API_MAJOR_VERSION = 1;
- private static final int MANAGEMENT_API_MINOR_VERSION = 0;
- private static final int MANAGEMENT_API_MICRO_VERSION = 0;
- protected static final PathElement SUBSYSTEM_PATH = PathElement.pathElement(SUBSYSTEM, SUBSYSTEM_NAME);
+ private static final ModelVersion MGMT_API_VERSION = ModelVersion.create(1,1,0);
+ static final PathElement SUBSYSTEM_PATH = PathElement.pathElement(SUBSYSTEM, SUBSYSTEM_NAME);
private static final ResourceDefinition KEYCLOAK_SUBSYSTEM_RESOURCE = new KeycloakSubsystemDefinition();
- static final AuthServerDefinition AUTH_SERVER_DEFINITION = new AuthServerDefinition();
static final RealmDefinition REALM_DEFINITION = new RealmDefinition();
static final SecureDeploymentDefinition SECURE_DEPLOYMENT_DEFINITION = new SecureDeploymentDefinition();
static final CredentialDefinition CREDENTIAL_DEFINITION = new CredentialDefinition();
@@ -74,11 +71,9 @@ public class KeycloakExtension implements Extension {
@Override
public void initialize(final ExtensionContext context) {
KeycloakLogger.ROOT_LOGGER.debug("Activating Keycloak Extension");
- final SubsystemRegistration subsystem = context.registerSubsystem(SUBSYSTEM_NAME, MANAGEMENT_API_MAJOR_VERSION,
- MANAGEMENT_API_MINOR_VERSION, MANAGEMENT_API_MICRO_VERSION);
+ final SubsystemRegistration subsystem = context.registerSubsystem(SUBSYSTEM_NAME, MGMT_API_VERSION);
ManagementResourceRegistration registration = subsystem.registerSubsystemModel(KEYCLOAK_SUBSYSTEM_RESOURCE);
- registration.registerSubModel(AUTH_SERVER_DEFINITION);
registration.registerSubModel(REALM_DEFINITION);
ManagementResourceRegistration secureDeploymentRegistration = registration.registerSubModel(SECURE_DEPLOYMENT_DEFINITION);
secureDeploymentRegistration.registerSubModel(CREDENTIAL_DEFINITION);
diff --git a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/KeycloakSubsystemAdd.java b/integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/extension/KeycloakSubsystemAdd.java
similarity index 59%
rename from integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/KeycloakSubsystemAdd.java
rename to integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/extension/KeycloakSubsystemAdd.java
index 386f8c57bc..81ad1ce5db 100755
--- a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/KeycloakSubsystemAdd.java
+++ b/integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/extension/KeycloakSubsystemAdd.java
@@ -14,23 +14,17 @@
* License for the specific language governing permissions and limitations under
* the License.
*/
-package org.keycloak.subsystem.extension;
+package org.keycloak.subsystem.adapter.extension;
import org.jboss.as.controller.AbstractBoottimeAddStepHandler;
import org.jboss.as.controller.OperationContext;
-import org.jboss.as.controller.OperationFailedException;
-import org.jboss.as.controller.ServiceVerificationHandler;
import org.jboss.as.server.AbstractDeploymentChainStep;
import org.jboss.as.server.DeploymentProcessorTarget;
import org.jboss.as.server.deployment.Phase;
import org.jboss.dmr.ModelNode;
-import org.jboss.msc.service.ServiceController;
-import java.util.List;
-import org.jboss.as.controller.registry.Resource;
import org.jboss.as.server.deployment.DeploymentUnitProcessor;
-import org.keycloak.subsystem.extension.authserver.KeycloakServerDeploymentProcessor;
/**
* The Keycloak subsystem add update handler.
@@ -42,14 +36,7 @@ class KeycloakSubsystemAdd extends AbstractBoottimeAddStepHandler {
static final KeycloakSubsystemAdd INSTANCE = new KeycloakSubsystemAdd();
@Override
- protected void populateModel(OperationContext context, ModelNode operation, Resource resource) throws OperationFailedException {
- resource.getModel().setEmptyObject();
-
-
- }
-
- @Override
- protected void performBoottime(final OperationContext context, ModelNode operation, final ModelNode model, ServiceVerificationHandler verificationHandler, List> newControllers) {
+ protected void performBoottime(final OperationContext context, ModelNode operation, final ModelNode model) {
context.addStep(new AbstractDeploymentChainStep() {
@Override
protected void execute(DeploymentProcessorTarget processorTarget) {
@@ -58,32 +45,15 @@ class KeycloakSubsystemAdd extends AbstractBoottimeAddStepHandler {
Phase.POST_MODULE, // PHASE
Phase.POST_MODULE_VALIDATOR_FACTORY - 1, // PRIORITY
chooseConfigDeploymentProcessor());
- processorTarget.addDeploymentProcessor(KeycloakExtension.SUBSYSTEM_NAME,
- Phase.POST_MODULE, // PHASE
- Phase.POST_MODULE_VALIDATOR_FACTORY - 1, // PRIORITY
- new KeycloakServerDeploymentProcessor());
}
}, OperationContext.Stage.RUNTIME);
}
private DeploymentUnitProcessor chooseDependencyProcessor() {
- if (Environment.isWildFly()) {
- return new KeycloakDependencyProcessorWildFly();
- } else {
- return new KeycloakDependencyProcessorEAP6();
- }
+ return new KeycloakDependencyProcessorWildFly();
}
private DeploymentUnitProcessor chooseConfigDeploymentProcessor() {
- if (Environment.isWildFly()) {
- return new KeycloakAdapterConfigDeploymentProcessor();
- } else {
- return new KeycloakAdapterConfigDeploymentProcessorEAP6();
- }
- }
-
- @Override
- protected boolean requiresRuntimeVerification() {
- return false;
+ return new KeycloakAdapterConfigDeploymentProcessor();
}
}
diff --git a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/KeycloakSubsystemDefinition.java b/integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/extension/KeycloakSubsystemDefinition.java
similarity index 86%
rename from integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/KeycloakSubsystemDefinition.java
rename to integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/extension/KeycloakSubsystemDefinition.java
index fe9b57b37a..975fc6c503 100644
--- a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/KeycloakSubsystemDefinition.java
+++ b/integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/extension/KeycloakSubsystemDefinition.java
@@ -15,12 +15,10 @@
* the License.
*/
-package org.keycloak.subsystem.extension;
+package org.keycloak.subsystem.adapter.extension;
-import org.jboss.as.controller.PathElement;
import org.jboss.as.controller.ReloadRequiredRemoveStepHandler;
import org.jboss.as.controller.SimpleResourceDefinition;
-import org.jboss.as.controller.descriptions.ModelDescriptionConstants;
import org.jboss.as.controller.operations.common.GenericSubsystemDescribeHandler;
import org.jboss.as.controller.registry.ManagementResourceRegistration;
@@ -31,7 +29,7 @@ import org.jboss.as.controller.registry.ManagementResourceRegistration;
*/
public class KeycloakSubsystemDefinition extends SimpleResourceDefinition {
protected KeycloakSubsystemDefinition() {
- super(PathElement.pathElement(ModelDescriptionConstants.SUBSYSTEM, KeycloakExtension.SUBSYSTEM_NAME),
+ super(KeycloakExtension.SUBSYSTEM_PATH,
KeycloakExtension.getResourceDescriptionResolver("subsystem"),
KeycloakSubsystemAdd.INSTANCE,
ReloadRequiredRemoveStepHandler.INSTANCE
diff --git a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/KeycloakSubsystemParser.java b/integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/extension/KeycloakSubsystemParser.java
similarity index 82%
rename from integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/KeycloakSubsystemParser.java
rename to integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/extension/KeycloakSubsystemParser.java
index 3cb5fadc9b..3c63f7e832 100755
--- a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/KeycloakSubsystemParser.java
+++ b/integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/extension/KeycloakSubsystemParser.java
@@ -14,9 +14,8 @@
* License for the specific language governing permissions and limitations under
* the License.
*/
-package org.keycloak.subsystem.extension;
+package org.keycloak.subsystem.adapter.extension;
-import org.keycloak.subsystem.extension.authserver.AuthServerDefinition;
import org.jboss.as.controller.AttributeDefinition;
import org.jboss.as.controller.PathAddress;
import org.jboss.as.controller.PathElement;
@@ -59,8 +58,6 @@ class KeycloakSubsystemParser implements XMLStreamConstants, XMLElementReader list) throws XMLStreamException {
- String authServerName = readNameAttribute(reader);
- ModelNode addAuthServer = new ModelNode();
- addAuthServer.get(ModelDescriptionConstants.OP).set(ModelDescriptionConstants.ADD);
- PathAddress addr = PathAddress.pathAddress(PathElement.pathElement(ModelDescriptionConstants.SUBSYSTEM, KeycloakExtension.SUBSYSTEM_NAME),
- PathElement.pathElement(AuthServerDefinition.TAG_NAME, authServerName));
- addAuthServer.get(ModelDescriptionConstants.OP_ADDR).set(addr.toModelNode());
-
- while (reader.hasNext() && nextTag(reader) != END_ELEMENT) {
- String tagName = reader.getLocalName();
- SimpleAttributeDefinition def = AuthServerDefinition.lookup(tagName);
- if (def == null) throw new XMLStreamException("Unknown auth-server tag " + tagName);
- def.parseAndSetParameter(reader.getElementText(), addAuthServer, reader);
- }
-
- list.add(addAuthServer);
- }
-
private void readRealm(XMLExtendedStreamReader reader, List list) throws XMLStreamException {
String realmName = readNameAttribute(reader);
ModelNode addRealm = new ModelNode();
@@ -178,28 +157,11 @@ class KeycloakSubsystemParser implements XMLStreamConstants, XMLElementReader> newControllers) throws OperationFailedException {
+ protected void performRuntime(OperationContext context, ModelNode operation, ModelNode model) throws OperationFailedException {
KeycloakAdapterConfigService ckService = KeycloakAdapterConfigService.getInstance();
ckService.addRealm(operation, context.resolveExpressions(model));
}
diff --git a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/RealmDefinition.java b/integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/extension/RealmDefinition.java
similarity index 98%
rename from integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/RealmDefinition.java
rename to integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/extension/RealmDefinition.java
index e590b427d1..160a6eb202 100755
--- a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/RealmDefinition.java
+++ b/integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/extension/RealmDefinition.java
@@ -14,7 +14,7 @@
* License for the specific language governing permissions and limitations under
* the License.
*/
-package org.keycloak.subsystem.extension;
+package org.keycloak.subsystem.adapter.extension;
import org.jboss.as.controller.AttributeDefinition;
import org.jboss.as.controller.PathElement;
diff --git a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/RealmRemoveHandler.java b/integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/extension/RealmRemoveHandler.java
similarity index 96%
rename from integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/RealmRemoveHandler.java
rename to integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/extension/RealmRemoveHandler.java
index 5cc319c0b2..16e43618ab 100644
--- a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/RealmRemoveHandler.java
+++ b/integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/extension/RealmRemoveHandler.java
@@ -15,7 +15,7 @@
* the License.
*/
-package org.keycloak.subsystem.extension;
+package org.keycloak.subsystem.adapter.extension;
import org.jboss.as.controller.AbstractRemoveStepHandler;
import org.jboss.as.controller.OperationContext;
diff --git a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/RealmWriteAttributeHandler.java b/integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/extension/RealmWriteAttributeHandler.java
similarity index 90%
rename from integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/RealmWriteAttributeHandler.java
rename to integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/extension/RealmWriteAttributeHandler.java
index 13e91c5ce4..f8f5e41b10 100755
--- a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/RealmWriteAttributeHandler.java
+++ b/integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/extension/RealmWriteAttributeHandler.java
@@ -15,7 +15,7 @@
* the License.
*/
-package org.keycloak.subsystem.extension;
+package org.keycloak.subsystem.adapter.extension;
import org.jboss.as.controller.AbstractWriteAttributeHandler;
import org.jboss.as.controller.AttributeDefinition;
@@ -23,8 +23,6 @@ import org.jboss.as.controller.OperationContext;
import org.jboss.as.controller.OperationFailedException;
import org.jboss.dmr.ModelNode;
-import java.util.List;
-
/**
* Update an attribute on a realm.
*
@@ -32,10 +30,6 @@ import java.util.List;
*/
public class RealmWriteAttributeHandler extends AbstractWriteAttributeHandler {
- public RealmWriteAttributeHandler(List definitions) {
- this(definitions.toArray(new AttributeDefinition[definitions.size()]));
- }
-
public RealmWriteAttributeHandler(AttributeDefinition... definitions) {
super(definitions);
}
diff --git a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/SecureDeploymentAddHandler.java b/integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/extension/SecureDeploymentAddHandler.java
similarity index 86%
rename from integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/SecureDeploymentAddHandler.java
rename to integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/extension/SecureDeploymentAddHandler.java
index 0c36146ec6..8bf263df2e 100755
--- a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/SecureDeploymentAddHandler.java
+++ b/integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/extension/SecureDeploymentAddHandler.java
@@ -15,17 +15,13 @@
* the License.
*/
-package org.keycloak.subsystem.extension;
+package org.keycloak.subsystem.adapter.extension;
import org.jboss.as.controller.AbstractAddStepHandler;
import org.jboss.as.controller.AttributeDefinition;
import org.jboss.as.controller.OperationContext;
import org.jboss.as.controller.OperationFailedException;
-import org.jboss.as.controller.ServiceVerificationHandler;
import org.jboss.dmr.ModelNode;
-import org.jboss.msc.service.ServiceController;
-
-import java.util.List;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ADD;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP;
@@ -54,7 +50,7 @@ public final class SecureDeploymentAddHandler extends AbstractAddStepHandler {
}
@Override
- protected void performRuntime(OperationContext context, ModelNode operation, ModelNode model, ServiceVerificationHandler verificationHandler, List> newControllers) throws OperationFailedException {
+ protected void performRuntime(OperationContext context, ModelNode operation, ModelNode model) throws OperationFailedException {
KeycloakAdapterConfigService ckService = KeycloakAdapterConfigService.getInstance();
ckService.addSecureDeployment(operation, context.resolveExpressions(model));
}
diff --git a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/SecureDeploymentDefinition.java b/integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/extension/SecureDeploymentDefinition.java
similarity index 99%
rename from integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/SecureDeploymentDefinition.java
rename to integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/extension/SecureDeploymentDefinition.java
index 9cd606c34c..1932cc8e8e 100755
--- a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/SecureDeploymentDefinition.java
+++ b/integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/extension/SecureDeploymentDefinition.java
@@ -14,7 +14,7 @@
* License for the specific language governing permissions and limitations under
* the License.
*/
-package org.keycloak.subsystem.extension;
+package org.keycloak.subsystem.adapter.extension;
import org.jboss.as.controller.AttributeDefinition;
import org.jboss.as.controller.PathElement;
diff --git a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/SecureDeploymentRemoveHandler.java b/integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/extension/SecureDeploymentRemoveHandler.java
similarity index 96%
rename from integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/SecureDeploymentRemoveHandler.java
rename to integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/extension/SecureDeploymentRemoveHandler.java
index 23196a5fff..6e2aefc1ef 100644
--- a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/SecureDeploymentRemoveHandler.java
+++ b/integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/extension/SecureDeploymentRemoveHandler.java
@@ -15,7 +15,7 @@
* the License.
*/
-package org.keycloak.subsystem.extension;
+package org.keycloak.subsystem.adapter.extension;
import org.jboss.as.controller.AbstractRemoveStepHandler;
import org.jboss.as.controller.OperationContext;
diff --git a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/SecureDeploymentWriteAttributeHandler.java b/integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/extension/SecureDeploymentWriteAttributeHandler.java
similarity index 98%
rename from integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/SecureDeploymentWriteAttributeHandler.java
rename to integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/extension/SecureDeploymentWriteAttributeHandler.java
index 6c87ac8601..6ed9d55b42 100755
--- a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/SecureDeploymentWriteAttributeHandler.java
+++ b/integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/extension/SecureDeploymentWriteAttributeHandler.java
@@ -15,7 +15,7 @@
* the License.
*/
-package org.keycloak.subsystem.extension;
+package org.keycloak.subsystem.adapter.extension;
import org.jboss.as.controller.AbstractWriteAttributeHandler;
import org.jboss.as.controller.AttributeDefinition;
diff --git a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/SharedAttributeDefinitons.java b/integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/extension/SharedAttributeDefinitons.java
similarity index 99%
rename from integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/SharedAttributeDefinitons.java
rename to integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/extension/SharedAttributeDefinitons.java
index 1b3c48f0d0..f7abc0485a 100755
--- a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/SharedAttributeDefinitons.java
+++ b/integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/extension/SharedAttributeDefinitons.java
@@ -14,7 +14,7 @@
* License for the specific language governing permissions and limitations under
* the License.
*/
-package org.keycloak.subsystem.extension;
+package org.keycloak.subsystem.adapter.extension;
import org.jboss.as.controller.SimpleAttributeDefinition;
import org.jboss.as.controller.SimpleAttributeDefinitionBuilder;
diff --git a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/logging/KeycloakLogger.java b/integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/logging/KeycloakLogger.java
similarity index 96%
rename from integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/logging/KeycloakLogger.java
rename to integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/logging/KeycloakLogger.java
index 55694d22df..de0bb4b9cb 100755
--- a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/logging/KeycloakLogger.java
+++ b/integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/logging/KeycloakLogger.java
@@ -14,7 +14,7 @@
* License for the specific language governing permissions and limitations under
* the License.
*/
-package org.keycloak.subsystem.logging;
+package org.keycloak.subsystem.adapter.logging;
import org.jboss.logging.BasicLogger;
import org.jboss.logging.Logger;
diff --git a/integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/logging/KeycloakMessages.java b/integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/logging/KeycloakMessages.java
new file mode 100755
index 0000000000..a45b0b82a9
--- /dev/null
+++ b/integration/wildfly/wildfly-adapter-subsystem/src/main/java/org/keycloak/subsystem/adapter/logging/KeycloakMessages.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2013 Red Hat Inc. and/or its affiliates and other contributors
+ * as indicated by the @author tags. All rights reserved.
+ *
+ * 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.subsystem.adapter.logging;
+
+import org.jboss.logging.Messages;
+import org.jboss.logging.annotations.MessageBundle;
+
+/**
+ * This interface to be fleshed out later when error messages are fully externalized.
+ *
+ * @author Stan Silvert ssilvert@redhat.com (C) 2012 Red Hat Inc.
+ */
+@MessageBundle(projectCode = "KEYCLOAK")
+public interface KeycloakMessages {
+
+ /**
+ * The messages
+ */
+ KeycloakMessages MESSAGES = Messages.getBundle(KeycloakMessages.class);
+}
diff --git a/integration/wildfly/wildfly-adapter-subsystem/src/main/resources/META-INF/services/org.jboss.as.controller.Extension b/integration/wildfly/wildfly-adapter-subsystem/src/main/resources/META-INF/services/org.jboss.as.controller.Extension
new file mode 100644
index 0000000000..b759b38f86
--- /dev/null
+++ b/integration/wildfly/wildfly-adapter-subsystem/src/main/resources/META-INF/services/org.jboss.as.controller.Extension
@@ -0,0 +1 @@
+org.keycloak.subsystem.adapter.extension.KeycloakExtension
diff --git a/integration/keycloak-subsystem/src/main/resources/org/keycloak/subsystem/extension/LocalDescriptions.properties b/integration/wildfly/wildfly-adapter-subsystem/src/main/resources/org/keycloak/subsystem/adapter/extension/LocalDescriptions.properties
similarity index 67%
rename from integration/keycloak-subsystem/src/main/resources/org/keycloak/subsystem/extension/LocalDescriptions.properties
rename to integration/wildfly/wildfly-adapter-subsystem/src/main/resources/org/keycloak/subsystem/adapter/extension/LocalDescriptions.properties
index 46d254d7ee..c00bd8d227 100755
--- a/integration/keycloak-subsystem/src/main/resources/org/keycloak/subsystem/extension/LocalDescriptions.properties
+++ b/integration/wildfly/wildfly-adapter-subsystem/src/main/resources/org/keycloak/subsystem/adapter/extension/LocalDescriptions.properties
@@ -1,30 +1,9 @@
-keycloak.subsystem=Keycloak subsystem
-keycloak.subsystem.add=Operation Adds Keycloak subsystem
-keycloak.subsystem.remove=Operation removes Keycloak subsystem
-keycloak.subsystem.auth-server=Keycloak Auth Server
+keycloak.subsystem=Keycloak adapter subsystem
+keycloak.subsystem.add=Operation Adds Keycloak adapter subsystem
+keycloak.subsystem.remove=Operation removes Keycloak adapter subsystem
keycloak.subsystem.realm=A Keycloak realm.
keycloak.subsystem.secure-deployment=A deployment secured by Keycloak.
-
-keycloak.auth-server=A Keycloak Auth Server
-keycloak.auth-server.add=Add an Auth Server to the subsystem.
-keycloak.auth-server.remove=Remove an Auth Server from the subsystem.
-keycloak.auth-server.add-provider=Add a provider service jar to the Keycloak auth server.
-keycloak.auth-server.add-provider.uploaded-file-name=The file name of the provider service jar to be added or updated.
-keycloak.auth-server.add-provider.bytes-to-upload=The bytes of the provider service jar to be added or updated.
-keycloak.auth-server.add-provider.redeploy=Redeploy the auth server after adding the provider. Ignored if auth server is disabled.
-keycloak.auth-server.add-provider.overwrite=Overwrite even if the uploaded-file-name already exists as an overlay.
-keycloak.auth-server.list-overlays=List the overlays uploaded for this auth server.
-keycloak.auth-server.remove-overlay=Remove a provider jar, theme jar, or keycloak-server.json that has been uploaded to the auth server.
-keycloak.auth-server.remove-overlay.overlay-file-path=The uploaded path and file name of the overlay to be removed.
-keycloak.auth-server.remove-overlay.redeploy=Redeploy the auth server after removing the overlay.
-keycloak.auth-server.update-server-config=Upload a new keycloak-server.json configuration file for the Keycloak auth server.
-keycloak.auth-server.update-server-config.bytes-to-upload=The bytes of the keycloak-server.json file to be added or updated.
-keycloak.auth-server.update-server-config.redeploy=Redeploy the auth server after updating the server config.
-keycloak.auth-server.update-server-config.overwrite=Overwrite even if keycloak-server.json already exitss as an overlay.
-keycloak.auth-server.enabled=Enable or disable the Auth Server.
-keycloak.auth-server.web-context=Web context the auth-server will use. Also, the module name of the auth-server deployment.
-
keycloak.realm=A Keycloak realm.
keycloak.realm.add=Add a realm definition to the subsystem.
keycloak.realm.remove=Remove a realm from the subsystem.
diff --git a/integration/keycloak-subsystem/src/main/resources/schema/wildfly-keycloak_1_0.xsd b/integration/wildfly/wildfly-adapter-subsystem/src/main/resources/schema/wildfly-keycloak_1_1.xsd
similarity index 95%
rename from integration/keycloak-subsystem/src/main/resources/schema/wildfly-keycloak_1_0.xsd
rename to integration/wildfly/wildfly-adapter-subsystem/src/main/resources/schema/wildfly-keycloak_1_1.xsd
index 17d6aa6f23..269b3232dd 100755
--- a/integration/keycloak-subsystem/src/main/resources/schema/wildfly-keycloak_1_0.xsd
+++ b/integration/wildfly/wildfly-adapter-subsystem/src/main/resources/schema/wildfly-keycloak_1_1.xsd
@@ -1,8 +1,8 @@
@@ -14,7 +14,7 @@
@@ -40,7 +40,7 @@
-
+
@@ -67,7 +67,7 @@
-
+
diff --git a/integration/wildfly/wildfly-adapter-subsystem/src/main/resources/subsystem-templates/keycloak-adapter.xml b/integration/wildfly/wildfly-adapter-subsystem/src/main/resources/subsystem-templates/keycloak-adapter.xml
new file mode 100644
index 0000000000..a2187f6e1f
--- /dev/null
+++ b/integration/wildfly/wildfly-adapter-subsystem/src/main/resources/subsystem-templates/keycloak-adapter.xml
@@ -0,0 +1,7 @@
+
+
+
+ org.keycloak.keycloak-adapter-subsystem
+
+
+
diff --git a/integration/keycloak-subsystem/src/test/java/org/keycloak/subsystem/extension/RealmDefinitionTestCase.java b/integration/wildfly/wildfly-adapter-subsystem/src/test/java/org/keycloak/subsystem/adapter/extension/RealmDefinitionTestCase.java
similarity index 98%
rename from integration/keycloak-subsystem/src/test/java/org/keycloak/subsystem/extension/RealmDefinitionTestCase.java
rename to integration/wildfly/wildfly-adapter-subsystem/src/test/java/org/keycloak/subsystem/adapter/extension/RealmDefinitionTestCase.java
index c21ff20ce6..92a1958a59 100755
--- a/integration/keycloak-subsystem/src/test/java/org/keycloak/subsystem/extension/RealmDefinitionTestCase.java
+++ b/integration/wildfly/wildfly-adapter-subsystem/src/test/java/org/keycloak/subsystem/adapter/extension/RealmDefinitionTestCase.java
@@ -14,16 +14,13 @@
* License for the specific language governing permissions and limitations under
* the License.
*/
-package org.keycloak.subsystem.extension;
-
+package org.keycloak.subsystem.adapter.extension;
import org.jboss.dmr.ModelNode;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
-
-
/**
*
* @author Stan Silvert ssilvert@redhat.com (C) 2013 Red Hat Inc.
diff --git a/integration/wildfly/wildfly-adapter-subsystem/src/test/java/org/keycloak/subsystem/adapter/extension/SubsystemParsingTestCase.java b/integration/wildfly/wildfly-adapter-subsystem/src/test/java/org/keycloak/subsystem/adapter/extension/SubsystemParsingTestCase.java
new file mode 100755
index 0000000000..baa131b09d
--- /dev/null
+++ b/integration/wildfly/wildfly-adapter-subsystem/src/test/java/org/keycloak/subsystem/adapter/extension/SubsystemParsingTestCase.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright 2013 Red Hat Inc. and/or its affiliates and other contributors
+ * as indicated by the @author tags. All rights reserved.
+ *
+ * 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.subsystem.adapter.extension;
+
+import org.jboss.as.subsystem.test.AbstractSubsystemBaseTest;
+import org.jboss.dmr.ModelNode;
+import org.junit.Test;
+
+import java.io.IOException;
+
+
+/**
+ * Tests all management expects for subsystem, parsing, marshaling, model definition and other
+ * Here is an example that allows you a fine grained controller over what is tested and how. So it can give you ideas what can be done and tested.
+ * If you have no need for advanced testing of subsystem you look at {@link SubsystemBaseParsingTestCase} that testes same stuff but most of the code
+ * is hidden inside of test harness
+ *
+ * @author Kabir Khan
+ * @author Tomaz Cerar
+ * @author Marko Strukelj
+ */
+public class SubsystemParsingTestCase extends AbstractSubsystemBaseTest {
+
+ public SubsystemParsingTestCase() {
+ super(KeycloakExtension.SUBSYSTEM_NAME, new KeycloakExtension());
+ }
+
+ @Test
+ public void testJson() throws Exception {
+ ModelNode node = new ModelNode();
+ node.get("realm").set("demo");
+ node.get("resource").set("customer-portal");
+ node.get("realm-public-key").set("MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCrVrCuTtArbgaZzL1hvh0xtL5mc7o0NqPVnYXkLvgcwiC3BjLGw1tGEGoJaXDuSaRllobm53JBhjx33UNv+5z/UMG4kytBWxheNVKnL6GgqlNabMaFfPLPCF8kAgKnsi79NMo+n6KnSY8YeUmec/p2vjO2NjsSAVcWEQMVhJ31LwIDAQAB");
+ node.get("auth-url").set("http://localhost:8080/auth-server/rest/realms/demo/protocol/openid-connect/login");
+ node.get("code-url").set("http://localhost:8080/auth-server/rest/realms/demo/protocol/openid-connect/access/codes");
+ node.get("ssl-required").set("external");
+ node.get("expose-token").set(true);
+ ModelNode credential = new ModelNode();
+ credential.get("password").set("password");
+ node.get("credentials").set(credential);
+
+ System.out.println("json=" + node.toJSONString(false));
+ }
+
+ @Override
+ protected String getSubsystemXml() throws IOException {
+ return readResource("keycloak-1.1.xml");
+ }
+
+ @Override
+ protected String getSubsystemXsdPath() throws Exception {
+ return "schema/wildfly-keycloak_1_1.xsd";
+ }
+
+ @Override
+ protected String[] getSubsystemTemplatePaths() throws IOException {
+ return new String[]{
+ "/subsystem-templates/keycloak-adapter.xml"
+ };
+ }
+}
diff --git a/integration/wildfly/wildfly-adapter-subsystem/src/test/resources/org/keycloak/subsystem/adapter/extension/keycloak-1.1.xml b/integration/wildfly/wildfly-adapter-subsystem/src/test/resources/org/keycloak/subsystem/adapter/extension/keycloak-1.1.xml
new file mode 100644
index 0000000000..2d12d88576
--- /dev/null
+++ b/integration/wildfly/wildfly-adapter-subsystem/src/test/resources/org/keycloak/subsystem/adapter/extension/keycloak-1.1.xml
@@ -0,0 +1,24 @@
+
+
+ master
+ web-console
+ true
+
+ MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC4siLKUew0WYxdtq6/rwk4Uj/4amGFFnE/yzIxQVU0PUqz3QBRVkUWpDj0K6ZnS5nzJV/y6DHLEy7hjZTdRDphyF1sq09aDOYnVpzu8o2sIlMM8q5RnUyEfIyUZqwo8pSZDJ90fS0s+IDUJNCSIrAKO3w1lqZDHL6E/YFHXyzkvQIDAQAB
+
+ http://localhost:8080/auth
+ EXTERNAL
+ 0aa31d98-e0aa-404c-b6e0-e771dba1e798
+
+
+ master
+ http-endpoint
+ true
+
+ MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC4siLKUew0WYxdtq6/rwk4Uj/4amGFFnE/yzIxQVU0PUqz3QBRVkUWpDj0K6ZnS5nzJV/y6DHLEy7hjZTdRDphyF1sq09aDOYnVpzu8o2sIlMM8q5RnUyEfIyUZqwo8pSZDJ90fS0s+IDUJNCSIrAKO3w1lqZDHL6E/YFHXyzkvQIDAQAB
+
+ http://localhost:8080/auth
+ EXTERNAL
+ 2769a4a2-5be0-454f-838f-f33b7755b667
+
+
\ No newline at end of file
diff --git a/integration/wildfly-adapter/pom.xml b/integration/wildfly/wildfly-adapter/pom.xml
similarity index 95%
rename from integration/wildfly-adapter/pom.xml
rename to integration/wildfly/wildfly-adapter/pom.xml
index ee4568b647..bd61b44053 100755
--- a/integration/wildfly-adapter/pom.xml
+++ b/integration/wildfly/wildfly-adapter/pom.xml
@@ -1,104 +1,104 @@
-
-
-
- keycloak-parent
- org.keycloak
- 1.3.0.Beta1-SNAPSHOT
- ../../pom.xml
-
- 4.0.0
-
- keycloak-wildfly-adapter
- Keycloak Wildfly Integration
-
-
-
-
- org.jboss.logging
- jboss-logging
- ${jboss.logging.version}
- provided
-
-
- org.keycloak
- keycloak-core
-
-
- org.keycloak
- keycloak-adapter-core
-
-
- org.keycloak
- keycloak-undertow-adapter
-
-
- org.keycloak
- keycloak-jboss-adapter-core
-
-
- org.apache.httpcomponents
- httpclient
-
-
- net.iharder
- base64
-
-
- org.bouncycastle
- bcprov-jdk15on
-
-
- org.codehaus.jackson
- jackson-core-asl
-
-
- org.codehaus.jackson
- jackson-mapper-asl
-
-
- org.codehaus.jackson
- jackson-xc
-
-
- org.picketbox
- picketbox
- 4.0.20.Final
- provided
-
-
- org.jboss.spec.javax.servlet
- jboss-servlet-api_3.0_spec
- provided
-
-
-
- io.undertow
- undertow-servlet
- provided
-
-
- io.undertow
- undertow-core
- provided
-
-
- junit
- junit
- test
-
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
- ${maven.compiler.source}
- ${maven.compiler.target}
-
-
-
-
-
-
+
+
+
+ keycloak-parent
+ org.keycloak
+ 1.3.0.Beta1-SNAPSHOT
+ ../../../pom.xml
+
+ 4.0.0
+
+ keycloak-wildfly-adapter
+ Keycloak Wildfly Integration
+
+
+
+
+ org.jboss.logging
+ jboss-logging
+ ${jboss.logging.version}
+ provided
+
+
+ org.keycloak
+ keycloak-core
+
+
+ org.keycloak
+ keycloak-adapter-core
+
+
+ org.keycloak
+ keycloak-undertow-adapter
+
+
+ org.keycloak
+ keycloak-jboss-adapter-core
+
+
+ org.apache.httpcomponents
+ httpclient
+
+
+ net.iharder
+ base64
+
+
+ org.bouncycastle
+ bcprov-jdk15on
+
+
+ org.codehaus.jackson
+ jackson-core-asl
+
+
+ org.codehaus.jackson
+ jackson-mapper-asl
+
+
+ org.codehaus.jackson
+ jackson-xc
+
+
+ org.picketbox
+ picketbox
+ 4.0.20.Final
+ provided
+
+
+ org.jboss.spec.javax.servlet
+ jboss-servlet-api_3.0_spec
+ provided
+
+
+
+ io.undertow
+ undertow-servlet
+ provided
+
+
+ io.undertow
+ undertow-core
+ provided
+
+
+ junit
+ junit
+ test
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ ${maven.compiler.source}
+ ${maven.compiler.target}
+
+
+
+
+
+
\ No newline at end of file
diff --git a/integration/wildfly-adapter/src/main/java/org/keycloak/adapters/wildfly/SecurityInfoHelper.java b/integration/wildfly/wildfly-adapter/src/main/java/org/keycloak/adapters/wildfly/SecurityInfoHelper.java
similarity index 97%
rename from integration/wildfly-adapter/src/main/java/org/keycloak/adapters/wildfly/SecurityInfoHelper.java
rename to integration/wildfly/wildfly-adapter/src/main/java/org/keycloak/adapters/wildfly/SecurityInfoHelper.java
index 9838772b12..5f13cd6769 100755
--- a/integration/wildfly-adapter/src/main/java/org/keycloak/adapters/wildfly/SecurityInfoHelper.java
+++ b/integration/wildfly/wildfly-adapter/src/main/java/org/keycloak/adapters/wildfly/SecurityInfoHelper.java
@@ -1,116 +1,116 @@
-package org.keycloak.adapters.wildfly;
-
-import org.jboss.security.NestableGroup;
-import org.jboss.security.SecurityConstants;
-import org.jboss.security.SecurityContextAssociation;
-import org.jboss.security.SimpleGroup;
-import org.jboss.security.SimplePrincipal;
-import org.keycloak.adapters.KeycloakAccount;
-
-import javax.security.auth.Subject;
-import java.security.Principal;
-import java.security.acl.Group;
-import java.util.Collection;
-import java.util.Enumeration;
-import java.util.Iterator;
-import java.util.Set;
-
-/**
- * @author Bill Burke
- * @version $Revision: 1 $
- */
-public class SecurityInfoHelper {
- public static void propagateSessionInfo(KeycloakAccount account) {
- Subject subject = new Subject();
- Set principals = subject.getPrincipals();
- principals.add(account.getPrincipal());
- Group[] roleSets = getRoleSets(account.getRoles());
- for (int g = 0; g < roleSets.length; g++) {
- Group group = roleSets[g];
- String name = group.getName();
- Group subjectGroup = createGroup(name, principals);
- if (subjectGroup instanceof NestableGroup) {
- /* A NestableGroup only allows Groups to be added to it so we
- need to add a SimpleGroup to subjectRoles to contain the roles
- */
- SimpleGroup tmp = new SimpleGroup("Roles");
- subjectGroup.addMember(tmp);
- subjectGroup = tmp;
- }
- // Copy the group members to the Subject group
- Enumeration extends Principal> members = group.members();
- while (members.hasMoreElements()) {
- Principal role = (Principal) members.nextElement();
- subjectGroup.addMember(role);
- }
- }
- // add the CallerPrincipal group if none has been added in getRoleSets
- Group callerGroup = new SimpleGroup(SecurityConstants.CALLER_PRINCIPAL_GROUP);
- callerGroup.addMember(account.getPrincipal());
- principals.add(callerGroup);
- org.jboss.security.SecurityContext sc = SecurityContextAssociation.getSecurityContext();
- Principal userPrincipal = getPrincipal(subject);
- sc.getUtil().createSubjectInfo(userPrincipal, account, subject);
- }
-
- /**
- * Get the Principal given the authenticated Subject. Currently the first subject that is not of type {@code Group} is
- * considered or the single subject inside the CallerPrincipal group.
- *
- * @param subject
- * @return the authenticated subject
- */
- protected static Principal getPrincipal(Subject subject) {
- Principal principal = null;
- Principal callerPrincipal = null;
- if (subject != null) {
- Set principals = subject.getPrincipals();
- if (principals != null && !principals.isEmpty()) {
- for (Principal p : principals) {
- if (!(p instanceof Group) && principal == null) {
- principal = p;
- }
- if (p instanceof Group) {
- Group g = Group.class.cast(p);
- if (g.getName().equals(SecurityConstants.CALLER_PRINCIPAL_GROUP) && callerPrincipal == null) {
- Enumeration extends Principal> e = g.members();
- if (e.hasMoreElements())
- callerPrincipal = e.nextElement();
- }
- }
- }
- }
- }
- return callerPrincipal == null ? principal : callerPrincipal;
- }
-
- protected static Group createGroup(String name, Set principals) {
- Group roles = null;
- Iterator iter = principals.iterator();
- while (iter.hasNext()) {
- Object next = iter.next();
- if ((next instanceof Group) == false)
- continue;
- Group grp = (Group) next;
- if (grp.getName().equals(name)) {
- roles = grp;
- break;
- }
- }
- // If we did not find a group create one
- if (roles == null) {
- roles = new SimpleGroup(name);
- principals.add(roles);
- }
- return roles;
- }
-
- protected static Group[] getRoleSets(Collection roleSet) {
- SimpleGroup roles = new SimpleGroup("Roles");
- Group[] roleSets = {roles};
- for (String role : roleSet) {
- roles.addMember(new SimplePrincipal(role));
- }
- return roleSets;
- }
-}
+package org.keycloak.adapters.wildfly;
+
+import org.jboss.security.NestableGroup;
+import org.jboss.security.SecurityConstants;
+import org.jboss.security.SecurityContextAssociation;
+import org.jboss.security.SimpleGroup;
+import org.jboss.security.SimplePrincipal;
+import org.keycloak.adapters.KeycloakAccount;
+
+import javax.security.auth.Subject;
+import java.security.Principal;
+import java.security.acl.Group;
+import java.util.Collection;
+import java.util.Enumeration;
+import java.util.Iterator;
+import java.util.Set;
+
+/**
+ * @author Bill Burke
+ * @version $Revision: 1 $
+ */
+public class SecurityInfoHelper {
+ public static void propagateSessionInfo(KeycloakAccount account) {
+ Subject subject = new Subject();
+ Set principals = subject.getPrincipals();
+ principals.add(account.getPrincipal());
+ Group[] roleSets = getRoleSets(account.getRoles());
+ for (int g = 0; g < roleSets.length; g++) {
+ Group group = roleSets[g];
+ String name = group.getName();
+ Group subjectGroup = createGroup(name, principals);
+ if (subjectGroup instanceof NestableGroup) {
+ /* A NestableGroup only allows Groups to be added to it so we
+ need to add a SimpleGroup to subjectRoles to contain the roles
+ */
+ SimpleGroup tmp = new SimpleGroup("Roles");
+ subjectGroup.addMember(tmp);
+ subjectGroup = tmp;
+ }
+ // Copy the group members to the Subject group
+ Enumeration extends Principal> members = group.members();
+ while (members.hasMoreElements()) {
+ Principal role = (Principal) members.nextElement();
+ subjectGroup.addMember(role);
+ }
+ }
+ // add the CallerPrincipal group if none has been added in getRoleSets
+ Group callerGroup = new SimpleGroup(SecurityConstants.CALLER_PRINCIPAL_GROUP);
+ callerGroup.addMember(account.getPrincipal());
+ principals.add(callerGroup);
+ org.jboss.security.SecurityContext sc = SecurityContextAssociation.getSecurityContext();
+ Principal userPrincipal = getPrincipal(subject);
+ sc.getUtil().createSubjectInfo(userPrincipal, account, subject);
+ }
+
+ /**
+ * Get the Principal given the authenticated Subject. Currently the first subject that is not of type {@code Group} is
+ * considered or the single subject inside the CallerPrincipal group.
+ *
+ * @param subject
+ * @return the authenticated subject
+ */
+ protected static Principal getPrincipal(Subject subject) {
+ Principal principal = null;
+ Principal callerPrincipal = null;
+ if (subject != null) {
+ Set principals = subject.getPrincipals();
+ if (principals != null && !principals.isEmpty()) {
+ for (Principal p : principals) {
+ if (!(p instanceof Group) && principal == null) {
+ principal = p;
+ }
+ if (p instanceof Group) {
+ Group g = Group.class.cast(p);
+ if (g.getName().equals(SecurityConstants.CALLER_PRINCIPAL_GROUP) && callerPrincipal == null) {
+ Enumeration extends Principal> e = g.members();
+ if (e.hasMoreElements())
+ callerPrincipal = e.nextElement();
+ }
+ }
+ }
+ }
+ }
+ return callerPrincipal == null ? principal : callerPrincipal;
+ }
+
+ protected static Group createGroup(String name, Set principals) {
+ Group roles = null;
+ Iterator iter = principals.iterator();
+ while (iter.hasNext()) {
+ Object next = iter.next();
+ if ((next instanceof Group) == false)
+ continue;
+ Group grp = (Group) next;
+ if (grp.getName().equals(name)) {
+ roles = grp;
+ break;
+ }
+ }
+ // If we did not find a group create one
+ if (roles == null) {
+ roles = new SimpleGroup(name);
+ principals.add(roles);
+ }
+ return roles;
+ }
+
+ protected static Group[] getRoleSets(Collection roleSet) {
+ SimpleGroup roles = new SimpleGroup("Roles");
+ Group[] roleSets = {roles};
+ for (String role : roleSet) {
+ roles.addMember(new SimplePrincipal(role));
+ }
+ return roleSets;
+ }
+}
diff --git a/integration/wildfly-adapter/src/main/java/org/keycloak/adapters/wildfly/WildflyAuthenticationMechanism.java b/integration/wildfly/wildfly-adapter/src/main/java/org/keycloak/adapters/wildfly/WildflyAuthenticationMechanism.java
similarity index 98%
rename from integration/wildfly-adapter/src/main/java/org/keycloak/adapters/wildfly/WildflyAuthenticationMechanism.java
rename to integration/wildfly/wildfly-adapter/src/main/java/org/keycloak/adapters/wildfly/WildflyAuthenticationMechanism.java
index 85f8bd318d..53d8e0c02c 100755
--- a/integration/wildfly-adapter/src/main/java/org/keycloak/adapters/wildfly/WildflyAuthenticationMechanism.java
+++ b/integration/wildfly/wildfly-adapter/src/main/java/org/keycloak/adapters/wildfly/WildflyAuthenticationMechanism.java
@@ -1,35 +1,35 @@
-package org.keycloak.adapters.wildfly;
-
-import io.undertow.security.api.SecurityContext;
-import io.undertow.server.HttpServerExchange;
-import io.undertow.servlet.api.ConfidentialPortManager;
-import org.keycloak.adapters.AdapterDeploymentContext;
-import org.keycloak.adapters.AdapterTokenStore;
-import org.keycloak.adapters.KeycloakDeployment;
-import org.keycloak.adapters.NodesRegistrationManagement;
-import org.keycloak.adapters.undertow.ServletKeycloakAuthMech;
-import org.keycloak.adapters.undertow.ServletRequestAuthenticator;
-import org.keycloak.adapters.undertow.UndertowHttpFacade;
-import org.keycloak.adapters.undertow.UndertowUserSessionManagement;
-
-/**
- * @author Bill Burke
- * @version $Revision: 1 $
- */
-public class WildflyAuthenticationMechanism extends ServletKeycloakAuthMech {
-
- public WildflyAuthenticationMechanism(AdapterDeploymentContext deploymentContext,
- UndertowUserSessionManagement userSessionManagement,
- NodesRegistrationManagement nodesRegistrationManagement,
- ConfidentialPortManager portManager, String errorPage) {
- super(deploymentContext, userSessionManagement, nodesRegistrationManagement, portManager, errorPage);
- }
-
- @Override
- protected ServletRequestAuthenticator createRequestAuthenticator(KeycloakDeployment deployment, HttpServerExchange exchange, SecurityContext securityContext, UndertowHttpFacade facade) {
- int confidentialPort = getConfidentilPort(exchange);
- AdapterTokenStore tokenStore = getTokenStore(exchange, facade, deployment, securityContext);
- return new WildflyRequestAuthenticator(facade, deployment,
- confidentialPort, securityContext, exchange, tokenStore);
- }
-}
+package org.keycloak.adapters.wildfly;
+
+import io.undertow.security.api.SecurityContext;
+import io.undertow.server.HttpServerExchange;
+import io.undertow.servlet.api.ConfidentialPortManager;
+import org.keycloak.adapters.AdapterDeploymentContext;
+import org.keycloak.adapters.AdapterTokenStore;
+import org.keycloak.adapters.KeycloakDeployment;
+import org.keycloak.adapters.NodesRegistrationManagement;
+import org.keycloak.adapters.undertow.ServletKeycloakAuthMech;
+import org.keycloak.adapters.undertow.ServletRequestAuthenticator;
+import org.keycloak.adapters.undertow.UndertowHttpFacade;
+import org.keycloak.adapters.undertow.UndertowUserSessionManagement;
+
+/**
+ * @author Bill Burke
+ * @version $Revision: 1 $
+ */
+public class WildflyAuthenticationMechanism extends ServletKeycloakAuthMech {
+
+ public WildflyAuthenticationMechanism(AdapterDeploymentContext deploymentContext,
+ UndertowUserSessionManagement userSessionManagement,
+ NodesRegistrationManagement nodesRegistrationManagement,
+ ConfidentialPortManager portManager, String errorPage) {
+ super(deploymentContext, userSessionManagement, nodesRegistrationManagement, portManager, errorPage);
+ }
+
+ @Override
+ protected ServletRequestAuthenticator createRequestAuthenticator(KeycloakDeployment deployment, HttpServerExchange exchange, SecurityContext securityContext, UndertowHttpFacade facade) {
+ int confidentialPort = getConfidentilPort(exchange);
+ AdapterTokenStore tokenStore = getTokenStore(exchange, facade, deployment, securityContext);
+ return new WildflyRequestAuthenticator(facade, deployment,
+ confidentialPort, securityContext, exchange, tokenStore);
+ }
+}
diff --git a/integration/wildfly-adapter/src/main/java/org/keycloak/adapters/wildfly/WildflyKeycloakServletExtension.java b/integration/wildfly/wildfly-adapter/src/main/java/org/keycloak/adapters/wildfly/WildflyKeycloakServletExtension.java
similarity index 98%
rename from integration/wildfly-adapter/src/main/java/org/keycloak/adapters/wildfly/WildflyKeycloakServletExtension.java
rename to integration/wildfly/wildfly-adapter/src/main/java/org/keycloak/adapters/wildfly/WildflyKeycloakServletExtension.java
index 2e432857cd..4735deb03b 100755
--- a/integration/wildfly-adapter/src/main/java/org/keycloak/adapters/wildfly/WildflyKeycloakServletExtension.java
+++ b/integration/wildfly/wildfly-adapter/src/main/java/org/keycloak/adapters/wildfly/WildflyKeycloakServletExtension.java
@@ -1,25 +1,25 @@
-package org.keycloak.adapters.wildfly;
-
-import io.undertow.servlet.api.DeploymentInfo;
-import org.jboss.logging.Logger;
-import org.keycloak.adapters.AdapterDeploymentContext;
-import org.keycloak.adapters.NodesRegistrationManagement;
-import org.keycloak.adapters.undertow.KeycloakServletExtension;
-import org.keycloak.adapters.undertow.ServletKeycloakAuthMech;
-import org.keycloak.adapters.undertow.UndertowUserSessionManagement;
-
-/**
- * @author Bill Burke
- * @version $Revision: 1 $
- */
-public class WildflyKeycloakServletExtension extends KeycloakServletExtension {
- protected static Logger log = Logger.getLogger(WildflyKeycloakServletExtension.class);
-
- @Override
- protected ServletKeycloakAuthMech createAuthenticationMechanism(DeploymentInfo deploymentInfo, AdapterDeploymentContext deploymentContext,
- UndertowUserSessionManagement userSessionManagement, NodesRegistrationManagement nodesRegistrationManagement) {
- log.debug("creating WildflyAuthenticationMechanism");
- return new WildflyAuthenticationMechanism(deploymentContext, userSessionManagement, nodesRegistrationManagement, deploymentInfo.getConfidentialPortManager(), getErrorPage(deploymentInfo));
-
- }
-}
+package org.keycloak.adapters.wildfly;
+
+import io.undertow.servlet.api.DeploymentInfo;
+import org.jboss.logging.Logger;
+import org.keycloak.adapters.AdapterDeploymentContext;
+import org.keycloak.adapters.NodesRegistrationManagement;
+import org.keycloak.adapters.undertow.KeycloakServletExtension;
+import org.keycloak.adapters.undertow.ServletKeycloakAuthMech;
+import org.keycloak.adapters.undertow.UndertowUserSessionManagement;
+
+/**
+ * @author Bill Burke
+ * @version $Revision: 1 $
+ */
+public class WildflyKeycloakServletExtension extends KeycloakServletExtension {
+ protected static Logger log = Logger.getLogger(WildflyKeycloakServletExtension.class);
+
+ @Override
+ protected ServletKeycloakAuthMech createAuthenticationMechanism(DeploymentInfo deploymentInfo, AdapterDeploymentContext deploymentContext,
+ UndertowUserSessionManagement userSessionManagement, NodesRegistrationManagement nodesRegistrationManagement) {
+ log.debug("creating WildflyAuthenticationMechanism");
+ return new WildflyAuthenticationMechanism(deploymentContext, userSessionManagement, nodesRegistrationManagement, deploymentInfo.getConfidentialPortManager(), getErrorPage(deploymentInfo));
+
+ }
+}
diff --git a/integration/wildfly-adapter/src/main/java/org/keycloak/adapters/wildfly/WildflyRequestAuthenticator.java b/integration/wildfly/wildfly-adapter/src/main/java/org/keycloak/adapters/wildfly/WildflyRequestAuthenticator.java
similarity index 97%
rename from integration/wildfly-adapter/src/main/java/org/keycloak/adapters/wildfly/WildflyRequestAuthenticator.java
rename to integration/wildfly/wildfly-adapter/src/main/java/org/keycloak/adapters/wildfly/WildflyRequestAuthenticator.java
index 84074d67f0..7930d95317 100755
--- a/integration/wildfly-adapter/src/main/java/org/keycloak/adapters/wildfly/WildflyRequestAuthenticator.java
+++ b/integration/wildfly/wildfly-adapter/src/main/java/org/keycloak/adapters/wildfly/WildflyRequestAuthenticator.java
@@ -1,137 +1,137 @@
-package org.keycloak.adapters.wildfly;
-
-import io.undertow.security.api.SecurityContext;
-import io.undertow.server.HttpServerExchange;
-import org.jboss.logging.Logger;
-import org.jboss.security.NestableGroup;
-import org.jboss.security.SecurityConstants;
-import org.jboss.security.SecurityContextAssociation;
-import org.jboss.security.SimpleGroup;
-import org.jboss.security.SimplePrincipal;
-import org.keycloak.adapters.AdapterTokenStore;
-import org.keycloak.adapters.HttpFacade;
-import org.keycloak.adapters.KeycloakDeployment;
-import org.keycloak.adapters.undertow.KeycloakUndertowAccount;
-import org.keycloak.adapters.undertow.ServletRequestAuthenticator;
-import org.keycloak.adapters.undertow.UndertowUserSessionManagement;
-
-import javax.security.auth.Subject;
-import java.security.Principal;
-import java.security.acl.Group;
-import java.util.Collection;
-import java.util.Enumeration;
-import java.util.Iterator;
-import java.util.Set;
-
-/**
- * @author Bill Burke
- * @version $Revision: 1 $
- */
-public class WildflyRequestAuthenticator extends ServletRequestAuthenticator {
- protected static Logger log = Logger.getLogger(WildflyRequestAuthenticator.class);
-
- public WildflyRequestAuthenticator(HttpFacade facade, KeycloakDeployment deployment, int sslRedirectPort,
- SecurityContext securityContext, HttpServerExchange exchange,
- AdapterTokenStore tokenStore) {
- super(facade, deployment, sslRedirectPort, securityContext, exchange, tokenStore);
- }
-
- @Override
- protected void propagateKeycloakContext(KeycloakUndertowAccount account) {
- super.propagateKeycloakContext(account);
- SecurityInfoHelper.propagateSessionInfo(account);
- log.debug("propagate security context to wildfly");
- Subject subject = new Subject();
- Set principals = subject.getPrincipals();
- principals.add(account.getPrincipal());
- Group[] roleSets = getRoleSets(account.getRoles());
- for (int g = 0; g < roleSets.length; g++) {
- Group group = roleSets[g];
- String name = group.getName();
- Group subjectGroup = createGroup(name, principals);
- if (subjectGroup instanceof NestableGroup) {
- /* A NestableGroup only allows Groups to be added to it so we
- need to add a SimpleGroup to subjectRoles to contain the roles
- */
- SimpleGroup tmp = new SimpleGroup("Roles");
- subjectGroup.addMember(tmp);
- subjectGroup = tmp;
- }
- // Copy the group members to the Subject group
- Enumeration extends Principal> members = group.members();
- while (members.hasMoreElements()) {
- Principal role = (Principal) members.nextElement();
- subjectGroup.addMember(role);
- }
- }
- // add the CallerPrincipal group if none has been added in getRoleSets
- Group callerGroup = new SimpleGroup(SecurityConstants.CALLER_PRINCIPAL_GROUP);
- callerGroup.addMember(account.getPrincipal());
- principals.add(callerGroup);
- org.jboss.security.SecurityContext sc = SecurityContextAssociation.getSecurityContext();
- Principal userPrincipal = getPrincipal(subject);
- sc.getUtil().createSubjectInfo(userPrincipal, account, subject);
- }
-
- /**
- * Get the Principal given the authenticated Subject. Currently the first subject that is not of type {@code Group} is
- * considered or the single subject inside the CallerPrincipal group.
- *
- * @param subject
- * @return the authenticated subject
- */
- protected Principal getPrincipal(Subject subject) {
- Principal principal = null;
- Principal callerPrincipal = null;
- if (subject != null) {
- Set principals = subject.getPrincipals();
- if (principals != null && !principals.isEmpty()) {
- for (Principal p : principals) {
- if (!(p instanceof Group) && principal == null) {
- principal = p;
- }
- if (p instanceof Group) {
- Group g = Group.class.cast(p);
- if (g.getName().equals(SecurityConstants.CALLER_PRINCIPAL_GROUP) && callerPrincipal == null) {
- Enumeration extends Principal> e = g.members();
- if (e.hasMoreElements())
- callerPrincipal = e.nextElement();
- }
- }
- }
- }
- }
- return callerPrincipal == null ? principal : callerPrincipal;
- }
-
- protected Group createGroup(String name, Set principals) {
- Group roles = null;
- Iterator iter = principals.iterator();
- while (iter.hasNext()) {
- Object next = iter.next();
- if ((next instanceof Group) == false)
- continue;
- Group grp = (Group) next;
- if (grp.getName().equals(name)) {
- roles = grp;
- break;
- }
- }
- // If we did not find a group create one
- if (roles == null) {
- roles = new SimpleGroup(name);
- principals.add(roles);
- }
- return roles;
- }
-
- protected Group[] getRoleSets(Collection roleSet) {
- SimpleGroup roles = new SimpleGroup("Roles");
- Group[] roleSets = {roles};
- for (String role : roleSet) {
- roles.addMember(new SimplePrincipal(role));
- }
- return roleSets;
- }
-
-}
+package org.keycloak.adapters.wildfly;
+
+import io.undertow.security.api.SecurityContext;
+import io.undertow.server.HttpServerExchange;
+import org.jboss.logging.Logger;
+import org.jboss.security.NestableGroup;
+import org.jboss.security.SecurityConstants;
+import org.jboss.security.SecurityContextAssociation;
+import org.jboss.security.SimpleGroup;
+import org.jboss.security.SimplePrincipal;
+import org.keycloak.adapters.AdapterTokenStore;
+import org.keycloak.adapters.HttpFacade;
+import org.keycloak.adapters.KeycloakDeployment;
+import org.keycloak.adapters.undertow.KeycloakUndertowAccount;
+import org.keycloak.adapters.undertow.ServletRequestAuthenticator;
+import org.keycloak.adapters.undertow.UndertowUserSessionManagement;
+
+import javax.security.auth.Subject;
+import java.security.Principal;
+import java.security.acl.Group;
+import java.util.Collection;
+import java.util.Enumeration;
+import java.util.Iterator;
+import java.util.Set;
+
+/**
+ * @author Bill Burke
+ * @version $Revision: 1 $
+ */
+public class WildflyRequestAuthenticator extends ServletRequestAuthenticator {
+ protected static Logger log = Logger.getLogger(WildflyRequestAuthenticator.class);
+
+ public WildflyRequestAuthenticator(HttpFacade facade, KeycloakDeployment deployment, int sslRedirectPort,
+ SecurityContext securityContext, HttpServerExchange exchange,
+ AdapterTokenStore tokenStore) {
+ super(facade, deployment, sslRedirectPort, securityContext, exchange, tokenStore);
+ }
+
+ @Override
+ protected void propagateKeycloakContext(KeycloakUndertowAccount account) {
+ super.propagateKeycloakContext(account);
+ SecurityInfoHelper.propagateSessionInfo(account);
+ log.debug("propagate security context to wildfly");
+ Subject subject = new Subject();
+ Set principals = subject.getPrincipals();
+ principals.add(account.getPrincipal());
+ Group[] roleSets = getRoleSets(account.getRoles());
+ for (int g = 0; g < roleSets.length; g++) {
+ Group group = roleSets[g];
+ String name = group.getName();
+ Group subjectGroup = createGroup(name, principals);
+ if (subjectGroup instanceof NestableGroup) {
+ /* A NestableGroup only allows Groups to be added to it so we
+ need to add a SimpleGroup to subjectRoles to contain the roles
+ */
+ SimpleGroup tmp = new SimpleGroup("Roles");
+ subjectGroup.addMember(tmp);
+ subjectGroup = tmp;
+ }
+ // Copy the group members to the Subject group
+ Enumeration extends Principal> members = group.members();
+ while (members.hasMoreElements()) {
+ Principal role = (Principal) members.nextElement();
+ subjectGroup.addMember(role);
+ }
+ }
+ // add the CallerPrincipal group if none has been added in getRoleSets
+ Group callerGroup = new SimpleGroup(SecurityConstants.CALLER_PRINCIPAL_GROUP);
+ callerGroup.addMember(account.getPrincipal());
+ principals.add(callerGroup);
+ org.jboss.security.SecurityContext sc = SecurityContextAssociation.getSecurityContext();
+ Principal userPrincipal = getPrincipal(subject);
+ sc.getUtil().createSubjectInfo(userPrincipal, account, subject);
+ }
+
+ /**
+ * Get the Principal given the authenticated Subject. Currently the first subject that is not of type {@code Group} is
+ * considered or the single subject inside the CallerPrincipal group.
+ *
+ * @param subject
+ * @return the authenticated subject
+ */
+ protected Principal getPrincipal(Subject subject) {
+ Principal principal = null;
+ Principal callerPrincipal = null;
+ if (subject != null) {
+ Set principals = subject.getPrincipals();
+ if (principals != null && !principals.isEmpty()) {
+ for (Principal p : principals) {
+ if (!(p instanceof Group) && principal == null) {
+ principal = p;
+ }
+ if (p instanceof Group) {
+ Group g = Group.class.cast(p);
+ if (g.getName().equals(SecurityConstants.CALLER_PRINCIPAL_GROUP) && callerPrincipal == null) {
+ Enumeration extends Principal> e = g.members();
+ if (e.hasMoreElements())
+ callerPrincipal = e.nextElement();
+ }
+ }
+ }
+ }
+ }
+ return callerPrincipal == null ? principal : callerPrincipal;
+ }
+
+ protected Group createGroup(String name, Set principals) {
+ Group roles = null;
+ Iterator iter = principals.iterator();
+ while (iter.hasNext()) {
+ Object next = iter.next();
+ if ((next instanceof Group) == false)
+ continue;
+ Group grp = (Group) next;
+ if (grp.getName().equals(name)) {
+ roles = grp;
+ break;
+ }
+ }
+ // If we did not find a group create one
+ if (roles == null) {
+ roles = new SimpleGroup(name);
+ principals.add(roles);
+ }
+ return roles;
+ }
+
+ protected Group[] getRoleSets(Collection roleSet) {
+ SimpleGroup roles = new SimpleGroup("Roles");
+ Group[] roleSets = {roles};
+ for (String role : roleSet) {
+ roles.addMember(new SimplePrincipal(role));
+ }
+ return roleSets;
+ }
+
+}
diff --git a/integration/wildfly-adapter/src/main/resources/META-INF/services/io.undertow.servlet.ServletExtension b/integration/wildfly/wildfly-adapter/src/main/resources/META-INF/services/io.undertow.servlet.ServletExtension
similarity index 100%
rename from integration/wildfly-adapter/src/main/resources/META-INF/services/io.undertow.servlet.ServletExtension
rename to integration/wildfly/wildfly-adapter/src/main/resources/META-INF/services/io.undertow.servlet.ServletExtension
diff --git a/integration/wildfly-extensions/pom.xml b/integration/wildfly/wildfly-extensions/pom.xml
similarity index 97%
rename from integration/wildfly-extensions/pom.xml
rename to integration/wildfly/wildfly-extensions/pom.xml
index 16594e6ebf..5bdf23fe49 100755
--- a/integration/wildfly-extensions/pom.xml
+++ b/integration/wildfly/wildfly-extensions/pom.xml
@@ -21,7 +21,7 @@
org.keycloak
keycloak-parent
1.3.0.Beta1-SNAPSHOT
- ../../pom.xml
+ ../../../pom.xml
keycloak-wildfly-extensions
diff --git a/integration/wildfly-extensions/src/main/java/org/keycloak/provider/wildfly/ModuleProviderLoaderFactory.java b/integration/wildfly/wildfly-extensions/src/main/java/org/keycloak/provider/wildfly/ModuleProviderLoaderFactory.java
similarity index 100%
rename from integration/wildfly-extensions/src/main/java/org/keycloak/provider/wildfly/ModuleProviderLoaderFactory.java
rename to integration/wildfly/wildfly-extensions/src/main/java/org/keycloak/provider/wildfly/ModuleProviderLoaderFactory.java
diff --git a/integration/wildfly-extensions/src/main/java/org/keycloak/provider/wildfly/ModuleThemeProviderFactory.java b/integration/wildfly/wildfly-extensions/src/main/java/org/keycloak/provider/wildfly/ModuleThemeProviderFactory.java
similarity index 100%
rename from integration/wildfly-extensions/src/main/java/org/keycloak/provider/wildfly/ModuleThemeProviderFactory.java
rename to integration/wildfly/wildfly-extensions/src/main/java/org/keycloak/provider/wildfly/ModuleThemeProviderFactory.java
diff --git a/integration/wildfly-extensions/src/main/resources/META-INF/services/org.keycloak.freemarker.ThemeProviderFactory b/integration/wildfly/wildfly-extensions/src/main/resources/META-INF/services/org.keycloak.freemarker.ThemeProviderFactory
similarity index 100%
rename from integration/wildfly-extensions/src/main/resources/META-INF/services/org.keycloak.freemarker.ThemeProviderFactory
rename to integration/wildfly/wildfly-extensions/src/main/resources/META-INF/services/org.keycloak.freemarker.ThemeProviderFactory
diff --git a/integration/wildfly-extensions/src/main/resources/META-INF/services/org.keycloak.provider.ProviderLoaderFactory b/integration/wildfly/wildfly-extensions/src/main/resources/META-INF/services/org.keycloak.provider.ProviderLoaderFactory
similarity index 100%
rename from integration/wildfly-extensions/src/main/resources/META-INF/services/org.keycloak.provider.ProviderLoaderFactory
rename to integration/wildfly/wildfly-extensions/src/main/resources/META-INF/services/org.keycloak.provider.ProviderLoaderFactory
diff --git a/integration/keycloak-subsystem/pom.xml b/integration/wildfly/wildfly-server-subsystem/pom.xml
similarity index 74%
rename from integration/keycloak-subsystem/pom.xml
rename to integration/wildfly/wildfly-server-subsystem/pom.xml
index 80bb82c9d0..71bb0fd66e 100755
--- a/integration/keycloak-subsystem/pom.xml
+++ b/integration/wildfly/wildfly-server-subsystem/pom.xml
@@ -21,24 +21,16 @@
org.keycloak
keycloak-parent
1.3.0.Beta1-SNAPSHOT
- ../../pom.xml
+ ../../../pom.xml
- keycloak-subsystem
- Keycloak Subsystem
+ keycloak-wildfly-server-subsystem
+ Keycloak Server Subsystem
jar
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
- ${maven.compiler.source}
- ${maven.compiler.target}
-
-
org.apache.maven.plugins
maven-surefire-plugin
@@ -70,19 +62,9 @@
wildfly-server
provided
-
- org.wildfly.core
- wildfly-version
- provided
-
org.wildfly
- wildfly-ee
- provided
-
-
- org.wildfly
- wildfly-undertow
+ wildfly-web-common
provided
@@ -106,8 +88,7 @@
org.wildfly.core
- wildfly-subsystem-test
- pom
+ wildfly-subsystem-test-framework
test
@@ -116,15 +97,10 @@
test
-
- org.jboss.as
- jboss-as-web
- 7.1.1.Final
-
-
org.keycloak
- keycloak-as7-adapter
+ keycloak-wildfly-adapter
+ ${project.version}
diff --git a/integration/wildfly/wildfly-server-subsystem/src/main/java/org/keycloak/subsystem/server/extension/KeycloakAdapterConfigService.java b/integration/wildfly/wildfly-server-subsystem/src/main/java/org/keycloak/subsystem/server/extension/KeycloakAdapterConfigService.java
new file mode 100755
index 0000000000..7f86d7981b
--- /dev/null
+++ b/integration/wildfly/wildfly-server-subsystem/src/main/java/org/keycloak/subsystem/server/extension/KeycloakAdapterConfigService.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright 2013 Red Hat Inc. and/or its affiliates and other contributors
+ * as indicated by the @author tags. All rights reserved.
+ *
+ * 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.subsystem.server.extension;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ADDRESS;
+
+/**
+ * This service keeps track of the entire Keycloak management model so as to provide
+ * adapter configuration to each deployment at deploy time.
+ *
+ * @author Stan Silvert ssilvert@redhat.com (C) 2013 Red Hat Inc.
+ */
+public final class KeycloakAdapterConfigService {
+
+ private static final KeycloakAdapterConfigService INSTANCE = new KeycloakAdapterConfigService();
+
+ public static KeycloakAdapterConfigService getInstance() {
+ return INSTANCE;
+ }
+
+ // key=auth-server deployment name; value=web-context
+ private final Map webContexts = new HashMap();
+
+
+
+ private KeycloakAdapterConfigService() {
+ }
+
+ public void addServerDeployment(String deploymentName, String webContext) {
+ this.webContexts.put(deploymentName, webContext);
+ }
+
+ public String getWebContext(String deploymentName) {
+ return webContexts.get(deploymentName);
+ }
+
+ public void removeServerDeployment(String deploymentName) {
+ this.webContexts.remove(deploymentName);
+ }
+
+ public boolean isWebContextUsed(String webContext) {
+ return webContexts.containsValue(webContext);
+ }
+
+ public boolean isKeycloakServerDeployment(String deploymentName) {
+ return this.webContexts.containsKey(deploymentName);
+ }
+}
diff --git a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/KeycloakDependencyProcessor.java b/integration/wildfly/wildfly-server-subsystem/src/main/java/org/keycloak/subsystem/server/extension/KeycloakDependencyProcessor.java
similarity index 98%
rename from integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/KeycloakDependencyProcessor.java
rename to integration/wildfly/wildfly-server-subsystem/src/main/java/org/keycloak/subsystem/server/extension/KeycloakDependencyProcessor.java
index 7d646f379c..b40eb35244 100755
--- a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/KeycloakDependencyProcessor.java
+++ b/integration/wildfly/wildfly-server-subsystem/src/main/java/org/keycloak/subsystem/server/extension/KeycloakDependencyProcessor.java
@@ -15,7 +15,7 @@
* the License.
*/
-package org.keycloak.subsystem.extension;
+package org.keycloak.subsystem.server.extension;
import org.jboss.as.server.deployment.Attachments;
import org.jboss.as.server.deployment.DeploymentPhaseContext;
diff --git a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/KeycloakDependencyProcessorWildFly.java b/integration/wildfly/wildfly-server-subsystem/src/main/java/org/keycloak/subsystem/server/extension/KeycloakDependencyProcessorWildFly.java
similarity index 97%
rename from integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/KeycloakDependencyProcessorWildFly.java
rename to integration/wildfly/wildfly-server-subsystem/src/main/java/org/keycloak/subsystem/server/extension/KeycloakDependencyProcessorWildFly.java
index 849382b6dd..4b96aea8e0 100755
--- a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/KeycloakDependencyProcessorWildFly.java
+++ b/integration/wildfly/wildfly-server-subsystem/src/main/java/org/keycloak/subsystem/server/extension/KeycloakDependencyProcessorWildFly.java
@@ -15,7 +15,7 @@
* the License.
*/
-package org.keycloak.subsystem.extension;
+package org.keycloak.subsystem.server.extension;
import org.jboss.as.server.deployment.module.ModuleDependency;
import org.jboss.as.server.deployment.module.ModuleSpecification;
diff --git a/integration/wildfly/wildfly-server-subsystem/src/main/java/org/keycloak/subsystem/server/extension/KeycloakExtension.java b/integration/wildfly/wildfly-server-subsystem/src/main/java/org/keycloak/subsystem/server/extension/KeycloakExtension.java
new file mode 100755
index 0000000000..145b475653
--- /dev/null
+++ b/integration/wildfly/wildfly-server-subsystem/src/main/java/org/keycloak/subsystem/server/extension/KeycloakExtension.java
@@ -0,0 +1,79 @@
+/*
+ * Copyright 2013 Red Hat Inc. and/or its affiliates and other contributors
+ * as indicated by the @author tags. All rights reserved.
+ *
+ * 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.subsystem.server.extension;
+
+import org.jboss.as.controller.Extension;
+import org.jboss.as.controller.ExtensionContext;
+import org.jboss.as.controller.ModelVersion;
+import org.jboss.as.controller.PathElement;
+import org.jboss.as.controller.ResourceDefinition;
+import org.jboss.as.controller.SubsystemRegistration;
+import org.jboss.as.controller.descriptions.StandardResourceDescriptionResolver;
+import org.jboss.as.controller.parsing.ExtensionParsingContext;
+import org.jboss.as.controller.registry.ManagementResourceRegistration;
+import org.keycloak.subsystem.server.extension.authserver.AuthServerDefinition;
+import org.keycloak.subsystem.server.logging.KeycloakLogger;
+
+import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.SUBSYSTEM;
+
+
+/**
+ * Main Extension class for the subsystem.
+ *
+ * @author Stan Silvert ssilvert@redhat.com (C) 2013 Red Hat Inc.
+ */
+public class KeycloakExtension implements Extension {
+
+ public static final String SUBSYSTEM_NAME = "keycloak-server";
+ public static final String NAMESPACE = "urn:jboss:domain:keycloak-server:1.1";
+ private static final KeycloakSubsystemParser PARSER = new KeycloakSubsystemParser();
+ static final PathElement PATH_SUBSYSTEM = PathElement.pathElement(SUBSYSTEM, SUBSYSTEM_NAME);
+ private static final String RESOURCE_NAME = KeycloakExtension.class.getPackage().getName() + ".LocalDescriptions";
+ private static final ModelVersion MGMT_API_VERSION = ModelVersion.create(1,1,0);
+ static final PathElement SUBSYSTEM_PATH = PathElement.pathElement(SUBSYSTEM, SUBSYSTEM_NAME);
+ private static final ResourceDefinition KEYCLOAK_SUBSYSTEM_RESOURCE = new KeycloakSubsystemDefinition();
+ static final AuthServerDefinition AUTH_SERVER_DEFINITION = new AuthServerDefinition();
+
+ public static StandardResourceDescriptionResolver getResourceDescriptionResolver(final String... keyPrefix) {
+ StringBuilder prefix = new StringBuilder(SUBSYSTEM_NAME);
+ for (String kp : keyPrefix) {
+ prefix.append('.').append(kp);
+ }
+ return new StandardResourceDescriptionResolver(prefix.toString(), RESOURCE_NAME, KeycloakExtension.class.getClassLoader(), true, false);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void initializeParsers(final ExtensionParsingContext context) {
+ context.setSubsystemXmlMapping(SUBSYSTEM_NAME, KeycloakExtension.NAMESPACE, PARSER);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void initialize(final ExtensionContext context) {
+ KeycloakLogger.ROOT_LOGGER.debug("Activating Keycloak Extension");
+ final SubsystemRegistration subsystem = context.registerSubsystem(SUBSYSTEM_NAME, MGMT_API_VERSION);
+
+ ManagementResourceRegistration registration = subsystem.registerSubsystemModel(KEYCLOAK_SUBSYSTEM_RESOURCE);
+ registration.registerSubModel(AUTH_SERVER_DEFINITION);
+ subsystem.registerXMLElementWriter(PARSER);
+ }
+}
diff --git a/integration/wildfly/wildfly-server-subsystem/src/main/java/org/keycloak/subsystem/server/extension/KeycloakSubsystemAdd.java b/integration/wildfly/wildfly-server-subsystem/src/main/java/org/keycloak/subsystem/server/extension/KeycloakSubsystemAdd.java
new file mode 100755
index 0000000000..622c0102f4
--- /dev/null
+++ b/integration/wildfly/wildfly-server-subsystem/src/main/java/org/keycloak/subsystem/server/extension/KeycloakSubsystemAdd.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2013 Red Hat Inc. and/or its affiliates and other contributors
+ * as indicated by the @author tags. All rights reserved.
+ *
+ * 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.subsystem.server.extension;
+
+import org.jboss.as.controller.AbstractBoottimeAddStepHandler;
+import org.jboss.as.controller.OperationContext;
+import org.jboss.as.server.AbstractDeploymentChainStep;
+import org.jboss.as.server.DeploymentProcessorTarget;
+import org.jboss.as.server.deployment.Phase;
+import org.jboss.dmr.ModelNode;
+
+import org.jboss.as.server.deployment.DeploymentUnitProcessor;
+import org.keycloak.subsystem.server.extension.authserver.KeycloakServerDeploymentProcessor;
+
+/**
+ * The Keycloak subsystem add update handler.
+ *
+ * @author Stan Silvert ssilvert@redhat.com (C) 2013 Red Hat Inc.
+ */
+class KeycloakSubsystemAdd extends AbstractBoottimeAddStepHandler {
+
+ static final KeycloakSubsystemAdd INSTANCE = new KeycloakSubsystemAdd();
+
+ @Override
+ protected void performBoottime(final OperationContext context, ModelNode operation, final ModelNode model) {
+ context.addStep(new AbstractDeploymentChainStep() {
+ @Override
+ protected void execute(DeploymentProcessorTarget processorTarget) {
+ processorTarget.addDeploymentProcessor(KeycloakExtension.SUBSYSTEM_NAME, Phase.DEPENDENCIES, 0, chooseDependencyProcessor());
+ processorTarget.addDeploymentProcessor(KeycloakExtension.SUBSYSTEM_NAME,
+ Phase.POST_MODULE, // PHASE
+ Phase.POST_MODULE_VALIDATOR_FACTORY - 1, // PRIORITY
+ new KeycloakServerDeploymentProcessor());
+ }
+ }, OperationContext.Stage.RUNTIME);
+ }
+
+ private DeploymentUnitProcessor chooseDependencyProcessor() {
+ return new KeycloakDependencyProcessorWildFly();
+ }
+}
diff --git a/integration/wildfly/wildfly-server-subsystem/src/main/java/org/keycloak/subsystem/server/extension/KeycloakSubsystemDefinition.java b/integration/wildfly/wildfly-server-subsystem/src/main/java/org/keycloak/subsystem/server/extension/KeycloakSubsystemDefinition.java
new file mode 100644
index 0000000000..f553188251
--- /dev/null
+++ b/integration/wildfly/wildfly-server-subsystem/src/main/java/org/keycloak/subsystem/server/extension/KeycloakSubsystemDefinition.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2014 Red Hat Inc. and/or its affiliates and other contributors
+ * as indicated by the @author tags. All rights reserved.
+ *
+ * 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.subsystem.server.extension;
+
+import org.jboss.as.controller.ReloadRequiredRemoveStepHandler;
+import org.jboss.as.controller.SimpleResourceDefinition;
+import org.jboss.as.controller.operations.common.GenericSubsystemDescribeHandler;
+import org.jboss.as.controller.registry.ManagementResourceRegistration;
+
+/**
+ * Definition of subsystem=keycloak.
+ *
+ * @author Stan Silvert ssilvert@redhat.com (C) 2013 Red Hat Inc.
+ */
+public class KeycloakSubsystemDefinition extends SimpleResourceDefinition {
+ protected KeycloakSubsystemDefinition() {
+ super(KeycloakExtension.SUBSYSTEM_PATH,
+ KeycloakExtension.getResourceDescriptionResolver("subsystem"),
+ KeycloakSubsystemAdd.INSTANCE,
+ ReloadRequiredRemoveStepHandler.INSTANCE
+ );
+ }
+
+ @Override
+ public void registerOperations(ManagementResourceRegistration resourceRegistration) {
+ super.registerOperations(resourceRegistration);
+ resourceRegistration.registerOperationHandler(GenericSubsystemDescribeHandler.DEFINITION, GenericSubsystemDescribeHandler.INSTANCE);
+ }
+
+}
diff --git a/integration/wildfly/wildfly-server-subsystem/src/main/java/org/keycloak/subsystem/server/extension/KeycloakSubsystemParser.java b/integration/wildfly/wildfly-server-subsystem/src/main/java/org/keycloak/subsystem/server/extension/KeycloakSubsystemParser.java
new file mode 100755
index 0000000000..921c576dd6
--- /dev/null
+++ b/integration/wildfly/wildfly-server-subsystem/src/main/java/org/keycloak/subsystem/server/extension/KeycloakSubsystemParser.java
@@ -0,0 +1,127 @@
+/*
+ * Copyright 2014 Red Hat Inc. and/or its affiliates and other contributors
+ * as indicated by the @author tags. All rights reserved.
+ *
+ * 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.subsystem.server.extension;
+
+import org.keycloak.subsystem.server.extension.authserver.AuthServerDefinition;
+import org.jboss.as.controller.AttributeDefinition;
+import org.jboss.as.controller.PathAddress;
+import org.jboss.as.controller.PathElement;
+import org.jboss.as.controller.SimpleAttributeDefinition;
+import org.jboss.as.controller.descriptions.ModelDescriptionConstants;
+import org.jboss.as.controller.operations.common.Util;
+import org.jboss.as.controller.parsing.ParseUtils;
+import org.jboss.as.controller.persistence.SubsystemMarshallingContext;
+import org.jboss.dmr.ModelNode;
+import org.jboss.dmr.Property;
+import org.jboss.staxmapper.XMLElementReader;
+import org.jboss.staxmapper.XMLElementWriter;
+import org.jboss.staxmapper.XMLExtendedStreamReader;
+import org.jboss.staxmapper.XMLExtendedStreamWriter;
+
+import javax.xml.stream.XMLStreamConstants;
+import javax.xml.stream.XMLStreamException;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * The subsystem parser, which uses stax to read and write to and from xml
+ */
+class KeycloakSubsystemParser implements XMLStreamConstants, XMLElementReader>, XMLElementWriter {
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void readElement(final XMLExtendedStreamReader reader, final List list) throws XMLStreamException {
+ // Require no attributes
+ ParseUtils.requireNoAttributes(reader);
+ ModelNode addKeycloakSub = Util.createAddOperation(PathAddress.pathAddress(KeycloakExtension.PATH_SUBSYSTEM));
+ list.add(addKeycloakSub);
+
+ while (reader.hasNext() && nextTag(reader) != END_ELEMENT) {
+ if (reader.getLocalName().equals(AuthServerDefinition.TAG_NAME)) {
+ readAuthServer(reader, list);
+ }
+ }
+ }
+
+ // used for debugging
+ private int nextTag(XMLExtendedStreamReader reader) throws XMLStreamException {
+ return reader.nextTag();
+ }
+
+ private void readAuthServer(XMLExtendedStreamReader reader, List list) throws XMLStreamException {
+ String authServerName = readNameAttribute(reader);
+ ModelNode addAuthServer = new ModelNode();
+ addAuthServer.get(ModelDescriptionConstants.OP).set(ModelDescriptionConstants.ADD);
+ PathAddress addr = PathAddress.pathAddress(PathElement.pathElement(ModelDescriptionConstants.SUBSYSTEM, KeycloakExtension.SUBSYSTEM_NAME),
+ PathElement.pathElement(AuthServerDefinition.TAG_NAME, authServerName));
+ addAuthServer.get(ModelDescriptionConstants.OP_ADDR).set(addr.toModelNode());
+
+ while (reader.hasNext() && nextTag(reader) != END_ELEMENT) {
+ String tagName = reader.getLocalName();
+ SimpleAttributeDefinition def = AuthServerDefinition.lookup(tagName);
+ if (def == null) throw new XMLStreamException("Unknown auth-server tag " + tagName);
+ def.parseAndSetParameter(reader.getElementText(), addAuthServer, reader);
+ }
+
+ list.add(addAuthServer);
+ }
+
+ // expects that the current tag will have one single attribute called "name"
+ private String readNameAttribute(XMLExtendedStreamReader reader) throws XMLStreamException {
+ String name = null;
+ for (int i = 0; i < reader.getAttributeCount(); i++) {
+ String attr = reader.getAttributeLocalName(i);
+ if (attr.equals("name")) {
+ name = reader.getAttributeValue(i);
+ continue;
+ }
+ throw ParseUtils.unexpectedAttribute(reader, i);
+ }
+ if (name == null) {
+ throw ParseUtils.missingRequired(reader, Collections.singleton("name"));
+ }
+ return name;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void writeContent(final XMLExtendedStreamWriter writer, final SubsystemMarshallingContext context) throws XMLStreamException {
+ context.startSubsystemElement(KeycloakExtension.NAMESPACE, false);
+ writeAuthServers(writer, context);
+ writer.writeEndElement();
+ }
+
+ private void writeAuthServers(XMLExtendedStreamWriter writer, SubsystemMarshallingContext context) throws XMLStreamException {
+ if (!context.getModelNode().get(AuthServerDefinition.TAG_NAME).isDefined()) {
+ return;
+ }
+ for (Property authServer : context.getModelNode().get(AuthServerDefinition.TAG_NAME).asPropertyList()) {
+ writer.writeStartElement(AuthServerDefinition.TAG_NAME);
+ writer.writeAttribute("name", authServer.getName());
+ ModelNode authServerElements = authServer.getValue();
+ for (AttributeDefinition element : AuthServerDefinition.ALL_ATTRIBUTES) {
+ element.marshallAsElement(authServerElements, writer);
+ }
+
+ writer.writeEndElement();
+ }
+ }
+}
diff --git a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/authserver/AbstractAddOverlayHandler.java b/integration/wildfly/wildfly-server-subsystem/src/main/java/org/keycloak/subsystem/server/extension/authserver/AbstractAddOverlayHandler.java
similarity index 75%
rename from integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/authserver/AbstractAddOverlayHandler.java
rename to integration/wildfly/wildfly-server-subsystem/src/main/java/org/keycloak/subsystem/server/extension/authserver/AbstractAddOverlayHandler.java
index c701cf2232..7bf620f3d9 100644
--- a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/authserver/AbstractAddOverlayHandler.java
+++ b/integration/wildfly/wildfly-server-subsystem/src/main/java/org/keycloak/subsystem/server/extension/authserver/AbstractAddOverlayHandler.java
@@ -14,61 +14,63 @@
* License for the specific language governing permissions and limitations under
* the License.
*/
-package org.keycloak.subsystem.extension.authserver;
+package org.keycloak.subsystem.server.extension.authserver;
+
+import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ADD;
+import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.REMOVE;
import java.util.Set;
+
+import org.jboss.as.controller.AbstractAddStepHandler;
import org.jboss.as.controller.OperationContext;
import org.jboss.as.controller.OperationFailedException;
-import org.jboss.as.controller.OperationStepHandler;
import org.jboss.as.controller.PathAddress;
import org.jboss.as.controller.ProcessType;
import org.jboss.as.controller.SimpleAttributeDefinition;
import org.jboss.as.controller.SimpleAttributeDefinitionBuilder;
-import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ADD;
-import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.REMOVE;
import org.jboss.as.controller.operations.common.Util;
import org.jboss.as.controller.registry.Resource;
import org.jboss.dmr.ModelNode;
import org.jboss.dmr.ModelType;
-import static org.keycloak.subsystem.extension.authserver.AuthServerUtil.getHandler;
/**
* Base class for operations that create overlays for an auth server.
*
* @author Stan Silvert ssilvert@redhat.com (C) 2014 Red Hat Inc.
*/
-public abstract class AbstractAddOverlayHandler implements OperationStepHandler {
+public abstract class AbstractAddOverlayHandler extends AbstractAddStepHandler{
protected static final String UPLOADED_FILE_OP_NAME = "uploaded-file-name";
-
- protected static final SimpleAttributeDefinition BYTES_TO_UPLOAD
- = new SimpleAttributeDefinitionBuilder("bytes-to-upload", ModelType.BYTES, false)
+ protected static final SimpleAttributeDefinition UPLOADED_FILE_NAME =new SimpleAttributeDefinitionBuilder(UPLOADED_FILE_OP_NAME, ModelType.STRING, false)
.setAllowExpression(false)
.setAllowNull(false)
.build();
+ protected static final SimpleAttributeDefinition BYTES_TO_UPLOAD= new SimpleAttributeDefinitionBuilder("bytes-to-upload", ModelType.BYTES, false)
+ .setAllowExpression(false)
+ .build();
+
static final SimpleAttributeDefinition REDEPLOY_SERVER =
new SimpleAttributeDefinitionBuilder("redeploy", ModelType.BOOLEAN, true)
- .setXmlName("redeploy")
.setAllowExpression(true)
.setDefaultValue(new ModelNode(false))
.build();
protected static final SimpleAttributeDefinition OVERWRITE =
new SimpleAttributeDefinitionBuilder("overwrite", ModelType.BOOLEAN, true)
- .setXmlName("overwrite")
.setAllowExpression(true)
.setDefaultValue(new ModelNode(false))
.build();
- @Override
- public void execute(final OperationContext context, final ModelNode operation) throws OperationFailedException {
- //System.out.println("*** execute operation ***");
- //System.out.println(scrub(operation));
+ public AbstractAddOverlayHandler() {
+ super(AddProviderHandler.DEFINITION.getParameters());
+ }
- String uploadFileName = operation.get(UPLOADED_FILE_OP_NAME).asString();
- boolean isRedeploy = isRedeploy(context, operation);
- boolean isOverwrite = getBooleanFromOperation(operation, OVERWRITE);
+ @Override
+ protected void performRuntime(OperationContext context, ModelNode operation, ModelNode model) throws OperationFailedException {
+ final String uploadFileName = UPLOADED_FILE_NAME.resolveModelAttribute(context, model).asString();
+ final boolean isRedeploy = isRedeploy(context, operation);
+ final boolean isOverwrite = OVERWRITE.resolveModelAttribute(context, model).asBoolean();
String overlayPath = getOverlayPath(uploadFileName);
String overlayName = AuthServerUtil.getOverlayName(operation);
@@ -95,21 +97,21 @@ public abstract class AbstractAddOverlayHandler implements OperationStepHandler
}
}
- addContent(context, overlayAddress, operation.get(BYTES_TO_UPLOAD.getName()).asBytes(), overlayPath);
+ addContent(context, overlayAddress, BYTES_TO_UPLOAD.resolveModelAttribute(context, model).asBytes(), overlayPath);
- if (isRedeploy) AuthServerUtil.addStepToRedeployAuthServer(context, deploymentName);
- if (!isRedeploy) context.restartRequired();
+ if (isRedeploy) { AuthServerUtil.addStepToRedeployAuthServer(context, deploymentName); }
+ if (!isRedeploy) { context.restartRequired(); }
context.completeStep(OperationContext.ResultHandler.NOOP_RESULT_HANDLER);
}
static void removeContent(OperationContext context, PathAddress overlayAddress, String overlayPath) {
PathAddress contentAddress = overlayAddress.append("content", overlayPath);
ModelNode operation = Util.createRemoveOperation(contentAddress);
- context.addStep(operation, getHandler(context, contentAddress, REMOVE), OperationContext.Stage.MODEL);
+ context.addStep(operation, AuthServerUtil.getHandler(context, contentAddress, REMOVE), OperationContext.Stage.MODEL);
}
- static boolean isRedeploy(OperationContext context, ModelNode operation) {
- return isAuthServerEnabled(context) && getBooleanFromOperation(operation, REDEPLOY_SERVER);
+ static boolean isRedeploy(OperationContext context, ModelNode model) throws OperationFailedException {
+ return isAuthServerEnabled(context) && REDEPLOY_SERVER.resolveModelAttribute(context, model).asBoolean();
}
private boolean isHostController(OperationContext context) {
@@ -141,7 +143,7 @@ public abstract class AbstractAddOverlayHandler implements OperationStepHandler
// only call this if context.getProcessType() == ProcessType.HOST_CONTROLLER
private void addOverlayToServerGroups(OperationContext context, PathAddress overlayAddress, ModelNode operation, String overlayName) {
- String myProfile = findMyProfile(operation);
+ String myProfile = context.getCurrentAddressValue();
for (String serverGroup : getServerGroupNames(context)) {
PathAddress address = PathAddress.pathAddress("server-group", serverGroup);
ModelNode serverGroupModel = context.readResourceFromRoot(address).getModel();
@@ -156,12 +158,6 @@ public abstract class AbstractAddOverlayHandler implements OperationStepHandler
}
}
- // only call this if context.getProcessType() == ProcessType.HOST_CONTROLLER
- private String findMyProfile(ModelNode operation) {
- PathAddress address = PathAddress.pathAddress(operation.get("address"));
- return address.getElement(0).getValue();
- }
-
private Set getServerGroupNames(OperationContext context) {
return context.readResourceFromRoot(PathAddress.EMPTY_ADDRESS).getChildrenNames("server-group");
}
@@ -180,24 +176,12 @@ public abstract class AbstractAddOverlayHandler implements OperationStepHandler
private void doAddStep(OperationContext context, PathAddress address, ModelNode operation) {
//System.out.println("**** Adding Add Step ****");
//System.out.println(scrub(operation).toString());
- context.addStep(operation, getHandler(context, address, ADD), OperationContext.Stage.MODEL);
+ context.addStep(operation, AuthServerUtil.getHandler(context, address, ADD), OperationContext.Stage.MODEL);
}
- private static boolean isAuthServerEnabled(OperationContext context) {
- boolean defaultValue = AuthServerDefinition.ENABLED.getDefaultValue().asBoolean();
+ private static boolean isAuthServerEnabled(OperationContext context) throws OperationFailedException {
ModelNode authServerModel = context.readResource(PathAddress.EMPTY_ADDRESS).getModel().clone();
- String attrName = AuthServerDefinition.ENABLED.getName();
- if (!authServerModel.get(attrName).isDefined()) return defaultValue;
- return authServerModel.get(attrName).asBoolean();
- }
-
- private static boolean getBooleanFromOperation(ModelNode operation, SimpleAttributeDefinition definition) {
- boolean defaultValue = definition.getDefaultValue().asBoolean();
- if (!operation.get(definition.getName()).isDefined()) {
- return defaultValue;
- } else {
- return operation.get(definition.getName()).asBoolean();
- }
+ return AuthServerDefinition.ENABLED.resolveModelAttribute(context, authServerModel).asBoolean();
}
// used for debugging
@@ -215,7 +199,7 @@ public abstract class AbstractAddOverlayHandler implements OperationStepHandler
/**
* Get the WAR path where the overlay will live.
*
- * @param file The name of the file being uploaded.
+ * @param fileName The name of the file being uploaded.
* @return The overlay path as a String.
*/
abstract String getOverlayPath(String fileName);
diff --git a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/authserver/AddProviderHandler.java b/integration/wildfly/wildfly-server-subsystem/src/main/java/org/keycloak/subsystem/server/extension/authserver/AddProviderHandler.java
similarity index 75%
rename from integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/authserver/AddProviderHandler.java
rename to integration/wildfly/wildfly-server-subsystem/src/main/java/org/keycloak/subsystem/server/extension/authserver/AddProviderHandler.java
index e2c99ed6f7..8d8694d199 100644
--- a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/authserver/AddProviderHandler.java
+++ b/integration/wildfly/wildfly-server-subsystem/src/main/java/org/keycloak/subsystem/server/extension/authserver/AddProviderHandler.java
@@ -15,14 +15,10 @@
* the License.
*/
-package org.keycloak.subsystem.extension.authserver;
+package org.keycloak.subsystem.server.extension.authserver;
import org.jboss.as.controller.OperationDefinition;
-import org.jboss.as.controller.SimpleAttributeDefinition;
-import org.jboss.as.controller.SimpleAttributeDefinitionBuilder;
import org.jboss.as.controller.SimpleOperationDefinitionBuilder;
-import org.jboss.dmr.ModelNode;
-import org.jboss.dmr.ModelType;
/**
* Operation to add a provider jar to WEB-INF/lib.
@@ -33,15 +29,6 @@ public class AddProviderHandler extends AbstractAddOverlayHandler {
public static final String OP = "add-provider";
- public static final AddProviderHandler INSTANCE = new AddProviderHandler();
-
- protected static final SimpleAttributeDefinition UPLOADED_FILE_NAME =
- new SimpleAttributeDefinitionBuilder(UPLOADED_FILE_OP_NAME, ModelType.STRING, false)
- .setAllowExpression(false)
- .setAllowNull(false)
- .setDefaultValue(new ModelNode().set("myprovider.jar"))
- .build();
-
public static OperationDefinition DEFINITION = new SimpleOperationDefinitionBuilder(OP, AuthServerDefinition.rscDescriptionResolver)
.addParameter(BYTES_TO_UPLOAD)
.addParameter(UPLOADED_FILE_NAME)
@@ -49,6 +36,8 @@ public class AddProviderHandler extends AbstractAddOverlayHandler {
.addParameter(OVERWRITE)
.build();
+ public static final AddProviderHandler INSTANCE = new AddProviderHandler();
+
private AddProviderHandler() {}
@Override
diff --git a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/authserver/AuthServerAddHandler.java b/integration/wildfly/wildfly-server-subsystem/src/main/java/org/keycloak/subsystem/server/extension/authserver/AuthServerAddHandler.java
similarity index 93%
rename from integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/authserver/AuthServerAddHandler.java
rename to integration/wildfly/wildfly-server-subsystem/src/main/java/org/keycloak/subsystem/server/extension/authserver/AuthServerAddHandler.java
index 43d26ce969..e65957347d 100755
--- a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/authserver/AuthServerAddHandler.java
+++ b/integration/wildfly/wildfly-server-subsystem/src/main/java/org/keycloak/subsystem/server/extension/authserver/AuthServerAddHandler.java
@@ -15,7 +15,7 @@
* the License.
*/
-package org.keycloak.subsystem.extension.authserver;
+package org.keycloak.subsystem.server.extension.authserver;
import org.jboss.as.controller.AbstractAddStepHandler;
import org.jboss.as.controller.AttributeDefinition;
@@ -26,7 +26,7 @@ import org.jboss.dmr.ModelNode;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ADD;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP;
import org.jboss.as.controller.registry.Resource;
-import org.keycloak.subsystem.extension.KeycloakAdapterConfigService;
+import org.keycloak.subsystem.server.extension.KeycloakAdapterConfigService;
/**
* Add an auth server.
@@ -71,9 +71,4 @@ public final class AuthServerAddHandler extends AbstractAddStepHandler {
authServerUtil.addStepToUploadAuthServer(context, enabled);
KeycloakAdapterConfigService.getInstance().addServerDeployment(authServerUtil.getDeploymentName(), webContext);
}
-
- @Override
- protected boolean requiresRuntimeVerification() {
- return false;
- }
}
diff --git a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/authserver/AuthServerDefinition.java b/integration/wildfly/wildfly-server-subsystem/src/main/java/org/keycloak/subsystem/server/extension/authserver/AuthServerDefinition.java
similarity index 95%
rename from integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/authserver/AuthServerDefinition.java
rename to integration/wildfly/wildfly-server-subsystem/src/main/java/org/keycloak/subsystem/server/extension/authserver/AuthServerDefinition.java
index 648e35d118..7cfe27bdbc 100755
--- a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/authserver/AuthServerDefinition.java
+++ b/integration/wildfly/wildfly-server-subsystem/src/main/java/org/keycloak/subsystem/server/extension/authserver/AuthServerDefinition.java
@@ -14,7 +14,7 @@
* License for the specific language governing permissions and limitations under
* the License.
*/
-package org.keycloak.subsystem.extension.authserver;
+package org.keycloak.subsystem.server.extension.authserver;
import org.jboss.as.controller.AttributeDefinition;
import org.jboss.as.controller.PathElement;
@@ -34,8 +34,8 @@ import org.jboss.as.controller.OperationFailedException;
import org.jboss.as.controller.descriptions.ResourceDescriptionResolver;
import org.jboss.as.controller.operations.validation.ParameterValidator;
import org.jboss.as.controller.registry.OperationEntry;
-import org.keycloak.subsystem.extension.KeycloakAdapterConfigService;
-import org.keycloak.subsystem.extension.KeycloakExtension;
+import org.keycloak.subsystem.server.extension.KeycloakAdapterConfigService;
+import org.keycloak.subsystem.server.extension.KeycloakExtension;
/**
* Defines attributes and operations for an Auth Server
@@ -48,7 +48,6 @@ public class AuthServerDefinition extends SimpleResourceDefinition {
protected static final SimpleAttributeDefinition ENABLED =
new SimpleAttributeDefinitionBuilder("enabled", ModelType.BOOLEAN, true)
- .setXmlName("enabled")
.setAllowExpression(true)
.setDefaultValue(new ModelNode(false))
.setRestartAllServices()
@@ -56,7 +55,6 @@ public class AuthServerDefinition extends SimpleResourceDefinition {
protected static final SimpleAttributeDefinition WEB_CONTEXT =
new SimpleAttributeDefinitionBuilder("web-context", ModelType.STRING, true)
- .setXmlName("web-context")
.setAllowExpression(true)
.setDefaultValue(new ModelNode("auth"))
.setValidator(new WebContextValidator())
diff --git a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/authserver/AuthServerRemoveHandler.java b/integration/wildfly/wildfly-server-subsystem/src/main/java/org/keycloak/subsystem/server/extension/authserver/AuthServerRemoveHandler.java
similarity index 95%
rename from integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/authserver/AuthServerRemoveHandler.java
rename to integration/wildfly/wildfly-server-subsystem/src/main/java/org/keycloak/subsystem/server/extension/authserver/AuthServerRemoveHandler.java
index e80fbc6d75..05695ca582 100644
--- a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/authserver/AuthServerRemoveHandler.java
+++ b/integration/wildfly/wildfly-server-subsystem/src/main/java/org/keycloak/subsystem/server/extension/authserver/AuthServerRemoveHandler.java
@@ -15,7 +15,7 @@
* the License.
*/
-package org.keycloak.subsystem.extension.authserver;
+package org.keycloak.subsystem.server.extension.authserver;
import org.jboss.as.controller.AbstractRemoveStepHandler;
import org.jboss.as.controller.OperationContext;
@@ -25,7 +25,7 @@ import org.jboss.as.controller.PathAddress;
import org.jboss.as.controller.PathElement;
import org.jboss.as.controller.operations.common.Util;
import org.jboss.dmr.ModelNode;
-import org.keycloak.subsystem.extension.KeycloakAdapterConfigService;
+import org.keycloak.subsystem.server.extension.KeycloakAdapterConfigService;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.DEPLOYMENT;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.REMOVE;
diff --git a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/authserver/AuthServerUtil.java b/integration/wildfly/wildfly-server-subsystem/src/main/java/org/keycloak/subsystem/server/extension/authserver/AuthServerUtil.java
similarity index 95%
rename from integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/authserver/AuthServerUtil.java
rename to integration/wildfly/wildfly-server-subsystem/src/main/java/org/keycloak/subsystem/server/extension/authserver/AuthServerUtil.java
index bf8074b4e5..6814aa7df1 100644
--- a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/authserver/AuthServerUtil.java
+++ b/integration/wildfly/wildfly-server-subsystem/src/main/java/org/keycloak/subsystem/server/extension/authserver/AuthServerUtil.java
@@ -14,7 +14,7 @@
* License for the specific language governing permissions and limitations under
* the License.
*/
-package org.keycloak.subsystem.extension.authserver;
+package org.keycloak.subsystem.server.extension.authserver;
import java.io.File;
import java.net.URI;
@@ -46,7 +46,7 @@ import org.jboss.dmr.ModelNode;
import org.jboss.modules.Module;
import org.jboss.modules.ModuleIdentifier;
import org.jboss.modules.ModuleLoadException;
-import org.keycloak.subsystem.extension.KeycloakExtension;
+import org.keycloak.subsystem.server.extension.KeycloakExtension;
/**
* Utility methods that help assemble and start an auth server.
@@ -55,7 +55,7 @@ import org.keycloak.subsystem.extension.KeycloakExtension;
*/
public class AuthServerUtil {
- private static final ModuleIdentifier KEYCLOAK_SUBSYSTEM = ModuleIdentifier.create("org.keycloak.keycloak-subsystem");
+ private static final ModuleIdentifier KEYCLOAK_SUBSYSTEM = ModuleIdentifier.create("org.keycloak.keycloak-server-subsystem");
private final String deploymentName;
private final Module subsysModule;
@@ -85,8 +85,8 @@ public class AuthServerUtil {
private URI findAuthServerUri() throws IllegalStateException {
try {
- URL subsysJar = this.subsysModule.getExportedResource("keycloak-subsystem-" + this.keycloakVersion + ".jar");
- File subsysDir = new File(subsysJar.toURI()).getParentFile();
+ URL subsysResource = this.subsysModule.getExportedResource("module.xml");
+ File subsysDir = new File(subsysResource.toURI()).getParentFile();
File authServerDir = new File(subsysDir, "auth-server");
if (this.isAuthServerExploded) {
return authServerDir.toURI();
@@ -110,7 +110,7 @@ public class AuthServerUtil {
op.get("owner").set(new ModelNode().add("subsystem", KeycloakExtension.SUBSYSTEM_NAME));
if (authServerUri == null) {
- throw new OperationFailedException("Keycloak Auth Server WAR not found in keycloak-subsystem module");
+ throw new OperationFailedException("Keycloak Auth Server WAR not found in keycloak-server-subsystem module");
}
op.get(CONTENT).add(makeContentItem());
diff --git a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/authserver/AuthServerWriteAttributeHandler.java b/integration/wildfly/wildfly-server-subsystem/src/main/java/org/keycloak/subsystem/server/extension/authserver/AuthServerWriteAttributeHandler.java
similarity index 85%
rename from integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/authserver/AuthServerWriteAttributeHandler.java
rename to integration/wildfly/wildfly-server-subsystem/src/main/java/org/keycloak/subsystem/server/extension/authserver/AuthServerWriteAttributeHandler.java
index 6c5d6b3235..3fd16cc6fc 100755
--- a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/authserver/AuthServerWriteAttributeHandler.java
+++ b/integration/wildfly/wildfly-server-subsystem/src/main/java/org/keycloak/subsystem/server/extension/authserver/AuthServerWriteAttributeHandler.java
@@ -15,7 +15,7 @@
* the License.
*/
-package org.keycloak.subsystem.extension.authserver;
+package org.keycloak.subsystem.server.extension.authserver;
import org.jboss.as.controller.AttributeDefinition;
import org.jboss.as.controller.SimpleAttributeDefinition;
@@ -26,7 +26,7 @@ import org.jboss.as.controller.OperationContext;
import org.jboss.as.controller.OperationFailedException;
import org.jboss.as.controller.registry.Resource;
import org.jboss.dmr.ModelNode;
-import org.keycloak.subsystem.extension.KeycloakAdapterConfigService;
+import org.keycloak.subsystem.server.extension.KeycloakAdapterConfigService;
/**
* Update an attribute on an Auth Server.
@@ -50,7 +50,7 @@ public class AuthServerWriteAttributeHandler extends ModelOnlyWriteAttributeHand
return;
}
- boolean isEnabled = isEnabled(model); // is server currently enabled?
+ boolean isEnabled = AuthServerDefinition.ENABLED.resolveModelAttribute(context, model.getModel()).asBoolean();
String deploymentName = AuthServerUtil.getDeploymentName(operation);
if (attributeName.equals(AuthServerDefinition.WEB_CONTEXT.getName())) {
@@ -73,14 +73,6 @@ public class AuthServerWriteAttributeHandler extends ModelOnlyWriteAttributeHand
super.finishModelStage(context, operation, attributeName, newValue, oldValue, model);
}
- // Is auth server currently enabled?
- private boolean isEnabled(Resource model) {
- ModelNode authServer = model.getModel();
- ModelNode isEnabled = authServer.get(AuthServerDefinition.ENABLED.getName());
- if (!isEnabled.isDefined()) isEnabled = AuthServerDefinition.ENABLED.getDefaultValue();
- return isEnabled.asBoolean();
- }
-
private boolean attribNotChanging(String attributeName, ModelNode newValue, ModelNode oldValue) {
SimpleAttributeDefinition attribDef = AuthServerDefinition.lookup(attributeName);
if (!oldValue.isDefined()) oldValue = attribDef.getDefaultValue();
diff --git a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/authserver/KeycloakServerDeploymentProcessor.java b/integration/wildfly/wildfly-server-subsystem/src/main/java/org/keycloak/subsystem/server/extension/authserver/KeycloakServerDeploymentProcessor.java
similarity index 94%
rename from integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/authserver/KeycloakServerDeploymentProcessor.java
rename to integration/wildfly/wildfly-server-subsystem/src/main/java/org/keycloak/subsystem/server/extension/authserver/KeycloakServerDeploymentProcessor.java
index 565310d8e2..80401cc795 100644
--- a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/authserver/KeycloakServerDeploymentProcessor.java
+++ b/integration/wildfly/wildfly-server-subsystem/src/main/java/org/keycloak/subsystem/server/extension/authserver/KeycloakServerDeploymentProcessor.java
@@ -14,14 +14,14 @@
* License for the specific language governing permissions and limitations under
* the License.
*/
-package org.keycloak.subsystem.extension.authserver;
+package org.keycloak.subsystem.server.extension.authserver;
import org.jboss.as.ee.component.EEModuleDescription;
import org.jboss.as.server.deployment.DeploymentPhaseContext;
import org.jboss.as.server.deployment.DeploymentUnit;
import org.jboss.as.server.deployment.DeploymentUnitProcessingException;
import org.jboss.as.server.deployment.DeploymentUnitProcessor;
-import org.keycloak.subsystem.extension.KeycloakAdapterConfigService;
+import org.keycloak.subsystem.server.extension.KeycloakAdapterConfigService;
/**
* DUP responsible for setting the web context of a Keycloak auth server.
diff --git a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/authserver/ListOverlaysHandler.java b/integration/wildfly/wildfly-server-subsystem/src/main/java/org/keycloak/subsystem/server/extension/authserver/ListOverlaysHandler.java
similarity index 97%
rename from integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/authserver/ListOverlaysHandler.java
rename to integration/wildfly/wildfly-server-subsystem/src/main/java/org/keycloak/subsystem/server/extension/authserver/ListOverlaysHandler.java
index 39c5225663..4b5b17e7ea 100644
--- a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/authserver/ListOverlaysHandler.java
+++ b/integration/wildfly/wildfly-server-subsystem/src/main/java/org/keycloak/subsystem/server/extension/authserver/ListOverlaysHandler.java
@@ -15,7 +15,7 @@
* the License.
*/
-package org.keycloak.subsystem.extension.authserver;
+package org.keycloak.subsystem.server.extension.authserver;
import java.util.Set;
import java.util.TreeSet;
@@ -64,8 +64,6 @@ public class ListOverlaysHandler implements OperationStepHandler {
result.add(key);
}
}
-
- context.stepCompleted();
}
private Set getOverlayNames(OperationContext context, String overlayName) {
diff --git a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/authserver/OverlayKeycloakServerJsonHandler.java b/integration/wildfly/wildfly-server-subsystem/src/main/java/org/keycloak/subsystem/server/extension/authserver/OverlayKeycloakServerJsonHandler.java
similarity index 96%
rename from integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/authserver/OverlayKeycloakServerJsonHandler.java
rename to integration/wildfly/wildfly-server-subsystem/src/main/java/org/keycloak/subsystem/server/extension/authserver/OverlayKeycloakServerJsonHandler.java
index 693ee45d6c..744e264bdd 100644
--- a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/authserver/OverlayKeycloakServerJsonHandler.java
+++ b/integration/wildfly/wildfly-server-subsystem/src/main/java/org/keycloak/subsystem/server/extension/authserver/OverlayKeycloakServerJsonHandler.java
@@ -15,7 +15,7 @@
* the License.
*/
-package org.keycloak.subsystem.extension.authserver;
+package org.keycloak.subsystem.server.extension.authserver;
import org.jboss.as.controller.OperationDefinition;
import org.jboss.as.controller.SimpleOperationDefinitionBuilder;
diff --git a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/authserver/RemoveOverlayHandler.java b/integration/wildfly/wildfly-server-subsystem/src/main/java/org/keycloak/subsystem/server/extension/authserver/RemoveOverlayHandler.java
similarity index 86%
rename from integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/authserver/RemoveOverlayHandler.java
rename to integration/wildfly/wildfly-server-subsystem/src/main/java/org/keycloak/subsystem/server/extension/authserver/RemoveOverlayHandler.java
index e2580ba7ff..022e96c321 100644
--- a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/extension/authserver/RemoveOverlayHandler.java
+++ b/integration/wildfly/wildfly-server-subsystem/src/main/java/org/keycloak/subsystem/server/extension/authserver/RemoveOverlayHandler.java
@@ -15,7 +15,9 @@
* the License.
*/
-package org.keycloak.subsystem.extension.authserver;
+package org.keycloak.subsystem.server.extension.authserver;
+
+import static org.keycloak.subsystem.server.extension.authserver.AbstractAddOverlayHandler.REDEPLOY_SERVER;
import org.jboss.as.controller.OperationContext;
import org.jboss.as.controller.OperationDefinition;
@@ -41,12 +43,11 @@ public class RemoveOverlayHandler implements OperationStepHandler {
new SimpleAttributeDefinitionBuilder("overlay-file-path", ModelType.STRING, false)
.setAllowExpression(true)
.setAllowNull(false)
- .setDefaultValue(new ModelNode().set("/WEB-INF/lib/myprovider.jar"))
.build();
static final OperationDefinition DEFINITION = new SimpleOperationDefinitionBuilder(REMOVE_OVERLAY_OPERATION, AuthServerDefinition.rscDescriptionResolver)
.addParameter(OVERLAY_FILE_PATH)
- .addParameter(AbstractAddOverlayHandler.REDEPLOY_SERVER)
+ .addParameter(REDEPLOY_SERVER)
.build();
static final OperationStepHandler INSTANCE = new RemoveOverlayHandler();
@@ -55,9 +56,12 @@ public class RemoveOverlayHandler implements OperationStepHandler {
@Override
public void execute(OperationContext context, ModelNode operation) throws OperationFailedException {
+ final ModelNode model = new ModelNode();
+ OVERLAY_FILE_PATH.validateAndSet(operation, model);
+ REDEPLOY_SERVER.validateAndSet(operation, model);
String overlayName = AuthServerUtil.getOverlayName(operation);
boolean isOverlayExists = AuthServerUtil.isOverlayExists(context, overlayName, PathAddress.EMPTY_ADDRESS);
- String overlayPath = operation.get(OVERLAY_FILE_PATH.getName()).asString();
+ String overlayPath = OVERLAY_FILE_PATH.resolveModelAttribute(context, model).asString();
if (isOverlayExists) {
PathAddress overlayAddress = AuthServerUtil.getOverlayAddress(overlayName);
AbstractAddOverlayHandler.removeContent(context, overlayAddress, overlayPath);
@@ -70,7 +74,5 @@ public class RemoveOverlayHandler implements OperationStepHandler {
String deploymentName = AuthServerUtil.getDeploymentName(operation);
if (isRedeploy) AuthServerUtil.addStepToRedeployAuthServer(context, deploymentName);
if (!isRedeploy) context.restartRequired();
-
- context.stepCompleted();
}
}
diff --git a/integration/wildfly/wildfly-server-subsystem/src/main/java/org/keycloak/subsystem/server/logging/KeycloakLogger.java b/integration/wildfly/wildfly-server-subsystem/src/main/java/org/keycloak/subsystem/server/logging/KeycloakLogger.java
new file mode 100755
index 0000000000..bf6053b60a
--- /dev/null
+++ b/integration/wildfly/wildfly-server-subsystem/src/main/java/org/keycloak/subsystem/server/logging/KeycloakLogger.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2013 Red Hat Inc. and/or its affiliates and other contributors
+ * as indicated by the @author tags. All rights reserved.
+ *
+ * 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.subsystem.server.logging;
+
+import org.jboss.logging.BasicLogger;
+import org.jboss.logging.Logger;
+import org.jboss.logging.annotations.LogMessage;
+import org.jboss.logging.annotations.Message;
+import org.jboss.logging.annotations.MessageLogger;
+
+import static org.jboss.logging.Logger.Level.INFO;
+
+/**
+ * This interface to be fleshed out later when error messages are fully externalized.
+ *
+ * @author Stan Silvert ssilvert@redhat.com (C) 2013 Red Hat Inc.
+ */
+@MessageLogger(projectCode = "KEYCLOAK")
+public interface KeycloakLogger extends BasicLogger {
+
+ /**
+ * A logger with a category of the package name.
+ */
+ KeycloakLogger ROOT_LOGGER = Logger.getMessageLogger(KeycloakLogger.class, "org.jboss.keycloak");
+}
diff --git a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/logging/KeycloakMessages.java b/integration/wildfly/wildfly-server-subsystem/src/main/java/org/keycloak/subsystem/server/logging/KeycloakMessages.java
similarity index 96%
rename from integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/logging/KeycloakMessages.java
rename to integration/wildfly/wildfly-server-subsystem/src/main/java/org/keycloak/subsystem/server/logging/KeycloakMessages.java
index 09f7bc2608..710c05420a 100755
--- a/integration/keycloak-subsystem/src/main/java/org/keycloak/subsystem/logging/KeycloakMessages.java
+++ b/integration/wildfly/wildfly-server-subsystem/src/main/java/org/keycloak/subsystem/server/logging/KeycloakMessages.java
@@ -14,7 +14,7 @@
* License for the specific language governing permissions and limitations under
* the License.
*/
-package org.keycloak.subsystem.logging;
+package org.keycloak.subsystem.server.logging;
import org.jboss.logging.Messages;
import org.jboss.logging.annotations.MessageBundle;
diff --git a/integration/wildfly/wildfly-server-subsystem/src/main/resources/META-INF/services/org.jboss.as.controller.Extension b/integration/wildfly/wildfly-server-subsystem/src/main/resources/META-INF/services/org.jboss.as.controller.Extension
new file mode 100644
index 0000000000..36b9edb9f0
--- /dev/null
+++ b/integration/wildfly/wildfly-server-subsystem/src/main/resources/META-INF/services/org.jboss.as.controller.Extension
@@ -0,0 +1 @@
+org.keycloak.subsystem.server.extension.KeycloakExtension
diff --git a/integration/wildfly/wildfly-server-subsystem/src/main/resources/org/keycloak/subsystem/server/extension/LocalDescriptions.properties b/integration/wildfly/wildfly-server-subsystem/src/main/resources/org/keycloak/subsystem/server/extension/LocalDescriptions.properties
new file mode 100755
index 0000000000..f09e3bd189
--- /dev/null
+++ b/integration/wildfly/wildfly-server-subsystem/src/main/resources/org/keycloak/subsystem/server/extension/LocalDescriptions.properties
@@ -0,0 +1,26 @@
+keycloak-server.subsystem=Keycloak subsystem
+keycloak-server.subsystem.add=Operation Adds Keycloak subsystem
+keycloak-server.subsystem.remove=Operation removes Keycloak subsystem
+keycloak-server.subsystem.auth-server=Keycloak Auth Server
+keycloak-server.subsystem.realm=A Keycloak realm.
+keycloak-server.subsystem.secure-deployment=A deployment secured by Keycloak.
+
+
+keycloak-server.auth-server=A Keycloak Auth Server
+keycloak-server.auth-server.add=Add an Auth Server to the subsystem.
+keycloak-server.auth-server.remove=Remove an Auth Server from the subsystem.
+keycloak-server.auth-server.add-provider=Add a provider service jar to the Keycloak auth server.
+keycloak-server.auth-server.add-provider.uploaded-file-name=The file name of the provider service jar to be added or updated.
+keycloak-server.auth-server.add-provider.bytes-to-upload=The bytes of the provider service jar to be added or updated.
+keycloak-server.auth-server.add-provider.redeploy=Redeploy the auth server after adding the provider. Ignored if auth server is disabled.
+keycloak-server.auth-server.add-provider.overwrite=Overwrite even if the uploaded-file-name already exists as an overlay.
+keycloak-server.auth-server.list-overlays=List the overlays uploaded for this auth server.
+keycloak-server.auth-server.remove-overlay=Remove a provider jar, theme jar, or keycloak-server.json that has been uploaded to the auth server.
+keycloak-server.auth-server.remove-overlay.overlay-file-path=The uploaded path and file name of the overlay to be removed.
+keycloak-server.auth-server.remove-overlay.redeploy=Redeploy the auth server after removing the overlay.
+keycloak-server.auth-server.update-server-config=Upload a new keycloak-server.json configuration file for the Keycloak auth server.
+keycloak-server.auth-server.update-server-config.bytes-to-upload=The bytes of the keycloak-server.json file to be added or updated.
+keycloak-server.auth-server.update-server-config.redeploy=Redeploy the auth server after updating the server config.
+keycloak-server.auth-server.update-server-config.overwrite=Overwrite even if keycloak-server.json already exitss as an overlay.
+keycloak-server.auth-server.enabled=Enable or disable the Auth Server.
+keycloak-server.auth-server.web-context=Web context the auth-server will use. Also, the module name of the auth-server deployment.
diff --git a/integration/wildfly/wildfly-server-subsystem/src/main/resources/schema/wildfly-keycloak-server_1_1.xsd b/integration/wildfly/wildfly-server-subsystem/src/main/resources/schema/wildfly-keycloak-server_1_1.xsd
new file mode 100755
index 0000000000..a8dd28e5a4
--- /dev/null
+++ b/integration/wildfly/wildfly-server-subsystem/src/main/resources/schema/wildfly-keycloak-server_1_1.xsd
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The name of the war archive containing the Keycloak server web application.
+
+
+
+
+
diff --git a/integration/wildfly/wildfly-server-subsystem/src/main/resources/subsystem-templates/keycloak-datasources.xml b/integration/wildfly/wildfly-server-subsystem/src/main/resources/subsystem-templates/keycloak-datasources.xml
new file mode 100644
index 0000000000..9f05130294
--- /dev/null
+++ b/integration/wildfly/wildfly-server-subsystem/src/main/resources/subsystem-templates/keycloak-datasources.xml
@@ -0,0 +1,30 @@
+
+
+
+ org.jboss.as.connector
+
+
+
+ jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
+ h2
+
+ sa
+ sa
+
+
+
+ jdbc:h2:${jboss.server.data.dir}/keycloak;AUTO_SERVER=TRUE
+ h2
+
+ sa
+ sa
+
+
+
+
+ org.h2.jdbcx.JdbcDataSource
+
+
+
+
+
diff --git a/integration/wildfly/wildfly-server-subsystem/src/main/resources/subsystem-templates/keycloak-server.xml b/integration/wildfly/wildfly-server-subsystem/src/main/resources/subsystem-templates/keycloak-server.xml
new file mode 100644
index 0000000000..7f66f74965
--- /dev/null
+++ b/integration/wildfly/wildfly-server-subsystem/src/main/resources/subsystem-templates/keycloak-server.xml
@@ -0,0 +1,11 @@
+
+
+
+ org.keycloak.keycloak-server-subsystem
+
+
+ true
+ auth
+
+
+
diff --git a/integration/wildfly/wildfly-server-subsystem/src/test/java/org/keycloak/subsystem/server/extension/SubsystemParsingTestCase.java b/integration/wildfly/wildfly-server-subsystem/src/test/java/org/keycloak/subsystem/server/extension/SubsystemParsingTestCase.java
new file mode 100755
index 0000000000..9f29a6f15b
--- /dev/null
+++ b/integration/wildfly/wildfly-server-subsystem/src/test/java/org/keycloak/subsystem/server/extension/SubsystemParsingTestCase.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright 2013 Red Hat Inc. and/or its affiliates and other contributors
+ * as indicated by the @author tags. All rights reserved.
+ *
+ * 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.subsystem.server.extension;
+
+import java.io.IOException;
+
+import org.jboss.as.subsystem.test.AbstractSubsystemBaseTest;
+import org.jboss.dmr.ModelNode;
+import org.junit.Test;
+
+/**
+ * Tests all management expects for subsystem, parsing, marshaling, model definition and other
+ * Here is an example that allows you a fine grained controller over what is tested and how. So it can give you ideas what can be done and tested.
+ * If you have no need for advanced testing of subsystem you look at {@link AbstractSubsystemBaseTest} that testes same stuff but most of the code
+ * is hidden inside of test harness
+ *
+ * @author Kabir Khan
+ * @author Tomaz Cerar
+ * @author Marko Strukelj
+ */
+public class SubsystemParsingTestCase extends AbstractSubsystemBaseTest {
+
+ public SubsystemParsingTestCase() {
+ super(KeycloakExtension.SUBSYSTEM_NAME, new KeycloakExtension());
+ }
+
+ @Test
+ public void testJson() throws Exception {
+ ModelNode node = new ModelNode();
+ node.get("enabled").set(true);
+ node.get("web-context").set("auth");
+
+ System.out.println("json=" + node.toJSONString(false));
+ }
+
+ @Override
+ protected String getSubsystemXml() throws IOException {
+ return readResource("keycloak-server-1.1.xml");
+ }
+
+ @Override
+ protected String getSubsystemXsdPath() throws Exception {
+ return "schema/wildfly-keycloak-server_1_1.xsd";
+ }
+
+ @Override
+ protected String[] getSubsystemTemplatePaths() throws IOException {
+ return new String[]{
+ "/subsystem-templates/keycloak-server.xml"
+ };
+ }
+}
diff --git a/integration/wildfly/wildfly-server-subsystem/src/test/resources/org/keycloak/subsystem/server/extension/keycloak-server-1.1.xml b/integration/wildfly/wildfly-server-subsystem/src/test/resources/org/keycloak/subsystem/server/extension/keycloak-server-1.1.xml
new file mode 100644
index 0000000000..f05f8d19c7
--- /dev/null
+++ b/integration/wildfly/wildfly-server-subsystem/src/test/resources/org/keycloak/subsystem/server/extension/keycloak-server-1.1.xml
@@ -0,0 +1,6 @@
+
+
+ true
+ auth
+
+
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 07246fbcb9..796918a8dd 100755
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
org.jboss
jboss-parent
- 14
+ 16
Keycloak
@@ -20,18 +20,26 @@
2.0.0-M17
1.0.0-M23
+ 0.6
2.3.8
1.50
1.9.9
4.3.6
4.3.3
3.0.10.Final
+ 3.0.10.Final
+ 2.7
+ 4.2.1
+
1.1.1.Final
2.7.0.Final
2.11.3
3.1.4.GA
0.9.30
1.2.0.Beta1
+ 1.0.4.Final
+ 4.0.26.Final
+ 0.1.1.Final
1.0.1.Final
4.0.1.Final
1.3.168
@@ -40,17 +48,22 @@
1.6.1
1.4.01
5.1.25
- 1.5.10
+ 1.7.7.jbossorg-1
+ 9.0.0.CR1
+ 1.0.0.CR1
+ 1.0.0.Alpha8
7.1.1.Final
- 8.2.0.Final
- 1.0.0.Alpha12
1.0.2.Final
2.2
1.14.1-beta
+ 2011.1
1.0.1
2.3.20
3.0.5
2.35.0
+ 2.21
+ 2.2.11
+ 20140925
1.4.5
6.0.2.Final
3.3.2
@@ -58,7 +71,7 @@
4.2.0
3.1.2
2.10
- 4.11
+ 4.12
1.3
1.2.17
1.3.1b
@@ -140,6 +153,61 @@
+
+ com.github.relaxng
+ relaxngDatatype
+ ${github.relaxng.version}
+
+
+ com.sun.istack
+ istack-commons-runtime
+ ${sun.istack.version}
+
+
+ com.sun.istack
+ istack-commons-tools
+ ${sun.istack.version}
+
+
+ com.sun.xml.bind.external
+ rngom
+ ${sun.jaxb.version}
+
+
+ com.sun.xsom
+ xsom
+ ${sun.xsom.version}
+
+
+ org.glassfish.jaxb
+ jaxb-core
+ ${sun.jaxb.version}
+
+
+ org.glassfish.jaxb
+ jaxb-runtime
+ ${sun.jaxb.version}
+
+
+ org.glassfish.jaxb
+ jaxb-xjc
+ ${sun.jaxb.version}
+
+
+ org.glassfish.jaxb
+ codemodel
+ ${sun.jaxb.version}
+
+
+ org.glassfish.jaxb
+ txw2
+ ${sun.jaxb.version}
+
+
+ joda-time
+ joda-time
+ ${joda-time.version}
+
org.bouncycastle
bcprov-jdk15on
@@ -147,7 +215,7 @@
org.bouncycastle
- bcpkix-jdk15on
+ bcpkix-jdk15on
${bouncycastle.crypto.version}
@@ -197,6 +265,31 @@
${resteasy.version}
test
+
+ org.jboss.spec.javax.xml.bind
+ jboss-jaxb-api_2.2_spec
+ ${jboss.spec.javax.xml.bind.jboss-jaxb-api_2.2_spec.version}
+
+
+ io.netty
+ netty-all
+ ${io.netty.version}
+
+
+ org.jboss.xnio.netty
+ netty-xnio-transport
+ ${xnio.netty.netty-xnio-transport.version}
+
+
+ org.keycloak
+ keycloak-wildfly-adapter-subsystem
+ ${project.version}
+
+
+ org.keycloak
+ keycloak-undertow-adapter
+ ${project.version}
+
io.undertow
undertow-servlet
@@ -418,7 +511,12 @@
${slf4j.version}
test
-
+
+ org.slf4j
+ jcl-over-slf4j
+ ${slf4j.version}
+
+
mysql
mysql-connector-java
@@ -440,6 +538,28 @@
httpcore
${apache.httpcomponents.httpcore.version}
+
+ org.apache.httpcomponents
+ httpmime
+ ${keycloak.apache.httpcomponents.version}
+
+
+ commons-logging
+ commons-logging
+
+
+
+
+ org.apache.james
+ apache-mime4j
+ ${org.apache.james.apache-mime4j.version}
+
+
+ commons-logging
+ commons-logging
+
+
+
org.wildfly.core
wildfly-controller
@@ -455,6 +575,18 @@
wildfly-ee
${wildfly.version}
+
+ org.wildfly
+ wildfly-feature-pack
+ ${wildfly.version}
+ zip
+
+
+ org.wildfly
+ wildfly-web-feature-pack
+ ${wildfly.version}
+ zip
+
org.wildfly.core
wildfly-subsystem-test
@@ -462,6 +594,18 @@
pom
test
+
+ org.wildfly
+ wildfly-undertow
+ ${wildfly.version}
+ test
+
+
+ org.wildfly.core
+ wildfly-subsystem-test-framework
+ ${wildfly.core.version}
+ test
+
org.wildfly.core
wildfly-core-feature-pack
@@ -481,7 +625,7 @@
org.wildfly
- wildfly-undertow
+ wildfly-web-common
${wildfly.version}
@@ -1098,6 +1242,54 @@
liquibase-maven-plugin
${liquibase.version}
+
+
+ org.wildfly.build
+ wildfly-feature-pack-build-maven-plugin
+ ${wildfly.build-tools.version}
+
+
+ org.wildfly.build
+ wildfly-server-provisioning-maven-plugin
+ ${wildfly.build-tools.version}
+
diff --git a/testsuite/docker-cluster/shared-files/keycloak-base-prepare.sh b/testsuite/docker-cluster/shared-files/keycloak-base-prepare.sh
index 965da9b7f3..c303009a6d 100644
--- a/testsuite/docker-cluster/shared-files/keycloak-base-prepare.sh
+++ b/testsuite/docker-cluster/shared-files/keycloak-base-prepare.sh
@@ -12,8 +12,8 @@ mkdir -p mysql/main && mv /mysql-connector-java-5.1.32.jar mysql/main/
cp /keycloak-docker-cluster/shared-files/mysql-module.xml mysql/main/module.xml
mv mysql $JBOSS_MODULES_HOME/com/
-sed -i -e "s//&\n /" $JBOSS_HOME/standalone/configuration/standalone-ha.xml
-sed -i -e 's//&\n \n \n true<\/enabled>\n auth<\/web-context>\n <\/auth-server> \n <\/subsystem>/' $JBOSS_HOME/standalone/configuration/standalone-ha.xml && \
+sed -i -e "s//&\n /" $JBOSS_HOME/standalone/configuration/standalone-ha.xml
+sed -i -e 's//&\n \n \n true<\/enabled>\n auth<\/web-context>\n <\/auth-server> \n <\/subsystem>/' $JBOSS_HOME/standalone/configuration/standalone-ha.xml && \
sed -i -e 's//&\n \n \n \n <\/authentication>\n <\/security-domain>/' $JBOSS_HOME/standalone/configuration/standalone-ha.xml && \
sed -i -e 's//&\n \n com.mysql.jdbc.Driver<\/xa-datasource-class>\n com.mysql.jdbc.Driver<\/driver-class>\n <\/driver>/' $JBOSS_HOME/standalone/configuration/standalone-ha.xml && \
sed -i -e 's/<\/periodic-rotating-file-handler>/&\n \n \n <\/logger>\n \n \n <\/logger>/' $JBOSS_HOME/standalone/configuration/standalone-ha.xml
diff --git a/testsuite/wildfly/pom.xml b/testsuite/wildfly/pom.xml
new file mode 100644
index 0000000000..4fbbe04a05
--- /dev/null
+++ b/testsuite/wildfly/pom.xml
@@ -0,0 +1,504 @@
+
+
+
+ keycloak-testsuite-pom
+ org.keycloak
+ 1.3.0.Beta1-SNAPSHOT
+ ../../pom.xml
+
+ 4.0.0
+
+ keycloak-testsuite-wildfly
+ Keycloak WildFly 9.x Integration TestSuite
+
+
+
+
+ org.keycloak
+ keycloak-dependencies-server-all
+ pom
+
+
+ org.keycloak
+ keycloak-admin-client
+
+
+ log4j
+ log4j
+
+
+ org.slf4j
+ slf4j-api
+ 1.6.1
+
+
+ org.slf4j
+ slf4j-log4j12
+ 1.6.1
+
+
+ org.jboss.spec.javax.servlet
+ jboss-servlet-api_3.0_spec
+
+
+ org.jboss.resteasy
+ jaxrs-api
+
+
+ org.jboss.resteasy
+ resteasy-jaxrs
+
+
+ log4j
+ log4j
+
+
+ org.slf4j
+ slf4j-api
+
+
+ org.slf4j
+ slf4j-simple
+
+
+
+
+ org.jboss.resteasy
+ resteasy-client
+
+
+ org.jboss.resteasy
+ resteasy-multipart-provider
+
+
+ org.jboss.resteasy
+ resteasy-jackson-provider
+
+
+ org.jboss.resteasy
+ resteasy-undertow
+
+
+ com.google.zxing
+ javase
+
+
+ org.bouncycastle
+ bcprov-jdk15on
+
+
+ org.apache.httpcomponents
+ httpclient
+
+
+ org.keycloak
+ keycloak-ldap-federation
+
+
+ org.keycloak
+ keycloak-kerberos-federation
+
+
+ org.keycloak
+ keycloak-undertow-adapter
+
+
+ org.keycloak
+ keycloak-wildfly-adapter
+
+
+ org.jboss.logging
+ jboss-logging
+
+
+ io.undertow
+ undertow-servlet
+
+
+ io.undertow
+ undertow-core
+
+
+ org.codehaus.jackson
+ jackson-core-asl
+
+
+ org.codehaus.jackson
+ jackson-mapper-asl
+
+
+ org.codehaus.jackson
+ jackson-xc
+
+
+ junit
+ junit
+
+
+ org.hamcrest
+ hamcrest-all
+
+
+ org.hibernate.javax.persistence
+ hibernate-jpa-2.0-api
+
+
+ com.h2database
+ h2
+
+
+ org.hibernate
+ hibernate-entitymanager
+
+
+ com.icegreen
+ greenmail
+
+
+ org.slf4j
+ slf4j-api
+
+
+
+
+ org.infinispan
+ infinispan-core
+
+
+ org.seleniumhq.selenium
+ selenium-java
+
+
+ xml-apis
+ xml-apis
+
+
+ org.seleniumhq.selenium
+ selenium-chrome-driver
+
+
+ org.wildfly
+ wildfly-undertow
+ ${wildfly.version}
+ test
+
+
+ org.keycloak
+ keycloak-testsuite-integration
+ test
+
+
+ org.keycloak
+ keycloak-testsuite-integration
+ test-jar
+ test
+
+
+ org.eclipse.jetty
+ jetty-jaas
+ ${jetty9.version}
+ provided
+
+
+
+ org.eclipse.jetty
+ jetty-util
+ ${jetty9.version}
+ provided
+
+
+
+ org.eclipse.jetty
+ jetty-webapp
+ ${jetty9.version}
+ provided
+
+
+
+ org.eclipse.jetty
+ jetty-security
+ ${jetty9.version}
+ provided
+
+
+
+ org.eclipse.jetty
+ jetty-servlet
+ ${jetty9.version}
+ provided
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-jar-plugin
+ 2.2
+
+
+
+ test-jar
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-deploy-plugin
+
+ true
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ ${maven.compiler.source}
+ ${maven.compiler.target}
+
+
+
+ org.codehaus.mojo
+ exec-maven-plugin
+
+ ${project.basedir}
+
+
+
+
+
+
+
+ keycloak-server
+
+
+
+ org.codehaus.mojo
+ exec-maven-plugin
+
+ org.keycloak.testsuite.KeycloakServer
+
+
+
+
+
+
+ mail-server
+
+
+
+ org.codehaus.mojo
+ exec-maven-plugin
+
+ org.keycloak.testsuite.MailServer
+
+
+
+
+
+
+ totp
+
+
+
+ org.codehaus.mojo
+ exec-maven-plugin
+
+ org.keycloak.testsuite.TotpGenerator
+
+
+
+
+
+
+
+ jpa
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+
+ jpa
+ jpa
+ jpa
+ jpa
+
+
+
+
+
+
+
+
+ mongo
+
+
+ localhost
+ 27018
+ keycloak
+ true
+ 127.0.0.1
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+
+ test
+ integration-test
+
+ test
+
+
+
+ mongo
+ mongo
+ mongo
+ mongo
+ ${keycloak.connectionsMongo.host}
+ ${keycloak.connectionsMongo.port}
+ ${keycloak.connectionsMongo.db}
+ ${keycloak.connectionsMongo.clearOnStartup}
+ ${keycloak.connectionsMongo.bindIp}
+
+
+
+
+ default-test
+
+ true
+
+
+
+
+
+
+
+ com.github.joelittlejohn.embedmongo
+ embedmongo-maven-plugin
+
+
+ start-mongodb
+ pre-integration-test
+
+ start
+
+
+ ${keycloak.connectionsMongo.port}
+ file
+ ${project.build.directory}/mongodb.log
+ ${keycloak.connectionsMongo.bindIp}
+
+
+
+ stop-mongodb
+ post-integration-test
+
+ stop
+
+
+
+
+
+
+
+
+
+
+ infinispan
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+
+ infinispan
+ infinispan
+ infinispan
+
+
+
+
+
+
+
+
+
+
+
+ keycloak.connectionsJpa.driver
+ com.mysql.jdbc.Driver
+
+
+ mysql
+
+
+ mysql
+ mysql-connector-java
+ ${mysql.version}
+
+
+
+
+
+
+
+
+ keycloak.connectionsJpa.driver
+ org.postgresql.Driver
+
+
+ postgresql
+
+
+ org.postgresql
+ postgresql
+ ${postgresql.version}
+
+
+
+
+
+ clean-jpa
+
+
+
+ org.liquibase
+ liquibase-maven-plugin
+
+ META-INF/jpa-changelog-master.xml
+
+ ${keycloak.connectionsJpa.url}
+ ${keycloak.connectionsJpa.driver}
+ ${keycloak.connectionsJpa.user}
+ ${keycloak.connectionsJpa.password}
+
+ false
+
+
+
+ clean-jpa
+ clean
+
+ dropAll
+
+
+
+
+
+
+
+
+
diff --git a/testsuite/wildfly/src/test/config/arq/arquillian.xml b/testsuite/wildfly/src/test/config/arq/arquillian.xml
new file mode 100644
index 0000000000..7fcf61cb4d
--- /dev/null
+++ b/testsuite/wildfly/src/test/config/arq/arquillian.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+ ${basedir}/target/jbossas
+ ${server.jvm.args} -Djboss.inst=${basedir}/target/jbossas -Dtest.bind.address=${node0}
+ ${jboss.server.config.file.name:standalone.xml}
+ ${jboss.args}
+
+ true
+ ${node0:127.0.0.1}
+ ${as.managementPort:9990}
+
+
+ ${as.debug.port:8787} ${as.managementPort:9990}
+ 8
+
+
+
+