/* * 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.subsystem.server.extension; import org.jboss.as.controller.AttributeDefinition; import org.jboss.as.controller.SimpleAttributeDefinition; import org.jboss.as.controller.SimpleAttributeDefinitionBuilder; import org.jboss.as.controller.SimpleResourceDefinition; import org.jboss.as.controller.StringListAttributeDefinition; import org.jboss.as.controller.operations.common.GenericSubsystemDescribeHandler; import org.jboss.as.controller.registry.ManagementResourceRegistration; import org.jboss.dmr.ModelNode; import org.jboss.dmr.ModelType; import org.keycloak.subsystem.server.attributes.ProvidersListAttributeBuilder; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * Definition of subsystem=keycloak-server. * * @author Stan Silvert ssilvert@redhat.com (C) 2013 Red Hat Inc. */ public class KeycloakSubsystemDefinition extends SimpleResourceDefinition { static final SimpleAttributeDefinition WEB_CONTEXT = new SimpleAttributeDefinitionBuilder("web-context", ModelType.STRING, true) .setAllowExpression(true) .setDefaultValue(new ModelNode("auth")) .setRestartAllServices() .build(); static final StringListAttributeDefinition PROVIDERS = new ProvidersListAttributeBuilder().build(); static final SimpleAttributeDefinition MASTER_REALM_NAME = new SimpleAttributeDefinitionBuilder("master-realm-name", ModelType.STRING, true) .setAllowExpression(true) .setDefaultValue(new ModelNode("master")) .setRestartAllServices() .build(); static final SimpleAttributeDefinition SCHEDULED_TASK_INTERVAL = new SimpleAttributeDefinitionBuilder("scheduled-task-interval", ModelType.LONG, true) .setAllowExpression(true) .setDefaultValue(new ModelNode("900")) .setRestartAllServices() .build(); static final List<AttributeDefinition> ALL_ATTRIBUTES = new ArrayList<AttributeDefinition>(); static { ALL_ATTRIBUTES.add(WEB_CONTEXT); ALL_ATTRIBUTES.add(PROVIDERS); ALL_ATTRIBUTES.add(MASTER_REALM_NAME); ALL_ATTRIBUTES.add(SCHEDULED_TASK_INTERVAL); } private static final Map<String, AttributeDefinition> DEFINITION_LOOKUP = new HashMap<String, AttributeDefinition>(); static { for (AttributeDefinition def : ALL_ATTRIBUTES) { DEFINITION_LOOKUP.put(def.getXmlName(), def); } } private static KeycloakSubsystemWriteAttributeHandler attrHandler = new KeycloakSubsystemWriteAttributeHandler(ALL_ATTRIBUTES); protected KeycloakSubsystemDefinition() { super(KeycloakExtension.PATH_SUBSYSTEM, KeycloakExtension.getResourceDescriptionResolver("subsystem"), KeycloakSubsystemAdd.INSTANCE, KeycloakSubsystemRemoveHandler.INSTANCE ); } @Override public void registerOperations(ManagementResourceRegistration resourceRegistration) { super.registerOperations(resourceRegistration); resourceRegistration.registerOperationHandler(GenericSubsystemDescribeHandler.DEFINITION, GenericSubsystemDescribeHandler.INSTANCE); resourceRegistration.registerOperationHandler(MigrateJsonOperation.DEFINITION, new MigrateJsonOperation()); } @Override public void registerAttributes(ManagementResourceRegistration resourceRegistration) { super.registerAttributes(resourceRegistration); for (AttributeDefinition attrDef : ALL_ATTRIBUTES) { resourceRegistration.registerReadWriteAttribute(attrDef, null, attrHandler); } } public static AttributeDefinition lookup(String name) { return DEFINITION_LOOKUP.get(name); } }