/** * 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.rs.security.jose.common; import java.util.List; import java.util.Map; import org.apache.cxf.helpers.CastUtils; import org.apache.cxf.jaxrs.json.basic.JsonMapObject; import org.apache.cxf.rs.security.jose.jwk.JsonWebKey; public abstract class JoseHeaders extends JsonMapObject { private static final long serialVersionUID = 1101185302425283553L; public JoseHeaders() { } public JoseHeaders(JoseType type) { init(type); } public JoseHeaders(JoseHeaders headers) { this(headers.asMap()); } public JoseHeaders(Map<String, Object> values) { super(values); } private void init(JoseType type) { setType(type); } public final void setType(JoseType type) { setHeader(JoseConstants.HEADER_TYPE, type.toString()); } public JoseType getType() { Object prop = getHeader(JoseConstants.HEADER_TYPE); return prop == null ? null : JoseType.getType(prop.toString()); } public void setContentType(String type) { setHeader(JoseConstants.HEADER_CONTENT_TYPE, type); } public String getContentType() { return (String)getHeader(JoseConstants.HEADER_CONTENT_TYPE); } public void setAlgorithm(String algo) { setHeader(JoseConstants.HEADER_ALGORITHM, algo); } public String getAlgorithm() { Object prop = getHeader(JoseConstants.HEADER_ALGORITHM); return prop == null ? null : prop.toString(); } public void setKeyId(String kid) { setHeader(JoseConstants.HEADER_KEY_ID, kid); } public String getKeyId() { return (String)getHeader(JoseConstants.HEADER_KEY_ID); } public void setX509Url(String x509Url) { setHeader(JoseConstants.HEADER_X509_URL, x509Url); } public String getX509Url() { return (String)getHeader(JoseConstants.HEADER_X509_URL); } public void setX509Chain(List<String> x509Chain) { setProperty(JoseConstants.HEADER_X509_CHAIN, x509Chain); } public List<String> getX509Chain() { return CastUtils.cast((List<?>)getProperty(JoseConstants.HEADER_X509_CHAIN)); } public void setX509Thumbprint(String x509Thumbprint) { setHeader(JoseConstants.HEADER_X509_THUMBPRINT, x509Thumbprint); } public String getX509Thumbprint() { return (String)getHeader(JoseConstants.HEADER_X509_THUMBPRINT); } public void setX509ThumbprintSHA256(String x509Thumbprint) { setHeader(JoseConstants.HEADER_X509_THUMBPRINT_SHA256, x509Thumbprint); } public String getX509ThumbprintSHA256() { return (String)getHeader(JoseConstants.HEADER_X509_THUMBPRINT_SHA256); } public void setCritical(List<String> crit) { setHeader(JoseConstants.HEADER_CRITICAL, crit); } public List<String> getCritical() { return CastUtils.cast((List<?>)getHeader(JoseConstants.HEADER_CRITICAL)); } public void setJsonWebKey(JsonWebKey key) { setJsonWebKey(JoseConstants.HEADER_JSON_WEB_KEY, key); } public void setJsonWebKey(String headerName, JsonWebKey key) { setHeader(headerName, key); } public void setJsonWebKeysUrl(String url) { setHeader(JoseConstants.HEADER_JSON_WEB_KEY_SET, url); } public String getJsonWebKeysUrl() { return (String)getHeader(JoseConstants.HEADER_JSON_WEB_KEY_SET); } public JsonWebKey getJsonWebKey() { return getJsonWebKey(JoseConstants.HEADER_JSON_WEB_KEY); } public JsonWebKey getJsonWebKey(String headerName) { Object jsonWebKey = getHeader(headerName); if (jsonWebKey == null || jsonWebKey instanceof JsonWebKey) { return (JsonWebKey)jsonWebKey; } Map<String, Object> map = CastUtils.cast((Map<?, ?>)jsonWebKey); return new JsonWebKey(map); } public final JoseHeaders setHeader(String name, Object value) { setProperty(name, value); return this; } public Object getHeader(String name) { return getProperty(name); } public JoseHeaders setIntegerHeader(String name, Integer value) { setHeader(name, value); return this; } public Integer getIntegerHeader(String name) { return getIntegerProperty(name); } public JoseHeaders setLongHeader(String name, Long value) { setHeader(name, value); return this; } public Long getLongHeader(String name) { return getLongProperty(name); } public boolean containsHeader(String name) { return containsProperty(name); } }