/**
* 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.request;
import java.security.Principal;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.xml.bind.JAXBElement;
import javax.xml.namespace.QName;
import org.w3c.dom.Element;
import org.apache.cxf.common.logging.LogUtils;
import org.apache.cxf.sts.QNameConstants;
import org.apache.cxf.ws.security.sts.provider.STSException;
/**
* This class contains values that have been extracted from a received Token. The Token can be a
* JAXB UsernameTokenType/BinarySecurityTokenType, a DOM Element or a String.
*/
public class ReceivedToken {
private static final Logger LOG = LogUtils.getL7dLogger(ReceivedToken.class);
private Object token;
private boolean isBinarySecurityToken;
private boolean isUsernameToken;
private boolean isDOMElement;
private String tokenContext; // WS-Security, OnBehalfOf, ActAs
private STATE state = STATE.NONE;
private Principal principal;
private Set<Principal> roles;
public enum STATE { VALID, INVALID, CANCELLED, EXPIRED, NONE };
public ReceivedToken(Object receivedToken) throws STSException {
if (receivedToken instanceof JAXBElement<?>) {
QName parentName = ((JAXBElement<?>)receivedToken).getName();
if (QNameConstants.USERNAME_TOKEN.equals(parentName)) {
isUsernameToken = true;
LOG.fine("Found a UsernameToken");
} else if (QNameConstants.BINARY_SECURITY_TOKEN.equals(parentName)) {
LOG.fine("Found a BinarySecurityToken");
isBinarySecurityToken = true;
} else if (QNameConstants.SECURITY_TOKEN_REFERENCE.equals(parentName)) {
LOG.fine("Found SecurityTokenReference");
} else {
LOG.fine("Found unknown token object: " + parentName);
throw new STSException(
"An unknown element was received", STSException.BAD_REQUEST
);
}
token = ((JAXBElement<?>)receivedToken).getValue();
} else if (receivedToken instanceof Element) {
if (LOG.isLoggable(Level.FINE)) {
LOG.fine("Found ValidateTarget element: " + ((Element)receivedToken).getLocalName());
}
this.token = receivedToken;
isDOMElement = true;
} else {
LOG.fine("Found ValidateTarget object of unknown type");
throw new STSException(
"An unknown element was received", STSException.BAD_REQUEST
);
}
}
public Object getToken() {
return token;
}
public void setToken(Object token) {
this.token = token;
}
public boolean isBinarySecurityToken() {
return isBinarySecurityToken;
}
public void setBinarySecurityToken(boolean binarySecurityToken) {
this.isBinarySecurityToken = binarySecurityToken;
}
public boolean isUsernameToken() {
return isUsernameToken;
}
public void setUsernameToken(boolean usernameToken) {
this.isUsernameToken = usernameToken;
}
public boolean isDOMElement() {
return isDOMElement;
}
public void setDOMElement(boolean domElement) {
this.isDOMElement = domElement;
}
public String getTokenContext() {
return tokenContext;
}
public void setTokenContext(String tokenContext) {
this.tokenContext = tokenContext;
}
public STATE getState() {
return state;
}
public void setState(STATE state) {
this.state = state;
}
public Principal getPrincipal() {
return principal;
}
public void setPrincipal(Principal principal) {
this.principal = principal;
}
public Set<Principal> getRoles() {
return roles;
}
public void setRoles(Set<Principal> roles) {
this.roles = roles;
}
}