Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[WFLY-3978] - PicketLink EAP 6.4 Issues #6951

Merged
merged 3 commits into from
Nov 21, 2014
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
/*
* JBoss, Home of Professional Open Source.
* Copyright 2012, Red Hat, Inc., and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.wildfly.extension.picketlink.federation.model;

import org.jboss.as.controller.AbstractAddStepHandler;
import org.jboss.as.controller.OperationContext;
import org.jboss.as.controller.OperationFailedException;
import org.jboss.dmr.ModelNode;
import org.jboss.dmr.Property;
import org.picketlink.config.federation.KeyValueType;
import org.picketlink.config.federation.handler.Handler;
import org.wildfly.extension.picketlink.common.model.ModelElement;
import org.wildfly.extension.picketlink.federation.service.EntityProviderService;

import static org.wildfly.extension.picketlink.common.model.ModelElement.COMMON_HANDLER_PARAMETER;
import static org.wildfly.extension.picketlink.federation.model.handlers.HandlerAddHandler.toHandlerConfig;
import static org.wildfly.extension.picketlink.federation.model.handlers.HandlerParameterAddHandler.toHandlerParameterConfig;

/**
* @author Pedro Igor
*/
public abstract class AbstractEntityProviderAddHandler extends AbstractAddStepHandler {

protected static void configureHandler(OperationContext context, ModelNode model, EntityProviderService service) throws OperationFailedException {
if (model.hasDefined(ModelElement.COMMON_HANDLER.getName())) {
for (Property handlerProperty : model.get(ModelElement.COMMON_HANDLER.getName()).asPropertyList()) {
ModelNode handler = handlerProperty.getValue();
Handler newHandler = toHandlerConfig(context, handler);

if (handler.hasDefined(COMMON_HANDLER_PARAMETER.getName())) {
for (Property handlerParameter : handler.get(COMMON_HANDLER_PARAMETER.getName()).asPropertyList()) {
String paramName = handlerParameter.getName();
ModelNode parameterNode = handlerParameter.getValue();
KeyValueType kv = toHandlerParameterConfig(context, paramName, parameterNode);

newHandler.add(kv);
}
}

service.addHandler(newHandler);
}
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -26,33 +26,21 @@
import org.jboss.as.controller.OperationContext;
import org.jboss.as.controller.OperationFailedException;
import org.jboss.as.controller.PathAddress;
import org.jboss.as.controller.PathElement;
import org.jboss.as.controller.ServiceVerificationHandler;
import org.jboss.as.controller.SimpleAttributeDefinition;
import org.jboss.as.controller.registry.Resource;
import org.jboss.dmr.ModelNode;
import org.jboss.dmr.Property;
import org.jboss.msc.service.ServiceBuilder;
import org.jboss.msc.service.ServiceController;
import org.jboss.msc.service.ServiceName;
import org.jboss.msc.service.ServiceTarget;
import org.picketlink.config.federation.KeyValueType;
import org.picketlink.config.federation.handler.Handler;
import org.wildfly.extension.picketlink.common.model.ModelElement;
import org.wildfly.extension.picketlink.common.model.validator.AlternativeAttributeValidationStepHandler;
import org.wildfly.extension.picketlink.common.model.validator.UniqueTypeValidationStepHandler;
import org.wildfly.extension.picketlink.federation.service.EntityProviderService;
import org.wildfly.extension.picketlink.federation.service.IdentityProviderService;
import org.wildfly.extension.picketlink.federation.service.SAMLHandlerService;
import org.wildfly.extension.picketlink.federation.service.ServiceProviderService;

import java.util.List;

import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ADDRESS;
import static org.wildfly.extension.picketlink.common.model.ModelElement.COMMON_HANDLER_PARAMETER;
import static org.wildfly.extension.picketlink.common.model.ModelElement.IDENTITY_PROVIDER;
import static org.wildfly.extension.picketlink.federation.model.handlers.HandlerResourceDefinition.getHandlerType;
import static org.wildfly.extension.picketlink.federation.service.SAMLHandlerService.createServiceName;

/**
* @author <a href="mailto:psilva@redhat.com">Pedro Silva</a>
Expand All @@ -65,56 +53,6 @@ private HandlerAddHandler() {

}

static void launchServices(final OperationContext context, final PathAddress pathAddress , final ModelNode model, final ServiceVerificationHandler verificationHandler, final List<ServiceController<?>> newControllers) throws OperationFailedException {
Handler newHandler = new Handler();
String typeName = getHandlerType(context, model);

newHandler.setClazz(typeName);

ModelNode handler = Resource.Tools.readModel(context.readResourceFromRoot(pathAddress));

if (handler.hasDefined(COMMON_HANDLER_PARAMETER.getName())) {
for (Property handlerParameter : handler.get(COMMON_HANDLER_PARAMETER.getName()).asPropertyList()) {
String paramName = handlerParameter.getName();
String paramValue = HandlerParameterResourceDefinition.VALUE
.resolveModelAttribute(context, handlerParameter.getValue()).asString();

KeyValueType kv = new KeyValueType();

kv.setKey(paramName);
kv.setValue(paramValue);

newHandler.add(kv);
}
}

SAMLHandlerService service = new SAMLHandlerService(newHandler);
PathElement providerAlias = pathAddress.subAddress(0, pathAddress.size() - 1).getLastElement();

ServiceTarget serviceTarget = context.getServiceTarget();
ServiceBuilder<SAMLHandlerService> serviceBuilder = serviceTarget.addService(createServiceName(providerAlias
.getValue(), pathAddress.getLastElement().getValue()), service);
ServiceName serviceName;

if (providerAlias.getKey().equals(IDENTITY_PROVIDER.getName())) {
serviceName = IdentityProviderService.createServiceName(providerAlias.getValue());
} else {
serviceName = ServiceProviderService.createServiceName(providerAlias.getValue());
}

serviceBuilder.addDependency(serviceName, EntityProviderService.class, service.getEntityProviderService());

if (verificationHandler != null) {
serviceBuilder.addListener(verificationHandler);
}

ServiceController<SAMLHandlerService> controller = serviceBuilder.install();

if (newControllers != null) {
newControllers.add(controller);
}
}

@Override
public void execute(OperationContext context, ModelNode operation) throws OperationFailedException {
context.addStep(new AlternativeAttributeValidationStepHandler(new SimpleAttributeDefinition[] {
Expand All @@ -137,8 +75,28 @@ protected void populateModel(ModelNode operation, ModelNode model) throws Operat
}

@Override
protected void performRuntime(OperationContext context, ModelNode operation, ModelNode model, ServiceVerificationHandler verificationHandler,
List<ServiceController<?>> newControllers) throws OperationFailedException {
launchServices(context, PathAddress.pathAddress(operation.get(ADDRESS)), model, verificationHandler, newControllers);
protected void performRuntime(OperationContext context, ModelNode operation, ModelNode model, ServiceVerificationHandler verificationHandler, List<ServiceController<?>> newControllers) throws OperationFailedException {
PathAddress pathAddress = PathAddress.pathAddress(operation.get(ADDRESS));
String providerAlias = pathAddress.subAddress(0, pathAddress.size() - 1).getLastElement().getValue();
EntityProviderService providerService = EntityProviderService.getService(context, providerAlias);
Handler handler = toHandlerConfig(context, model);

providerService.addHandler(handler);
}

@Override protected void rollbackRuntime(OperationContext context, ModelNode operation, Resource resource) {
try {
HandlerRemoveHandler.INSTANCE.performRuntime(context, operation, resource.getModel());
} catch (OperationFailedException ignore) {
}
}

public static Handler toHandlerConfig(OperationContext context, ModelNode handler) throws OperationFailedException {
Handler newHandler = new Handler();
String typeName = HandlerResourceDefinition.getHandlerType(context, handler);

newHandler.setClazz(typeName);

return newHandler;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,28 +22,29 @@

package org.wildfly.extension.picketlink.federation.model.handlers;

import org.jboss.as.controller.AbstractAddStepHandler;
import org.jboss.as.controller.OperationContext;
import org.jboss.as.controller.OperationFailedException;
import org.jboss.as.controller.PathAddress;
import org.jboss.as.controller.RestartParentResourceAddHandler;
import org.jboss.as.controller.ServiceVerificationHandler;
import org.jboss.as.controller.SimpleAttributeDefinition;
import org.jboss.as.controller.registry.Resource;
import org.jboss.dmr.ModelNode;
import org.jboss.msc.service.ServiceName;
import org.wildfly.extension.picketlink.common.model.ModelElement;
import org.wildfly.extension.picketlink.federation.service.SAMLHandlerService;
import org.jboss.msc.service.ServiceController;
import org.picketlink.config.federation.KeyValueType;
import org.wildfly.extension.picketlink.federation.service.EntityProviderService;

import java.util.List;

import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ADDRESS;

/**
* @author <a href="mailto:psilva@redhat.com">Pedro Silva</a>
*/
public class HandlerParameterAddHandler extends RestartParentResourceAddHandler {
public class HandlerParameterAddHandler extends AbstractAddStepHandler {

static final HandlerParameterAddHandler INSTANCE = new HandlerParameterAddHandler();

private HandlerParameterAddHandler() {
super(ModelElement.COMMON_HANDLER.getName());
}

@Override
protected void populateModel(ModelNode operation, ModelNode model) throws OperationFailedException {
for (SimpleAttributeDefinition attribute : HandlerParameterResourceDefinition.INSTANCE.getAttributes()) {
Expand All @@ -52,16 +53,33 @@ protected void populateModel(ModelNode operation, ModelNode model) throws Operat
}

@Override
protected void recreateParentService(OperationContext context, PathAddress parentAddress, ModelNode parentModel,
ServiceVerificationHandler verificationHandler) throws OperationFailedException {
HandlerAddHandler.INSTANCE.launchServices(context, parentAddress, parentModel, verificationHandler, null);
protected void performRuntime(OperationContext context, ModelNode operation, ModelNode model, ServiceVerificationHandler verificationHandler, List<ServiceController<?>> newControllers) throws OperationFailedException {
PathAddress pathAddress = PathAddress.pathAddress(operation.get(ADDRESS));
String providerAlias = pathAddress.subAddress(0, pathAddress.size() - 2).getLastElement().getValue();
String handlerType = pathAddress.subAddress(0, pathAddress.size() - 1).getLastElement().getValue();
EntityProviderService providerService = EntityProviderService.getService(context, providerAlias);
String handlerParameterName = pathAddress.getLastElement().getValue();
KeyValueType keyValueType = toHandlerParameterConfig(context, handlerParameterName, model);

providerService.addHandlerParameter(handlerType, keyValueType);
}

@Override
protected ServiceName getParentServiceName(PathAddress parentAddress) {
String providerAlias = parentAddress.subAddress(0, parentAddress.size() - 1).getLastElement().getValue();
String handlerName = parentAddress.getLastElement().getValue();
public static KeyValueType toHandlerParameterConfig(OperationContext context, String paramName, ModelNode parameterNode) throws OperationFailedException {
String paramValue = HandlerParameterResourceDefinition.VALUE
.resolveModelAttribute(context, parameterNode).asString();

return SAMLHandlerService.createServiceName(providerAlias, handlerName);
KeyValueType kv = new KeyValueType();

kv.setKey(paramName);
kv.setValue(paramValue);
return kv;
}

@Override protected void rollbackRuntime(OperationContext context, ModelNode operation, Resource resource) {
try {
HandlerParameterRemoveHandler.INSTANCE.performRuntime(context, operation, resource.getModel());
} catch (OperationFailedException ignore) {

}
}
}
Original file line number Diff line number Diff line change
@@ -1,38 +1,34 @@
package org.wildfly.extension.picketlink.federation.model.handlers;

import org.jboss.as.controller.AbstractRemoveStepHandler;
import org.jboss.as.controller.OperationContext;
import org.jboss.as.controller.OperationFailedException;
import org.jboss.as.controller.PathAddress;
import org.jboss.as.controller.RestartParentResourceRemoveHandler;
import org.jboss.as.controller.ServiceVerificationHandler;
import org.jboss.dmr.ModelNode;
import org.jboss.msc.service.ServiceName;
import org.wildfly.extension.picketlink.federation.service.SAMLHandlerService;
import org.wildfly.extension.picketlink.common.model.ModelElement;
import org.wildfly.extension.picketlink.federation.service.EntityProviderService;

import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ADDRESS;

/**
* @author Pedro Igor
*/
public class HandlerParameterRemoveHandler extends RestartParentResourceRemoveHandler {
public class HandlerParameterRemoveHandler extends AbstractRemoveStepHandler {

static final HandlerParameterRemoveHandler INSTANCE = new HandlerParameterRemoveHandler();

private HandlerParameterRemoveHandler() {
super(ModelElement.COMMON_HANDLER.getName());
}

@Override
protected void recreateParentService(OperationContext context, PathAddress parentAddress, ModelNode parentModel,
ServiceVerificationHandler verificationHandler) throws OperationFailedException {
HandlerAddHandler.INSTANCE.launchServices(context, parentAddress, parentModel, verificationHandler, null);
protected void performRuntime(OperationContext context, ModelNode operation, ModelNode model) throws OperationFailedException {
PathAddress pathAddress = PathAddress.pathAddress(operation.get(ADDRESS));
String providerAlias = pathAddress.subAddress(0, pathAddress.size() - 2).getLastElement().getValue();
String handlerType = pathAddress.subAddress(0, pathAddress.size() - 1).getLastElement().getValue();
EntityProviderService providerService = EntityProviderService.getService(context, providerAlias);

String handlerParameterName = pathAddress.getLastElement().getValue();
providerService.removeHandlerParameter(handlerType, handlerParameterName);
}

@Override
protected ServiceName getParentServiceName(PathAddress parentAddress) {
String providerAlias = parentAddress.subAddress(0, parentAddress.size() - 1).getLastElement().getValue();
String handlerName = parentAddress.getLastElement().getValue();

return SAMLHandlerService.createServiceName(providerAlias, handlerName);
@Override protected void recoverServices(OperationContext context, ModelNode operation, ModelNode model)
throws OperationFailedException {
HandlerParameterAddHandler.INSTANCE.performRuntime(context, operation, model, null, null);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
import org.jboss.as.controller.OperationFailedException;
import org.jboss.as.controller.PathAddress;
import org.jboss.dmr.ModelNode;
import org.wildfly.extension.picketlink.federation.service.SAMLHandlerService;
import org.wildfly.extension.picketlink.federation.service.EntityProviderService;

import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ADDRESS;

Expand All @@ -44,12 +44,13 @@ private HandlerRemoveHandler() {
protected void performRuntime(OperationContext context, ModelNode operation, ModelNode model) throws OperationFailedException {
PathAddress pathAddress = PathAddress.pathAddress(operation.get(ADDRESS));
String providerAlias = pathAddress.subAddress(0, pathAddress.size() - 1).getLastElement().getValue();
EntityProviderService providerService = EntityProviderService.getService(context, providerAlias);
String handlerType = HandlerResourceDefinition.getHandlerType(context, model);

context.removeService(SAMLHandlerService.createServiceName(providerAlias, pathAddress.getLastElement().getValue()));
providerService.removeHandler(handlerType);
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Handle rollback: add handler


@Override
protected void recoverServices(OperationContext context, ModelNode operation, ModelNode model) throws OperationFailedException {
HandlerAddHandler.launchServices(context, PathAddress.pathAddress(operation.get(ADDRESS)), model, null, null);
@Override protected void recoverServices(OperationContext context, ModelNode operation, ModelNode model) throws OperationFailedException {
HandlerAddHandler.INSTANCE.performRuntime(context, operation, model, null, null);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ protected String getType(OperationContext context, ModelNode model) throws Opera
}, OperationContext.Stage.MODEL);
}

static String getHandlerType(OperationContext context, ModelNode elementNode) throws OperationFailedException {
public static String getHandlerType(OperationContext context, ModelNode elementNode) throws OperationFailedException {
ModelNode classNameNode = CLASS_NAME.resolveModelAttribute(context, elementNode);
ModelNode codeNode = CODE.resolveModelAttribute(context, elementNode);

Expand Down
Loading