Skip to content

Commit

Permalink
Simplified adding certificate to TrustManager
Browse files Browse the repository at this point in the history
  • Loading branch information
Hakky54 committed Jan 12, 2024
1 parent f2a3cee commit a403198
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 28 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
*
* @author Hakan Altindag
*/
class DelegatingX509ExtendedTrustManager extends DelegatingTrustManager<X509ExtendedTrustManager> {
public class DelegatingX509ExtendedTrustManager extends DelegatingTrustManager<X509ExtendedTrustManager> {

DelegatingX509ExtendedTrustManager(X509ExtendedTrustManager trustManager) {
super(trustManager);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import nl.altindag.ssl.model.TrustManagerParameters;
import nl.altindag.ssl.trustmanager.CertificateCapturingX509ExtendedTrustManager;
import nl.altindag.ssl.trustmanager.CompositeX509ExtendedTrustManager;
import nl.altindag.ssl.trustmanager.DelegatingX509ExtendedTrustManager;
import nl.altindag.ssl.trustmanager.DummyX509ExtendedTrustManager;
import nl.altindag.ssl.trustmanager.EnhanceableX509ExtendedTrustManager;
import nl.altindag.ssl.trustmanager.HotSwappableX509ExtendedTrustManager;
Expand Down Expand Up @@ -271,49 +272,41 @@ public static void addCertificate(X509ExtendedTrustManager trustManager, X509Cer
* and it is allowed that it is wrapped in a {@link CompositeX509ExtendedTrustManager}
*/
public static void addCertificate(X509ExtendedTrustManager trustManager, List<X509Certificate> certificates) {
if (trustManager instanceof InflatableX509ExtendedTrustManager) {
((InflatableX509ExtendedTrustManager) trustManager).addCertificates(certificates);
boolean certificateAdded = addCertificateIfPossible(trustManager, certificates);
if (certificateAdded) {
return;
}

if (trustManager instanceof HotSwappableX509ExtendedTrustManager) {
if (((HotSwappableX509ExtendedTrustManager) trustManager).getInnerTrustManager() instanceof InflatableX509ExtendedTrustManager) {
((InflatableX509ExtendedTrustManager) ((HotSwappableX509ExtendedTrustManager) trustManager)
.getInnerTrustManager()).addCertificates(certificates);
return;
}

if (((HotSwappableX509ExtendedTrustManager) trustManager).getInnerTrustManager() instanceof CompositeX509ExtendedTrustManager) {
List<X509ExtendedTrustManager> innerTrustManagers = ((CompositeX509ExtendedTrustManager) ((HotSwappableX509ExtendedTrustManager) trustManager)
.getInnerTrustManager()).getInnerTrustManagers();
throw new GenericTrustManagerException(
String.format("The provided trustManager should be an instance of [%s]", InflatableX509ExtendedTrustManager.class.getName())
);
}

Optional<InflatableX509ExtendedTrustManager> inflatableX509ExtendedTrustManager = innerTrustManagers.stream()
.filter(InflatableX509ExtendedTrustManager.class::isInstance)
.map(InflatableX509ExtendedTrustManager.class::cast)
.findFirst();
private static boolean addCertificateIfPossible(X509ExtendedTrustManager trustManager, List<X509Certificate> certificates) {
if (trustManager instanceof InflatableX509ExtendedTrustManager) {
((InflatableX509ExtendedTrustManager) trustManager).addCertificates(certificates);
return true;
}

if (inflatableX509ExtendedTrustManager.isPresent()) {
inflatableX509ExtendedTrustManager.get().addCertificates(certificates);
return;
}
}
if (trustManager instanceof DelegatingX509ExtendedTrustManager) {
X509ExtendedTrustManager innerTrustManager = ((DelegatingX509ExtendedTrustManager) trustManager).getInnerTrustManager();
return addCertificateIfPossible(innerTrustManager, certificates);
}

if (trustManager instanceof CompositeX509ExtendedTrustManager) {
Optional<InflatableX509ExtendedTrustManager> inflatableX509ExtendedTrustManager = ((CompositeX509ExtendedTrustManager) trustManager).getInnerTrustManagers().stream()
List<X509ExtendedTrustManager> innerTrustManagers = ((CompositeX509ExtendedTrustManager) trustManager).getInnerTrustManagers();

Optional<InflatableX509ExtendedTrustManager> inflatableX509ExtendedTrustManager = innerTrustManagers.stream()
.filter(InflatableX509ExtendedTrustManager.class::isInstance)
.map(InflatableX509ExtendedTrustManager.class::cast)
.findFirst();

if (inflatableX509ExtendedTrustManager.isPresent()) {
inflatableX509ExtendedTrustManager.get().addCertificates(certificates);
return;
return addCertificateIfPossible(inflatableX509ExtendedTrustManager.get(), certificates);
}
}

throw new GenericTrustManagerException(
String.format("The provided trustManager should be an instance of [%s]", InflatableX509ExtendedTrustManager.class.getName())
);
return false;
}

/**
Expand Down

0 comments on commit a403198

Please sign in to comment.