/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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.apache.cxf.sts.event.map; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.logging.Logger; import javax.servlet.http.HttpServletRequest; import org.apache.cxf.common.logging.LogUtils; import org.apache.cxf.rt.security.claims.Claim; import org.apache.cxf.sts.event.AbstractSTSEvent; import org.apache.cxf.sts.event.AbstractSTSFailureEvent; import org.apache.cxf.sts.event.STSEventListener; import org.apache.cxf.sts.event.TokenCancellerParametersSupport; import org.apache.cxf.sts.event.TokenProviderParametersSupport; import org.apache.cxf.sts.event.TokenRenewerParametersSupport; import org.apache.cxf.sts.event.TokenValidatorParametersSupport; import org.apache.cxf.sts.token.canceller.TokenCancellerParameters; import org.apache.cxf.sts.token.provider.TokenProviderParameters; import org.apache.cxf.sts.token.renewer.TokenRenewerParameters; import org.apache.cxf.sts.token.validator.TokenValidatorParameters; import org.apache.cxf.transport.http.AbstractHTTPDestination; public class EventMapper implements STSEventListener { private static final Logger LOG = LogUtils.getL7dLogger(EventMapper.class); private MapEventListener mapEventListener; public EventMapper(MapEventListener mapEventListener) { this.mapEventListener = mapEventListener; } @Override public void handleSTSEvent(AbstractSTSEvent event) { Map<String, Object> map = new HashMap<>(); map.put(KEYS.TIME.name(), new Date(event.getTimestamp())); map.put(KEYS.OPERATION.name(), event.getOperation()); map.put(KEYS.DURATION.name(), String.valueOf(event.getDuration()) + "ms"); if (event instanceof AbstractSTSFailureEvent) { map.put(KEYS.STATUS.name(), "FAILURE"); Exception ex = ((AbstractSTSFailureEvent)event).getException(); map.put(KEYS.EXCEPTION.name(), ex); } else { map.put(KEYS.STATUS.name(), "SUCCESS"); } if (event instanceof TokenProviderParametersSupport) { handleEvent((TokenProviderParametersSupport)event, map); } else if (event instanceof TokenValidatorParametersSupport) { handleEvent((TokenValidatorParametersSupport)event, map); } else if (event instanceof TokenCancellerParametersSupport) { handleEvent((TokenCancellerParametersSupport)event, map); } else if (event instanceof TokenRenewerParametersSupport) { handleEvent((TokenRenewerParametersSupport)event, map); } else { LOG.warning("Unknown STS event: " + event.getClass()); } MapEvent mapEvent = new MapEvent("org/apache/cxf/sts", map); mapEventListener.onEvent(mapEvent); } protected void handleEvent(TokenProviderParametersSupport event, Map<String, Object> map) { TokenProviderParameters params = event.getTokenParameters(); try { HttpServletRequest req = (HttpServletRequest)params.getMessageContext().get(AbstractHTTPDestination.HTTP_REQUEST); map.put(KEYS.REMOTE_HOST.name(), req.getRemoteHost()); map.put(KEYS.REMOTE_PORT.name(), String.valueOf(req.getRemotePort())); map.put(KEYS.URL.name(), (String)params.getMessageContext().get("org.apache.cxf.request.url")); } catch (Exception ex) { map.put(KEYS.REMOTE_HOST.name(), "N.A."); map.put(KEYS.REMOTE_PORT.name(), "N.A."); map.put(KEYS.URL.name(), "N.A."); } if (params.getTokenRequirements() != null) { map.put(KEYS.TOKENTYPE.name(), params.getTokenRequirements().getTokenType()); if (params.getTokenRequirements().getOnBehalfOf() != null) { map.put(KEYS.ONBEHALFOF_PRINCIPAL.name(), params.getTokenRequirements().getOnBehalfOf().getPrincipal() .getName()); } if (params.getTokenRequirements().getActAs() != null) { map.put(KEYS.ACTAS_PRINCIPAL.name(), params.getTokenRequirements().getActAs().getPrincipal().getName()); } } if (params.getKeyRequirements() != null) { map.put(KEYS.KEYTYPE.name(), params.getKeyRequirements().getKeyType()); } if (params.getPrincipal() != null) { map.put(KEYS.WS_SEC_PRINCIPAL.name(), params.getPrincipal().getName()); } map.put(KEYS.REALM.name(), params.getRealm()); map.put(KEYS.APPLIESTO.name(), params.getAppliesToAddress()); if (params.getRequestedPrimaryClaims() != null) { List<String> claims = new ArrayList<>(); for (Claim claim : params.getRequestedPrimaryClaims()) { claims.add(claim.getClaimType().toString()); } map.put(KEYS.CLAIMS_PRIMARY.name(), claims.toString()); } if (params.getRequestedSecondaryClaims() != null) { List<String> claims = new ArrayList<>(); for (Claim claim : params.getRequestedSecondaryClaims()) { claims.add(claim.getClaimType().toString()); } map.put(KEYS.CLAIMS_SECONDARY.name(), claims.toString()); } } protected void handleEvent(TokenValidatorParametersSupport event, Map<String, Object> map) { TokenValidatorParameters params = event.getTokenParameters(); HttpServletRequest req = (HttpServletRequest)params.getMessageContext().get(AbstractHTTPDestination.HTTP_REQUEST); map.put(KEYS.REMOTE_HOST.name(), req.getRemoteHost()); map.put(KEYS.REMOTE_PORT.name(), String.valueOf(req.getRemotePort())); map.put(KEYS.URL.name(), (String)params.getMessageContext().get("org.apache.cxf.request.url")); map.put(KEYS.TOKENTYPE.name(), params.getTokenRequirements().getTokenType()); if (params.getTokenRequirements().getActAs() != null) { map.put(KEYS.VALIDATE_PRINCIPAL.name(), params.getTokenRequirements().getValidateTarget().getPrincipal() .getName()); } if (params.getKeyRequirements() != null) { map.put(KEYS.KEYTYPE.name(), params.getKeyRequirements().getKeyType()); } if (params.getPrincipal() != null) { map.put(KEYS.WS_SEC_PRINCIPAL.name(), params.getPrincipal().getName()); } map.put(KEYS.REALM.name(), params.getRealm()); } protected void handleEvent(TokenCancellerParametersSupport event, Map<String, Object> map) { TokenCancellerParameters params = event.getTokenParameters(); HttpServletRequest req = (HttpServletRequest)params.getMessageContext().get(AbstractHTTPDestination.HTTP_REQUEST); map.put(KEYS.REMOTE_HOST.name(), req.getRemoteHost()); map.put(KEYS.REMOTE_PORT.name(), String.valueOf(req.getRemotePort())); map.put(KEYS.URL.name(), (String)params.getMessageContext().get("org.apache.cxf.request.url")); map.put(KEYS.TOKENTYPE.name(), params.getTokenRequirements().getTokenType()); if (params.getTokenRequirements().getActAs() != null) { map.put(KEYS.CANCEL_PRINCIPAL.name(), params.getTokenRequirements().getCancelTarget().getPrincipal() .getName()); } if (params.getKeyRequirements() != null) { map.put(KEYS.KEYTYPE.name(), params.getKeyRequirements().getKeyType()); } if (params.getPrincipal() != null) { map.put(KEYS.WS_SEC_PRINCIPAL.name(), params.getPrincipal().getName()); } } protected void handleEvent(TokenRenewerParametersSupport event, Map<String, Object> map) { TokenRenewerParameters params = event.getTokenParameters(); HttpServletRequest req = (HttpServletRequest)params.getMessageContext().get(AbstractHTTPDestination.HTTP_REQUEST); map.put(KEYS.REMOTE_HOST.name(), req.getRemoteHost()); map.put(KEYS.REMOTE_PORT.name(), String.valueOf(req.getRemotePort())); map.put(KEYS.URL.name(), (String)params.getMessageContext().get("org.apache.cxf.request.url")); map.put(KEYS.TOKENTYPE.name(), params.getTokenRequirements().getTokenType()); if (params.getTokenRequirements().getRenewTarget() != null) { map.put(KEYS.RENEW_PRINCIPAL.name(), params.getTokenRequirements().getRenewTarget().getPrincipal() .getName()); } if (params.getPrincipal() != null) { map.put(KEYS.WS_SEC_PRINCIPAL.name(), params.getPrincipal().getName()); } if (params.getKeyRequirements() != null) { map.put(KEYS.KEYTYPE.name(), params.getKeyRequirements().getKeyType()); } map.put(KEYS.REALM.name(), params.getRealm()); map.put(KEYS.APPLIESTO.name(), params.getAppliesToAddress()); } }