public class io.vertx.ext.web.handler.impl.FormLoginHandlerImpl implements io.vertx.ext.web.handler.FormLoginHandler
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: io.vertx.ext.web.handler.impl.FormLoginHandlerImpl
  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 io.vertx.ext.auth.AuthProvider authProvider;
    descriptor: Lio/vertx/ext/auth/AuthProvider;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private java.lang.String usernameParam;
    descriptor: Ljava/lang/String;
    flags: (0x0002) ACC_PRIVATE

  private java.lang.String passwordParam;
    descriptor: Ljava/lang/String;
    flags: (0x0002) ACC_PRIVATE

  private java.lang.String returnURLParam;
    descriptor: Ljava/lang/String;
    flags: (0x0002) ACC_PRIVATE

  private java.lang.String directLoggedInOKURL;
    descriptor: Ljava/lang/String;
    flags: (0x0002) ACC_PRIVATE

  private static final java.lang.String DEFAULT_DIRECT_LOGGED_IN_OK_PAGE;
    descriptor: Ljava/lang/String;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: "<html><body><h1>Login successful</h1></body></html>"

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

  public io.vertx.ext.web.handler.FormLoginHandler setUsernameParam(java.lang.String);
    descriptor: (Ljava/lang/String;)Lio/vertx/ext/web/handler/FormLoginHandler;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // io.vertx.ext.web.handler.impl.FormLoginHandlerImpl this
        start local 1 // java.lang.String usernameParam
         0: .line 48
            aload 0 /* this */
            aload 1 /* usernameParam */
            putfield io.vertx.ext.web.handler.impl.FormLoginHandlerImpl.usernameParam:Ljava/lang/String;
         1: .line 49
            aload 0 /* this */
            areturn
        end local 1 // java.lang.String usernameParam
        end local 0 // io.vertx.ext.web.handler.impl.FormLoginHandlerImpl this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    2     0           this  Lio/vertx/ext/web/handler/impl/FormLoginHandlerImpl;
            0    2     1  usernameParam  Ljava/lang/String;
    MethodParameters:
               Name  Flags
      usernameParam  

  public io.vertx.ext.web.handler.FormLoginHandler setPasswordParam(java.lang.String);
    descriptor: (Ljava/lang/String;)Lio/vertx/ext/web/handler/FormLoginHandler;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // io.vertx.ext.web.handler.impl.FormLoginHandlerImpl this
        start local 1 // java.lang.String passwordParam
         0: .line 54
            aload 0 /* this */
            aload 1 /* passwordParam */
            putfield io.vertx.ext.web.handler.impl.FormLoginHandlerImpl.passwordParam:Ljava/lang/String;
         1: .line 55
            aload 0 /* this */
            areturn
        end local 1 // java.lang.String passwordParam
        end local 0 // io.vertx.ext.web.handler.impl.FormLoginHandlerImpl this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    2     0           this  Lio/vertx/ext/web/handler/impl/FormLoginHandlerImpl;
            0    2     1  passwordParam  Ljava/lang/String;
    MethodParameters:
               Name  Flags
      passwordParam  

  public io.vertx.ext.web.handler.FormLoginHandler setReturnURLParam(java.lang.String);
    descriptor: (Ljava/lang/String;)Lio/vertx/ext/web/handler/FormLoginHandler;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // io.vertx.ext.web.handler.impl.FormLoginHandlerImpl this
        start local 1 // java.lang.String returnURLParam
         0: .line 60
            aload 0 /* this */
            aload 1 /* returnURLParam */
            putfield io.vertx.ext.web.handler.impl.FormLoginHandlerImpl.returnURLParam:Ljava/lang/String;
         1: .line 61
            aload 0 /* this */
            areturn
        end local 1 // java.lang.String returnURLParam
        end local 0 // io.vertx.ext.web.handler.impl.FormLoginHandlerImpl this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    2     0            this  Lio/vertx/ext/web/handler/impl/FormLoginHandlerImpl;
            0    2     1  returnURLParam  Ljava/lang/String;
    MethodParameters:
                Name  Flags
      returnURLParam  

  public io.vertx.ext.web.handler.FormLoginHandler setDirectLoggedInOKURL(java.lang.String);
    descriptor: (Ljava/lang/String;)Lio/vertx/ext/web/handler/FormLoginHandler;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // io.vertx.ext.web.handler.impl.FormLoginHandlerImpl this
        start local 1 // java.lang.String directLoggedInOKURL
         0: .line 66
            aload 0 /* this */
            aload 1 /* directLoggedInOKURL */
            putfield io.vertx.ext.web.handler.impl.FormLoginHandlerImpl.directLoggedInOKURL:Ljava/lang/String;
         1: .line 67
            aload 0 /* this */
            areturn
        end local 1 // java.lang.String directLoggedInOKURL
        end local 0 // io.vertx.ext.web.handler.impl.FormLoginHandlerImpl this
      LocalVariableTable:
        Start  End  Slot                 Name  Signature
            0    2     0                 this  Lio/vertx/ext/web/handler/impl/FormLoginHandlerImpl;
            0    2     1  directLoggedInOKURL  Ljava/lang/String;
    MethodParameters:
                     Name  Flags
      directLoggedInOKURL  

  public void <init>(io.vertx.ext.auth.AuthProvider, java.lang.String, java.lang.String, java.lang.String, java.lang.String);
    descriptor: (Lio/vertx/ext/auth/AuthProvider;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=6, args_size=6
        start local 0 // io.vertx.ext.web.handler.impl.FormLoginHandlerImpl this
        start local 1 // io.vertx.ext.auth.AuthProvider authProvider
        start local 2 // java.lang.String usernameParam
        start local 3 // java.lang.String passwordParam
        start local 4 // java.lang.String returnURLParam
        start local 5 // java.lang.String directLoggedInOKURL
         0: .line 70
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 72
            aload 0 /* this */
            aload 1 /* authProvider */
            putfield io.vertx.ext.web.handler.impl.FormLoginHandlerImpl.authProvider:Lio/vertx/ext/auth/AuthProvider;
         2: .line 73
            aload 0 /* this */
            aload 2 /* usernameParam */
            putfield io.vertx.ext.web.handler.impl.FormLoginHandlerImpl.usernameParam:Ljava/lang/String;
         3: .line 74
            aload 0 /* this */
            aload 3 /* passwordParam */
            putfield io.vertx.ext.web.handler.impl.FormLoginHandlerImpl.passwordParam:Ljava/lang/String;
         4: .line 75
            aload 0 /* this */
            aload 4 /* returnURLParam */
            putfield io.vertx.ext.web.handler.impl.FormLoginHandlerImpl.returnURLParam:Ljava/lang/String;
         5: .line 76
            aload 0 /* this */
            aload 5 /* directLoggedInOKURL */
            putfield io.vertx.ext.web.handler.impl.FormLoginHandlerImpl.directLoggedInOKURL:Ljava/lang/String;
         6: .line 77
            return
        end local 5 // java.lang.String directLoggedInOKURL
        end local 4 // java.lang.String returnURLParam
        end local 3 // java.lang.String passwordParam
        end local 2 // java.lang.String usernameParam
        end local 1 // io.vertx.ext.auth.AuthProvider authProvider
        end local 0 // io.vertx.ext.web.handler.impl.FormLoginHandlerImpl this
      LocalVariableTable:
        Start  End  Slot                 Name  Signature
            0    7     0                 this  Lio/vertx/ext/web/handler/impl/FormLoginHandlerImpl;
            0    7     1         authProvider  Lio/vertx/ext/auth/AuthProvider;
            0    7     2        usernameParam  Ljava/lang/String;
            0    7     3        passwordParam  Ljava/lang/String;
            0    7     4       returnURLParam  Ljava/lang/String;
            0    7     5  directLoggedInOKURL  Ljava/lang/String;
    MethodParameters:
                     Name  Flags
      authProvider         
      usernameParam        
      passwordParam        
      returnURLParam       
      directLoggedInOKURL  

  public void handle(io.vertx.ext.web.RoutingContext);
    descriptor: (Lio/vertx/ext/web/RoutingContext;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=6, locals=8, args_size=2
        start local 0 // io.vertx.ext.web.handler.impl.FormLoginHandlerImpl this
        start local 1 // io.vertx.ext.web.RoutingContext context
         0: .line 81
            aload 1 /* context */
            invokeinterface io.vertx.ext.web.RoutingContext.request:()Lio/vertx/core/http/HttpServerRequest;
            astore 2 /* req */
        start local 2 // io.vertx.core.http.HttpServerRequest req
         1: .line 82
            aload 2 /* req */
            invokeinterface io.vertx.core.http.HttpServerRequest.method:()Lio/vertx/core/http/HttpMethod;
            getstatic io.vertx.core.http.HttpMethod.POST:Lio/vertx/core/http/HttpMethod;
            if_acmpeq 4
         2: .line 83
            aload 1 /* context */
            sipush 405
            invokeinterface io.vertx.ext.web.RoutingContext.fail:(I)V
         3: .line 84
            goto 16
         4: .line 85
      StackMap locals: io.vertx.core.http.HttpServerRequest
      StackMap stack:
            aload 2 /* req */
            invokeinterface io.vertx.core.http.HttpServerRequest.isExpectMultipart:()Z
            ifne 6
         5: .line 86
            new java.lang.IllegalStateException
            dup
            ldc "HttpServerRequest should have setExpectMultipart set to true, but it is currently set to false."
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
         6: .line 88
      StackMap locals:
      StackMap stack:
            aload 2 /* req */
            invokeinterface io.vertx.core.http.HttpServerRequest.formAttributes:()Lio/vertx/core/MultiMap;
            astore 3 /* params */
        start local 3 // io.vertx.core.MultiMap params
         7: .line 89
            aload 3 /* params */
            aload 0 /* this */
            getfield io.vertx.ext.web.handler.impl.FormLoginHandlerImpl.usernameParam:Ljava/lang/String;
            invokeinterface io.vertx.core.MultiMap.get:(Ljava/lang/String;)Ljava/lang/String;
            astore 4 /* username */
        start local 4 // java.lang.String username
         8: .line 90
            aload 3 /* params */
            aload 0 /* this */
            getfield io.vertx.ext.web.handler.impl.FormLoginHandlerImpl.passwordParam:Ljava/lang/String;
            invokeinterface io.vertx.core.MultiMap.get:(Ljava/lang/String;)Ljava/lang/String;
            astore 5 /* password */
        start local 5 // java.lang.String password
         9: .line 91
            aload 4 /* username */
            ifnull 10
            aload 5 /* password */
            ifnonnull 13
        10: .line 92
      StackMap locals: io.vertx.core.MultiMap java.lang.String java.lang.String
      StackMap stack:
            getstatic io.vertx.ext.web.handler.impl.FormLoginHandlerImpl.log:Lio/vertx/core/logging/Logger;
            ldc "No username or password provided in form - did you forget to include a BodyHandler?"
            invokevirtual io.vertx.core.logging.Logger.warn:(Ljava/lang/Object;)V
        11: .line 93
            aload 1 /* context */
            sipush 400
            invokeinterface io.vertx.ext.web.RoutingContext.fail:(I)V
        12: .line 94
            goto 16
        13: .line 95
      StackMap locals:
      StackMap stack:
            aload 1 /* context */
            invokeinterface io.vertx.ext.web.RoutingContext.session:()Lio/vertx/ext/web/Session;
            astore 6 /* session */
        start local 6 // io.vertx.ext.web.Session session
        14: .line 96
            new io.vertx.core.json.JsonObject
            dup
            invokespecial io.vertx.core.json.JsonObject.<init>:()V
            ldc "username"
            aload 4 /* username */
            invokevirtual io.vertx.core.json.JsonObject.put:(Ljava/lang/String;Ljava/lang/String;)Lio/vertx/core/json/JsonObject;
            ldc "password"
            aload 5 /* password */
            invokevirtual io.vertx.core.json.JsonObject.put:(Ljava/lang/String;Ljava/lang/String;)Lio/vertx/core/json/JsonObject;
            astore 7 /* authInfo */
        start local 7 // io.vertx.core.json.JsonObject authInfo
        15: .line 97
            aload 0 /* this */
            getfield io.vertx.ext.web.handler.impl.FormLoginHandlerImpl.authProvider:Lio/vertx/ext/auth/AuthProvider;
            aload 7 /* authInfo */
            aload 0 /* this */
            aload 1 /* context */
            aload 6 /* session */
            aload 2 /* req */
            invokedynamic handle(Lio/vertx/ext/web/handler/impl/FormLoginHandlerImpl;Lio/vertx/ext/web/RoutingContext;Lio/vertx/ext/web/Session;Lio/vertx/core/http/HttpServerRequest;)Lio/vertx/core/Handler;
              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;)V
                  io/vertx/ext/web/handler/impl/FormLoginHandlerImpl.lambda$0(Lio/vertx/ext/web/RoutingContext;Lio/vertx/ext/web/Session;Lio/vertx/core/http/HttpServerRequest;Lio/vertx/core/AsyncResult;)V (7)
                  (Lio/vertx/core/AsyncResult;)V
            invokeinterface io.vertx.ext.auth.AuthProvider.authenticate:(Lio/vertx/core/json/JsonObject;Lio/vertx/core/Handler;)V
        end local 7 // io.vertx.core.json.JsonObject authInfo
        end local 6 // io.vertx.ext.web.Session session
        end local 5 // java.lang.String password
        end local 4 // java.lang.String username
        end local 3 // io.vertx.core.MultiMap params
        16: .line 129
      StackMap locals:
      StackMap stack:
            return
        end local 2 // io.vertx.core.http.HttpServerRequest req
        end local 1 // io.vertx.ext.web.RoutingContext context
        end local 0 // io.vertx.ext.web.handler.impl.FormLoginHandlerImpl this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0   17     0      this  Lio/vertx/ext/web/handler/impl/FormLoginHandlerImpl;
            0   17     1   context  Lio/vertx/ext/web/RoutingContext;
            1   17     2       req  Lio/vertx/core/http/HttpServerRequest;
            7   16     3    params  Lio/vertx/core/MultiMap;
            8   16     4  username  Ljava/lang/String;
            9   16     5  password  Ljava/lang/String;
           14   16     6   session  Lio/vertx/ext/web/Session;
           15   16     7  authInfo  Lio/vertx/core/json/JsonObject;
    MethodParameters:
         Name  Flags
      context  

  private void doRedirect(io.vertx.core.http.HttpServerResponse, java.lang.String);
    descriptor: (Lio/vertx/core/http/HttpServerResponse;Ljava/lang/String;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=3, args_size=3
        start local 0 // io.vertx.ext.web.handler.impl.FormLoginHandlerImpl this
        start local 1 // io.vertx.core.http.HttpServerResponse response
        start local 2 // java.lang.String url
         0: .line 132
            aload 1 /* response */
            ldc "location"
            aload 2 /* url */
            invokeinterface io.vertx.core.http.HttpServerResponse.putHeader:(Ljava/lang/String;Ljava/lang/String;)Lio/vertx/core/http/HttpServerResponse;
            sipush 302
            invokeinterface io.vertx.core.http.HttpServerResponse.setStatusCode:(I)Lio/vertx/core/http/HttpServerResponse;
            invokeinterface io.vertx.core.http.HttpServerResponse.end:()V
         1: .line 133
            return
        end local 2 // java.lang.String url
        end local 1 // io.vertx.core.http.HttpServerResponse response
        end local 0 // io.vertx.ext.web.handler.impl.FormLoginHandlerImpl this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    2     0      this  Lio/vertx/ext/web/handler/impl/FormLoginHandlerImpl;
            0    2     1  response  Lio/vertx/core/http/HttpServerResponse;
            0    2     2       url  Ljava/lang/String;
    MethodParameters:
          Name  Flags
      response  
      url       

  public void handle(java.lang.Object);
    descriptor: (Ljava/lang/Object;)V
    flags: (0x1041) ACC_PUBLIC, ACC_BRIDGE, ACC_SYNTHETIC
    Code:
      stack=2, locals=2, args_size=2
         0: .line 1
            aload 0
            aload 1
            checkcast io.vertx.ext.web.RoutingContext
            invokevirtual io.vertx.ext.web.handler.impl.FormLoginHandlerImpl.handle:(Lio/vertx/ext/web/RoutingContext;)V
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  private void lambda$0(io.vertx.ext.web.RoutingContext, io.vertx.ext.web.Session, io.vertx.core.http.HttpServerRequest, io.vertx.core.AsyncResult);
    descriptor: (Lio/vertx/ext/web/RoutingContext;Lio/vertx/ext/web/Session;Lio/vertx/core/http/HttpServerRequest;Lio/vertx/core/AsyncResult;)V
    flags: (0x1002) ACC_PRIVATE, ACC_SYNTHETIC
    Code:
      stack=3, locals=7, args_size=5
        start local 0 // io.vertx.ext.web.handler.impl.FormLoginHandlerImpl this
        start local 4 // io.vertx.core.AsyncResult res
         0: .line 98
            aload 4 /* res */
            invokeinterface io.vertx.core.AsyncResult.succeeded:()Z
            ifeq 14
         1: .line 99
            aload 4 /* res */
            invokeinterface io.vertx.core.AsyncResult.result:()Ljava/lang/Object;
            checkcast io.vertx.ext.auth.User
            astore 5 /* user */
        start local 5 // io.vertx.ext.auth.User user
         2: .line 100
            aload 1
            aload 5 /* user */
            invokeinterface io.vertx.ext.web.RoutingContext.setUser:(Lio/vertx/ext/auth/User;)V
         3: .line 101
            aload 2
            ifnull 9
         4: .line 104
            aload 2
            invokeinterface io.vertx.ext.web.Session.regenerateId:()Lio/vertx/ext/web/Session;
            pop
         5: .line 106
            aload 2
            aload 0 /* this */
            getfield io.vertx.ext.web.handler.impl.FormLoginHandlerImpl.returnURLParam:Ljava/lang/String;
            invokeinterface io.vertx.ext.web.Session.remove:(Ljava/lang/String;)Ljava/lang/Object;
            checkcast java.lang.String
            astore 6 /* returnURL */
        start local 6 // java.lang.String returnURL
         6: .line 107
            aload 6 /* returnURL */
            ifnull 9
         7: .line 109
            aload 0 /* this */
            aload 3
            invokeinterface io.vertx.core.http.HttpServerRequest.response:()Lio/vertx/core/http/HttpServerResponse;
            aload 6 /* returnURL */
            invokevirtual io.vertx.ext.web.handler.impl.FormLoginHandlerImpl.doRedirect:(Lio/vertx/core/http/HttpServerResponse;Ljava/lang/String;)V
         8: .line 110
            return
        end local 6 // java.lang.String returnURL
         9: .line 114
      StackMap locals: io.vertx.ext.auth.User
      StackMap stack:
            aload 0 /* this */
            getfield io.vertx.ext.web.handler.impl.FormLoginHandlerImpl.directLoggedInOKURL:Ljava/lang/String;
            ifnull 12
        10: .line 118
            aload 0 /* this */
            aload 3
            invokeinterface io.vertx.core.http.HttpServerRequest.response:()Lio/vertx/core/http/HttpServerResponse;
            aload 0 /* this */
            getfield io.vertx.ext.web.handler.impl.FormLoginHandlerImpl.directLoggedInOKURL:Ljava/lang/String;
            invokevirtual io.vertx.ext.web.handler.impl.FormLoginHandlerImpl.doRedirect:(Lio/vertx/core/http/HttpServerResponse;Ljava/lang/String;)V
        11: .line 119
            goto 15
        12: .line 121
      StackMap locals:
      StackMap stack:
            aload 3
            invokeinterface io.vertx.core.http.HttpServerRequest.response:()Lio/vertx/core/http/HttpServerResponse;
            ldc "<html><body><h1>Login successful</h1></body></html>"
            invokeinterface io.vertx.core.http.HttpServerResponse.end:(Ljava/lang/String;)V
        end local 5 // io.vertx.ext.auth.User user
        13: .line 123
            goto 15
        14: .line 124
      StackMap locals:
      StackMap stack:
            aload 1
            sipush 403
            invokeinterface io.vertx.ext.web.RoutingContext.fail:(I)V
        15: .line 126
      StackMap locals:
      StackMap stack:
            return
        end local 4 // io.vertx.core.AsyncResult res
        end local 0 // io.vertx.ext.web.handler.impl.FormLoginHandlerImpl this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0   16     0       this  Lio/vertx/ext/web/handler/impl/FormLoginHandlerImpl;
            0   16     4        res  Lio/vertx/core/AsyncResult<Lio/vertx/ext/auth/User;>;
            2   13     5       user  Lio/vertx/ext/auth/User;
            6    9     6  returnURL  Ljava/lang/String;
}
SourceFile: "FormLoginHandlerImpl.java"
InnerClasses:
  public final Lookup = java.lang.invoke.MethodHandles$Lookup of java.lang.invoke.MethodHandles