Package org.firebirdsql.gds.ng.wire.auth

## Class ClientAuthBlock

- java.lang.Object
- - org.firebirdsql.gds.ng.wire.auth.ClientAuthBlock

-     public final class ClientAuthBlock
      extends java.lang.Object

  Manages client authentication with multiple pluginProviders.

  This is similar to the `ClntAuthBlock` in Firebird. For ease of understanding, and correlating with the Firebird implementation, this uses the same (or very similar) terms and structure (if it makes sense).

  Since:
    3.0
  Author:
    Mark Rotteveel

- - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `ClientAuthBlock​(IAttachProperties<?> attachProperties)` |

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `AuthenticationPlugin.AuthStatus` | `authenticate()` |
    `void` | `authenticateStep0()` |
    `void` | `authFillParametersBlock​(ConnectionParameterBuffer pb)` |
    `byte[]` | `getClientData()` |
    `java.lang.String` | `getCurrentPluginName()` |
    `java.lang.String` | `getLogin()` |
    `java.lang.String` | `getNormalizedLogin()` |
    `java.lang.String` | `getPassword()` |
    `java.lang.String` | `getPluginNames()` |
    `byte[]` | `getSessionKey()` |
    `boolean` | `hasPlugin()` |
    `boolean` | `isAuthComplete()` |
    `boolean` | `isFirstTime()` |
    `void` | `resetClient​(byte[] serverInfo)` |
    `void` | `setAuthComplete​(boolean authComplete)` |
    `void` | `setFirstTime​(boolean firstTime)` |
    `void` | `setServerData​(byte[] serverData)` |
    `boolean` | `supportsEncryption()` | TODO Need to handle this differently
    `boolean` | `switchPlugin​(java.lang.String pluginName)` |
    `void` | `writePluginDataTo​(java.io.OutputStream userId)` |

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### ClientAuthBlock

          public ClientAuthBlock​(IAttachProperties<?> attachProperties)
                          throws java.sql.SQLException

      Throws:
        `java.sql.SQLException`

  - ### Method Detail

    - #### getLogin

          public java.lang.String getLogin()

    - #### getNormalizedLogin

          public java.lang.String getNormalizedLogin()

    - #### getPassword

          public java.lang.String getPassword()

    - #### isAuthComplete

          public boolean isAuthComplete()

    - #### setAuthComplete

          public void setAuthComplete​(boolean authComplete)

    - #### getCurrentPluginName

          public java.lang.String getCurrentPluginName()

    - #### getPluginNames

          public java.lang.String getPluginNames()

      Returns:
        Comma separated list of available plugins.

    - #### getClientData

          public byte[] getClientData()

    - #### setFirstTime

          public void setFirstTime​(boolean firstTime)

    - #### isFirstTime

          public boolean isFirstTime()

    - #### authenticateStep0

          public void authenticateStep0()
                                 throws java.sql.SQLException

      Throws:
        `java.sql.SQLException`

    - #### resetClient

          public void resetClient​(byte[] serverInfo)
                           throws java.sql.SQLException

      Throws:
        `java.sql.SQLException`

    - #### setServerData

          public void setServerData​(byte[] serverData)

    - #### writePluginDataTo

          public void writePluginDataTo​(java.io.OutputStream userId)
                                 throws java.io.IOException

      Throws:
        `java.io.IOException`

    - #### switchPlugin

          public boolean switchPlugin​(java.lang.String pluginName)

    - #### hasPlugin

          public boolean hasPlugin()

    - #### authenticate

          public AuthenticationPlugin.AuthStatus authenticate()
                                                       throws java.sql.SQLException

      Throws:
        `java.sql.SQLException`

    - #### authFillParametersBlock

          public void authFillParametersBlock​(ConnectionParameterBuffer pb)
                                       throws java.sql.SQLException

      Throws:
        `java.sql.SQLException`

    - #### supportsEncryption

          public boolean supportsEncryption()
                                     throws java.sql.SQLException

      TODO Need to handle this differently
      Returns:
        `true` if the encryption is supported
      Throws:
        `java.sql.SQLException` - If it is impossible to determine if encryption is supported (eg there is no current auth plugin)

    - #### getSessionKey

          public byte[] getSessionKey()
                               throws java.sql.SQLException

      Returns:
        Session key
      Throws:
        `java.sql.SQLException` - If a session key cannot be provided