parent
2e0d2ecbfb
commit
075e284455
86 changed files with 3 additions and 2446 deletions
|
@ -31,7 +31,6 @@
|
||||||
<packaging>pom</packaging>
|
<packaging>pom</packaging>
|
||||||
|
|
||||||
<modules>
|
<modules>
|
||||||
<module>wildfly-adapter</module>
|
|
||||||
<module>wildfly-subsystem</module>
|
<module>wildfly-subsystem</module>
|
||||||
</modules>
|
</modules>
|
||||||
</project>
|
</project>
|
|
@ -1,112 +0,0 @@
|
||||||
<?xml version="1.0"?>
|
|
||||||
<!--
|
|
||||||
~ Copyright 2016 Red Hat, Inc. and/or its affiliates
|
|
||||||
~ and other contributors as indicated by the @author tags.
|
|
||||||
~
|
|
||||||
~ 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.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
|
||||||
<parent>
|
|
||||||
<artifactId>keycloak-parent</artifactId>
|
|
||||||
<groupId>org.keycloak</groupId>
|
|
||||||
<version>999-SNAPSHOT</version>
|
|
||||||
<relativePath>../../../../pom.xml</relativePath>
|
|
||||||
</parent>
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
|
||||||
|
|
||||||
<artifactId>keycloak-wildfly-adapter</artifactId>
|
|
||||||
<name>Keycloak Wildfly Integration</name>
|
|
||||||
<description/>
|
|
||||||
|
|
||||||
<dependencies>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.jboss.logging</groupId>
|
|
||||||
<artifactId>jboss-logging</artifactId>
|
|
||||||
<scope>provided</scope>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.keycloak</groupId>
|
|
||||||
<artifactId>keycloak-core</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.keycloak</groupId>
|
|
||||||
<artifactId>keycloak-adapter-spi</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.keycloak</groupId>
|
|
||||||
<artifactId>keycloak-adapter-core</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.keycloak</groupId>
|
|
||||||
<artifactId>keycloak-undertow-adapter-spi</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.keycloak</groupId>
|
|
||||||
<artifactId>keycloak-undertow-adapter</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.keycloak</groupId>
|
|
||||||
<artifactId>keycloak-jboss-adapter-core</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.apache.httpcomponents</groupId>
|
|
||||||
<artifactId>httpclient</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.bouncycastle</groupId>
|
|
||||||
<artifactId>bcprov-jdk15on</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.fasterxml.jackson.core</groupId>
|
|
||||||
<artifactId>jackson-core</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.fasterxml.jackson.core</groupId>
|
|
||||||
<artifactId>jackson-databind</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.fasterxml.jackson.core</groupId>
|
|
||||||
<artifactId>jackson-annotations</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.picketbox</groupId>
|
|
||||||
<artifactId>picketbox</artifactId>
|
|
||||||
<version>${picketbox.version}</version>
|
|
||||||
<scope>provided</scope>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.jboss.spec.javax.servlet</groupId>
|
|
||||||
<artifactId>jboss-servlet-api_3.0_spec</artifactId>
|
|
||||||
<scope>provided</scope>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>io.undertow</groupId>
|
|
||||||
<artifactId>undertow-servlet</artifactId>
|
|
||||||
<scope>provided</scope>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>io.undertow</groupId>
|
|
||||||
<artifactId>undertow-core</artifactId>
|
|
||||||
<scope>provided</scope>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>junit</groupId>
|
|
||||||
<artifactId>junit</artifactId>
|
|
||||||
<scope>test</scope>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
|
||||||
|
|
||||||
</project>
|
|
|
@ -1,133 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2016 Red Hat, Inc. and/or its affiliates
|
|
||||||
* and other contributors as indicated by the @author tags.
|
|
||||||
*
|
|
||||||
* 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.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.spi.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 <a href="mailto:bill@burkecentral.com">Bill Burke</a>
|
|
||||||
* @version $Revision: 1 $
|
|
||||||
*/
|
|
||||||
public class SecurityInfoHelper {
|
|
||||||
public static void propagateSessionInfo(KeycloakAccount account) {
|
|
||||||
Subject subject = new Subject();
|
|
||||||
Set<Principal> 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<Principal> 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<Principal> principals) {
|
|
||||||
Group roles = null;
|
|
||||||
Iterator<Principal> iter = principals.iterator();
|
|
||||||
while (iter.hasNext()) {
|
|
||||||
Object next = iter.next();
|
|
||||||
if (!(next instanceof Group))
|
|
||||||
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<String> roleSet) {
|
|
||||||
SimpleGroup roles = new SimpleGroup("Roles");
|
|
||||||
Group[] roleSets = {roles};
|
|
||||||
for (String role : roleSet) {
|
|
||||||
roles.addMember(new SimplePrincipal(role));
|
|
||||||
}
|
|
||||||
return roleSets;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,52 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2016 Red Hat, Inc. and/or its affiliates
|
|
||||||
* and other contributors as indicated by the @author tags.
|
|
||||||
*
|
|
||||||
* 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.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 <a href="mailto:bill@burkecentral.com">Bill Burke</a>
|
|
||||||
* @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);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,42 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2016 Red Hat, Inc. and/or its affiliates
|
|
||||||
* and other contributors as indicated by the @author tags.
|
|
||||||
*
|
|
||||||
* 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.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 <a href="mailto:bill@burkecentral.com">Bill Burke</a>
|
|
||||||
* @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));
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,198 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2016 Red Hat, Inc. and/or its affiliates
|
|
||||||
* and other contributors as indicated by the @author tags.
|
|
||||||
*
|
|
||||||
* 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.adapters.wildfly;
|
|
||||||
|
|
||||||
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;
|
|
||||||
|
|
||||||
import javax.security.auth.Subject;
|
|
||||||
|
|
||||||
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.jboss.security.SubjectInfo;
|
|
||||||
import org.jboss.security.identity.RoleGroup;
|
|
||||||
import org.jboss.security.identity.plugins.SimpleRole;
|
|
||||||
import org.jboss.security.identity.plugins.SimpleRoleGroup;
|
|
||||||
import org.keycloak.adapters.AdapterTokenStore;
|
|
||||||
import org.keycloak.adapters.KeycloakDeployment;
|
|
||||||
import org.keycloak.adapters.spi.HttpFacade;
|
|
||||||
import org.keycloak.adapters.undertow.KeycloakUndertowAccount;
|
|
||||||
import org.keycloak.adapters.undertow.ServletRequestAuthenticator;
|
|
||||||
|
|
||||||
import io.undertow.security.api.SecurityContext;
|
|
||||||
import io.undertow.server.HttpServerExchange;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
|
|
||||||
* @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<Principal> 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);
|
|
||||||
|
|
||||||
// Roles of subjectInfo are null, because is was constructed by
|
|
||||||
// org.jboss.security.identity.extensions.CredentialIdentityFactory
|
|
||||||
// .createIdentity(Principal [=userPrincipal], Object [=account], Role [=null]).
|
|
||||||
// Therefore the roles are only contained in the authenticatedSubject (member of subjectInfo)
|
|
||||||
// and subsequent logics do only access subjectInfo#roles instead of authenticatedSubject#roles.
|
|
||||||
mapGroupMembersOfAuthenticatedSubjectIntoSecurityContext(sc);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 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<Principal> 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<Principal> principals) {
|
|
||||||
Group roles = null;
|
|
||||||
Iterator<Principal> iter = principals.iterator();
|
|
||||||
while (iter.hasNext()) {
|
|
||||||
Object next = iter.next();
|
|
||||||
if (!(next instanceof Group))
|
|
||||||
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<String> roleSet) {
|
|
||||||
SimpleGroup roles = new SimpleGroup("Roles");
|
|
||||||
Group[] roleSets = {roles};
|
|
||||||
for (String role : roleSet) {
|
|
||||||
roles.addMember(new SimplePrincipal(role));
|
|
||||||
}
|
|
||||||
return roleSets;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void mapGroupMembersOfAuthenticatedSubjectIntoSecurityContext(org.jboss.security.SecurityContext sc) {
|
|
||||||
SubjectInfo subjectInfo = sc.getSubjectInfo();
|
|
||||||
if (subjectInfo == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Subject authenticatedSubject = subjectInfo.getAuthenticatedSubject();
|
|
||||||
if (authenticatedSubject == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get role group of security context in order to add roles of authenticatedSubject.
|
|
||||||
RoleGroup scRoles = sc.getUtil().getRoles();
|
|
||||||
if (scRoles == null) {
|
|
||||||
scRoles = new SimpleRoleGroup("Roles");
|
|
||||||
sc.getUtil().setRoles(scRoles);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get group roles of authenticatedSubject and add each role of the group into security context
|
|
||||||
Iterator<Principal> principalItr = authenticatedSubject.getPrincipals().iterator();
|
|
||||||
while (principalItr.hasNext()) {
|
|
||||||
Principal principal = principalItr.next();
|
|
||||||
if (principal instanceof Group) {
|
|
||||||
Enumeration<? extends Principal> members = ((Group) principal).members();
|
|
||||||
while (members.hasMoreElements()) {
|
|
||||||
Principal role = members.nextElement();
|
|
||||||
scRoles.addRole(new SimpleRole(role.getName()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,18 +0,0 @@
|
||||||
#
|
|
||||||
# Copyright 2016 Red Hat, Inc. and/or its affiliates
|
|
||||||
# and other contributors as indicated by the @author tags.
|
|
||||||
#
|
|
||||||
# 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.
|
|
||||||
#
|
|
||||||
|
|
||||||
org.keycloak.adapters.wildfly.WildflyKeycloakServletExtension
|
|
|
@ -100,11 +100,6 @@
|
||||||
<artifactId>junit</artifactId>
|
<artifactId>junit</artifactId>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
|
||||||
<groupId>org.keycloak</groupId>
|
|
||||||
<artifactId>keycloak-wildfly-adapter</artifactId>
|
|
||||||
<version>${project.version}</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<artifactId>keycloak-wildfly-elytron-oidc-adapter</artifactId>
|
<artifactId>keycloak-wildfly-elytron-oidc-adapter</artifactId>
|
||||||
|
|
|
@ -33,16 +33,13 @@ import org.jboss.modules.ModuleLoader;
|
||||||
public class KeycloakDependencyProcessorWildFly extends KeycloakDependencyProcessor {
|
public class KeycloakDependencyProcessorWildFly extends KeycloakDependencyProcessor {
|
||||||
|
|
||||||
private static final ModuleIdentifier KEYCLOAK_ELYTRON_ADAPTER = ModuleIdentifier.create("org.keycloak.keycloak-wildfly-elytron-oidc-adapter");
|
private static final ModuleIdentifier KEYCLOAK_ELYTRON_ADAPTER = ModuleIdentifier.create("org.keycloak.keycloak-wildfly-elytron-oidc-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
|
@Override
|
||||||
protected void addPlatformSpecificModules(DeploymentPhaseContext phaseContext, ModuleSpecification moduleSpecification, ModuleLoader moduleLoader) {
|
protected void addPlatformSpecificModules(DeploymentPhaseContext phaseContext, ModuleSpecification moduleSpecification, ModuleLoader moduleLoader) {
|
||||||
if (isElytronEnabled(phaseContext)) {
|
if (isElytronEnabled(phaseContext)) {
|
||||||
moduleSpecification.addSystemDependency(new ModuleDependency(moduleLoader, KEYCLOAK_ELYTRON_ADAPTER, true, false, true, false));
|
moduleSpecification.addSystemDependency(new ModuleDependency(moduleLoader, KEYCLOAK_ELYTRON_ADAPTER, true, false, true, false));
|
||||||
} else {
|
} else {
|
||||||
moduleSpecification.addSystemDependency(new ModuleDependency(moduleLoader, KEYCLOAK_WILDFLY_ADAPTER, false, false, true, false));
|
throw new RuntimeException("Legacy WildFly security layer is no longer supported by the Keycloak WildFly adapter");
|
||||||
moduleSpecification.addSystemDependency(new ModuleDependency(moduleLoader, KEYCLOAK_UNDERTOW_ADAPTER, false, false, false, false));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,7 +31,6 @@
|
||||||
<packaging>pom</packaging>
|
<packaging>pom</packaging>
|
||||||
|
|
||||||
<modules>
|
<modules>
|
||||||
<module>wildfly-adapter</module>
|
|
||||||
<module>wildfly-subsystem</module>
|
<module>wildfly-subsystem</module>
|
||||||
</modules>
|
</modules>
|
||||||
</project>
|
</project>
|
||||||
|
|
|
@ -1,105 +0,0 @@
|
||||||
<?xml version="1.0"?>
|
|
||||||
<!--
|
|
||||||
~ Copyright 2016 Red Hat, Inc. and/or its affiliates
|
|
||||||
~ and other contributors as indicated by the @author tags.
|
|
||||||
~
|
|
||||||
~ 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.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
|
||||||
<parent>
|
|
||||||
<artifactId>keycloak-parent</artifactId>
|
|
||||||
<groupId>org.keycloak</groupId>
|
|
||||||
<version>999-SNAPSHOT</version>
|
|
||||||
<relativePath>../../../../pom.xml</relativePath>
|
|
||||||
</parent>
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
|
||||||
|
|
||||||
<artifactId>keycloak-saml-wildfly-adapter</artifactId>
|
|
||||||
<name>Keycloak Wildfly SAML Adapter</name>
|
|
||||||
<description/>
|
|
||||||
|
|
||||||
<dependencies>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.jboss.logging</groupId>
|
|
||||||
<artifactId>jboss-logging</artifactId>
|
|
||||||
<scope>provided</scope>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.keycloak</groupId>
|
|
||||||
<artifactId>keycloak-common</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.keycloak</groupId>
|
|
||||||
<artifactId>keycloak-adapter-spi</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.keycloak</groupId>
|
|
||||||
<artifactId>keycloak-saml-adapter-api-public</artifactId>
|
|
||||||
<scope>provided</scope>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.keycloak</groupId>
|
|
||||||
<artifactId>keycloak-saml-adapter-core</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.keycloak</groupId>
|
|
||||||
<artifactId>keycloak-undertow-adapter-spi</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.keycloak</groupId>
|
|
||||||
<artifactId>keycloak-saml-undertow-adapter</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.keycloak</groupId>
|
|
||||||
<artifactId>keycloak-jboss-adapter-core</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.infinispan</groupId>
|
|
||||||
<artifactId>infinispan-core</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.infinispan</groupId>
|
|
||||||
<artifactId>infinispan-cachestore-remote</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.picketbox</groupId>
|
|
||||||
<artifactId>picketbox</artifactId>
|
|
||||||
<version>${picketbox.version}</version>
|
|
||||||
<scope>provided</scope>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.jboss.spec.javax.servlet</groupId>
|
|
||||||
<artifactId>jboss-servlet-api_3.0_spec</artifactId>
|
|
||||||
<scope>provided</scope>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>io.undertow</groupId>
|
|
||||||
<artifactId>undertow-servlet</artifactId>
|
|
||||||
<scope>provided</scope>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>io.undertow</groupId>
|
|
||||||
<artifactId>undertow-core</artifactId>
|
|
||||||
<scope>provided</scope>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>junit</groupId>
|
|
||||||
<artifactId>junit</artifactId>
|
|
||||||
<scope>test</scope>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
|
||||||
|
|
||||||
</project>
|
|
|
@ -1,133 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2016 Red Hat, Inc. and/or its affiliates
|
|
||||||
* and other contributors as indicated by the @author tags.
|
|
||||||
*
|
|
||||||
* 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.adapters.saml.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.spi.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 <a href="mailto:bill@burkecentral.com">Bill Burke</a>
|
|
||||||
* @version $Revision: 1 $
|
|
||||||
*/
|
|
||||||
public class SecurityInfoHelper {
|
|
||||||
public static void propagateSessionInfo(KeycloakAccount account) {
|
|
||||||
Subject subject = new Subject();
|
|
||||||
Set<Principal> 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<Principal> 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<Principal> principals) {
|
|
||||||
Group roles = null;
|
|
||||||
Iterator<Principal> iter = principals.iterator();
|
|
||||||
while (iter.hasNext()) {
|
|
||||||
Object next = iter.next();
|
|
||||||
if (!(next instanceof Group))
|
|
||||||
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<String> roleSet) {
|
|
||||||
SimpleGroup roles = new SimpleGroup("Roles");
|
|
||||||
Group[] roleSets = {roles};
|
|
||||||
for (String role : roleSet) {
|
|
||||||
roles.addMember(new SimplePrincipal(role));
|
|
||||||
}
|
|
||||||
return roleSets;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,42 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2016 Red Hat, Inc. and/or its affiliates
|
|
||||||
* and other contributors as indicated by the @author tags.
|
|
||||||
*
|
|
||||||
* 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.adapters.saml.wildfly;
|
|
||||||
|
|
||||||
import io.undertow.security.api.SecurityContext;
|
|
||||||
import io.undertow.server.HttpServerExchange;
|
|
||||||
import org.keycloak.adapters.saml.SamlDeployment;
|
|
||||||
import org.keycloak.adapters.saml.SamlDeploymentContext;
|
|
||||||
import org.keycloak.adapters.saml.SamlSessionStore;
|
|
||||||
import org.keycloak.adapters.saml.undertow.ServletSamlAuthMech;
|
|
||||||
import org.keycloak.adapters.spi.HttpFacade;
|
|
||||||
import org.keycloak.adapters.undertow.UndertowUserSessionManagement;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
|
|
||||||
* @version $Revision: 1 $
|
|
||||||
*/
|
|
||||||
public class WildflySamlAuthMech extends ServletSamlAuthMech {
|
|
||||||
public WildflySamlAuthMech(SamlDeploymentContext deploymentContext, UndertowUserSessionManagement sessionManagement, String errorPage) {
|
|
||||||
super(deploymentContext, sessionManagement, errorPage);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected SamlSessionStore getTokenStore(HttpServerExchange exchange, HttpFacade facade, SamlDeployment deployment, SecurityContext securityContext) {
|
|
||||||
return new WildflySamlSessionStore(exchange, sessionManagement, securityContext, idMapper, getIdMapperUpdater(), deployment);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,35 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2016 Red Hat, Inc. and/or its affiliates
|
|
||||||
* and other contributors as indicated by the @author tags.
|
|
||||||
*
|
|
||||||
* 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.adapters.saml.wildfly;
|
|
||||||
|
|
||||||
import io.undertow.servlet.api.DeploymentInfo;
|
|
||||||
import org.keycloak.adapters.saml.SamlDeploymentContext;
|
|
||||||
import org.keycloak.adapters.saml.undertow.SamlServletExtension;
|
|
||||||
import org.keycloak.adapters.saml.undertow.ServletSamlAuthMech;
|
|
||||||
import org.keycloak.adapters.undertow.UndertowUserSessionManagement;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
|
|
||||||
* @version $Revision: 1 $
|
|
||||||
*/
|
|
||||||
public class WildflySamlExtension extends SamlServletExtension {
|
|
||||||
@Override
|
|
||||||
protected ServletSamlAuthMech createAuthMech(DeploymentInfo deploymentInfo, SamlDeploymentContext deploymentContext, UndertowUserSessionManagement userSessionManagement) {
|
|
||||||
return new WildflySamlAuthMech(deploymentContext, userSessionManagement, getErrorPage(deploymentInfo));
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,57 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2016 Red Hat, Inc. and/or its affiliates
|
|
||||||
* and other contributors as indicated by the @author tags.
|
|
||||||
*
|
|
||||||
* 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.adapters.saml.wildfly;
|
|
||||||
|
|
||||||
import io.undertow.security.api.SecurityContext;
|
|
||||||
import io.undertow.server.HttpServerExchange;
|
|
||||||
import org.keycloak.adapters.saml.SamlDeployment;
|
|
||||||
import org.keycloak.adapters.saml.SamlSession;
|
|
||||||
import org.keycloak.adapters.saml.undertow.ServletSamlSessionStore;
|
|
||||||
import org.keycloak.adapters.spi.SessionIdMapper;
|
|
||||||
import org.keycloak.adapters.spi.SessionIdMapperUpdater;
|
|
||||||
import org.keycloak.adapters.undertow.UndertowUserSessionManagement;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
|
|
||||||
* @version $Revision: 1 $
|
|
||||||
*/
|
|
||||||
public class WildflySamlSessionStore extends ServletSamlSessionStore {
|
|
||||||
public WildflySamlSessionStore(HttpServerExchange exchange, UndertowUserSessionManagement sessionManagement,
|
|
||||||
SecurityContext securityContext,
|
|
||||||
SessionIdMapper idMapper, SessionIdMapperUpdater idMapperUpdater,
|
|
||||||
SamlDeployment resolvedDeployment) {
|
|
||||||
super(exchange, sessionManagement, securityContext, idMapper, idMapperUpdater, resolvedDeployment);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isLoggedIn() {
|
|
||||||
if (super.isLoggedIn()) {
|
|
||||||
SecurityInfoHelper.propagateSessionInfo(getAccount());
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void saveAccount(SamlSession account) {
|
|
||||||
super.saveAccount(account);
|
|
||||||
SecurityInfoHelper.propagateSessionInfo(account);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,122 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2017 Red Hat, Inc. and/or its affiliates
|
|
||||||
* and other contributors as indicated by the @author tags.
|
|
||||||
*
|
|
||||||
* 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.adapters.saml.wildfly.infinispan;
|
|
||||||
|
|
||||||
import org.keycloak.adapters.saml.AdapterConstants;
|
|
||||||
import org.keycloak.adapters.spi.SessionIdMapper;
|
|
||||||
import org.keycloak.adapters.spi.SessionIdMapperUpdater;
|
|
||||||
|
|
||||||
import io.undertow.servlet.api.DeploymentInfo;
|
|
||||||
import java.util.*;
|
|
||||||
import javax.naming.InitialContext;
|
|
||||||
import javax.naming.NamingException;
|
|
||||||
import org.infinispan.Cache;
|
|
||||||
import org.infinispan.configuration.cache.CacheMode;
|
|
||||||
import org.infinispan.configuration.cache.Configuration;
|
|
||||||
import org.infinispan.manager.EmbeddedCacheManager;
|
|
||||||
import org.infinispan.persistence.manager.PersistenceManager;
|
|
||||||
import org.infinispan.persistence.remote.RemoteStore;
|
|
||||||
import org.jboss.logging.Logger;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @author hmlnarik
|
|
||||||
*/
|
|
||||||
public class InfinispanSessionCacheIdMapperUpdater {
|
|
||||||
|
|
||||||
private static final Logger LOG = Logger.getLogger(InfinispanSessionCacheIdMapperUpdater.class);
|
|
||||||
|
|
||||||
public static final String DEFAULT_CACHE_CONTAINER_JNDI_NAME = "java:jboss/infinispan/container";
|
|
||||||
|
|
||||||
public static SessionIdMapperUpdater addTokenStoreUpdaters(DeploymentInfo deploymentInfo, SessionIdMapper mapper, SessionIdMapperUpdater previousIdMapperUpdater) {
|
|
||||||
Map<String, String> initParameters = deploymentInfo.getInitParameters();
|
|
||||||
String containerName = initParameters == null ? null : initParameters.get(AdapterConstants.REPLICATION_CONFIG_CONTAINER_PARAM_NAME);
|
|
||||||
String cacheName = initParameters == null ? null : initParameters.get(AdapterConstants.REPLICATION_CONFIG_SSO_CACHE_PARAM_NAME);
|
|
||||||
|
|
||||||
if (containerName == null || cacheName == null) {
|
|
||||||
LOG.warnv("Cannot determine parameters of SSO cache for deployment {0}.", deploymentInfo.getDeploymentName());
|
|
||||||
|
|
||||||
return previousIdMapperUpdater;
|
|
||||||
}
|
|
||||||
|
|
||||||
String cacheContainerLookup = DEFAULT_CACHE_CONTAINER_JNDI_NAME + "/" + containerName;
|
|
||||||
String deploymentSessionCacheName = deploymentInfo.getDeploymentName();
|
|
||||||
|
|
||||||
try {
|
|
||||||
EmbeddedCacheManager cacheManager = (EmbeddedCacheManager) new InitialContext().lookup(cacheContainerLookup);
|
|
||||||
|
|
||||||
Configuration ssoCacheConfiguration = cacheManager.getCacheConfiguration(cacheName);
|
|
||||||
if (ssoCacheConfiguration == null) {
|
|
||||||
Configuration cacheConfiguration = cacheManager.getCacheConfiguration(deploymentSessionCacheName);
|
|
||||||
if (cacheConfiguration == null) {
|
|
||||||
LOG.debugv("Using default configuration for SSO cache {0}.{1}.", containerName, cacheName);
|
|
||||||
ssoCacheConfiguration = cacheManager.getDefaultCacheConfiguration();
|
|
||||||
} else {
|
|
||||||
LOG.debugv("Using distributed HTTP session cache configuration for SSO cache {0}.{1}, configuration taken from cache {2}",
|
|
||||||
containerName, cacheName, deploymentSessionCacheName);
|
|
||||||
ssoCacheConfiguration = cacheConfiguration;
|
|
||||||
cacheManager.defineConfiguration(cacheName, ssoCacheConfiguration);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
LOG.debugv("Using custom configuration of SSO cache {0}.{1}.", containerName, cacheName);
|
|
||||||
}
|
|
||||||
|
|
||||||
CacheMode ssoCacheMode = ssoCacheConfiguration.clustering().cacheMode();
|
|
||||||
if (ssoCacheMode != CacheMode.REPL_ASYNC && ssoCacheMode != CacheMode.REPL_SYNC) {
|
|
||||||
LOG.warnv("SSO cache mode is {0}, it is recommended to use replicated mode instead.", ssoCacheConfiguration.clustering().cacheModeString());
|
|
||||||
}
|
|
||||||
|
|
||||||
Cache<String, String[]> ssoCache = cacheManager.getCache(cacheName, true);
|
|
||||||
final SsoSessionCacheListener listener = new SsoSessionCacheListener(ssoCache, mapper);
|
|
||||||
ssoCache.addListener(listener);
|
|
||||||
|
|
||||||
addSsoCacheCrossDcListener(ssoCache, listener);
|
|
||||||
|
|
||||||
LOG.debugv("Added distributed SSO session cache, lookup={0}, cache name={1}", cacheContainerLookup, cacheName);
|
|
||||||
|
|
||||||
LOG.debugv("Adding session listener for SSO session cache, lookup={0}, cache name={1}", cacheContainerLookup, cacheName);
|
|
||||||
SsoCacheSessionIdMapperUpdater updater = new SsoCacheSessionIdMapperUpdater(ssoCache, previousIdMapperUpdater);
|
|
||||||
deploymentInfo.addSessionListener(updater);
|
|
||||||
|
|
||||||
return updater;
|
|
||||||
} catch (NamingException ex) {
|
|
||||||
LOG.warnv("Failed to obtain distributed session cache container, lookup={0}", cacheContainerLookup);
|
|
||||||
return previousIdMapperUpdater;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void addSsoCacheCrossDcListener(Cache<String, String[]> ssoCache, SsoSessionCacheListener listener) {
|
|
||||||
if (ssoCache.getCacheConfiguration().persistence() == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
final Set<RemoteStore> stores = getRemoteStores(ssoCache);
|
|
||||||
if (stores == null || stores.isEmpty()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
LOG.infov("Listening for events on remote stores configured for cache {0}", ssoCache.getName());
|
|
||||||
|
|
||||||
for (RemoteStore store : stores) {
|
|
||||||
store.getRemoteCache().addClientListener(listener);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Set<RemoteStore> getRemoteStores(Cache ispnCache) {
|
|
||||||
return ispnCache.getAdvancedCache().getComponentRegistry().getComponent(PersistenceManager.class).getStores(RemoteStore.class);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,115 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2017 Red Hat, Inc. and/or its affiliates
|
|
||||||
* and other contributors as indicated by the @author tags.
|
|
||||||
*
|
|
||||||
* 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.adapters.saml.wildfly.infinispan;
|
|
||||||
|
|
||||||
import org.keycloak.adapters.saml.SamlSession;
|
|
||||||
import org.keycloak.adapters.spi.SessionIdMapper;
|
|
||||||
import org.keycloak.adapters.spi.SessionIdMapperUpdater;
|
|
||||||
|
|
||||||
import io.undertow.server.HttpServerExchange;
|
|
||||||
import io.undertow.server.session.Session;
|
|
||||||
import io.undertow.server.session.SessionListener;
|
|
||||||
import org.infinispan.Cache;
|
|
||||||
import org.jboss.logging.Logger;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @author hmlnarik
|
|
||||||
*/
|
|
||||||
public class SsoCacheSessionIdMapperUpdater implements SessionIdMapperUpdater, SessionListener {
|
|
||||||
|
|
||||||
private static final Logger LOG = Logger.getLogger(SsoCacheSessionIdMapperUpdater.class.getName());
|
|
||||||
|
|
||||||
private final SessionIdMapperUpdater delegate;
|
|
||||||
/**
|
|
||||||
* Cache where key is a HTTP session ID, and value is a pair (user session ID, principal name) of Strings.
|
|
||||||
*/
|
|
||||||
private final Cache<String, String[]> httpSessionToSsoCache;
|
|
||||||
|
|
||||||
public SsoCacheSessionIdMapperUpdater(Cache<String, String[]> httpSessionToSsoCache, SessionIdMapperUpdater previousIdMapperUpdater) {
|
|
||||||
this.delegate = previousIdMapperUpdater;
|
|
||||||
this.httpSessionToSsoCache = httpSessionToSsoCache;
|
|
||||||
}
|
|
||||||
|
|
||||||
// SessionIdMapperUpdater methods
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void clear(SessionIdMapper idMapper) {
|
|
||||||
httpSessionToSsoCache.clear();
|
|
||||||
this.delegate.clear(idMapper);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void map(SessionIdMapper idMapper, String sso, String principal, String httpSessionId) {
|
|
||||||
LOG.debugf("Adding mapping (%s, %s, %s)", sso, principal, httpSessionId);
|
|
||||||
|
|
||||||
httpSessionToSsoCache.put(httpSessionId, new String[] {sso, principal});
|
|
||||||
this.delegate.map(idMapper, sso, principal, httpSessionId);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean refreshMapping(SessionIdMapper idMapper, String httpSessionId) {
|
|
||||||
LOG.debugf("Refreshing session %s", httpSessionId);
|
|
||||||
|
|
||||||
String[] ssoAndPrincipal = httpSessionToSsoCache.get(httpSessionId);
|
|
||||||
if (ssoAndPrincipal != null) {
|
|
||||||
this.delegate.map(idMapper, ssoAndPrincipal[0], ssoAndPrincipal[1], httpSessionId);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void removeSession(SessionIdMapper idMapper, String httpSessionId) {
|
|
||||||
LOG.debugf("Removing session %s", httpSessionId);
|
|
||||||
|
|
||||||
httpSessionToSsoCache.remove(httpSessionId);
|
|
||||||
this.delegate.removeSession(idMapper, httpSessionId);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Undertow HTTP session listener methods
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sessionCreated(Session session, HttpServerExchange exchange) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sessionDestroyed(Session session, HttpServerExchange exchange, SessionDestroyedReason reason) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void attributeAdded(Session session, String name, Object value) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void attributeUpdated(Session session, String name, Object newValue, Object oldValue) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void attributeRemoved(Session session, String name, Object oldValue) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sessionIdChanged(Session session, String oldSessionId) {
|
|
||||||
this.httpSessionToSsoCache.remove(oldSessionId);
|
|
||||||
Object value = session.getAttribute(SamlSession.class.getName());
|
|
||||||
if (value instanceof SamlSession) {
|
|
||||||
SamlSession sess = (SamlSession) value;
|
|
||||||
httpSessionToSsoCache.put(session.getId(), new String[] {sess.getSessionIndex(), sess.getPrincipal().getSamlSubject()});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,203 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2017 Red Hat, Inc. and/or its affiliates
|
|
||||||
* and other contributors as indicated by the @author tags.
|
|
||||||
*
|
|
||||||
* 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.adapters.saml.wildfly.infinispan;
|
|
||||||
|
|
||||||
import org.keycloak.adapters.spi.SessionIdMapper;
|
|
||||||
|
|
||||||
import java.util.*;
|
|
||||||
import java.util.concurrent.*;
|
|
||||||
import org.infinispan.Cache;
|
|
||||||
import org.infinispan.client.hotrod.annotation.ClientCacheEntryCreated;
|
|
||||||
import org.infinispan.client.hotrod.annotation.ClientCacheEntryRemoved;
|
|
||||||
import org.infinispan.client.hotrod.annotation.ClientListener;
|
|
||||||
import org.infinispan.client.hotrod.event.ClientCacheEntryCreatedEvent;
|
|
||||||
import org.infinispan.client.hotrod.event.ClientCacheEntryRemovedEvent;
|
|
||||||
import org.infinispan.context.Flag;
|
|
||||||
import org.infinispan.notifications.Listener;
|
|
||||||
import org.infinispan.notifications.cachelistener.annotation.*;
|
|
||||||
import org.infinispan.notifications.cachelistener.event.*;
|
|
||||||
import org.infinispan.notifications.cachemanagerlistener.annotation.CacheStarted;
|
|
||||||
import org.infinispan.notifications.cachemanagerlistener.annotation.CacheStopped;
|
|
||||||
import org.infinispan.notifications.cachemanagerlistener.event.CacheStartedEvent;
|
|
||||||
import org.infinispan.notifications.cachemanagerlistener.event.CacheStoppedEvent;
|
|
||||||
import org.jboss.logging.Logger;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @author hmlnarik
|
|
||||||
*/
|
|
||||||
@Listener
|
|
||||||
@ClientListener
|
|
||||||
public class SsoSessionCacheListener {
|
|
||||||
|
|
||||||
private static final Logger LOG = Logger.getLogger(SsoSessionCacheListener.class);
|
|
||||||
|
|
||||||
private final ConcurrentMap<String, Queue<Event>> map = new ConcurrentHashMap<>();
|
|
||||||
|
|
||||||
private final SessionIdMapper idMapper;
|
|
||||||
|
|
||||||
private final Cache<String, String[]> ssoCache;
|
|
||||||
|
|
||||||
private ExecutorService executor = Executors.newSingleThreadExecutor();
|
|
||||||
|
|
||||||
public SsoSessionCacheListener(Cache<String, String[]> ssoCache, SessionIdMapper idMapper) {
|
|
||||||
this.ssoCache = ssoCache;
|
|
||||||
this.idMapper = idMapper;
|
|
||||||
}
|
|
||||||
|
|
||||||
@TransactionRegistered
|
|
||||||
public void startTransaction(TransactionRegisteredEvent event) {
|
|
||||||
if (event.getGlobalTransaction() == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
map.put(event.getGlobalTransaction().globalId(), new ConcurrentLinkedQueue<Event>());
|
|
||||||
}
|
|
||||||
|
|
||||||
@CacheStarted
|
|
||||||
public void cacheStarted(CacheStartedEvent event) {
|
|
||||||
this.executor = Executors.newSingleThreadExecutor();
|
|
||||||
}
|
|
||||||
|
|
||||||
@CacheStopped
|
|
||||||
public void cacheStopped(CacheStoppedEvent event) {
|
|
||||||
this.executor.shutdownNow();
|
|
||||||
}
|
|
||||||
|
|
||||||
@CacheEntryCreated
|
|
||||||
@CacheEntryRemoved
|
|
||||||
public void addEvent(TransactionalEvent event) {
|
|
||||||
if (event.isOriginLocal()) {
|
|
||||||
// Local events are processed by local HTTP session listener
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (event.isPre()) { // only handle post events
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (event.getGlobalTransaction() != null) {
|
|
||||||
map.get(event.getGlobalTransaction().globalId()).add(event);
|
|
||||||
} else {
|
|
||||||
processEvent(event);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@TransactionCompleted
|
|
||||||
public void endTransaction(TransactionCompletedEvent event) {
|
|
||||||
if (event.getGlobalTransaction() == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Queue<Event> events = map.remove(event.getGlobalTransaction().globalId());
|
|
||||||
|
|
||||||
if (events == null || ! event.isTransactionSuccessful()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (final Event e : events) {
|
|
||||||
processEvent(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void processEvent(final Event e) {
|
|
||||||
switch (e.getType()) {
|
|
||||||
case CACHE_ENTRY_CREATED:
|
|
||||||
this.executor.submit(new Runnable() {
|
|
||||||
@Override public void run() {
|
|
||||||
cacheEntryCreated((CacheEntryCreatedEvent) e);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
break;
|
|
||||||
|
|
||||||
case CACHE_ENTRY_REMOVED:
|
|
||||||
this.executor.submit(new Runnable() {
|
|
||||||
@Override public void run() {
|
|
||||||
cacheEntryRemoved((CacheEntryRemovedEvent) e);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void cacheEntryCreated(CacheEntryCreatedEvent event) {
|
|
||||||
if (! (event.getKey() instanceof String) || ! (event.getValue() instanceof String[])) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
String httpSessionId = (String) event.getKey();
|
|
||||||
String[] value = (String[]) event.getValue();
|
|
||||||
String ssoId = value[0];
|
|
||||||
String principal = value[1];
|
|
||||||
|
|
||||||
LOG.tracev("cacheEntryCreated {0}:{1}", httpSessionId, ssoId);
|
|
||||||
|
|
||||||
this.idMapper.map(ssoId, principal, httpSessionId);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void cacheEntryRemoved(CacheEntryRemovedEvent event) {
|
|
||||||
if (! (event.getKey() instanceof String)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
LOG.tracev("cacheEntryRemoved {0}", event.getKey());
|
|
||||||
|
|
||||||
this.idMapper.removeSession((String) event.getKey());
|
|
||||||
}
|
|
||||||
|
|
||||||
@ClientCacheEntryCreated
|
|
||||||
public void remoteCacheEntryCreated(ClientCacheEntryCreatedEvent event) {
|
|
||||||
if (! (event.getKey() instanceof String)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
String httpSessionId = (String) event.getKey();
|
|
||||||
|
|
||||||
if (idMapper.hasSession(httpSessionId)) {
|
|
||||||
// Ignore local events generated by remote store
|
|
||||||
LOG.tracev("IGNORING remoteCacheEntryCreated {0}", httpSessionId);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.executor.submit(new Runnable() {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
String[] value = ssoCache.get((String) httpSessionId);
|
|
||||||
|
|
||||||
if (value != null) {
|
|
||||||
String ssoId = value[0];
|
|
||||||
String principal = value[1];
|
|
||||||
|
|
||||||
LOG.tracev("remoteCacheEntryCreated {0}:{1}", httpSessionId, ssoId);
|
|
||||||
|
|
||||||
idMapper.map(ssoId, principal, httpSessionId);
|
|
||||||
} else {
|
|
||||||
LOG.tracev("remoteCacheEntryCreated {0}", event.getKey());
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
@ClientCacheEntryRemoved
|
|
||||||
public void remoteCacheEntryRemoved(ClientCacheEntryRemovedEvent event) {
|
|
||||||
LOG.tracev("remoteCacheEntryRemoved {0}", event.getKey());
|
|
||||||
|
|
||||||
this.idMapper.removeSession((String) event.getKey());
|
|
||||||
ssoCache.getAdvancedCache().withFlags(Flag.SKIP_CACHE_STORE).remove((String) event.getKey());
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,18 +0,0 @@
|
||||||
#
|
|
||||||
# Copyright 2016 Red Hat, Inc. and/or its affiliates
|
|
||||||
# and other contributors as indicated by the @author tags.
|
|
||||||
#
|
|
||||||
# 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.
|
|
||||||
#
|
|
||||||
|
|
||||||
org.keycloak.adapters.saml.wildfly.WildflySamlExtension
|
|
|
@ -98,7 +98,7 @@
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<artifactId>keycloak-saml-wildfly-adapter</artifactId>
|
<artifactId>keycloak-saml-adapter-core</artifactId>
|
||||||
<version>${project.version}</version>
|
<version>${project.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
|
|
|
@ -33,16 +33,13 @@ import org.jboss.modules.ModuleLoader;
|
||||||
public class KeycloakDependencyProcessorWildFly extends KeycloakDependencyProcessor {
|
public class KeycloakDependencyProcessorWildFly extends KeycloakDependencyProcessor {
|
||||||
|
|
||||||
private static final ModuleIdentifier KEYCLOAK_ELYTRON_ADAPTER = ModuleIdentifier.create("org.keycloak.keycloak-saml-wildfly-elytron-adapter");
|
private static final ModuleIdentifier KEYCLOAK_ELYTRON_ADAPTER = ModuleIdentifier.create("org.keycloak.keycloak-saml-wildfly-elytron-adapter");
|
||||||
private static final ModuleIdentifier KEYCLOAK_WILDFLY_ADAPTER = ModuleIdentifier.create("org.keycloak.keycloak-saml-wildfly-adapter");
|
|
||||||
private static final ModuleIdentifier KEYCLOAK_UNDERTOW_ADAPTER = ModuleIdentifier.create("org.keycloak.keycloak-saml-undertow-adapter");
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void addPlatformSpecificModules(DeploymentPhaseContext phaseContext, ModuleSpecification moduleSpecification, ModuleLoader moduleLoader) {
|
protected void addPlatformSpecificModules(DeploymentPhaseContext phaseContext, ModuleSpecification moduleSpecification, ModuleLoader moduleLoader) {
|
||||||
if (isElytronEnabled(phaseContext)) {
|
if (isElytronEnabled(phaseContext)) {
|
||||||
moduleSpecification.addSystemDependency(new ModuleDependency(moduleLoader, KEYCLOAK_ELYTRON_ADAPTER, true, false, false, false));
|
moduleSpecification.addSystemDependency(new ModuleDependency(moduleLoader, KEYCLOAK_ELYTRON_ADAPTER, true, false, false, false));
|
||||||
} else {
|
} else {
|
||||||
moduleSpecification.addSystemDependency(new ModuleDependency(moduleLoader, KEYCLOAK_WILDFLY_ADAPTER, false, false, true, false));
|
throw new RuntimeException("Legacy WildFly security layer is no longer supported by the Keycloak WildFly adapter");
|
||||||
moduleSpecification.addSystemDependency(new ModuleDependency(moduleLoader, KEYCLOAK_UNDERTOW_ADAPTER, false, false, false, false));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -88,16 +88,6 @@
|
||||||
</exclusion>
|
</exclusion>
|
||||||
</exclusions>
|
</exclusions>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
|
||||||
<groupId>org.keycloak</groupId>
|
|
||||||
<artifactId>keycloak-wildfly-adapter</artifactId>
|
|
||||||
<exclusions>
|
|
||||||
<exclusion>
|
|
||||||
<groupId>*</groupId>
|
|
||||||
<artifactId>*</artifactId>
|
|
||||||
</exclusion>
|
|
||||||
</exclusions>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<artifactId>keycloak-wildfly-elytron-oidc-adapter</artifactId>
|
<artifactId>keycloak-wildfly-elytron-oidc-adapter</artifactId>
|
||||||
|
|
|
@ -1,49 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<!--
|
|
||||||
~ Copyright 2016 Red Hat, Inc. and/or its affiliates
|
|
||||||
~ and other contributors as indicated by the @author tags.
|
|
||||||
~
|
|
||||||
~ 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.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<module xmlns="urn:jboss:module:1.3" name="org.keycloak.keycloak-wildfly-adapter">
|
|
||||||
<properties>
|
|
||||||
<property name="jboss.api" value="private"/>
|
|
||||||
</properties>
|
|
||||||
<resources>
|
|
||||||
<artifact name="${org.keycloak:keycloak-wildfly-adapter}"/>
|
|
||||||
</resources>
|
|
||||||
<dependencies>
|
|
||||||
<module name="javax.api"/>
|
|
||||||
<module name="org.bouncycastle" />
|
|
||||||
<module name="com.fasterxml.jackson.core.jackson-annotations"/>
|
|
||||||
<module name="com.fasterxml.jackson.core.jackson-core"/>
|
|
||||||
<module name="com.fasterxml.jackson.core.jackson-databind"/>
|
|
||||||
<module name="com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider"/>
|
|
||||||
<module name="org.apache.httpcomponents"/>
|
|
||||||
<module name="javax.servlet.api"/>
|
|
||||||
<module name="org.jboss.logging"/>
|
|
||||||
<module name="io.undertow.core"/>
|
|
||||||
<module name="io.undertow.servlet"/>
|
|
||||||
<module name="org.picketbox"/>
|
|
||||||
<module name="org.keycloak.keycloak-undertow-adapter"/>
|
|
||||||
<module name="org.keycloak.keycloak-adapter-spi"/>
|
|
||||||
<module name="org.keycloak.keycloak-adapter-core"/>
|
|
||||||
<module name="org.keycloak.keycloak-common"/>
|
|
||||||
<module name="org.keycloak.keycloak-core"/>
|
|
||||||
</dependencies>
|
|
||||||
|
|
||||||
</module>
|
|
|
@ -44,7 +44,6 @@
|
||||||
<module name="org.jboss.as.version" optional="true"/>
|
<module name="org.jboss.as.version" optional="true"/>
|
||||||
<module name="org.keycloak.keycloak-services"/>
|
<module name="org.keycloak.keycloak-services"/>
|
||||||
<module name="org.keycloak.keycloak-server-spi-private"/>
|
<module name="org.keycloak.keycloak-server-spi-private"/>
|
||||||
<module name="org.keycloak.keycloak-wildfly-adapter" optional="true"/>
|
|
||||||
<module name="org.keycloak.keycloak-core"/>
|
<module name="org.keycloak.keycloak-core"/>
|
||||||
<module name="org.keycloak.keycloak-common"/>
|
<module name="org.keycloak.keycloak-common"/>
|
||||||
<module name="org.keycloak.keycloak-server-spi"/>
|
<module name="org.keycloak.keycloak-server-spi"/>
|
||||||
|
|
|
@ -1,308 +0,0 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
|
||||||
<!--
|
|
||||||
~ Copyright 2016 Red Hat, Inc. and/or its affiliates
|
|
||||||
~ and other contributors as indicated by the @author tags.
|
|
||||||
~
|
|
||||||
~ 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.
|
|
||||||
-->
|
|
||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
|
||||||
<parent>
|
|
||||||
<groupId>org.keycloak</groupId>
|
|
||||||
<artifactId>galleon-feature-packs-parent</artifactId>
|
|
||||||
<version>999-SNAPSHOT</version>
|
|
||||||
</parent>
|
|
||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
|
||||||
|
|
||||||
<groupId>org.keycloak</groupId>
|
|
||||||
<artifactId>keycloak-adapter-galleon-pack</artifactId>
|
|
||||||
|
|
||||||
<name>Keycloak Galleon Feature Pack: Adapter</name>
|
|
||||||
<packaging>pom</packaging>
|
|
||||||
|
|
||||||
<properties>
|
|
||||||
<wildfly.version>23.0.2.Final</wildfly.version>
|
|
||||||
<wildfly.build-tools.version>1.2.13.Final</wildfly.build-tools.version>
|
|
||||||
<wildfly.core.version>15.0.1.Final</wildfly.core.version>
|
|
||||||
<org.wildfly.galleon-plugins.version>5.1.3.Final</org.wildfly.galleon-plugins.version>
|
|
||||||
|
|
||||||
<feature-pack.resources.directory>${basedir}/../../feature-packs/adapter-feature-pack/src/main/resources</feature-pack.resources.directory>
|
|
||||||
<version.org.wildfly.galleon-plugins>5.1.3.Final</version.org.wildfly.galleon-plugins>
|
|
||||||
<xmlFileSource>${feature-pack.resources.directory}/licenses/${product.slot}/licenses.xml</xmlFileSource>
|
|
||||||
<outputDirectory>${basedir}/target/resources/packages/licenses/content/docs/licenses-${product.slot}</outputDirectory>
|
|
||||||
</properties>
|
|
||||||
<dependencies>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.keycloak</groupId>
|
|
||||||
<artifactId>keycloak-core</artifactId>
|
|
||||||
<exclusions>
|
|
||||||
<exclusion>
|
|
||||||
<groupId>*</groupId>
|
|
||||||
<artifactId>*</artifactId>
|
|
||||||
</exclusion>
|
|
||||||
</exclusions>
|
|
||||||
<scope>provided</scope>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.keycloak</groupId>
|
|
||||||
<artifactId>keycloak-common</artifactId>
|
|
||||||
<exclusions>
|
|
||||||
<exclusion>
|
|
||||||
<groupId>*</groupId>
|
|
||||||
<artifactId>*</artifactId>
|
|
||||||
</exclusion>
|
|
||||||
</exclusions>
|
|
||||||
<scope>provided</scope>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.keycloak</groupId>
|
|
||||||
<artifactId>keycloak-adapter-core</artifactId>
|
|
||||||
<exclusions>
|
|
||||||
<exclusion>
|
|
||||||
<groupId>*</groupId>
|
|
||||||
<artifactId>*</artifactId>
|
|
||||||
</exclusion>
|
|
||||||
</exclusions>
|
|
||||||
<scope>provided</scope>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.keycloak</groupId>
|
|
||||||
<artifactId>keycloak-jboss-adapter-core</artifactId>
|
|
||||||
<exclusions>
|
|
||||||
<exclusion>
|
|
||||||
<groupId>*</groupId>
|
|
||||||
<artifactId>*</artifactId>
|
|
||||||
</exclusion>
|
|
||||||
</exclusions>
|
|
||||||
<scope>provided</scope>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.keycloak</groupId>
|
|
||||||
<artifactId>keycloak-wildfly-subsystem</artifactId>
|
|
||||||
<exclusions>
|
|
||||||
<exclusion>
|
|
||||||
<groupId>*</groupId>
|
|
||||||
<artifactId>*</artifactId>
|
|
||||||
</exclusion>
|
|
||||||
</exclusions>
|
|
||||||
<scope>provided</scope>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.keycloak</groupId>
|
|
||||||
<artifactId>keycloak-wildfly-adapter</artifactId>
|
|
||||||
<exclusions>
|
|
||||||
<exclusion>
|
|
||||||
<groupId>*</groupId>
|
|
||||||
<artifactId>*</artifactId>
|
|
||||||
</exclusion>
|
|
||||||
</exclusions>
|
|
||||||
<scope>provided</scope>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.keycloak</groupId>
|
|
||||||
<artifactId>keycloak-wildfly-elytron-oidc-adapter</artifactId>
|
|
||||||
<exclusions>
|
|
||||||
<exclusion>
|
|
||||||
<groupId>*</groupId>
|
|
||||||
<artifactId>*</artifactId>
|
|
||||||
</exclusion>
|
|
||||||
</exclusions>
|
|
||||||
<scope>provided</scope>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.keycloak</groupId>
|
|
||||||
<artifactId>keycloak-adapter-spi</artifactId>
|
|
||||||
<exclusions>
|
|
||||||
<exclusion>
|
|
||||||
<groupId>*</groupId>
|
|
||||||
<artifactId>*</artifactId>
|
|
||||||
</exclusion>
|
|
||||||
</exclusions>
|
|
||||||
<scope>provided</scope>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.keycloak</groupId>
|
|
||||||
<artifactId>keycloak-undertow-adapter-spi</artifactId>
|
|
||||||
<exclusions>
|
|
||||||
<exclusion>
|
|
||||||
<groupId>*</groupId>
|
|
||||||
<artifactId>*</artifactId>
|
|
||||||
</exclusion>
|
|
||||||
</exclusions>
|
|
||||||
<scope>provided</scope>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.keycloak</groupId>
|
|
||||||
<artifactId>keycloak-undertow-adapter</artifactId>
|
|
||||||
<exclusions>
|
|
||||||
<exclusion>
|
|
||||||
<groupId>*</groupId>
|
|
||||||
<artifactId>*</artifactId>
|
|
||||||
</exclusion>
|
|
||||||
</exclusions>
|
|
||||||
<scope>provided</scope>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<!-- Authorization -->
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.keycloak</groupId>
|
|
||||||
<artifactId>keycloak-authz-client</artifactId>
|
|
||||||
<exclusions>
|
|
||||||
<exclusion>
|
|
||||||
<groupId>*</groupId>
|
|
||||||
<artifactId>*</artifactId>
|
|
||||||
</exclusion>
|
|
||||||
</exclusions>
|
|
||||||
<scope>provided</scope>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<build>
|
|
||||||
<plugins>
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
|
||||||
<artifactId>maven-resources-plugin</artifactId>
|
|
||||||
<executions>
|
|
||||||
<execution>
|
|
||||||
<id>copy-resources</id>
|
|
||||||
<phase>process-resources</phase>
|
|
||||||
<goals>
|
|
||||||
<goal>copy-resources</goal>
|
|
||||||
</goals>
|
|
||||||
<configuration>
|
|
||||||
<outputDirectory>${basedir}/target/resources</outputDirectory>
|
|
||||||
<resources>
|
|
||||||
<resource>
|
|
||||||
<directory>${basedir}/src/main/resources</directory>
|
|
||||||
</resource>
|
|
||||||
</resources>
|
|
||||||
</configuration>
|
|
||||||
</execution>
|
|
||||||
<execution>
|
|
||||||
<id>copy-feature-pack-resources</id>
|
|
||||||
<phase>process-resources</phase>
|
|
||||||
<goals>
|
|
||||||
<goal>copy-resources</goal>
|
|
||||||
</goals>
|
|
||||||
<configuration>
|
|
||||||
<outputDirectory>${basedir}/target/resources</outputDirectory>
|
|
||||||
<resources>
|
|
||||||
<resource>
|
|
||||||
<directory>${feature-pack.resources.directory}</directory>
|
|
||||||
<includes>
|
|
||||||
<include>content/**</include>
|
|
||||||
<include>modules/**</include>
|
|
||||||
</includes>
|
|
||||||
</resource>
|
|
||||||
</resources>
|
|
||||||
</configuration>
|
|
||||||
</execution>
|
|
||||||
</executions>
|
|
||||||
</plugin>
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.wildfly.galleon-plugins</groupId>
|
|
||||||
<artifactId>wildfly-galleon-maven-plugin</artifactId>
|
|
||||||
<version>${version.org.wildfly.galleon-plugins}</version>
|
|
||||||
<dependencies>
|
|
||||||
<!--
|
|
||||||
feature-spec-gen uses wildfly-embedded to generate the feature specs, hence the designated
|
|
||||||
wildfly-embedded version must match the pack one
|
|
||||||
-->
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.wildfly.core</groupId>
|
|
||||||
<artifactId>wildfly-embedded</artifactId>
|
|
||||||
<version>${wildfly.core.version}</version>
|
|
||||||
</dependency>
|
|
||||||
<!-- If you add a dependency on wildfly-embedded you need to bring your own transitives -->
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.wildfly.common</groupId>
|
|
||||||
<artifactId>wildfly-common</artifactId>
|
|
||||||
<version>${wildfly.common.version}</version>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
|
||||||
<executions>
|
|
||||||
<execution>
|
|
||||||
<id>keycloak-adapter-galleon-pack-build</id>
|
|
||||||
<goals>
|
|
||||||
<goal>build-feature-pack</goal>
|
|
||||||
</goals>
|
|
||||||
<phase>compile</phase>
|
|
||||||
<configuration>
|
|
||||||
<fork-embedded>false</fork-embedded>
|
|
||||||
</configuration>
|
|
||||||
</execution>
|
|
||||||
</executions>
|
|
||||||
</plugin>
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.keycloak</groupId>
|
|
||||||
<artifactId>keycloak-distribution-licenses-maven-plugin</artifactId>
|
|
||||||
</plugin>
|
|
||||||
</plugins>
|
|
||||||
</build>
|
|
||||||
|
|
||||||
<profiles>
|
|
||||||
<profile>
|
|
||||||
<id>community</id>
|
|
||||||
<activation>
|
|
||||||
<property>
|
|
||||||
<name>!product</name>
|
|
||||||
</property>
|
|
||||||
</activation>
|
|
||||||
<properties>
|
|
||||||
<galleon-adapter-group-id>org.keycloak</galleon-adapter-group-id>
|
|
||||||
</properties>
|
|
||||||
<dependencies>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.wildfly</groupId>
|
|
||||||
<artifactId>wildfly-galleon-pack</artifactId>
|
|
||||||
<version>${wildfly.version}</version>
|
|
||||||
<type>zip</type>
|
|
||||||
<scope>provided</scope>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
|
||||||
</profile>
|
|
||||||
<profile>
|
|
||||||
<id>product</id>
|
|
||||||
<activation>
|
|
||||||
<property>
|
|
||||||
<name>product</name>
|
|
||||||
</property>
|
|
||||||
</activation>
|
|
||||||
<properties>
|
|
||||||
<galleon-adapter-group-id>org.jboss.sso</galleon-adapter-group-id>
|
|
||||||
</properties>
|
|
||||||
<dependencies>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.jboss.eap</groupId>
|
|
||||||
<artifactId>wildfly-ee-galleon-pack</artifactId>
|
|
||||||
<version>${eap.version}</version>
|
|
||||||
<type>zip</type>
|
|
||||||
<scope>provided</scope>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
|
||||||
<build>
|
|
||||||
<plugins>
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.wildfly.galleon-plugins</groupId>
|
|
||||||
<artifactId>wildfly-galleon-maven-plugin</artifactId>
|
|
||||||
<configuration>
|
|
||||||
<config-file>wildfly-feature-pack-build-eap.xml</config-file>
|
|
||||||
</configuration>
|
|
||||||
</plugin>
|
|
||||||
</plugins>
|
|
||||||
</build>
|
|
||||||
</profile>
|
|
||||||
</profiles>
|
|
||||||
</project>
|
|
|
@ -1,46 +0,0 @@
|
||||||
<?xml version="1.0" ?>
|
|
||||||
<layer-spec xmlns="urn:jboss:galleon:layer-spec:1.0" name="keycloak-client-oidc">
|
|
||||||
<dependencies>
|
|
||||||
<layer name="ee"/>
|
|
||||||
<layer name="elytron"/>
|
|
||||||
<layer name="undertow"/>
|
|
||||||
</dependencies>
|
|
||||||
<feature spec="subsystem.keycloak"/>
|
|
||||||
<feature spec="subsystem.elytron.custom-realm">
|
|
||||||
<param name="custom-realm" value="KeycloakOIDCRealm"/>
|
|
||||||
<param name="class-name" value="org.keycloak.adapters.elytron.KeycloakSecurityRealm"/>
|
|
||||||
<param name="module" value="org.keycloak.keycloak-wildfly-elytron-oidc-adapter"/>
|
|
||||||
</feature>
|
|
||||||
<feature spec="subsystem.elytron.security-domain">
|
|
||||||
<param name="security-domain" value="KeycloakDomain"/>
|
|
||||||
<param name="default-realm" value="KeycloakOIDCRealm"/>
|
|
||||||
<param name="permission-mapper" value="default-permission-mapper"/>
|
|
||||||
<param name="security-event-listener" value="local-audit"/>
|
|
||||||
<param name="realms" value="[{realm=KeycloakOIDCRealm}]"/>
|
|
||||||
</feature>
|
|
||||||
<feature spec="subsystem.elytron.constant-realm-mapper">
|
|
||||||
<param name="constant-realm-mapper" value="keycloak-oidc-realm-mapper"/>
|
|
||||||
<param name="realm-name" value="KeycloakOIDCRealm"/>
|
|
||||||
</feature>
|
|
||||||
<feature spec="subsystem.elytron.service-loader-http-server-mechanism-factory">
|
|
||||||
<param name="service-loader-http-server-mechanism-factory" value="keycloak-oidc-http-server-mechanism-factory"/>
|
|
||||||
<param name="module" value="org.keycloak.keycloak-wildfly-elytron-oidc-adapter"/>
|
|
||||||
</feature>
|
|
||||||
<feature spec="subsystem.elytron.aggregate-http-server-mechanism-factory">
|
|
||||||
<param name="aggregate-http-server-mechanism-factory" value="keycloak-http-server-mechanism-factory"/>
|
|
||||||
<param name="http-server-mechanism-factories" value="[keycloak-oidc-http-server-mechanism-factory, global]"/>
|
|
||||||
</feature>
|
|
||||||
<feature spec="subsystem.elytron.http-authentication-factory">
|
|
||||||
<param name="http-authentication-factory" value="keycloak-http-authentication"/>
|
|
||||||
<param name="http-server-mechanism-factory" value="keycloak-http-server-mechanism-factory"/>
|
|
||||||
<param name="security-domain" value="KeycloakDomain"/>
|
|
||||||
<param name="mechanism-configurations" value="[{mechanism-name=KEYCLOAK,mechanism-realm-configurations=[{realm-name=KeycloakOIDCRealm,realm-mapper=keycloak-oidc-realm-mapper}]}]"/>
|
|
||||||
</feature>
|
|
||||||
<feature spec="subsystem.undertow">
|
|
||||||
<feature spec="subsystem.undertow.application-security-domain">
|
|
||||||
<param name="application-security-domain" value="other" />
|
|
||||||
<unset param="security-domain"/>
|
|
||||||
<param name="http-authentication-factory" value="keycloak-http-authentication"/>
|
|
||||||
</feature>
|
|
||||||
</feature>
|
|
||||||
</layer-spec>
|
|
|
@ -1,4 +0,0 @@
|
||||||
<?xml version="1.0" ?>
|
|
||||||
|
|
||||||
<package-spec xmlns="urn:jboss:galleon:package:2.0" name="licenses">
|
|
||||||
</package-spec>
|
|
|
@ -1,47 +0,0 @@
|
||||||
<!--
|
|
||||||
~ Copyright 2020 Red Hat, Inc.
|
|
||||||
~
|
|
||||||
~ 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.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<build xmlns="urn:wildfly:feature-pack-build:3.1" producer="org.keycloak:keycloak-adapter-galleon-pack">
|
|
||||||
<transitive>
|
|
||||||
<dependency group-id="org.jboss.eap" artifact-id="wildfly-ee-galleon-pack">
|
|
||||||
<name>org.jboss.eap:wildfly-ee-galleon-pack</name>
|
|
||||||
<packages inherit="false">
|
|
||||||
<exclude name="product.conf"/>
|
|
||||||
</packages>
|
|
||||||
<default-configs inherit="false"/>
|
|
||||||
</dependency>
|
|
||||||
</transitive>
|
|
||||||
<dependencies>
|
|
||||||
<dependency group-id="org.jboss.eap" artifact-id="wildfly-ee-galleon-pack">
|
|
||||||
<name>org.jboss.eap:wildfly-ee-galleon-pack</name>
|
|
||||||
<packages inherit="false">
|
|
||||||
<exclude name="product.conf"/>
|
|
||||||
</packages>
|
|
||||||
<default-configs inherit="false"/>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
|
||||||
<default-packages>
|
|
||||||
<package name="modules.all"/>
|
|
||||||
<package name="licenses"/>
|
|
||||||
</default-packages>
|
|
||||||
<generate-feature-specs>
|
|
||||||
<extensions>
|
|
||||||
<standalone>
|
|
||||||
<extension>org.keycloak.keycloak-adapter-subsystem</extension>
|
|
||||||
</standalone>
|
|
||||||
</extensions>
|
|
||||||
</generate-feature-specs>
|
|
||||||
</build>
|
|
|
@ -1,47 +0,0 @@
|
||||||
<!--
|
|
||||||
~ Copyright 2020 Red Hat, Inc.
|
|
||||||
~
|
|
||||||
~ 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.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<build xmlns="urn:wildfly:feature-pack-build:3.1" producer="org.keycloak:keycloak-adapter-galleon-pack">
|
|
||||||
<transitive>
|
|
||||||
<dependency group-id="org.wildfly" artifact-id="wildfly-ee-galleon-pack">
|
|
||||||
<name>org.wildfly:wildfly-ee-galleon-pack</name>
|
|
||||||
<packages inherit="false">
|
|
||||||
<exclude name="product.conf"/>
|
|
||||||
</packages>
|
|
||||||
<default-configs inherit="false"/>
|
|
||||||
</dependency>
|
|
||||||
</transitive>
|
|
||||||
<dependencies>
|
|
||||||
<dependency group-id="org.wildfly" artifact-id="wildfly-galleon-pack">
|
|
||||||
<name>org.wildfly:wildfly-galleon-pack</name>
|
|
||||||
<packages inherit="false">
|
|
||||||
<exclude name="product.conf"/>
|
|
||||||
</packages>
|
|
||||||
<default-configs inherit="false"/>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
|
||||||
<default-packages>
|
|
||||||
<package name="modules.all"/>
|
|
||||||
<package name="licenses"/>
|
|
||||||
</default-packages>
|
|
||||||
<generate-feature-specs>
|
|
||||||
<extensions>
|
|
||||||
<standalone>
|
|
||||||
<extension>org.keycloak.keycloak-adapter-subsystem</extension>
|
|
||||||
</standalone>
|
|
||||||
</extensions>
|
|
||||||
</generate-feature-specs>
|
|
||||||
</build>
|
|
|
@ -31,7 +31,6 @@
|
||||||
<packaging>pom</packaging>
|
<packaging>pom</packaging>
|
||||||
|
|
||||||
<modules>
|
<modules>
|
||||||
<module>adapter-galleon-pack</module>
|
|
||||||
<module>server-galleon-pack</module>
|
<module>server-galleon-pack</module>
|
||||||
</modules>
|
</modules>
|
||||||
|
|
||||||
|
|
|
@ -44,7 +44,6 @@
|
||||||
<module name="org.jboss.as.version" optional="true"/>
|
<module name="org.jboss.as.version" optional="true"/>
|
||||||
<module name="org.keycloak.keycloak-services"/>
|
<module name="org.keycloak.keycloak-services"/>
|
||||||
<module name="org.keycloak.keycloak-server-spi-private"/>
|
<module name="org.keycloak.keycloak-server-spi-private"/>
|
||||||
<module name="org.keycloak.keycloak-wildfly-adapter" optional="true"/>
|
|
||||||
<module name="org.keycloak.keycloak-core"/>
|
<module name="org.keycloak.keycloak-core"/>
|
||||||
<module name="org.keycloak.keycloak-common"/>
|
<module name="org.keycloak.keycloak-common"/>
|
||||||
<module name="org.keycloak.keycloak-server-spi"/>
|
<module name="org.keycloak.keycloak-server-spi"/>
|
||||||
|
|
|
@ -68,10 +68,6 @@
|
||||||
<maven-resource group="org.keycloak" artifact="keycloak-saml-undertow-adapter"/>
|
<maven-resource group="org.keycloak" artifact="keycloak-saml-undertow-adapter"/>
|
||||||
</module-def>
|
</module-def>
|
||||||
|
|
||||||
<module-def name="org.keycloak.keycloak-saml-wildfly-adapter">
|
|
||||||
<maven-resource group="org.keycloak" artifact="keycloak-saml-wildfly-adapter"/>
|
|
||||||
</module-def>
|
|
||||||
|
|
||||||
<module-def name="org.keycloak.keycloak-saml-wildfly-subsystem">
|
<module-def name="org.keycloak.keycloak-saml-wildfly-subsystem">
|
||||||
<maven-resource group="org.keycloak" artifact="keycloak-saml-wildfly-subsystem"/>
|
<maven-resource group="org.keycloak" artifact="keycloak-saml-wildfly-subsystem"/>
|
||||||
</module-def>
|
</module-def>
|
||||||
|
|
|
@ -124,16 +124,6 @@
|
||||||
</exclusion>
|
</exclusion>
|
||||||
</exclusions>
|
</exclusions>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
|
||||||
<groupId>org.keycloak</groupId>
|
|
||||||
<artifactId>keycloak-saml-wildfly-adapter</artifactId>
|
|
||||||
<exclusions>
|
|
||||||
<exclusion>
|
|
||||||
<groupId>*</groupId>
|
|
||||||
<artifactId>*</artifactId>
|
|
||||||
</exclusion>
|
|
||||||
</exclusions>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<artifactId>keycloak-saml-wildfly-elytron-adapter</artifactId>
|
<artifactId>keycloak-saml-wildfly-elytron-adapter</artifactId>
|
||||||
|
|
|
@ -1,51 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<!--
|
|
||||||
~ Copyright 2016 Red Hat, Inc. and/or its affiliates
|
|
||||||
~ and other contributors as indicated by the @author tags.
|
|
||||||
~
|
|
||||||
~ 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.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<module xmlns="urn:jboss:module:1.1" name="org.keycloak.keycloak-saml-wildfly-adapter">
|
|
||||||
<properties>
|
|
||||||
<property name="jboss.api" value="private"/>
|
|
||||||
</properties>
|
|
||||||
<resources>
|
|
||||||
<!-- Insert resources here -->
|
|
||||||
</resources>
|
|
||||||
<dependencies>
|
|
||||||
<module name="javax.api"/>
|
|
||||||
<module name="org.bouncycastle" />
|
|
||||||
<module name="javax.servlet.api"/>
|
|
||||||
<module name="org.jboss.logging"/>
|
|
||||||
<module name="io.undertow.core"/>
|
|
||||||
<module name="io.undertow.servlet"/>
|
|
||||||
<module name="org.picketbox"/>
|
|
||||||
<module name="org.keycloak.keycloak-saml-undertow-adapter"/>
|
|
||||||
<module name="org.keycloak.keycloak-adapter-spi"/>
|
|
||||||
<module name="org.keycloak.keycloak-saml-core-public"/>
|
|
||||||
<module name="org.keycloak.keycloak-saml-core"/>
|
|
||||||
<module name="org.keycloak.keycloak-saml-adapter-api-public"/>
|
|
||||||
<module name="org.keycloak.keycloak-saml-adapter-core"/>
|
|
||||||
<module name="org.keycloak.keycloak-common"/>
|
|
||||||
<module name="org.apache.httpcomponents"/>
|
|
||||||
<module name="org.infinispan"/>
|
|
||||||
<module name="org.infinispan.commons"/>
|
|
||||||
<module name="org.infinispan.cachestore.remote"/>
|
|
||||||
<module name="org.infinispan.client.hotrod"/>
|
|
||||||
</dependencies>
|
|
||||||
|
|
||||||
</module>
|
|
10
pom.xml
10
pom.xml
|
@ -1216,11 +1216,6 @@
|
||||||
<artifactId>keycloak-undertow-adapter</artifactId>
|
<artifactId>keycloak-undertow-adapter</artifactId>
|
||||||
<version>${project.version}</version>
|
<version>${project.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
|
||||||
<groupId>org.keycloak</groupId>
|
|
||||||
<artifactId>keycloak-wildfly-adapter</artifactId>
|
|
||||||
<version>${project.version}</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<artifactId>keycloak-wildfly-elytron-oidc-adapter</artifactId>
|
<artifactId>keycloak-wildfly-elytron-oidc-adapter</artifactId>
|
||||||
|
@ -1316,11 +1311,6 @@
|
||||||
<artifactId>keycloak-saml-jetty-adapter-core</artifactId>
|
<artifactId>keycloak-saml-jetty-adapter-core</artifactId>
|
||||||
<version>${project.version}</version>
|
<version>${project.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
|
||||||
<groupId>org.keycloak</groupId>
|
|
||||||
<artifactId>keycloak-saml-wildfly-adapter</artifactId>
|
|
||||||
<version>${project.version}</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.keycloak</groupId>
|
<groupId>org.keycloak</groupId>
|
||||||
<artifactId>keycloak-saml-wildfly-subsystem</artifactId>
|
<artifactId>keycloak-saml-wildfly-subsystem</artifactId>
|
||||||
|
|
|
@ -257,27 +257,6 @@ mvn -f testsuite/integration-arquillian/pom.xml \
|
||||||
-Dtest=org.keycloak.testsuite.adapter.**
|
-Dtest=org.keycloak.testsuite.adapter.**
|
||||||
````
|
````
|
||||||
|
|
||||||
### Wildfly with legacy non-elytron adapter
|
|
||||||
|
|
||||||
mvn -f testsuite/integration-arquillian/pom.xml \
|
|
||||||
clean install \
|
|
||||||
-Dskip.elytron.adapter.installation=true \
|
|
||||||
-Dskip.adapter.offline.installation=false \
|
|
||||||
-Papp-server-wildfly \
|
|
||||||
-Dtest=org.keycloak.testsuite.adapter.**
|
|
||||||
|
|
||||||
|
|
||||||
### Wildfly deprecated
|
|
||||||
|
|
||||||
This is usually previous version of WildFly application server right before current version.
|
|
||||||
See the property `wildfly.deprecated.version` in the file [pom.xml](pom.xml) ) .
|
|
||||||
|
|
||||||
mvn -f testsuite/integration-arquillian/pom.xml \
|
|
||||||
clean install \
|
|
||||||
-Pauth-server-wildfly \
|
|
||||||
-Papp-server-wildfly-deprecated \
|
|
||||||
-Dtest=org.keycloak.testsuite.adapter.**
|
|
||||||
|
|
||||||
## Migration test
|
## Migration test
|
||||||
|
|
||||||
### DB migration test
|
### DB migration test
|
||||||
|
|
|
@ -40,11 +40,6 @@
|
||||||
<app.server>undertow</app.server>
|
<app.server>undertow</app.server>
|
||||||
<cache.server.java.home>${java.home}</cache.server.java.home>
|
<cache.server.java.home>${java.home}</cache.server.java.home>
|
||||||
|
|
||||||
<!-- Wildfly deprecated versions -->
|
|
||||||
<wildfly.deprecated.version>21.0.2.Final</wildfly.deprecated.version>
|
|
||||||
<wildfly.deprecated.wildfly.core.version>13.0.3.Final</wildfly.deprecated.wildfly.core.version>
|
|
||||||
<wildfly.deprecated.arquillian.wildfly.container>2.2.0.Final</wildfly.deprecated.arquillian.wildfly.container>
|
|
||||||
|
|
||||||
<!--component versions-->
|
<!--component versions-->
|
||||||
<arquillian-core.version>1.6.0.Final</arquillian-core.version>
|
<arquillian-core.version>1.6.0.Final</arquillian-core.version>
|
||||||
<!--the version of shrinkwrap_resolver should align with the version in arquillian-bom-->
|
<!--the version of shrinkwrap_resolver should align with the version in arquillian-bom-->
|
||||||
|
|
|
@ -759,18 +759,6 @@
|
||||||
<module>wildfly</module>
|
<module>wildfly</module>
|
||||||
</modules>
|
</modules>
|
||||||
</profile>
|
</profile>
|
||||||
<profile>
|
|
||||||
<id>app-server-wildfly-deprecated</id>
|
|
||||||
<activation>
|
|
||||||
<property>
|
|
||||||
<name>app.server</name>
|
|
||||||
<value>wildfly-deprecated</value>
|
|
||||||
</property>
|
|
||||||
</activation>
|
|
||||||
<modules>
|
|
||||||
<module>wildfly-deprecated</module>
|
|
||||||
</modules>
|
|
||||||
</profile>
|
|
||||||
<profile>
|
<profile>
|
||||||
<id>app-server-relative</id>
|
<id>app-server-relative</id>
|
||||||
<activation>
|
<activation>
|
||||||
|
|
|
@ -1,62 +0,0 @@
|
||||||
<?xml version="1.0"?>
|
|
||||||
<!--
|
|
||||||
~ Copyright 2016 Red Hat, Inc. and/or its affiliates
|
|
||||||
~ and other contributors as indicated by the @author tags.
|
|
||||||
~
|
|
||||||
~ 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.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
|
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
|
||||||
<parent>
|
|
||||||
<groupId>org.keycloak.testsuite</groupId>
|
|
||||||
<artifactId>integration-arquillian-servers-app-server-jboss</artifactId>
|
|
||||||
<version>999-SNAPSHOT</version>
|
|
||||||
</parent>
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
|
||||||
|
|
||||||
<artifactId>integration-arquillian-servers-app-server-wildfly-deprecated</artifactId>
|
|
||||||
<packaging>jar</packaging>
|
|
||||||
<name>App Server - Wildfly Deprecated</name>
|
|
||||||
|
|
||||||
<properties>
|
|
||||||
<app.server.jboss>wildfly-deprecated</app.server.jboss>
|
|
||||||
|
|
||||||
<app.server.jboss.groupId>org.wildfly</app.server.jboss.groupId>
|
|
||||||
<app.server.jboss.artifactId>wildfly-dist</app.server.jboss.artifactId>
|
|
||||||
<app.server.jboss.version>${wildfly.deprecated.version}</app.server.jboss.version>
|
|
||||||
<app.server.jboss.unpacked.folder.name>wildfly-${wildfly.deprecated.version}</app.server.jboss.unpacked.folder.name>
|
|
||||||
|
|
||||||
<app.server.oidc.adapter.artifactId>keycloak-wildfly-adapter-dist</app.server.oidc.adapter.artifactId>
|
|
||||||
<app.server.saml.adapter.artifactId>keycloak-saml-wildfly-adapter-dist</app.server.saml.adapter.artifactId>
|
|
||||||
|
|
||||||
<skip.elytron.adapter.installation>false</skip.elytron.adapter.installation>
|
|
||||||
</properties>
|
|
||||||
|
|
||||||
<dependencies>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.keycloak.testsuite</groupId>
|
|
||||||
<artifactId>integration-arquillian-servers-app-server-spi</artifactId>
|
|
||||||
<version>${project.version}</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.wildfly.arquillian</groupId>
|
|
||||||
<artifactId>wildfly-arquillian-container-managed</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.keycloak.testsuite</groupId>
|
|
||||||
<artifactId>integration-arquillian-util</artifactId>
|
|
||||||
<version>${project.version}</version>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
|
||||||
</project>
|
|
|
@ -1,34 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2018 Red Hat, Inc. and/or its affiliates
|
|
||||||
* and other contributors as indicated by the @author tags.
|
|
||||||
*
|
|
||||||
* 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.testsuite.arquillian.wildfly;
|
|
||||||
|
|
||||||
import org.jboss.arquillian.container.test.spi.client.deployment.ApplicationArchiveProcessor;
|
|
||||||
import org.jboss.arquillian.core.spi.LoadableExtension;
|
|
||||||
import org.keycloak.testsuite.arquillian.wildfly.container.WildflyDeprecatedDeploymentArchiveProcessor;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @author <a href="mailto:vramik@redhat.com">Vlasta Ramik</a>
|
|
||||||
*/
|
|
||||||
public class WildflyDeprecatedAppServerArquillianExtension implements LoadableExtension {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void register(ExtensionBuilder builder) {
|
|
||||||
builder.service(ApplicationArchiveProcessor.class, WildflyDeprecatedDeploymentArchiveProcessor.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,165 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2018 Red Hat, Inc. and/or its affiliates
|
|
||||||
* and other contributors as indicated by the @author tags.
|
|
||||||
*
|
|
||||||
* 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.testsuite.arquillian.wildfly.container;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import org.jboss.arquillian.core.spi.Validate;
|
|
||||||
import org.jboss.as.arquillian.container.managed.ManagedDeployableContainer;
|
|
||||||
import org.jboss.shrinkwrap.descriptor.spi.node.Node;
|
|
||||||
import org.keycloak.testsuite.arquillian.container.AppServerContainerProvider;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author <a href="mailto:vramik@redhat.com">Vlasta Ramik</a>
|
|
||||||
*/
|
|
||||||
public class WildflyDeprecatedAppServerProvider implements AppServerContainerProvider {
|
|
||||||
|
|
||||||
private Node configuration;
|
|
||||||
private static final String containerName = "wildfly-deprecated";
|
|
||||||
|
|
||||||
private final String appServerHome;
|
|
||||||
private final String appServerJavaHome;
|
|
||||||
private final String appServerPortOffset;
|
|
||||||
private final String managementProtocol;
|
|
||||||
private final String managementPort;
|
|
||||||
private final String startupTimeoutInSeconds;
|
|
||||||
|
|
||||||
public WildflyDeprecatedAppServerProvider() {
|
|
||||||
appServerHome = System.getProperty("app.server.home");
|
|
||||||
appServerJavaHome = System.getProperty("app.server.java.home");
|
|
||||||
appServerPortOffset = System.getProperty("app.server.port.offset");
|
|
||||||
managementProtocol = System.getProperty("app.server.management.protocol");
|
|
||||||
managementPort = System.getProperty("app.server.management.port");
|
|
||||||
startupTimeoutInSeconds = System.getProperty("app.server.startup.timeout");
|
|
||||||
|
|
||||||
Validate.notNullOrEmpty(appServerHome, "app.server.home is not set.");
|
|
||||||
Validate.notNullOrEmpty(appServerJavaHome, "app.server.java.home is not set.");
|
|
||||||
Validate.notNullOrEmpty(appServerPortOffset, "app.server.port.offset is not set.");
|
|
||||||
Validate.notNullOrEmpty(managementProtocol, "app.server.management.protocol is not set.");
|
|
||||||
Validate.notNullOrEmpty(managementPort, "app.server.management.port is not set.");
|
|
||||||
Validate.notNullOrEmpty(startupTimeoutInSeconds, "app.server.startup.timeout is not set.");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getName() {
|
|
||||||
return containerName;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<Node> getContainers() {
|
|
||||||
List<Node> containers = new ArrayList<>();
|
|
||||||
|
|
||||||
containers.add(standaloneContainer());
|
|
||||||
containers.add(clusterGroup());
|
|
||||||
|
|
||||||
return containers;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void createChild(String name, String text) {
|
|
||||||
configuration.createChild("property").attribute("name", name).text(text);
|
|
||||||
}
|
|
||||||
|
|
||||||
private Node standaloneContainer() {
|
|
||||||
Node container = new Node("container");
|
|
||||||
container.attribute("mode", "manual");
|
|
||||||
container.attribute("qualifier", AppServerContainerProvider.APP_SERVER + "-" + containerName);
|
|
||||||
|
|
||||||
configuration = container.createChild("configuration");
|
|
||||||
createChild("enabled", "true");
|
|
||||||
createChild("adapterImplClass", ManagedDeployableContainer.class.getName());
|
|
||||||
createChild("jbossHome", appServerHome);
|
|
||||||
createChild("javaHome", appServerJavaHome);
|
|
||||||
createChild("jbossArguments",
|
|
||||||
"-Djboss.server.base.dir=" + appServerHome + "/standalone-test " +
|
|
||||||
"-Djboss.server.config.dir=" + appServerHome + "/standalone-test/configuration " +
|
|
||||||
"-Djboss.server.log.dir=" + appServerHome + "/standalone-test/log " +
|
|
||||||
"-Djboss.socket.binding.port-offset=" + appServerPortOffset + " " +
|
|
||||||
System.getProperty("adapter.test.props", " ") +
|
|
||||||
System.getProperty("kie.maven.settings", " ")
|
|
||||||
);
|
|
||||||
createChild("javaVmArguments",
|
|
||||||
System.getProperty("app.server.jboss.jvm.debug.args", "") + " " +
|
|
||||||
System.getProperty("app.server.memory.settings", "") + " " +
|
|
||||||
"-Djava.net.preferIPv4Stack=true"
|
|
||||||
);
|
|
||||||
createChild("managementProtocol", managementProtocol);
|
|
||||||
createChild("managementPort", managementPort);
|
|
||||||
createChild("startupTimeoutInSeconds", startupTimeoutInSeconds);
|
|
||||||
|
|
||||||
return container;
|
|
||||||
}
|
|
||||||
|
|
||||||
private Node clusterGroup() {
|
|
||||||
Node group = new Node("group");
|
|
||||||
group.attribute("qualifier", "app-server-wildfly-deprecated-clustered");
|
|
||||||
addHaNodeContainer(group, 1);
|
|
||||||
addHaNodeContainer(group, 2);
|
|
||||||
return group;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void addHaNodeContainer(Node group, int number) {
|
|
||||||
String portOffset = System.getProperty("app.server." + number + ".port.offset");
|
|
||||||
String managementPort = System.getProperty("app.server." + number + ".management.port");
|
|
||||||
|
|
||||||
Validate.notNullOrEmpty(portOffset, "app.server." + number + ".port.offset is not set.");
|
|
||||||
Validate.notNullOrEmpty(managementPort, "app.server." + number + ".management.port is not set.");
|
|
||||||
|
|
||||||
Node container = group.createChild("container");
|
|
||||||
container.attribute("mode", "manual");
|
|
||||||
container.attribute("qualifier", AppServerContainerProvider.APP_SERVER + "-" + containerName + "-ha-node-" + number);
|
|
||||||
|
|
||||||
configuration = container.createChild("configuration");
|
|
||||||
createChild("enabled", "true");
|
|
||||||
createChild("adapterImplClass", ManagedDeployableContainer.class.getName());
|
|
||||||
createChild("jbossHome", appServerHome);
|
|
||||||
createChild("javaHome", appServerJavaHome);
|
|
||||||
//cleanServerBaseDir cannot be used until WFARQ-44 is fixed
|
|
||||||
// createChild("cleanServerBaseDir", appServerHome + "/standalone-ha-node-" + number);
|
|
||||||
createChild("serverConfig", "standalone-ha.xml");
|
|
||||||
createChild("jbossArguments",
|
|
||||||
"-Djboss.server.base.dir=" + appServerHome + "/standalone-ha-node-" + number + " " +
|
|
||||||
"-Djboss.socket.binding.port-offset=" + portOffset + " " +
|
|
||||||
"-Djboss.node.name=ha-node-" + number + " " +
|
|
||||||
getCrossDCProperties(number, portOffset) +
|
|
||||||
System.getProperty("adapter.test.props", " ") +
|
|
||||||
System.getProperty("kie.maven.settings", " ")
|
|
||||||
);
|
|
||||||
createChild("javaVmArguments",
|
|
||||||
System.getProperty("app.server." + number + ".jboss.jvm.debug.args") + " " +
|
|
||||||
System.getProperty("app.server.memory.settings", "") + " " +
|
|
||||||
"-Djava.net.preferIPv4Stack=true"
|
|
||||||
);
|
|
||||||
createChild("managementProtocol", managementProtocol);
|
|
||||||
createChild("managementPort", managementPort);
|
|
||||||
createChild("startupTimeoutInSeconds", startupTimeoutInSeconds);
|
|
||||||
}
|
|
||||||
|
|
||||||
private String getCrossDCProperties(int number, String portOffset) {
|
|
||||||
if (System.getProperty("cache.server") == null || System.getProperty("cache.server").equals("undefined")) {
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
String cacheHotrodPortString = System.getProperty("cache.server." + number + ".port.offset");
|
|
||||||
Validate.notNullOrEmpty(cacheHotrodPortString, "cache.server." + number + ".port.offset is not set.");
|
|
||||||
|
|
||||||
int tcppingPort = 7600 + Integer.parseInt(portOffset);
|
|
||||||
int cacheHotrodPort = 11222 + Integer.parseInt(cacheHotrodPortString);
|
|
||||||
|
|
||||||
//properties used in servers/app-server/jboss/common/cli/configure-crossdc-config.cli
|
|
||||||
return "-Dtcpping.port=" + tcppingPort + " -Dcache.hotrod.port=" + cacheHotrodPort + " ";
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,73 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2018 Red Hat, Inc. and/or its affiliates
|
|
||||||
* and other contributors as indicated by the @author tags.
|
|
||||||
*
|
|
||||||
* 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.testsuite.arquillian.wildfly.container;
|
|
||||||
|
|
||||||
import org.jboss.arquillian.container.test.spi.client.deployment.ApplicationArchiveProcessor;
|
|
||||||
import org.jboss.arquillian.test.spi.TestClass;
|
|
||||||
import org.jboss.logging.Logger;
|
|
||||||
import org.jboss.shrinkwrap.api.Archive;
|
|
||||||
import org.keycloak.testsuite.utils.annotation.UseServletFilter;
|
|
||||||
import org.keycloak.testsuite.utils.arquillian.DeploymentArchiveProcessorUtils;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @author <a href="mailto:vramik@redhat.com">Vlasta Ramik</a>
|
|
||||||
*/
|
|
||||||
public class WildflyDeprecatedDeploymentArchiveProcessor implements ApplicationArchiveProcessor {
|
|
||||||
|
|
||||||
private final Logger log = Logger.getLogger(WildflyDeprecatedDeploymentArchiveProcessor.class);
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void process(Archive<?> archive, TestClass testClass) {
|
|
||||||
if (DeploymentArchiveProcessorUtils.checkRunOnServerDeployment(archive)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
modifyWebXML(archive, testClass);
|
|
||||||
|
|
||||||
modifyOIDCAdapterConfig(archive, DeploymentArchiveProcessorUtils.ADAPTER_CONFIG_PATH);
|
|
||||||
modifyOIDCAdapterConfig(archive, DeploymentArchiveProcessorUtils.ADAPTER_CONFIG_PATH_JS);
|
|
||||||
|
|
||||||
modifySAMLAdapterConfig(archive, DeploymentArchiveProcessorUtils.SAML_ADAPTER_CONFIG_PATH);
|
|
||||||
modifySAMLAdapterConfig(archive, DeploymentArchiveProcessorUtils.SAML_ADAPTER_CONFIG_PATH_TENANT1);
|
|
||||||
modifySAMLAdapterConfig(archive, DeploymentArchiveProcessorUtils.SAML_ADAPTER_CONFIG_PATH_TENANT2);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void modifyWebXML(Archive<?> archive, TestClass testClass) {
|
|
||||||
if (!archive.contains(DeploymentArchiveProcessorUtils.WEBXML_PATH)) return;
|
|
||||||
if (!testClass.getJavaClass().isAnnotationPresent(UseServletFilter.class)) return;
|
|
||||||
if (!archive.contains(DeploymentArchiveProcessorUtils.JBOSS_DEPLOYMENT_XML_PATH)) return;
|
|
||||||
|
|
||||||
log.debug("Modifying WEB.XML in " + archive.getName() + " for Servlet Filter.");
|
|
||||||
DeploymentArchiveProcessorUtils.modifyWebXMLForServletFilter(archive, testClass);
|
|
||||||
DeploymentArchiveProcessorUtils.addFilterDependencies(archive, testClass);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void modifyOIDCAdapterConfig(Archive<?> archive, String adapterConfigPath) {
|
|
||||||
if (!archive.contains(adapterConfigPath)) return;
|
|
||||||
|
|
||||||
log.debug("Modifying adapter config " + adapterConfigPath + " in " + archive.getName());
|
|
||||||
|
|
||||||
DeploymentArchiveProcessorUtils.modifyOIDCAdapterConfig(archive, adapterConfigPath);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void modifySAMLAdapterConfig(Archive<?> archive, String adapterConfigPath) {
|
|
||||||
if (!archive.contains(adapterConfigPath)) return;
|
|
||||||
|
|
||||||
log.debug("Modifying adapter config " + adapterConfigPath + " in " + archive.getName());
|
|
||||||
DeploymentArchiveProcessorUtils.modifySAMLAdapterConfig(archive, adapterConfigPath);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1 +0,0 @@
|
||||||
org.keycloak.testsuite.arquillian.wildfly.WildflyDeprecatedAppServerArquillianExtension
|
|
|
@ -1 +0,0 @@
|
||||||
org.keycloak.testsuite.arquillian.wildfly.container.WildflyDeprecatedAppServerProvider
|
|
|
@ -1 +0,0 @@
|
||||||
|
|
|
@ -522,44 +522,6 @@
|
||||||
</plugins>
|
</plugins>
|
||||||
</build>
|
</build>
|
||||||
</profile>
|
</profile>
|
||||||
<profile>
|
|
||||||
<id>app-server-wildfly-deprecated</id>
|
|
||||||
<activation>
|
|
||||||
<property>
|
|
||||||
<name>app.server</name>
|
|
||||||
<value>wildfly-deprecated</value>
|
|
||||||
</property>
|
|
||||||
</activation>
|
|
||||||
<properties>
|
|
||||||
<app.server>wildfly-deprecated</app.server> <!--in case the profile is called directly-->
|
|
||||||
<app.server.skip.unpack>false</app.server.skip.unpack>
|
|
||||||
|
|
||||||
<arquillian-wildfly-container.version>${wildfly.deprecated.arquillian.wildfly.container}</arquillian-wildfly-container.version>
|
|
||||||
</properties>
|
|
||||||
<dependencies>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.keycloak.testsuite</groupId>
|
|
||||||
<artifactId>integration-arquillian-servers-app-server-wildfly-deprecated</artifactId>
|
|
||||||
<version>${project.version}</version>
|
|
||||||
<scope>runtime</scope>
|
|
||||||
</dependency>
|
|
||||||
<!--required by creaper-core-->
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.wildfly.core</groupId>
|
|
||||||
<artifactId>wildfly-cli</artifactId>
|
|
||||||
<scope>test</scope>
|
|
||||||
<version>${wildfly.deprecated.wildfly.core.version}</version>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
|
||||||
<build>
|
|
||||||
<plugins>
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.commonjava.maven.plugins</groupId>
|
|
||||||
<artifactId>directory-maven-plugin</artifactId>
|
|
||||||
</plugin>
|
|
||||||
</plugins>
|
|
||||||
</build>
|
|
||||||
</profile>
|
|
||||||
<profile>
|
<profile>
|
||||||
<id>app-server-eap</id>
|
<id>app-server-eap</id>
|
||||||
<activation>
|
<activation>
|
||||||
|
|
|
@ -49,7 +49,6 @@ import static org.keycloak.testsuite.utils.io.IOUtil.loadRealm;
|
||||||
* @author <a href="mailto:psilva@redhat.com">Pedro Igor</a>
|
* @author <a href="mailto:psilva@redhat.com">Pedro Igor</a>
|
||||||
*/
|
*/
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY_DEPRECATED)
|
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW)
|
@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW)
|
||||||
|
|
|
@ -50,7 +50,6 @@ import org.keycloak.util.JsonSerialization;
|
||||||
* @author <a href="mailto:psilva@redhat.com">Pedro Igor</a>
|
* @author <a href="mailto:psilva@redhat.com">Pedro Igor</a>
|
||||||
*/
|
*/
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY_DEPRECATED)
|
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP71)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP71)
|
||||||
|
|
|
@ -37,7 +37,6 @@ import static org.hamcrest.Matchers.is;
|
||||||
* @author <a href="mailto:psilva@redhat.com">Pedro Igor</a>
|
* @author <a href="mailto:psilva@redhat.com">Pedro Igor</a>
|
||||||
*/
|
*/
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY_DEPRECATED)
|
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW)
|
@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW)
|
||||||
|
|
|
@ -29,7 +29,6 @@ import org.keycloak.testsuite.utils.arquillian.ContainerConstants;
|
||||||
* @author <a href="mailto:psilva@redhat.com">Pedro Igor</a>
|
* @author <a href="mailto:psilva@redhat.com">Pedro Igor</a>
|
||||||
*/
|
*/
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY_DEPRECATED)
|
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP71)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP71)
|
||||||
|
|
|
@ -29,7 +29,6 @@ import org.keycloak.testsuite.utils.arquillian.ContainerConstants;
|
||||||
* @author <a href="mailto:psilva@redhat.com">Pedro Igor</a>
|
* @author <a href="mailto:psilva@redhat.com">Pedro Igor</a>
|
||||||
*/
|
*/
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY_DEPRECATED)
|
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP71)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP71)
|
||||||
|
|
|
@ -28,7 +28,6 @@ import org.keycloak.testsuite.utils.arquillian.ContainerConstants;
|
||||||
* @author <a href="mailto:psilva@redhat.com">Pedro Igor</a>
|
* @author <a href="mailto:psilva@redhat.com">Pedro Igor</a>
|
||||||
*/
|
*/
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY_DEPRECATED)
|
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP71)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP71)
|
||||||
|
|
|
@ -39,7 +39,6 @@ import org.keycloak.testsuite.utils.arquillian.ContainerConstants;
|
||||||
* @author <a href="mailto:psilva@redhat.com">Pedro Igor</a>
|
* @author <a href="mailto:psilva@redhat.com">Pedro Igor</a>
|
||||||
*/
|
*/
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY_DEPRECATED)
|
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW)
|
@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW)
|
||||||
|
|
|
@ -31,7 +31,6 @@ import org.keycloak.testsuite.utils.arquillian.ContainerConstants;
|
||||||
* @author <a href="mailto:psilva@redhat.com">Pedro Igor</a>
|
* @author <a href="mailto:psilva@redhat.com">Pedro Igor</a>
|
||||||
*/
|
*/
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY_DEPRECATED)
|
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW)
|
@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW)
|
||||||
|
|
|
@ -30,7 +30,6 @@ import org.keycloak.testsuite.utils.arquillian.ContainerConstants;
|
||||||
* @author <a href="mailto:psilva@redhat.com">Pedro Igor</a>
|
* @author <a href="mailto:psilva@redhat.com">Pedro Igor</a>
|
||||||
*/
|
*/
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY_DEPRECATED)
|
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW)
|
@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW)
|
||||||
|
|
|
@ -29,7 +29,6 @@ import org.keycloak.testsuite.utils.arquillian.ContainerConstants;
|
||||||
* @author <a href="mailto:psilva@redhat.com">Pedro Igor</a>
|
* @author <a href="mailto:psilva@redhat.com">Pedro Igor</a>
|
||||||
*/
|
*/
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY_DEPRECATED)
|
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW)
|
@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW)
|
||||||
|
|
|
@ -27,7 +27,6 @@ import org.keycloak.testsuite.utils.arquillian.ContainerConstants;
|
||||||
* @author <a href="mailto:psilva@redhat.com">Pedro Igor</a>
|
* @author <a href="mailto:psilva@redhat.com">Pedro Igor</a>
|
||||||
*/
|
*/
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY_DEPRECATED)
|
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW)
|
@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW)
|
||||||
|
|
|
@ -28,7 +28,6 @@ import org.keycloak.testsuite.utils.arquillian.ContainerConstants;
|
||||||
* @author <a href="mailto:psilva@redhat.com">Pedro Igor</a>
|
* @author <a href="mailto:psilva@redhat.com">Pedro Igor</a>
|
||||||
*/
|
*/
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY_DEPRECATED)
|
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW)
|
@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW)
|
||||||
|
|
|
@ -25,7 +25,6 @@ import org.keycloak.testsuite.utils.arquillian.ContainerConstants;
|
||||||
* @author <a href="mailto:psilva@redhat.com">Pedro Igor</a>
|
* @author <a href="mailto:psilva@redhat.com">Pedro Igor</a>
|
||||||
*/
|
*/
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY_DEPRECATED)
|
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW)
|
@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW)
|
||||||
|
|
|
@ -70,7 +70,6 @@ import static org.keycloak.testsuite.util.WaitUtils.waitUntilElement;
|
||||||
* @author fkiss
|
* @author fkiss
|
||||||
*/
|
*/
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY_DEPRECATED)
|
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP71)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP71)
|
||||||
|
|
|
@ -93,7 +93,6 @@ import static org.keycloak.testsuite.admin.ApiUtil.createUserAndResetPasswordWit
|
||||||
*/
|
*/
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW)
|
@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY_DEPRECATED)
|
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP71)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP71)
|
||||||
|
|
|
@ -76,7 +76,6 @@ import static org.keycloak.testsuite.util.ServerURLs.getAuthServerContextRoot;
|
||||||
*/
|
*/
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW)
|
@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY_DEPRECATED)
|
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP71)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP71)
|
||||||
|
|
|
@ -24,7 +24,6 @@ import org.keycloak.testsuite.utils.arquillian.ContainerConstants;
|
||||||
|
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW)
|
@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY_DEPRECATED)
|
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP71)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP71)
|
||||||
|
|
|
@ -35,7 +35,6 @@ import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW)
|
@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY_DEPRECATED)
|
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP71)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP71)
|
||||||
|
|
|
@ -146,7 +146,6 @@ import static org.keycloak.testsuite.util.WaitUtils.waitForPageToLoad;
|
||||||
*/
|
*/
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW)
|
@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY_DEPRECATED)
|
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP71)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP71)
|
||||||
|
|
|
@ -43,7 +43,6 @@ import static org.keycloak.testsuite.utils.io.IOUtil.loadRealm;
|
||||||
*/
|
*/
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW)
|
@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY_DEPRECATED)
|
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP71)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP71)
|
||||||
|
|
|
@ -80,7 +80,6 @@ import static org.keycloak.testsuite.util.WaitUtils.waitUntilElement;
|
||||||
*/
|
*/
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW)
|
@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY_DEPRECATED)
|
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP71)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP71)
|
||||||
|
|
|
@ -51,7 +51,6 @@ import static org.keycloak.testsuite.util.WaitUtils.waitUntilElement;
|
||||||
*/
|
*/
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW)
|
@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY_DEPRECATED)
|
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP71)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP71)
|
||||||
|
|
|
@ -46,7 +46,6 @@ import static org.keycloak.testsuite.util.SamlClient.Binding.POST;
|
||||||
|
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW)
|
@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY_DEPRECATED)
|
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP71)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP71)
|
||||||
|
@ -137,7 +136,6 @@ public class SAMLClockSkewAdapterTest extends AbstractSAMLServletAdapterTest {
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_TOMCAT9)
|
@AppServerContainer(ContainerConstants.APP_SERVER_TOMCAT9)
|
||||||
@AppServerContainer(value = ContainerConstants.APP_SERVER_UNDERTOW, skip = true)
|
@AppServerContainer(value = ContainerConstants.APP_SERVER_UNDERTOW, skip = true)
|
||||||
@AppServerContainer(value = ContainerConstants.APP_SERVER_WILDFLY, skip = true)
|
@AppServerContainer(value = ContainerConstants.APP_SERVER_WILDFLY, skip = true)
|
||||||
@AppServerContainer(value = ContainerConstants.APP_SERVER_WILDFLY_DEPRECATED, skip = true)
|
|
||||||
@AppServerContainer(value = ContainerConstants.APP_SERVER_EAP, skip = true)
|
@AppServerContainer(value = ContainerConstants.APP_SERVER_EAP, skip = true)
|
||||||
@AppServerContainer(value = ContainerConstants.APP_SERVER_EAP6, skip = true)
|
@AppServerContainer(value = ContainerConstants.APP_SERVER_EAP6, skip = true)
|
||||||
@AppServerContainer(value = ContainerConstants.APP_SERVER_EAP71, skip = true)
|
@AppServerContainer(value = ContainerConstants.APP_SERVER_EAP71, skip = true)
|
||||||
|
|
|
@ -11,7 +11,6 @@ import org.keycloak.testsuite.utils.arquillian.ContainerConstants;
|
||||||
*/
|
*/
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW)
|
@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY_DEPRECATED)
|
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP71)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP71)
|
||||||
|
|
|
@ -18,7 +18,6 @@ import org.keycloak.testsuite.utils.arquillian.ContainerConstants;
|
||||||
*/
|
*/
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW)
|
@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY_DEPRECATED)
|
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP71)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP71)
|
||||||
|
|
|
@ -11,7 +11,6 @@ import org.keycloak.testsuite.utils.arquillian.ContainerConstants;
|
||||||
*/
|
*/
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW)
|
@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY_DEPRECATED)
|
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP71)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP71)
|
||||||
|
|
|
@ -56,7 +56,6 @@ import static org.keycloak.testsuite.util.WaitUtils.waitUntilElement;
|
||||||
*/
|
*/
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW)
|
@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY_DEPRECATED)
|
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP71)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP71)
|
||||||
|
|
|
@ -51,7 +51,6 @@ import static org.keycloak.testsuite.util.SamlClient.Binding.REDIRECT;
|
||||||
*/
|
*/
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW)
|
@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY_DEPRECATED)
|
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP71)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP71)
|
||||||
|
|
|
@ -173,7 +173,6 @@ import org.xml.sax.SAXException;
|
||||||
*/
|
*/
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW)
|
@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY_DEPRECATED)
|
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP71)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP71)
|
||||||
|
|
|
@ -37,7 +37,6 @@ import static org.keycloak.testsuite.util.Matchers.bodyHC;
|
||||||
|
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW)
|
@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY_DEPRECATED)
|
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP71)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP71)
|
||||||
|
|
|
@ -78,7 +78,6 @@ import static org.keycloak.testsuite.saml.AbstractSamlTest.REALM_SIGNING_CERTIFI
|
||||||
*/
|
*/
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW)
|
@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY_DEPRECATED)
|
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP71)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP71)
|
||||||
|
|
|
@ -55,7 +55,6 @@ import org.wildfly.extras.creaper.core.online.CliException;
|
||||||
import org.wildfly.extras.creaper.core.online.operations.OperationException;
|
import org.wildfly.extras.creaper.core.online.operations.OperationException;
|
||||||
|
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY_DEPRECATED)
|
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP71)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP71)
|
||||||
|
|
|
@ -57,7 +57,6 @@ import static org.keycloak.testsuite.util.WaitUtils.waitForPageToLoad;
|
||||||
*/
|
*/
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW)
|
@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY_DEPRECATED)
|
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP71)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP71)
|
||||||
|
|
|
@ -66,7 +66,6 @@ import static org.keycloak.testsuite.util.WaitUtils.waitForPageToLoad;
|
||||||
*/
|
*/
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW)
|
@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY_DEPRECATED)
|
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP71)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP71)
|
||||||
|
|
|
@ -62,7 +62,6 @@ import org.openqa.selenium.support.ui.WebDriverWait;
|
||||||
* @author <a href="mailto:psilva@redhat.com">Pedro Igor</a>
|
* @author <a href="mailto:psilva@redhat.com">Pedro Igor</a>
|
||||||
*/
|
*/
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY_CLUSTER)
|
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY_CLUSTER)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY_DEPRECATED_CLUSTER)
|
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP_CLUSTER)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP_CLUSTER)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6_CLUSTER)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6_CLUSTER)
|
||||||
public class OIDCAdapterClusterTest extends AbstractAdapterClusteredTest {
|
public class OIDCAdapterClusterTest extends AbstractAdapterClusteredTest {
|
||||||
|
|
|
@ -26,7 +26,6 @@ import org.keycloak.testsuite.utils.arquillian.ContainerConstants;
|
||||||
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
* @author <a href="mailto:mposolda@redhat.com">Marek Posolda</a>
|
||||||
*/
|
*/
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY_CLUSTER)
|
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY_CLUSTER)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY_DEPRECATED_CLUSTER)
|
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP_CLUSTER)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP_CLUSTER)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6_CLUSTER)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6_CLUSTER)
|
||||||
@UseServletFilter(filterName = "oidc-filter", filterClass = "org.keycloak.adapters.servlet.KeycloakOIDCFilter",
|
@UseServletFilter(filterName = "oidc-filter", filterClass = "org.keycloak.adapters.servlet.KeycloakOIDCFilter",
|
||||||
|
|
|
@ -31,7 +31,6 @@ import org.keycloak.testsuite.utils.arquillian.ContainerConstants;
|
||||||
* @author hmlnarik
|
* @author hmlnarik
|
||||||
*/
|
*/
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY_CLUSTER)
|
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY_CLUSTER)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY_DEPRECATED_CLUSTER)
|
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP_CLUSTER)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP_CLUSTER)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6_CLUSTER)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6_CLUSTER)
|
||||||
public class SAMLAdapterClusterTest extends AbstractSAMLAdapterClusteredTest {
|
public class SAMLAdapterClusterTest extends AbstractSAMLAdapterClusteredTest {
|
||||||
|
|
|
@ -40,7 +40,6 @@ import org.keycloak.testsuite.arquillian.containers.InfinispanServerDeployableCo
|
||||||
* @author hmlnarik
|
* @author hmlnarik
|
||||||
*/
|
*/
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY_CLUSTER)
|
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY_CLUSTER)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY_DEPRECATED_CLUSTER)
|
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP_CLUSTER)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP_CLUSTER)
|
||||||
@InitialDcState(authServers = ServerSetup.FIRST_NODE_IN_EVERY_DC, cacheServers = ServerSetup.FIRST_NODE_IN_EVERY_DC)
|
@InitialDcState(authServers = ServerSetup.FIRST_NODE_IN_EVERY_DC, cacheServers = ServerSetup.FIRST_NODE_IN_EVERY_DC)
|
||||||
public class SAMLAdapterCrossDCTest extends AbstractSAMLAdapterClusteredTest {
|
public class SAMLAdapterCrossDCTest extends AbstractSAMLAdapterClusteredTest {
|
||||||
|
|
|
@ -34,7 +34,6 @@ import static org.keycloak.testsuite.util.Matchers.statusCodeIsHC;
|
||||||
|
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW)
|
@AppServerContainer(ContainerConstants.APP_SERVER_UNDERTOW)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_WILDFLY_DEPRECATED)
|
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP6)
|
||||||
@AppServerContainer(ContainerConstants.APP_SERVER_EAP71)
|
@AppServerContainer(ContainerConstants.APP_SERVER_EAP71)
|
||||||
|
|
|
@ -24,9 +24,6 @@ public interface ContainerConstants {
|
||||||
public static final String APP_SERVER_WILDFLY = APP_SERVER_PREFIX + "wildfly";
|
public static final String APP_SERVER_WILDFLY = APP_SERVER_PREFIX + "wildfly";
|
||||||
public static final String APP_SERVER_WILDFLY_CLUSTER = APP_SERVER_WILDFLY + "-ha-node-1;" + APP_SERVER_WILDFLY + "-ha-node-2";
|
public static final String APP_SERVER_WILDFLY_CLUSTER = APP_SERVER_WILDFLY + "-ha-node-1;" + APP_SERVER_WILDFLY + "-ha-node-2";
|
||||||
|
|
||||||
public static final String APP_SERVER_WILDFLY_DEPRECATED = APP_SERVER_PREFIX + "wildfly-deprecated";
|
|
||||||
public static final String APP_SERVER_WILDFLY_DEPRECATED_CLUSTER = APP_SERVER_WILDFLY_DEPRECATED + "-ha-node-1;" + APP_SERVER_WILDFLY_DEPRECATED + "-ha-node-2";
|
|
||||||
|
|
||||||
public static final String APP_SERVER_EAP = APP_SERVER_PREFIX + "eap";
|
public static final String APP_SERVER_EAP = APP_SERVER_PREFIX + "eap";
|
||||||
public static final String APP_SERVER_EAP_CLUSTER = APP_SERVER_EAP + "-ha-node-1;" + APP_SERVER_EAP + "-ha-node-2";
|
public static final String APP_SERVER_EAP_CLUSTER = APP_SERVER_EAP + "-ha-node-1;" + APP_SERVER_EAP + "-ha-node-2";
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue