package com.airlock.iam.security.ssl;

import com.airlock.iam.security.util.SeededSecureRandom;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.X509Certificate;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

@SuppressFBWarnings("WEAK_TRUST_MANAGER")
public final class AllTrusting {
   public static SSLContext allTrustingSslContext() {
      try {
         SSLContext ssl = SSLContext.getInstance("TLS");
         ssl.init(null, allTrustingTrustManager(), SeededSecureRandom.getInstance());
         return ssl;
      } catch (NoSuchAlgorithmException | KeyManagementException e) {
         throw new IllegalStateException(e);
      }
   }

   public static TrustManager[] allTrustingTrustManager() {
      return new TrustManager[]{new X509TrustManager() {
         @Override
         public X509Certificate[] getAcceptedIssuers() {
            return new X509Certificate[0];
         }

         @Override
         public void checkClientTrusted(X509Certificate[] certs, String authType) {
         }

         @Override
         public void checkServerTrusted(X509Certificate[] certs, String authType) {
         }
      }};
   }

   public static HostnameVerifier allTrustingHostnameVerifier() {
      return (hostname, session) -> true;
   }

   private AllTrusting() {
      throw new AssertionError();
   }
}
