/*
 * 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.nifi.web.security.x509.ocsp;

import java.security.cert.X509Certificate;
import java.util.Objects;

/**
 * A request to verify/validate the specified subject certificate via OCSP.
 */
public class OcspRequest {

    private final X509Certificate subjectCertificate;
    private final X509Certificate issuerCertificate;

    public OcspRequest(X509Certificate subjectCertificate, X509Certificate issuerCertificate) {
        this.subjectCertificate = subjectCertificate;
        this.issuerCertificate = issuerCertificate;
    }

    public X509Certificate getSubjectCertificate() {
        return subjectCertificate;
    }

    public X509Certificate getIssuerCertificate() {
        return issuerCertificate;
    }

    @Override
    public int hashCode() {
        int hash = 7;
        hash = 67 * hash + Objects.hashCode(this.subjectCertificate);
        hash = 67 * hash + Objects.hashCode(this.issuerCertificate);
        return hash;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final OcspRequest other = (OcspRequest) obj;
        if (!Objects.equals(this.subjectCertificate, other.subjectCertificate)) {
            return false;
        }
        if (!Objects.equals(this.issuerCertificate, other.issuerCertificate)) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "NiFi OCSP Request: " +
            "Subject DN: " + (subjectCertificate != null ? subjectCertificate.getSubjectX500Principal().getName() : "<null>") +
            " issued by " +
            "Issuer DN: " + (issuerCertificate != null ? issuerCertificate.getSubjectX500Principal().getName() : "<null>");
    }

}
