/* * Copyright 2017 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. */ package org.jboss.as.connector.metadata.resourceadapter; import java.util.List; import java.util.Map; import org.jboss.as.connector.metadata.api.resourceadapter.WorkManagerSecurity; /** * Extension of {@link org.jboss.jca.common.metadata.resourceadapter.WorkManagerSecurityImpl} with added Elytron support. * * @author Flavia Rainone */ public class WorkManagerSecurityImpl extends org.jboss.jca.common.metadata.resourceadapter.WorkManagerSecurityImpl implements WorkManagerSecurity { private static final long serialVersionUID = -6928615726774510406L; // indicates if Elytron is enabled. In this case, securityContext, defined as securityDomain in super class, // refers to Elytron authenticationContext private final boolean elytronEnabled; /** * Constructor. * * @param mappingRequired is mapping required * @param securityContext specific information used by implementation to define in which context this security info * belongs * @param elytronEnabled indicates if Elytron is responsible for taking care of work manager security * @param defaultPrincipal default principal * @param defaultGroups default groups * @param userMappings user mappings * @param groupMappings group mappings */ public WorkManagerSecurityImpl(boolean mappingRequired, String securityContext, boolean elytronEnabled, String defaultPrincipal, List<String> defaultGroups, Map<String, String> userMappings, Map<String, String> groupMappings) { super(mappingRequired, securityContext, defaultPrincipal, defaultGroups, userMappings, groupMappings); this.elytronEnabled = elytronEnabled; } /** * {@inheritDoc} */ public boolean isElytronEnabled() { return elytronEnabled; } /** * {@inheritDoc} */ @Override public int hashCode() { int result = super.hashCode(); if (elytronEnabled) { result += 31; } return result; } /** * {@inheritDoc} */ @Override public boolean equals(Object o) { if (o == this) return true; if (o == null) return false; if (!(o instanceof WorkManagerSecurityImpl)) return false; WorkManagerSecurityImpl other = (WorkManagerSecurityImpl) o; return other.elytronEnabled == elytronEnabled && super.equals(o); } /** * {@inheritDoc} */ @Override public String toString() { if (!elytronEnabled) { return super.toString(); } StringBuilder sb = new StringBuilder(1024); sb.append("<security>"); sb.append("<").append(WorkManagerSecurity.Tag.MAPPING_REQUIRED).append(">"); sb.append(isMappingRequired()); sb.append("</").append(WorkManagerSecurity.Tag.MAPPING_REQUIRED).append(">"); if (getDomain() != null) { if (elytronEnabled) { sb.append("<").append(WorkManagerSecurity.Tag.ELYTRON_SECURITY_DOMAIN).append(">"); sb.append(getDomain()); sb.append("</").append(WorkManagerSecurity.Tag.ELYTRON_SECURITY_DOMAIN).append(">"); } else { sb.append("<").append(WorkManagerSecurity.Tag.DOMAIN).append(">"); sb.append(getDomain()); sb.append("</").append(WorkManagerSecurity.Tag.DOMAIN).append(">"); } } if (getDefaultPrincipal() != null) { sb.append("<").append(WorkManagerSecurity.Tag.DEFAULT_PRINCIPAL).append(">"); sb.append(getDefaultPrincipal()); sb.append("</").append(WorkManagerSecurity.Tag.DEFAULT_PRINCIPAL).append(">"); } if (getDefaultGroups() != null && getDefaultGroups().size() > 0) { sb.append("<").append(WorkManagerSecurity.Tag.DEFAULT_GROUPS).append(">"); for (String group : getDefaultGroups()) { sb.append("<").append(WorkManagerSecurity.Tag.GROUP).append(">"); sb.append(group); sb.append("</").append(WorkManagerSecurity.Tag.GROUP).append(">"); } sb.append("</").append(WorkManagerSecurity.Tag.DEFAULT_GROUPS).append(">"); } if ((getUserMappings() != null && getUserMappings().size() > 0) || (getGroupMappings() != null && getGroupMappings().size() > 0)) { sb.append("<").append(WorkManagerSecurity.Tag.MAPPINGS).append(">"); if (getUserMappings() != null && getUserMappings().size() > 0) { sb.append("<").append(WorkManagerSecurity.Tag.USERS).append(">"); for (Map.Entry<String, String> entry : getUserMappings().entrySet()) { sb.append("<").append(WorkManagerSecurity.Tag.MAP); sb.append(" ").append(WorkManagerSecurity.Attribute.FROM).append("=\""); sb.append(entry.getKey()).append("\""); sb.append(" ").append(WorkManagerSecurity.Attribute.TO).append("=\""); sb.append(entry.getValue()).append("\""); sb.append("/>"); } sb.append("</").append(WorkManagerSecurity.Tag.USERS).append(">"); } if (getGroupMappings() != null && getGroupMappings().size() > 0) { sb.append("<").append(WorkManagerSecurity.Tag.GROUPS).append(">"); for (Map.Entry<String, String> entry : getGroupMappings().entrySet()) { sb.append("<").append(WorkManagerSecurity.Tag.MAP); sb.append(" ").append(WorkManagerSecurity.Attribute.FROM).append("=\""); sb.append(entry.getKey()).append("\""); sb.append(" ").append(WorkManagerSecurity.Attribute.TO).append("=\""); sb.append(entry.getValue()).append("\""); sb.append("/>"); } sb.append("</").append(WorkManagerSecurity.Tag.GROUPS).append(">"); } sb.append("</").append(WorkManagerSecurity.Tag.MAPPINGS).append(">"); } sb.append("</security>"); return sb.toString(); } }