package org.apereo.cas.adaptors.x509.authentication.principal;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import org.apereo.cas.adaptors.x509.util.CertUtils;
import org.apereo.cas.adaptors.x509.util.X509CertificateCredentialJsonDeserializer;
import org.apereo.cas.adaptors.x509.util.X509CertificateCredentialJsonSerializer;
import org.apereo.cas.authentication.AbstractCredential;
import java.security.cert.X509Certificate;
import java.util.Arrays;
/**
* An X.509 certificate credential.
*
* @author Scott Battaglia
* @author Marvin S. Addison
* @since 3.0.0
*/
@JsonSerialize(using = X509CertificateCredentialJsonSerializer.class)
@JsonDeserialize(using = X509CertificateCredentialJsonDeserializer.class)
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY)
public class X509CertificateCredential extends AbstractCredential {
/**
* Unique Id for serialization.
*/
private static final long serialVersionUID = 631753409512746474L;
/**
* The collection of certificates sent with the request.
*/
private final X509Certificate[] certificates;
/**
* The certificate that we actually use.
*/
private X509Certificate certificate;
/**
* Instantiates a new x509 certificate credential.
*
* @param certificates the certificates
*/
public X509CertificateCredential(final X509Certificate[] certificates) {
this.certificates = Arrays.copyOf(certificates, certificates.length);
}
public X509Certificate[] getCertificates() {
return Arrays.copyOf(this.certificates, this.certificates.length);
}
public void setCertificate(final X509Certificate certificate) {
this.certificate = certificate;
}
public X509Certificate getCertificate() {
return this.certificate;
}
@Override
public String getId() {
X509Certificate cert = null;
if (this.certificate != null) {
cert = this.certificate;
} else if (this.certificates.length > 0) {
cert = this.certificates[0];
}
if (cert != null) {
return CertUtils.toString(cert);
}
return UNKNOWN_ID;
}
}