/**
* Copyright 2015-2016 Red Hat, Inc, and individual contributors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.wildfly.swarm.keycloak.server;
import org.wildfly.swarm.config.KeycloakServer;
import org.wildfly.swarm.spi.api.Fraction;
import org.wildfly.swarm.spi.api.annotations.MarshalDMR;
import org.wildfly.swarm.spi.api.annotations.WildFlyExtension;
import org.wildfly.swarm.spi.api.annotations.WildFlySubsystem;
import static org.wildfly.swarm.keycloak.server.KeycloakServerProperties.DEFAULT_REALM_NAME;
import static org.wildfly.swarm.keycloak.server.KeycloakServerProperties.DEFAULT_WEB_CONTEXT;
/**
* @author Bob McWhirter
*/
@WildFlyExtension(module = "org.keycloak.keycloak-server-subsystem")
@WildFlySubsystem("keycloak-server")
@MarshalDMR
public class KeycloakServerFraction extends KeycloakServer<KeycloakServerFraction> implements Fraction {
public static final String JPA = "jpa";
public static final String DEFAULT = "default";
public static final String BASIC = "basic";
public KeycloakServerFraction() {
}
@Override
public Fraction applyDefaults() {
webContext(DEFAULT_WEB_CONTEXT);
masterRealmName(DEFAULT_REALM_NAME);
scheduledTaskInterval(900L);
spi("eventsStore", (eventStore) -> {
eventStore.defaultProvider("jpa");
eventStore.provider("jpa", (provider) -> {
provider.enabled(true);
provider.property("exclude-events", "[\"REFRESH_TOKEN\"]");
});
});
spi("realm", (spi) -> {
spi.defaultProvider(JPA);
});
spi("user", (spi) -> {
spi.defaultProvider(JPA);
});
spi("userFederatedStorage", (spi) -> {
spi.defaultProvider(JPA);
});
spi("userCache", (spi) -> {
spi.provider(DEFAULT, (provider) -> {
provider.enabled(true);
});
});
spi("userSessionPersister", (spi) -> {
spi.defaultProvider(JPA);
});
spi("authorizationPersister", (spi) -> {
spi.defaultProvider(JPA);
});
spi("timer", (spi) -> {
spi.defaultProvider(BASIC);
});
spi("connectionsHttpClient", (spi) -> {
spi.provider(DEFAULT, (provider) -> {
provider.enabled(true);
});
});
spi("connectionsJpa", (spi) -> {
spi.provider(DEFAULT, (provider) -> {
provider.enabled(true);
provider.property("dataSource", "java:jboss/datasources/KeycloakDS");
provider.property("initializeEmpty", "true");
provider.property("migrationStrategy", "update");
provider.property("migrationExport", "${user.dir}/keycloak-database-update.sql");
});
});
spi("realmCache", (spi) -> {
spi.provider(DEFAULT, (provider) -> {
provider.enabled(true);
});
});
spi("connectionsInfinispan", (spi) -> {
spi.defaultProvider(DEFAULT);
spi.provider(DEFAULT, (provider) -> {
provider.enabled(true);
provider.property("cacheContainer", "java:comp/env/infinispan/Keycloak");
});
});
spi("jta-lookup", (spi) -> {
spi.defaultProvider("${keycloak.jta.lookup.provider:jboss}");
spi.provider("jboss", (provider) -> {
provider.enabled(true);
});
});
spi("publicKeyStorage", (spi) -> {
spi.provider("infinispan", (provider) -> {
provider.enabled(true);
provider.property("minTimeBetweenRequests", "10");
});
});
return this;
}
}