class io.vertx.ext.mongo.impl.config.SSLSettingsParser
  minor version: 0
  major version: 59
  flags: flags: (0x0020) ACC_SUPER
  this_class: io.vertx.ext.mongo.impl.config.SSLSettingsParser
  super_class: java.lang.Object
{
  private static final io.vertx.core.logging.Logger log;
    descriptor: Lio/vertx/core/logging/Logger;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private final com.mongodb.ConnectionString connectionString;
    descriptor: Lcom/mongodb/ConnectionString;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final io.vertx.core.json.JsonObject config;
    descriptor: Lio/vertx/core/json/JsonObject;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 26
            ldc Lio/vertx/ext/mongo/impl/config/SSLSettingsParser;
            invokestatic io.vertx.core.logging.LoggerFactory.getLogger:(Ljava/lang/Class;)Lio/vertx/core/logging/Logger;
            putstatic io.vertx.ext.mongo.impl.config.SSLSettingsParser.log:Lio/vertx/core/logging/Logger;
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  void <init>(com.mongodb.ConnectionString, io.vertx.core.json.JsonObject);
    descriptor: (Lcom/mongodb/ConnectionString;Lio/vertx/core/json/JsonObject;)V
    flags: (0x0000) 
    Code:
      stack=2, locals=3, args_size=3
        start local 0 // io.vertx.ext.mongo.impl.config.SSLSettingsParser this
        start local 1 // com.mongodb.ConnectionString connectionString
        start local 2 // io.vertx.core.json.JsonObject config
         0: .line 30
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 31
            aload 0 /* this */
            aload 1 /* connectionString */
            putfield io.vertx.ext.mongo.impl.config.SSLSettingsParser.connectionString:Lcom/mongodb/ConnectionString;
         2: .line 32
            aload 0 /* this */
            aload 2 /* config */
            putfield io.vertx.ext.mongo.impl.config.SSLSettingsParser.config:Lio/vertx/core/json/JsonObject;
         3: .line 33
            return
        end local 2 // io.vertx.core.json.JsonObject config
        end local 1 // com.mongodb.ConnectionString connectionString
        end local 0 // io.vertx.ext.mongo.impl.config.SSLSettingsParser this
      LocalVariableTable:
        Start  End  Slot              Name  Signature
            0    4     0              this  Lio/vertx/ext/mongo/impl/config/SSLSettingsParser;
            0    4     1  connectionString  Lcom/mongodb/ConnectionString;
            0    4     2            config  Lio/vertx/core/json/JsonObject;
    MethodParameters:
                  Name  Flags
      connectionString  
      config            

  public com.mongodb.connection.SslSettings settings();
    descriptor: ()Lcom/mongodb/connection/SslSettings;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=6, locals=6, args_size=1
        start local 0 // io.vertx.ext.mongo.impl.config.SSLSettingsParser this
         0: .line 36
            aload 0 /* this */
            invokevirtual io.vertx.ext.mongo.impl.config.SSLSettingsParser.fromConnectionString:()Ljava/util/Optional;
            aload 0 /* this */
            invokedynamic get(Lio/vertx/ext/mongo/impl/config/SSLSettingsParser;)Ljava/util/function/Supplier;
              Bootstrap: invokestatic java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
                Method arguments:
                  ()Ljava/lang/Object;
                  io/vertx/ext/mongo/impl/config/SSLSettingsParser.fromConfiguration()Lcom/mongodb/connection/SslSettings$Builder; (7)
                  ()Lcom/mongodb/connection/SslSettings$Builder;
            invokevirtual java.util.Optional.orElseGet:(Ljava/util/function/Supplier;)Ljava/lang/Object;
            checkcast com.mongodb.connection.SslSettings$Builder
            astore 1 /* builder */
        start local 1 // com.mongodb.connection.SslSettings$Builder builder
         1: .line 37
            aload 0 /* this */
            getfield io.vertx.ext.mongo.impl.config.SSLSettingsParser.config:Lio/vertx/core/json/JsonObject;
            ldc "trustAll"
            iconst_0
            invokestatic java.lang.Boolean.valueOf:(Z)Ljava/lang/Boolean;
            invokevirtual io.vertx.core.json.JsonObject.getBoolean:(Ljava/lang/String;Ljava/lang/Boolean;)Ljava/lang/Boolean;
            invokevirtual java.lang.Boolean.booleanValue:()Z
            ifeq 8
         2: .line 38
            getstatic io.vertx.ext.mongo.impl.config.SSLSettingsParser.log:Lio/vertx/core/logging/Logger;
            ldc "Mongo client has been set to trust ALL certificates, this can open you up to security issues. Make sure you know the risks."
            invokevirtual io.vertx.core.logging.Logger.warn:(Ljava/lang/Object;)V
         3: .line 40
            ldc "TLS"
            invokestatic javax.net.ssl.SSLContext.getInstance:(Ljava/lang/String;)Ljavax/net/ssl/SSLContext;
            astore 3 /* context */
        start local 3 // javax.net.ssl.SSLContext context
         4: .line 41
            aload 3 /* context */
            aconst_null
            iconst_1
            anewarray javax.net.ssl.TrustManager
            dup
            iconst_0
            getstatic io.vertx.core.net.impl.TrustAllTrustManager.INSTANCE:Lio/vertx/core/net/impl/TrustAllTrustManager;
            aastore
            new java.security.SecureRandom
            dup
            invokespecial java.security.SecureRandom.<init>:()V
            invokevirtual javax.net.ssl.SSLContext.init:([Ljavax/net/ssl/KeyManager;[Ljavax/net/ssl/TrustManager;Ljava/security/SecureRandom;)V
         5: .line 42
            aload 1 /* builder */
            aload 3 /* context */
            invokevirtual com.mongodb.connection.SslSettings$Builder.context:(Ljavax/net/ssl/SSLContext;)Lcom/mongodb/connection/SslSettings$Builder;
            pop
        end local 3 // javax.net.ssl.SSLContext context
         6: .line 43
            goto 8
      StackMap locals: io.vertx.ext.mongo.impl.config.SSLSettingsParser com.mongodb.connection.SslSettings$Builder
      StackMap stack: java.security.GeneralSecurityException
         7: pop
         8: .line 47
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield io.vertx.ext.mongo.impl.config.SSLSettingsParser.config:Lio/vertx/core/json/JsonObject;
            ldc "caPath"
            invokevirtual io.vertx.core.json.JsonObject.containsKey:(Ljava/lang/String;)Z
            ifeq 19
         9: .line 48
            aload 0 /* this */
            getfield io.vertx.ext.mongo.impl.config.SSLSettingsParser.config:Lio/vertx/core/json/JsonObject;
            ldc "caPath"
            invokevirtual io.vertx.core.json.JsonObject.getString:(Ljava/lang/String;)Ljava/lang/String;
            astore 3 /* caPath */
        start local 3 // java.lang.String caPath
        10: .line 50
            aload 3 /* caPath */
            invokestatic io.vertx.ext.mongo.impl.config.SSLSettingsParser.buildTrustManagerFactory:(Ljava/lang/String;)Ljavax/net/ssl/TrustManagerFactory;
            astore 4 /* tmf */
        start local 4 // javax.net.ssl.TrustManagerFactory tmf
        11: .line 51
            ldc "TLS"
            invokestatic javax.net.ssl.SSLContext.getInstance:(Ljava/lang/String;)Ljavax/net/ssl/SSLContext;
            astore 5 /* context */
        start local 5 // javax.net.ssl.SSLContext context
        12: .line 52
            aload 5 /* context */
            aconst_null
            aload 4 /* tmf */
            invokevirtual javax.net.ssl.TrustManagerFactory.getTrustManagers:()[Ljavax/net/ssl/TrustManager;
            new java.security.SecureRandom
            dup
            invokespecial java.security.SecureRandom.<init>:()V
            invokevirtual javax.net.ssl.SSLContext.init:([Ljavax/net/ssl/KeyManager;[Ljavax/net/ssl/TrustManager;Ljava/security/SecureRandom;)V
        13: .line 53
            aload 1 /* builder */
            aload 5 /* context */
            invokevirtual com.mongodb.connection.SslSettings$Builder.context:(Ljavax/net/ssl/SSLContext;)Lcom/mongodb/connection/SslSettings$Builder;
            pop
        end local 5 // javax.net.ssl.SSLContext context
        end local 4 // javax.net.ssl.TrustManagerFactory tmf
        14: .line 54
            goto 19
      StackMap locals: io.vertx.ext.mongo.impl.config.SSLSettingsParser com.mongodb.connection.SslSettings$Builder top java.lang.String
      StackMap stack: java.io.FileNotFoundException
        15: astore 4 /* e */
        start local 4 // java.io.FileNotFoundException e
        16: .line 55
            new java.lang.IllegalArgumentException
            dup
            new java.lang.StringBuilder
            dup
            ldc "Invalid caPath "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 4 /* e */
            invokevirtual java.io.FileNotFoundException.getMessage:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
        end local 4 // java.io.FileNotFoundException e
        17: .line 56
      StackMap locals:
      StackMap stack: java.lang.Exception
            astore 4 /* e */
        start local 4 // java.lang.Exception e
        18: .line 57
            new java.lang.IllegalArgumentException
            dup
            new java.lang.StringBuilder
            dup
            ldc "Unable to load certificate from caPath '"
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 3 /* caPath */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc "' "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 4 /* e */
            invokevirtual java.lang.Exception.getMessage:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
        end local 4 // java.lang.Exception e
        end local 3 // java.lang.String caPath
        19: .line 60
      StackMap locals: io.vertx.ext.mongo.impl.config.SSLSettingsParser com.mongodb.connection.SslSettings$Builder
      StackMap stack:
            aload 1 /* builder */
            invokevirtual com.mongodb.connection.SslSettings$Builder.build:()Lcom/mongodb/connection/SslSettings;
            areturn
        end local 1 // com.mongodb.connection.SslSettings$Builder builder
        end local 0 // io.vertx.ext.mongo.impl.config.SSLSettingsParser this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0   20     0     this  Lio/vertx/ext/mongo/impl/config/SSLSettingsParser;
            1   20     1  builder  Lcom/mongodb/connection/SslSettings$Builder;
            4    6     3  context  Ljavax/net/ssl/SSLContext;
           10   19     3   caPath  Ljava/lang/String;
           11   14     4      tmf  Ljavax/net/ssl/TrustManagerFactory;
           12   14     5  context  Ljavax/net/ssl/SSLContext;
           16   17     4        e  Ljava/io/FileNotFoundException;
           18   19     4        e  Ljava/lang/Exception;
      Exception table:
        from    to  target  type
           3     6       7  Class java.security.NoSuchAlgorithmException
           3     6       7  Class java.security.KeyManagementException
          10    14      15  Class java.io.FileNotFoundException
          10    14      17  Class java.security.NoSuchAlgorithmException
          10    14      17  Class java.security.cert.CertificateException
          10    14      17  Class java.security.KeyStoreException
          10    14      17  Class java.io.IOException
          10    14      17  Class java.security.KeyManagementException

  private java.util.Optional<com.mongodb.connection.SslSettings$Builder> fromConnectionString();
    descriptor: ()Ljava/util/Optional;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // io.vertx.ext.mongo.impl.config.SSLSettingsParser this
         0: .line 64
            aload 0 /* this */
            getfield io.vertx.ext.mongo.impl.config.SSLSettingsParser.connectionString:Lcom/mongodb/ConnectionString;
            invokestatic java.util.Optional.ofNullable:(Ljava/lang/Object;)Ljava/util/Optional;
            invokedynamic apply()Ljava/util/function/Function;
              Bootstrap: invokestatic java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
                Method arguments:
                  (Ljava/lang/Object;)Ljava/lang/Object;
                  io/vertx/ext/mongo/impl/config/SSLSettingsParser.lambda$1(Lcom/mongodb/ConnectionString;)Lcom/mongodb/connection/SslSettings$Builder; (6)
                  (Lcom/mongodb/ConnectionString;)Lcom/mongodb/connection/SslSettings$Builder;
            invokevirtual java.util.Optional.map:(Ljava/util/function/Function;)Ljava/util/Optional;
            areturn
        end local 0 // io.vertx.ext.mongo.impl.config.SSLSettingsParser this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lio/vertx/ext/mongo/impl/config/SSLSettingsParser;
    Signature: ()Ljava/util/Optional<Lcom/mongodb/connection/SslSettings$Builder;>;

  private com.mongodb.connection.SslSettings$Builder fromConfiguration();
    descriptor: ()Lcom/mongodb/connection/SslSettings$Builder;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=1, args_size=1
        start local 0 // io.vertx.ext.mongo.impl.config.SSLSettingsParser this
         0: .line 71
            invokestatic com.mongodb.connection.SslSettings.builder:()Lcom/mongodb/connection/SslSettings$Builder;
         1: .line 72
            aload 0 /* this */
            getfield io.vertx.ext.mongo.impl.config.SSLSettingsParser.config:Lio/vertx/core/json/JsonObject;
            ldc "ssl"
            iconst_0
            invokestatic java.lang.Boolean.valueOf:(Z)Ljava/lang/Boolean;
            invokevirtual io.vertx.core.json.JsonObject.getBoolean:(Ljava/lang/String;Ljava/lang/Boolean;)Ljava/lang/Boolean;
            invokevirtual java.lang.Boolean.booleanValue:()Z
            invokevirtual com.mongodb.connection.SslSettings$Builder.enabled:(Z)Lcom/mongodb/connection/SslSettings$Builder;
         2: .line 73
            aload 0 /* this */
            getfield io.vertx.ext.mongo.impl.config.SSLSettingsParser.config:Lio/vertx/core/json/JsonObject;
            ldc "sslInvalidHostNameAllowed"
            iconst_0
            invokestatic java.lang.Boolean.valueOf:(Z)Ljava/lang/Boolean;
            invokevirtual io.vertx.core.json.JsonObject.getBoolean:(Ljava/lang/String;Ljava/lang/Boolean;)Ljava/lang/Boolean;
            invokevirtual java.lang.Boolean.booleanValue:()Z
            invokevirtual com.mongodb.connection.SslSettings$Builder.invalidHostNameAllowed:(Z)Lcom/mongodb/connection/SslSettings$Builder;
         3: .line 71
            areturn
        end local 0 // io.vertx.ext.mongo.impl.config.SSLSettingsParser this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    4     0  this  Lio/vertx/ext/mongo/impl/config/SSLSettingsParser;

  private static javax.net.ssl.TrustManagerFactory buildTrustManagerFactory(java.lang.String);
    descriptor: (Ljava/lang/String;)Ljavax/net/ssl/TrustManagerFactory;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=3, locals=6, args_size=1
        start local 0 // java.lang.String caPath
         0: .line 78
            ldc "X.509"
            invokestatic java.security.cert.CertificateFactory.getInstance:(Ljava/lang/String;)Ljava/security/cert/CertificateFactory;
            astore 1 /* fact */
        start local 1 // java.security.cert.CertificateFactory fact
         1: .line 79
            new java.io.FileInputStream
            dup
            aload 0 /* caPath */
            invokespecial java.io.FileInputStream.<init>:(Ljava/lang/String;)V
            astore 2 /* is */
        start local 2 // java.io.FileInputStream is
         2: .line 80
            aload 1 /* fact */
            aload 2 /* is */
            invokevirtual java.security.cert.CertificateFactory.generateCertificate:(Ljava/io/InputStream;)Ljava/security/cert/Certificate;
            checkcast java.security.cert.X509Certificate
            astore 3 /* cert */
        start local 3 // java.security.cert.X509Certificate cert
         3: .line 82
            invokestatic java.security.KeyStore.getDefaultType:()Ljava/lang/String;
            invokestatic java.security.KeyStore.getInstance:(Ljava/lang/String;)Ljava/security/KeyStore;
            astore 4 /* ks */
        start local 4 // java.security.KeyStore ks
         4: .line 83
            aload 4 /* ks */
            aconst_null
            aconst_null
            invokevirtual java.security.KeyStore.load:(Ljava/io/InputStream;[C)V
         5: .line 84
            aload 4 /* ks */
            ldc "1"
            aload 3 /* cert */
            invokevirtual java.security.KeyStore.setCertificateEntry:(Ljava/lang/String;Ljava/security/cert/Certificate;)V
         6: .line 86
            invokestatic javax.net.ssl.TrustManagerFactory.getDefaultAlgorithm:()Ljava/lang/String;
            invokestatic javax.net.ssl.TrustManagerFactory.getInstance:(Ljava/lang/String;)Ljavax/net/ssl/TrustManagerFactory;
            astore 5 /* trustManagerFactory */
        start local 5 // javax.net.ssl.TrustManagerFactory trustManagerFactory
         7: .line 87
            aload 5 /* trustManagerFactory */
            aload 4 /* ks */
            invokevirtual javax.net.ssl.TrustManagerFactory.init:(Ljava/security/KeyStore;)V
         8: .line 89
            aload 5 /* trustManagerFactory */
            areturn
        end local 5 // javax.net.ssl.TrustManagerFactory trustManagerFactory
        end local 4 // java.security.KeyStore ks
        end local 3 // java.security.cert.X509Certificate cert
        end local 2 // java.io.FileInputStream is
        end local 1 // java.security.cert.CertificateFactory fact
        end local 0 // java.lang.String caPath
      LocalVariableTable:
        Start  End  Slot                 Name  Signature
            0    9     0               caPath  Ljava/lang/String;
            1    9     1                 fact  Ljava/security/cert/CertificateFactory;
            2    9     2                   is  Ljava/io/FileInputStream;
            3    9     3                 cert  Ljava/security/cert/X509Certificate;
            4    9     4                   ks  Ljava/security/KeyStore;
            7    9     5  trustManagerFactory  Ljavax/net/ssl/TrustManagerFactory;
    Exceptions:
      throws java.security.NoSuchAlgorithmException, java.security.cert.CertificateException, java.security.KeyStoreException, java.io.IOException
    MethodParameters:
        Name  Flags
      caPath  final

  private static com.mongodb.connection.SslSettings$Builder lambda$1(com.mongodb.ConnectionString);
    descriptor: (Lcom/mongodb/ConnectionString;)Lcom/mongodb/connection/SslSettings$Builder;
    flags: (0x100a) ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // com.mongodb.ConnectionString cs
         0: .line 65
            invokestatic com.mongodb.connection.SslSettings.builder:()Lcom/mongodb/connection/SslSettings$Builder;
         1: .line 66
            aload 0 /* cs */
            invokevirtual com.mongodb.connection.SslSettings$Builder.applyConnectionString:(Lcom/mongodb/ConnectionString;)Lcom/mongodb/connection/SslSettings$Builder;
            areturn
        end local 0 // com.mongodb.ConnectionString cs
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0    cs  Lcom/mongodb/ConnectionString;
}
SourceFile: "SSLSettingsParser.java"
InnerClasses:
  public final Builder = com.mongodb.connection.SslSettings$Builder of com.mongodb.connection.SslSettings
  public final Lookup = java.lang.invoke.MethodHandles$Lookup of java.lang.invoke.MethodHandles