= New Features

* Rodauth now supports secret rotation using the following
  configuration methods:

  * hmac_old_secret
  * argon2_old_secret (argon2 feature)
  * jwt_old_secret (jwt feature)

  You can use these methods to specify the previous secret when
  rotating secrets.  Note that full secret rotation (where you can
  remove use of the old secret) may not be simple.  Here are some
  cases that require additional work:

  * Rotating the argon2 secret requires the use of the
    update_password_hash feature.  You cannot remove the use of
    argon2_old_secret unless every user who created a password under
    the old secret has logged in after the new secret was added.
    Removing the old secret before a user has logged in after the new
    secret was added will invalidate the password for the user. Thus,
    full rotation of the argon2 secret requires invalidating passwords
    for inactive accounts.

  * Full rotating of the hmac secret when using the remember feature
    requires that all remember cookies created under the previous
    secret has been removed.  By default, remember cookies expire in
    2 weeks, but it is possible to set them much longer.

  * Full rotation of the hmac secret when using the verify_account
    feature requires invalidating old verify account links, since
    verify account links do not have a deadline.  However, after old
    verify account links have been invalidated, a user can request a
    new verify account link, which will work.

  * Full rotation of the hmac secret when using the otp feature
    requires disabling otp and reenabling otp.  The
    otp_valid_code_for_old_secret configuration method has been added,
    which can be used to handle cases where a user successfully
    authenticated via TOTP using the old secret.  This can be used
    to direct them to a page to remove the TOTP authenticator and
    then setup a new TOTP authenticator.

* Many *_response configuration methods have been added, which allow
  users to override Rodauth's default behavior in successful cases of
  setting a flash notice and then redirecting.  Note that using these
  configuration methods correctly requires that they halt request
  processing.  You cannot just have them return a response body.  You
  can use the return_response method to set the response body and
  halt processing.

* An sms_needs_confirmation_notice_flash configuration method has been
  added, for setting the flash notice when setting up SMS
  authentication.  By default, it uses the
  sms_needs_confirmation_error_flash value.

= Other Improvements

* The argon2 feature no longer uses the Base64 constant.  Previously,
  it uses the library without attempting to require the base64 library,
  which would break if the base64 library was not already required.

* Rodauth's documentation now recommends against the use of the argon2
  feature, because for typical interactive login uses (targetting
  sub-200ms response times), argon2 provides significantly worse
  security than bcrypt.
