Package com.io7m.idstore.model

# Record Class IdPassword

java.lang.Object
java.lang.Record
com.io7m.idstore.model.IdPassword

Record Components:
  `algorithm` - The hash algorithm
  `hash` - The hashed password
  `salt` - The salt value
  `expires` - The expiration date, if any

All Implemented Interfaces:
  `Formattable`

public record IdPassword(IdPasswordAlgorithmType algorithm, String hash, String salt, Optional<OffsetDateTime> expires) extends Record implements Formattable
A hashed password for a user.

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `static final Pattern`
  `VALID_HEX`
  The pattern that defines a valid hash.

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `IdPassword(IdPasswordAlgorithmType algorithm, String hash, String salt, Optional<OffsetDateTime> expires)`
  A hashed password for a user.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `IdPasswordAlgorithmType`
  `algorithm()`
  Returns the value of the `algorithm` record component.
  `boolean`
  `check(Clock clock, String passwordText)`
  Check the given plain text password against this hashed password.
  `final boolean`
  `equals(Object o)`
  Indicates whether some other object is "equal to" this one.
  `Optional<OffsetDateTime>`
  `expires()`
  Returns the value of the `expires` record component.
  `void`
  `formatTo(Formatter formatter, int flags, int width, int precision)`
  Format this object as a string, with the hash redacted so that it cannot appear in logs.
  `String`
  `hash()`
  Returns the value of the `hash` record component.
  `final int`
  `hashCode()`
  Returns a hash code value for this object.
  `String`
  `salt()`
  Returns the value of the `salt` record component.
  `String`
  `toString()`
  Returns a string representation of this record class.
  `IdPassword`
  `withExpirationDate(OffsetDateTime date)`
  `IdPassword`
  `withExpirationDate(Optional<OffsetDateTime> newExpiration)`
  `IdPassword`
  `withoutExpirationDate()`

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

  `clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

- ## Field Details

  - ### VALID_HEX

    public static final Pattern VALID_HEX
    The pattern that defines a valid hash.

- ## Constructor Details

  - ### IdPassword

    public IdPassword(IdPasswordAlgorithmType algorithm, String hash, String salt, Optional<OffsetDateTime> expires)
    A hashed password for a user.
    Parameters:
      `algorithm` - The hash algorithm
      `hash` - The hashed password
      `salt` - The salt value
      `expires` - The expiration date, if any

- ## Method Details

  - ### toString

    public String toString()
    Returns a string representation of this record class. The representation contains the name of the class, followed by the name and value of each of the record components.
    Specified by:
      `toString` in class `Record`
    Returns:
      a string representation of this object

  - ### check

    public boolean check(Clock clock, String passwordText) throws IdPasswordException
    Check the given plain text password against this hashed password.
    Parameters:
      `clock` - The clock against which to check credentials
      `passwordText` - The plain text password
    Returns:
      `true` iff the password matches
    Throws:
      `IdPasswordException` - On internal errors such as missing algorithm support
    See Also:
      - `IdPasswordAlgorithmType.check(String, String, byte[])`

  - ### formatTo

    public void formatTo(Formatter formatter, int flags, int width, int precision)
    Format this object as a string, with the hash redacted so that it cannot appear in logs.
    Specified by:
      `formatTo` in interface `Formattable`
    Parameters:
      `formatter` - The formatter
      `flags` - The formatting flags
      `width` - The width
      `precision` - The precision

  - ### withExpirationDate

    public IdPassword withExpirationDate(OffsetDateTime date)
    Parameters:
      `date` - The date
    Returns:
      This password with the given expiration date

  - ### withoutExpirationDate

    public IdPassword withoutExpirationDate()
    Returns:
      This password without an expiration date

  - ### withExpirationDate

    public IdPassword withExpirationDate(Optional<OffsetDateTime> newExpiration)
    Parameters:
      `newExpiration` - The expiration date, if any
    Returns:
      This password with the given expiration date

  - ### hashCode

    public final int hashCode()
    Returns a hash code value for this object. The value is derived from the hash code of each of the record components.
    Specified by:
      `hashCode` in class `Record`
    Returns:
      a hash code value for this object

  - ### equals

    public final boolean equals(Object o)
    Indicates whether some other object is "equal to" this one. The objects are equal if the other object is of the same class and if all the record components are equal. All components in this record class are compared with `Objects::equals(Object,Object)`.
    Specified by:
      `equals` in class `Record`
    Parameters:
      `o` - the object with which to compare
    Returns:
      `true` if this object is the same as the `o` argument; `false` otherwise.

  - ### algorithm

    public IdPasswordAlgorithmType algorithm()
    Returns the value of the `algorithm` record component.
    Returns:
      the value of the `algorithm` record component

  - ### hash

    public String hash()
    Returns the value of the `hash` record component.
    Returns:
      the value of the `hash` record component

  - ### salt

    public String salt()
    Returns the value of the `salt` record component.
    Returns:
      the value of the `salt` record component

  - ### expires

    public Optional<OffsetDateTime> expires()
    Returns the value of the `expires` record component.
    Returns:
      the value of the `expires` record component