public class io.vertx.ext.auth.mongo.impl.MongoUserUtilImpl implements io.vertx.ext.auth.mongo.MongoUserUtil
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: io.vertx.ext.auth.mongo.impl.MongoUserUtilImpl
  super_class: java.lang.Object
{
  private final io.vertx.ext.mongo.MongoClient client;
    descriptor: Lio/vertx/ext/mongo/MongoClient;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final io.vertx.ext.auth.HashingStrategy strategy;
    descriptor: Lio/vertx/ext/auth/HashingStrategy;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final java.security.SecureRandom random;
    descriptor: Ljava/security/SecureRandom;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final io.vertx.ext.auth.mongo.MongoAuthenticationOptions authnOptions;
    descriptor: Lio/vertx/ext/auth/mongo/MongoAuthenticationOptions;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final io.vertx.ext.auth.mongo.MongoAuthorizationOptions authzOptions;
    descriptor: Lio/vertx/ext/auth/mongo/MongoAuthorizationOptions;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  public void <init>(io.vertx.ext.mongo.MongoClient);
    descriptor: (Lio/vertx/ext/mongo/MongoClient;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=2, args_size=2
        start local 0 // io.vertx.ext.auth.mongo.impl.MongoUserUtilImpl this
        start local 1 // io.vertx.ext.mongo.MongoClient client
         0: .line 43
            aload 0 /* this */
            aload 1 /* client */
            new io.vertx.ext.auth.mongo.MongoAuthenticationOptions
            dup
            invokespecial io.vertx.ext.auth.mongo.MongoAuthenticationOptions.<init>:()V
            new io.vertx.ext.auth.mongo.MongoAuthorizationOptions
            dup
            invokespecial io.vertx.ext.auth.mongo.MongoAuthorizationOptions.<init>:()V
            invokespecial io.vertx.ext.auth.mongo.impl.MongoUserUtilImpl.<init>:(Lio/vertx/ext/mongo/MongoClient;Lio/vertx/ext/auth/mongo/MongoAuthenticationOptions;Lio/vertx/ext/auth/mongo/MongoAuthorizationOptions;)V
         1: .line 44
            return
        end local 1 // io.vertx.ext.mongo.MongoClient client
        end local 0 // io.vertx.ext.auth.mongo.impl.MongoUserUtilImpl this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    2     0    this  Lio/vertx/ext/auth/mongo/impl/MongoUserUtilImpl;
            0    2     1  client  Lio/vertx/ext/mongo/MongoClient;
    MethodParameters:
        Name  Flags
      client  

  public void <init>(io.vertx.ext.mongo.MongoClient, io.vertx.ext.auth.mongo.MongoAuthenticationOptions, io.vertx.ext.auth.mongo.MongoAuthorizationOptions);
    descriptor: (Lio/vertx/ext/mongo/MongoClient;Lio/vertx/ext/auth/mongo/MongoAuthenticationOptions;Lio/vertx/ext/auth/mongo/MongoAuthorizationOptions;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=4, args_size=4
        start local 0 // io.vertx.ext.auth.mongo.impl.MongoUserUtilImpl this
        start local 1 // io.vertx.ext.mongo.MongoClient client
        start local 2 // io.vertx.ext.auth.mongo.MongoAuthenticationOptions authnOptions
        start local 3 // io.vertx.ext.auth.mongo.MongoAuthorizationOptions authzOptions
         0: .line 46
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 36
            aload 0 /* this */
            invokestatic io.vertx.ext.auth.HashingStrategy.load:()Lio/vertx/ext/auth/HashingStrategy;
            putfield io.vertx.ext.auth.mongo.impl.MongoUserUtilImpl.strategy:Lio/vertx/ext/auth/HashingStrategy;
         2: .line 37
            aload 0 /* this */
            new java.security.SecureRandom
            dup
            invokespecial java.security.SecureRandom.<init>:()V
            putfield io.vertx.ext.auth.mongo.impl.MongoUserUtilImpl.random:Ljava/security/SecureRandom;
         3: .line 47
            aload 0 /* this */
            aload 1 /* client */
            putfield io.vertx.ext.auth.mongo.impl.MongoUserUtilImpl.client:Lio/vertx/ext/mongo/MongoClient;
         4: .line 48
            aload 0 /* this */
            aload 2 /* authnOptions */
            putfield io.vertx.ext.auth.mongo.impl.MongoUserUtilImpl.authnOptions:Lio/vertx/ext/auth/mongo/MongoAuthenticationOptions;
         5: .line 49
            aload 0 /* this */
            aload 3 /* authzOptions */
            putfield io.vertx.ext.auth.mongo.impl.MongoUserUtilImpl.authzOptions:Lio/vertx/ext/auth/mongo/MongoAuthorizationOptions;
         6: .line 50
            return
        end local 3 // io.vertx.ext.auth.mongo.MongoAuthorizationOptions authzOptions
        end local 2 // io.vertx.ext.auth.mongo.MongoAuthenticationOptions authnOptions
        end local 1 // io.vertx.ext.mongo.MongoClient client
        end local 0 // io.vertx.ext.auth.mongo.impl.MongoUserUtilImpl this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    7     0          this  Lio/vertx/ext/auth/mongo/impl/MongoUserUtilImpl;
            0    7     1        client  Lio/vertx/ext/mongo/MongoClient;
            0    7     2  authnOptions  Lio/vertx/ext/auth/mongo/MongoAuthenticationOptions;
            0    7     3  authzOptions  Lio/vertx/ext/auth/mongo/MongoAuthorizationOptions;
    MethodParameters:
              Name  Flags
      client        
      authnOptions  
      authzOptions  

  public io.vertx.ext.auth.mongo.MongoUserUtil createUser(java.lang.String, java.lang.String, io.vertx.core.Handler<io.vertx.core.AsyncResult<java.lang.String>>);
    descriptor: (Ljava/lang/String;Ljava/lang/String;Lio/vertx/core/Handler;)Lio/vertx/ext/auth/mongo/MongoUserUtil;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=7, locals=5, args_size=4
        start local 0 // io.vertx.ext.auth.mongo.impl.MongoUserUtilImpl this
        start local 1 // java.lang.String username
        start local 2 // java.lang.String password
        start local 3 // io.vertx.core.Handler resultHandler
         0: .line 54
            aload 1 /* username */
            ifnull 1
            aload 2 /* password */
            ifnonnull 3
         1: .line 55
      StackMap locals:
      StackMap stack:
            aload 3 /* resultHandler */
            ldc "username or password are null"
            invokestatic io.vertx.core.Future.failedFuture:(Ljava/lang/String;)Lio/vertx/core/Future;
            invokeinterface io.vertx.core.Handler.handle:(Ljava/lang/Object;)V
         2: .line 56
            aload 0 /* this */
            areturn
         3: .line 59
      StackMap locals:
      StackMap stack:
            bipush 32
            newarray 8
            astore 4 /* salt */
        start local 4 // byte[] salt
         4: .line 60
            aload 0 /* this */
            getfield io.vertx.ext.auth.mongo.impl.MongoUserUtilImpl.random:Ljava/security/SecureRandom;
            aload 4 /* salt */
            invokevirtual java.security.SecureRandom.nextBytes:([B)V
         5: .line 62
            aload 0 /* this */
         6: .line 63
            aload 1 /* username */
         7: .line 64
            aload 0 /* this */
            getfield io.vertx.ext.auth.mongo.impl.MongoUserUtilImpl.strategy:Lio/vertx/ext/auth/HashingStrategy;
            ldc "pbkdf2"
         8: .line 65
            aconst_null
         9: .line 66
            invokestatic java.util.Base64.getMimeEncoder:()Ljava/util/Base64$Encoder;
            aload 4 /* salt */
            invokevirtual java.util.Base64$Encoder.encodeToString:([B)Ljava/lang/String;
        10: .line 67
            aload 2 /* password */
        11: .line 64
            invokeinterface io.vertx.ext.auth.HashingStrategy.hash:(Ljava/lang/String;Ljava/util/Map;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
        12: .line 68
            aload 3 /* resultHandler */
        13: .line 62
            invokevirtual io.vertx.ext.auth.mongo.impl.MongoUserUtilImpl.createHashedUser:(Ljava/lang/String;Ljava/lang/String;Lio/vertx/core/Handler;)Lio/vertx/ext/auth/mongo/MongoUserUtil;
            areturn
        end local 4 // byte[] salt
        end local 3 // io.vertx.core.Handler resultHandler
        end local 2 // java.lang.String password
        end local 1 // java.lang.String username
        end local 0 // io.vertx.ext.auth.mongo.impl.MongoUserUtilImpl this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   14     0           this  Lio/vertx/ext/auth/mongo/impl/MongoUserUtilImpl;
            0   14     1       username  Ljava/lang/String;
            0   14     2       password  Ljava/lang/String;
            0   14     3  resultHandler  Lio/vertx/core/Handler<Lio/vertx/core/AsyncResult<Ljava/lang/String;>;>;
            4   14     4           salt  [B
    Signature: (Ljava/lang/String;Ljava/lang/String;Lio/vertx/core/Handler<Lio/vertx/core/AsyncResult<Ljava/lang/String;>;>;)Lio/vertx/ext/auth/mongo/MongoUserUtil;
    MethodParameters:
               Name  Flags
      username       
      password       
      resultHandler  

  public io.vertx.ext.auth.mongo.MongoUserUtil createHashedUser(java.lang.String, java.lang.String, io.vertx.core.Handler<io.vertx.core.AsyncResult<java.lang.String>>);
    descriptor: (Ljava/lang/String;Ljava/lang/String;Lio/vertx/core/Handler;)Lio/vertx/ext/auth/mongo/MongoUserUtil;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=4, args_size=4
        start local 0 // io.vertx.ext.auth.mongo.impl.MongoUserUtilImpl this
        start local 1 // java.lang.String username
        start local 2 // java.lang.String hash
        start local 3 // io.vertx.core.Handler resultHandler
         0: .line 74
            aload 1 /* username */
            ifnull 1
            aload 2 /* hash */
            ifnonnull 3
         1: .line 75
      StackMap locals:
      StackMap stack:
            aload 3 /* resultHandler */
            ldc "username or password hash are null"
            invokestatic io.vertx.core.Future.failedFuture:(Ljava/lang/String;)Lio/vertx/core/Future;
            invokeinterface io.vertx.core.Handler.handle:(Ljava/lang/Object;)V
         2: .line 76
            aload 0 /* this */
            areturn
         3: .line 79
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield io.vertx.ext.auth.mongo.impl.MongoUserUtilImpl.client:Lio/vertx/ext/mongo/MongoClient;
         4: .line 80
            aload 0 /* this */
            getfield io.vertx.ext.auth.mongo.impl.MongoUserUtilImpl.authnOptions:Lio/vertx/ext/auth/mongo/MongoAuthenticationOptions;
            invokevirtual io.vertx.ext.auth.mongo.MongoAuthenticationOptions.getCollectionName:()Ljava/lang/String;
         5: .line 81
            new io.vertx.core.json.JsonObject
            dup
            invokespecial io.vertx.core.json.JsonObject.<init>:()V
         6: .line 82
            aload 0 /* this */
            getfield io.vertx.ext.auth.mongo.impl.MongoUserUtilImpl.authnOptions:Lio/vertx/ext/auth/mongo/MongoAuthenticationOptions;
            invokevirtual io.vertx.ext.auth.mongo.MongoAuthenticationOptions.getUsernameCredentialField:()Ljava/lang/String;
            aload 1 /* username */
            invokevirtual io.vertx.core.json.JsonObject.put:(Ljava/lang/String;Ljava/lang/Object;)Lio/vertx/core/json/JsonObject;
         7: .line 83
            aload 0 /* this */
            getfield io.vertx.ext.auth.mongo.impl.MongoUserUtilImpl.authnOptions:Lio/vertx/ext/auth/mongo/MongoAuthenticationOptions;
            invokevirtual io.vertx.ext.auth.mongo.MongoAuthenticationOptions.getPasswordCredentialField:()Ljava/lang/String;
            aload 2 /* hash */
            invokevirtual io.vertx.core.json.JsonObject.put:(Ljava/lang/String;Ljava/lang/Object;)Lio/vertx/core/json/JsonObject;
         8: .line 84
            aload 3 /* resultHandler */
         9: .line 79
            invokeinterface io.vertx.ext.mongo.MongoClient.save:(Ljava/lang/String;Lio/vertx/core/json/JsonObject;Lio/vertx/core/Handler;)Lio/vertx/ext/mongo/MongoClient;
            pop
        10: .line 85
            aload 0 /* this */
            areturn
        end local 3 // io.vertx.core.Handler resultHandler
        end local 2 // java.lang.String hash
        end local 1 // java.lang.String username
        end local 0 // io.vertx.ext.auth.mongo.impl.MongoUserUtilImpl this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   11     0           this  Lio/vertx/ext/auth/mongo/impl/MongoUserUtilImpl;
            0   11     1       username  Ljava/lang/String;
            0   11     2           hash  Ljava/lang/String;
            0   11     3  resultHandler  Lio/vertx/core/Handler<Lio/vertx/core/AsyncResult<Ljava/lang/String;>;>;
    Signature: (Ljava/lang/String;Ljava/lang/String;Lio/vertx/core/Handler<Lio/vertx/core/AsyncResult<Ljava/lang/String;>;>;)Lio/vertx/ext/auth/mongo/MongoUserUtil;
    MethodParameters:
               Name  Flags
      username       
      hash           
      resultHandler  

  public io.vertx.ext.auth.mongo.MongoUserUtil createUserRolesAndPermissions(java.lang.String, java.util.List<java.lang.String>, java.util.List<java.lang.String>, io.vertx.core.Handler<io.vertx.core.AsyncResult<java.lang.String>>);
    descriptor: (Ljava/lang/String;Ljava/util/List;Ljava/util/List;Lio/vertx/core/Handler;)Lio/vertx/ext/auth/mongo/MongoUserUtil;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=5, args_size=5
        start local 0 // io.vertx.ext.auth.mongo.impl.MongoUserUtilImpl this
        start local 1 // java.lang.String username
        start local 2 // java.util.List roles
        start local 3 // java.util.List permissions
        start local 4 // io.vertx.core.Handler resultHandler
         0: .line 90
            aload 1 /* username */
            ifnonnull 3
         1: .line 91
            aload 4 /* resultHandler */
            ldc "username is null"
            invokestatic io.vertx.core.Future.failedFuture:(Ljava/lang/String;)Lio/vertx/core/Future;
            invokeinterface io.vertx.core.Handler.handle:(Ljava/lang/Object;)V
         2: .line 92
            aload 0 /* this */
            areturn
         3: .line 95
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield io.vertx.ext.auth.mongo.impl.MongoUserUtilImpl.client:Lio/vertx/ext/mongo/MongoClient;
         4: .line 96
            aload 0 /* this */
            getfield io.vertx.ext.auth.mongo.impl.MongoUserUtilImpl.authzOptions:Lio/vertx/ext/auth/mongo/MongoAuthorizationOptions;
            invokevirtual io.vertx.ext.auth.mongo.MongoAuthorizationOptions.getCollectionName:()Ljava/lang/String;
         5: .line 97
            new io.vertx.core.json.JsonObject
            dup
            invokespecial io.vertx.core.json.JsonObject.<init>:()V
         6: .line 98
            aload 0 /* this */
            getfield io.vertx.ext.auth.mongo.impl.MongoUserUtilImpl.authzOptions:Lio/vertx/ext/auth/mongo/MongoAuthorizationOptions;
            invokevirtual io.vertx.ext.auth.mongo.MongoAuthorizationOptions.getUsernameField:()Ljava/lang/String;
            aload 1 /* username */
            invokevirtual io.vertx.core.json.JsonObject.put:(Ljava/lang/String;Ljava/lang/Object;)Lio/vertx/core/json/JsonObject;
         7: .line 99
            aload 0 /* this */
            getfield io.vertx.ext.auth.mongo.impl.MongoUserUtilImpl.authzOptions:Lio/vertx/ext/auth/mongo/MongoAuthorizationOptions;
            invokevirtual io.vertx.ext.auth.mongo.MongoAuthorizationOptions.getRoleField:()Ljava/lang/String;
            aload 2 /* roles */
            ifnonnull 8
            invokestatic java.util.Collections.emptyList:()Ljava/util/List;
            goto 9
      StackMap locals: io.vertx.ext.auth.mongo.impl.MongoUserUtilImpl java.lang.String java.util.List java.util.List io.vertx.core.Handler
      StackMap stack: io.vertx.ext.mongo.MongoClient java.lang.String io.vertx.core.json.JsonObject java.lang.String
         8: aload 2 /* roles */
      StackMap locals: io.vertx.ext.auth.mongo.impl.MongoUserUtilImpl java.lang.String java.util.List java.util.List io.vertx.core.Handler
      StackMap stack: io.vertx.ext.mongo.MongoClient java.lang.String io.vertx.core.json.JsonObject java.lang.String java.util.List
         9: invokevirtual io.vertx.core.json.JsonObject.put:(Ljava/lang/String;Ljava/lang/Object;)Lio/vertx/core/json/JsonObject;
        10: .line 100
            aload 0 /* this */
            getfield io.vertx.ext.auth.mongo.impl.MongoUserUtilImpl.authzOptions:Lio/vertx/ext/auth/mongo/MongoAuthorizationOptions;
            invokevirtual io.vertx.ext.auth.mongo.MongoAuthorizationOptions.getPermissionField:()Ljava/lang/String;
            aload 3 /* permissions */
            ifnonnull 11
            invokestatic java.util.Collections.emptyList:()Ljava/util/List;
            goto 12
      StackMap locals: io.vertx.ext.auth.mongo.impl.MongoUserUtilImpl java.lang.String java.util.List java.util.List io.vertx.core.Handler
      StackMap stack: io.vertx.ext.mongo.MongoClient java.lang.String io.vertx.core.json.JsonObject java.lang.String
        11: aload 3 /* permissions */
      StackMap locals: io.vertx.ext.auth.mongo.impl.MongoUserUtilImpl java.lang.String java.util.List java.util.List io.vertx.core.Handler
      StackMap stack: io.vertx.ext.mongo.MongoClient java.lang.String io.vertx.core.json.JsonObject java.lang.String java.util.List
        12: invokevirtual io.vertx.core.json.JsonObject.put:(Ljava/lang/String;Ljava/lang/Object;)Lio/vertx/core/json/JsonObject;
        13: .line 101
            aload 4 /* resultHandler */
        14: .line 95
            invokeinterface io.vertx.ext.mongo.MongoClient.save:(Ljava/lang/String;Lio/vertx/core/json/JsonObject;Lio/vertx/core/Handler;)Lio/vertx/ext/mongo/MongoClient;
            pop
        15: .line 103
            aload 0 /* this */
            areturn
        end local 4 // io.vertx.core.Handler resultHandler
        end local 3 // java.util.List permissions
        end local 2 // java.util.List roles
        end local 1 // java.lang.String username
        end local 0 // io.vertx.ext.auth.mongo.impl.MongoUserUtilImpl this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   16     0           this  Lio/vertx/ext/auth/mongo/impl/MongoUserUtilImpl;
            0   16     1       username  Ljava/lang/String;
            0   16     2          roles  Ljava/util/List<Ljava/lang/String;>;
            0   16     3    permissions  Ljava/util/List<Ljava/lang/String;>;
            0   16     4  resultHandler  Lio/vertx/core/Handler<Lio/vertx/core/AsyncResult<Ljava/lang/String;>;>;
    Signature: (Ljava/lang/String;Ljava/util/List<Ljava/lang/String;>;Ljava/util/List<Ljava/lang/String;>;Lio/vertx/core/Handler<Lio/vertx/core/AsyncResult<Ljava/lang/String;>;>;)Lio/vertx/ext/auth/mongo/MongoUserUtil;
    MethodParameters:
               Name  Flags
      username       
      roles          
      permissions    
      resultHandler  
}
SourceFile: "MongoUserUtilImpl.java"
InnerClasses:
  public Encoder = java.util.Base64$Encoder of java.util.Base64