Enum Class SigninResult

java.lang.Object
java.lang.Enum<SigninResult>
com.iizix.user.SigninResult
All Implemented Interfaces:
IEnumLocaleString, Serializable, Comparable<SigninResult>, Constable

public enum SigninResult extends Enum<SigninResult> implements IEnumLocaleString
Enum for user sign in result.

Text IDs used by the SigninResult

  Text ID                 English text
  ----------------------  ------------------------------------------------------------------------------------------------------
  userauth.success                                                Success.
  userauth.success_not_signed_in                                  Success, but you need to sign in to proceed.
  userauth.success.change_password                                Success, change of password needed.
  userauth.invalid_password                                       Invalid password.
  userauth.too_many_invalid_logins_retry_later                    Too many invalid logins. Please retry later.
  userauth.too_many_invalid_logins_retry_later_next_time_disable  Too many invalid logins. Please retry later. Upon next failure, your user will be disabled.
  userauth.invalid_password_next_attempt_will_disable             Invalid password. Upon next failure, your user will be disabled.
  userauth.disabled                                               Your user has been disabled, please contact your app supplier.
  userauth.invalid_user                                           Invalid user name.
  userauth.invalid_user_or_password                               Invalid user name or password.
  userauth.user_name_taken                                        User name taken, cannot sign up.
  userauth.app_id_not_found                                       Application ID is not found.
  userauth.app_disabled                                           The application is disabled.
  userauth.app_access_denied                                      You are not allowed to use this application.
  userauth.server_not_started                                     Server not started.
  userauth.server_starting                                        Server is starting.
  userauth.server_stopped                                         Server is stopped.
  userauth.server_stopping                                        Server is stopping.
  userauth.server_login_disabled                                  Sign-in to the server is currently disabled.
  userauth.signup_disabled                                        Sign-up is not enabled.
  userauth.invalid_reset_link                                     The password reset link is invalid or has expired.
  userauth.password_change_not_allowed                            Your password cannot be changed.
  userauth.success.second_factor_required                         Success, a second step is needed to sign in.
  userauth.success.passkey_required                               Success, sign in with your passkey to proceed.
  userauth.success.passkey_enrolment_required                     Success, create a passkey to proceed.
  userauth.second_factor_required                                 A second step is needed to sign in.
  userauth.invalid_code                                           Invalid code.
  userauth.too_many_codes                                         Too many invalid codes. Please retry later.
  userauth.pending_expired                                        Signing in took too long. Please sign in again.
  userauth.second_factor_not_enrolled                             Two-step verification is not set up.
  userauth.second_factor_already_enrolled                         Two-step verification is already set up.
  userauth.second_factor_method_not_allowed                       This method is not available.
  userauth.invalid_passkey                                        The passkey was not accepted.
  userauth.passkey_request_expired                                The passkey request has expired. Please try again.
  userauth.passkeys_not_available                                 Passkeys are not available.
  userauth.recent_signin_required                                 Please confirm it is you to proceed.
  userauth.invalid_email                                          Enter a valid email address.
  userauth.email_taken                                            This email address is already in use.
  userauth.email_change_not_allowed                               The email address cannot be changed.
  userauth.mail_not_sent_no_address                               The mail was not sent: the account has no email address.
  userauth.mail_not_sent_no_relay                                 The mail was not sent: this server has no mail service configured.
  userauth.mail_not_sent_refused                                  The mail was not sent: the mail service refused it or could not be reached.
  userauth.mail_not_sent_no_link                                  The mail was not sent: the server has no address to build its link on.
  userauth.mail_sent_recently                                     A mail was sent a moment ago. It can be sent again in a few minutes.
  userauth.address_shared                                         Several accounts use this email address. Sign in with your user name.
  userauth.system_failure                                         A system failure occurred when authenticating your user.
Author:
Christopher Mindus
  • Nested Class Summary

    Nested classes/interfaces inherited from class Enum

    Enum.EnumDesc<E>
  • Enum Constant Summary

    Enum Constants
    Enum Constant
    Description
    The sign-in named an e-mail address that SEVERAL accounts hold (EM-D-1, CC-FIX-SIGNIN-ACCOUNT-MAIL: a shared address is allowed): the user signs in with the user name.
    The user may not use the application: no enabled group of the user is one the application allows (T1-139, CC-SERVER-USERS-APP-ACCESS).
    The application is disabled.
    Application ID is not found.
    The e-mail address of the account cannot be changed this way (IUserAuthenticationUI.requestEmailChange, CC-ACCOUNT-EMAIL-PASSWORD): the account is an external Sign In Provider's, or its user name IS its address (a change is then a rename of the account, which is out of scope; the SignIn module does not offer the change there).
    The e-mail address is registered to another account, compared without regard to case (IUserAuthenticationUI.requestEmailChange, CC-ACCOUNT-EMAIL-PASSWORD).
    The verification code or the recovery code is not valid, or it was used before (SignIn L-6).
    The e-mail address has not the form of an address (IUserAuthenticationUI.requestEmailChange, CC-ACCOUNT-EMAIL-PASSWORD): one "@" with something before it and a domain with a dot after it, no space, at most 254 characters.
    The passkey was not accepted: the one answer for every credential that is refused, whatever the reason - unknown, another user's, not made for this challenge, this origin or this application, without user verification, or with a signature that does not verify.
    Invalid password.
    User has too many invalid logins: retry later, but next time, the user will be disabled upon a failure.
    The password reset link is not this server's, was altered, was used already (or the password changed since it was sent), or has expired (CC-LOGIN-SERVER-CORE).
    Invalid user name.
    Invalid user name or password
    A mail the user asked for was not sent: the account has no e-mail address (IUserAuthenticationUI.resendVerificationMail, CC-FIX-SIGNIN-ACCOUNT-MAIL).
    A mail the user asked for was not sent: no link could be built for it, because neither the client session nor the server configuration gives a base URL (CC-FIX-SIGNIN-ACCOUNT-MAIL, R-145: the one case left without a base).
    A mail the user asked for was not sent: the server has no mail sender configured, or its sender has no default address (CC-FIX-SIGNIN-ACCOUNT-MAIL).
    A mail the user asked for was not sent: the mail relay refused it, could not be reached, or did not accept it for delivery (CC-FIX-SIGNIN-ACCOUNT-MAIL).
    A mail the user asked for was not sent because one went to the account a moment ago: the earlier mail is the one to open (CC-FIX-SIGNIN-ACCOUNT-MAIL; one mail per account per interval, as before, but said).
    There is no passkey request to answer: none was started for the client session, it was answered already, or its time ran out.
    Passkeys are not available: the application does not offer them, its relying party ID is not known, or the user has the most passkeys a user may have (CC-LOGIN-L8-PASSKEYS).
    The password cannot be changed: it is fixed by the administrator (CC-LOGIN-SERVER-CORE).
    No sign-in of this session waits for a second factor: there was none, it has expired, or too many invalid codes ended it.
    A change of a sign-in method requires a recent sign-in: the session is not signed in, or its user was authenticated too long ago.
    The account has a second factor of this method already; it is removed before another one is enrolled (SignIn L-6).
    The sign-in policy of the application does not have this method of a second factor, or the server cannot do it (SignIn L-6).
    The account has no second factor of this method, or no enrolment of one was begun in this session (SignIn L-6).
    The password is right and the account has a second factor: a REFUSAL, and what UserAuthentication.validateUser answers every caller with.
    Sign-in to the server is currently disabled.
    Server is not started.
    Server is starting.
    Server is stopped.
    Server is stopping.
    Sign-up with the internal login provider is not enabled on the server: the server setting $signIn.selfSignUp is off, its default (CC-LOGIN-SERVER-CORE).
    Validation succeeded.
    Validation succeeded, but user has to change password.
    Validation succeeded for the user, but as no password has been verified, it is assumed that the user is not signed in yet.
    The password was accepted, but the user is NOT signed in yet: the sign-in policy requires a passkey on this client, and the user has none.
    The password was accepted, but the user is NOT signed in yet: the sign-in policy requires a passkey on this client, and the user has one.
    The first factor passed - the password is right - and a second factor is due: the account has one, or the policy requires one.
    System failure.
    The account waits after its invalid codes: the code was not looked at (SignIn L-6).
    User has too many invalid logins: retry later.
    User has too many invalid logins: retry later.
    User is disabled.
    User name taken, cannot sign up.
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    final String
    The English text message.
    final String
    The text ID for the message, starts with "userauth.".
  • Method Summary

    Modifier and Type
    Method
    Description
    Gets the result a sign-in answers its client with, so that nothing in the answer tells an unknown user name from a wrong password, from a disabled account, or from an account held back by its failed attempts: every refusal that is about the account becomes INVALID_USER_OR_PASSWORD.
    formatText(IAppSessionGyro appGyro, Object... params)
    Formats the text from the text table using the current language settings with specified parameters.
    Gets the fallback String.
    Gets the text ID.
    Gets the text from text table using current language setting.
    boolean
    Returns if the sign-in waits for one more step before the user is signed in: the password was accepted, and NOTHING is recorded in the session yet.
    boolean
    Returns if the login is successful, even if e.g.
    boolean
    Returns if the user must change password.
    Returns the enum constant of this class with the specified name.
    static SigninResult[]
    Returns an array containing the constants of this enum class, in the order they are declared.

    Methods inherited from class Object

    getClass, notify, notifyAll, wait, wait, wait

    Methods inherited from interface IEnumLocaleString

    asString, asString, asString, name, ordinal, valuesList
  • Enum Constant Details

    • SUCCESS

      public static final SigninResult SUCCESS
      Validation succeeded.
    • SUCCESS_NOT_SIGNED_IN

      public static final SigninResult SUCCESS_NOT_SIGNED_IN
      Validation succeeded for the user, but as no password has been verified, it is assumed that the user is not signed in yet.
    • SUCCESS_CHANGE_PASSWORD

      public static final SigninResult SUCCESS_CHANGE_PASSWORD
      Validation succeeded, but user has to change password.
    • INVALID_PASSWORD

      public static final SigninResult INVALID_PASSWORD
      Invalid password.
    • TOO_MANY_INVALID_LOGINS_RETRY_LATER

      public static final SigninResult TOO_MANY_INVALID_LOGINS_RETRY_LATER
      User has too many invalid logins: retry later.
    • TOO_MANY_INVALID_LOGINS_RETRY_LATER_NEXT_TIME_DISABLE

      public static final SigninResult TOO_MANY_INVALID_LOGINS_RETRY_LATER_NEXT_TIME_DISABLE
      User has too many invalid logins: retry later. A failure next time will disable the user.
    • INVALID_PASSWORD_NEXT_ATTEMPT_WILL_DISABLE

      public static final SigninResult INVALID_PASSWORD_NEXT_ATTEMPT_WILL_DISABLE
      User has too many invalid logins: retry later, but next time, the user will be disabled upon a failure.
    • USER_DISABLED

      public static final SigninResult USER_DISABLED
      User is disabled.
    • INVALID_USER

      public static final SigninResult INVALID_USER
      Invalid user name.
    • INVALID_USER_OR_PASSWORD

      public static final SigninResult INVALID_USER_OR_PASSWORD
      Invalid user name or password
    • USER_NAME_TAKEN

      public static final SigninResult USER_NAME_TAKEN
      User name taken, cannot sign up.
    • APP_ID_NOT_FOUND

      public static final SigninResult APP_ID_NOT_FOUND
      Application ID is not found.
    • APP_DISABLED

      public static final SigninResult APP_DISABLED
      The application is disabled.
    • APP_ACCESS_DENIED

      public static final SigninResult APP_ACCESS_DENIED
      The user may not use the application: no enabled group of the user is one the application allows (T1-139, CC-SERVER-USERS-APP-ACCESS). Answered only after the credentials were right - or for a validation without a password - so forClient() returns it as it is: a user who is not allowed an application is told so, not that the password is wrong.
    • SERVER_NOT_STARTED

      public static final SigninResult SERVER_NOT_STARTED
      Server is not started.
    • SERVER_STARTING

      public static final SigninResult SERVER_STARTING
      Server is starting.
    • SERVER_STOPPING

      public static final SigninResult SERVER_STOPPING
      Server is stopping.
    • SERVER_STOPPED

      public static final SigninResult SERVER_STOPPED
      Server is stopped.
    • SERVER_LOGIN_DISABLED

      public static final SigninResult SERVER_LOGIN_DISABLED
      Sign-in to the server is currently disabled.
    • SIGNUP_DISABLED

      public static final SigninResult SIGNUP_DISABLED
      Sign-up with the internal login provider is not enabled on the server: the server setting $signIn.selfSignUp is off, its default (CC-LOGIN-SERVER-CORE).
    • PASSWORD_CHANGE_NOT_ALLOWED

      public static final SigninResult PASSWORD_CHANGE_NOT_ALLOWED
      The password cannot be changed: it is fixed by the administrator (CC-LOGIN-SERVER-CORE).
    • SUCCESS_SECOND_FACTOR_REQUIRED

      public static final SigninResult SUCCESS_SECOND_FACTOR_REQUIRED
      The first factor passed - the password is right - and a second factor is due: the account has one, or the policy requires one. It is what IUserAuthenticationUI answers the SignIn module with: a success of the first step, after which NO user is signed in and nothing is recorded in the session; the sign-in waits, and IUserAuthenticationSecondFactor.verifySecondFactor, or the enrolment the policy requires, completes it (SignIn L-6; decision D-10 of the SignIn flow design). Pending.
    • SUCCESS_PASSKEY_REQUIRED

      public static final SigninResult SUCCESS_PASSKEY_REQUIRED
      The password was accepted, but the user is NOT signed in yet: the sign-in policy requires a passkey on this client, and the user has one. The sign-in waits, bound to the client session, for IUserAuthenticationPasskeys.finishPasskeyAssertion; nothing is recorded in the session until then (CC-LOGIN-L8-PASSKEYS). Pending.
    • SUCCESS_PASSKEY_ENROLMENT_REQUIRED

      public static final SigninResult SUCCESS_PASSKEY_ENROLMENT_REQUIRED
      The password was accepted, but the user is NOT signed in yet: the sign-in policy requires a passkey on this client, and the user has none. The sign-in waits, bound to the client session, for IUserAuthenticationPasskeys.finishPasskeyRegistration; nothing is recorded in the session until then (CC-LOGIN-L8-PASSKEYS). A user who has a second factor has passed it before this is answered: the second step itself answers with it then. Pending.
    • SECOND_FACTOR_REQUIRED

      public static final SigninResult SECOND_FACTOR_REQUIRED
      The password is right and the account has a second factor: a REFUSAL, and what UserAuthentication.validateUser answers every caller with. A path that cannot ask for a second factor - the entry URL of a session, app.json, the license system - signs nobody in with it; only IUserAuthenticationUI goes on from it, to SUCCESS_SECOND_FACTOR_REQUIRED (SignIn L-6).

      It is also the answer to a change of the second factor - its removal, new recovery codes - in a session whose sign-in verified none, as the one of a trusted device: the user signs in with the second step first (CC-SIGNIN-MERGE-L5-L6-L8).

    • INVALID_CODE

      public static final SigninResult INVALID_CODE
      The verification code or the recovery code is not valid, or it was used before (SignIn L-6).
    • TOO_MANY_CODES

      public static final SigninResult TOO_MANY_CODES
      The account waits after its invalid codes: the code was not looked at (SignIn L-6).
    • PENDING_EXPIRED

      public static final SigninResult PENDING_EXPIRED
      No sign-in of this session waits for a second factor: there was none, it has expired, or too many invalid codes ended it. The user begins again, with the first factor (SignIn L-6).
    • SECOND_FACTOR_NOT_ENROLLED

      public static final SigninResult SECOND_FACTOR_NOT_ENROLLED
      The account has no second factor of this method, or no enrolment of one was begun in this session (SignIn L-6).
    • SECOND_FACTOR_ALREADY_ENROLLED

      public static final SigninResult SECOND_FACTOR_ALREADY_ENROLLED
      The account has a second factor of this method already; it is removed before another one is enrolled (SignIn L-6).
    • SECOND_FACTOR_METHOD_NOT_ALLOWED

      public static final SigninResult SECOND_FACTOR_METHOD_NOT_ALLOWED
      The sign-in policy of the application does not have this method of a second factor, or the server cannot do it (SignIn L-6).
    • INVALID_PASSKEY

      public static final SigninResult INVALID_PASSKEY
      The passkey was not accepted: the one answer for every credential that is refused, whatever the reason - unknown, another user's, not made for this challenge, this origin or this application, without user verification, or with a signature that does not verify. The reason is in the server log (CC-LOGIN-L8-PASSKEYS).
    • PASSKEY_REQUEST_EXPIRED

      public static final SigninResult PASSKEY_REQUEST_EXPIRED
      There is no passkey request to answer: none was started for the client session, it was answered already, or its time ran out. The client starts a new one (CC-LOGIN-L8-PASSKEYS).
    • PASSKEYS_NOT_AVAILABLE

      public static final SigninResult PASSKEYS_NOT_AVAILABLE
      Passkeys are not available: the application does not offer them, its relying party ID is not known, or the user has the most passkeys a user may have (CC-LOGIN-L8-PASSKEYS).
    • RECENT_SIGNIN_REQUIRED

      public static final SigninResult RECENT_SIGNIN_REQUIRED
      A change of a sign-in method requires a recent sign-in: the session is not signed in, or its user was authenticated too long ago. The user confirms with the password or with a passkey (IUserAuthenticationPasskeys.reauthenticate) and tries again (CC-LOGIN-L8-PASSKEYS, G-8 of the SignIn flow design). It is the one recent sign-in of the interface: a change of a passkey and a change of the second factor both answer with it (CC-SIGNIN-MERGE-L5-L6-L8).
    • INVALID_EMAIL

      public static final SigninResult INVALID_EMAIL
      The e-mail address has not the form of an address (IUserAuthenticationUI.requestEmailChange, CC-ACCOUNT-EMAIL-PASSWORD): one "@" with something before it and a domain with a dot after it, no space, at most 254 characters.
    • EMAIL_TAKEN

      public static final SigninResult EMAIL_TAKEN
      The e-mail address is registered to another account, compared without regard to case (IUserAuthenticationUI.requestEmailChange, CC-ACCOUNT-EMAIL-PASSWORD). NEVER ANSWERED since EM-D-1 (CC-FIX-SIGNIN-ACCOUNT-MAIL, 2026-10-20): a shared address is allowed, several accounts may carry one address. The constant stays for the stability of the enum (its ordinal, valueOf in the licence client).
    • EMAIL_CHANGE_NOT_ALLOWED

      public static final SigninResult EMAIL_CHANGE_NOT_ALLOWED
      The e-mail address of the account cannot be changed this way (IUserAuthenticationUI.requestEmailChange, CC-ACCOUNT-EMAIL-PASSWORD): the account is an external Sign In Provider's, or its user name IS its address (a change is then a rename of the account, which is out of scope; the SignIn module does not offer the change there).
    • MAIL_NOT_SENT_NO_ADDRESS

      public static final SigninResult MAIL_NOT_SENT_NO_ADDRESS
      A mail the user asked for was not sent: the account has no e-mail address (IUserAuthenticationUI.resendVerificationMail, CC-FIX-SIGNIN-ACCOUNT-MAIL). The five MAIL_* results are answered as they are: the user asked for a mail and reads what became of it, never "sent" for a mail that did not go.
    • MAIL_NOT_SENT_NO_RELAY

      public static final SigninResult MAIL_NOT_SENT_NO_RELAY
      A mail the user asked for was not sent: the server has no mail sender configured, or its sender has no default address (CC-FIX-SIGNIN-ACCOUNT-MAIL).
    • MAIL_NOT_SENT_REFUSED

      public static final SigninResult MAIL_NOT_SENT_REFUSED
      A mail the user asked for was not sent: the mail relay refused it, could not be reached, or did not accept it for delivery (CC-FIX-SIGNIN-ACCOUNT-MAIL). The reason is in the server log.
    • MAIL_SENT_RECENTLY

      public static final SigninResult MAIL_SENT_RECENTLY
      A mail the user asked for was not sent because one went to the account a moment ago: the earlier mail is the one to open (CC-FIX-SIGNIN-ACCOUNT-MAIL; one mail per account per interval, as before, but said).
    • ADDRESS_SHARED

      public static final SigninResult ADDRESS_SHARED
      The sign-in named an e-mail address that SEVERAL accounts hold (EM-D-1, CC-FIX-SIGNIN-ACCOUNT-MAIL: a shared address is allowed): the user signs in with the user name. Answered as it is, at the password step, before any password is checked (R-27).
    • SYSTEM_FAILURE

      public static final SigninResult SYSTEM_FAILURE
      System failure.
  • Field Details

    • englishMessage

      public final String englishMessage
      The English text message.
    • textID

      public final String textID
      The text ID for the message, starts with "userauth.".
  • Method Details

    • values

      public static SigninResult[] values()
      Returns an array containing the constants of this enum class, in the order they are declared.
      Returns:
      an array containing the constants of this enum class, in the order they are declared
    • valueOf

      public static SigninResult valueOf(String name)
      Returns the enum constant of this class with the specified name. The string must match exactly an identifier used to declare an enum constant in this class. (Extraneous whitespace characters are not permitted.)
      Parameters:
      name - the name of the enum constant to be returned.
      Returns:
      the enum constant with the specified name
      Throws:
      IllegalArgumentException - if this enum class has no constant with the specified name
      NullPointerException - if the argument is null
    • isSuccessful

      public boolean isSuccessful()
      Returns if the login is successful, even if e.g. password must be changed.

      A result that is pending is successful too, and signs nobody in: it is the success of the first of two steps. Only IUserAuthenticationUI answers with one.

      Returns:
      true for SUCCESS and SUCCESS_CHANGE_PASSWORD, and for a sign-in that waits for one more step (isPending()), false otherwise.
    • isPending

      public boolean isPending()
      Returns if the sign-in waits for one more step before the user is signed in: the password was accepted, and NOTHING is recorded in the session yet. The one question for every sign-in that waits, whatever it waits for - the second factor of the account or its enrolment (SUCCESS_SECOND_FACTOR_REQUIRED), a passkey (SUCCESS_PASSKEY_REQUIRED) or the registration of one (SUCCESS_PASSKEY_ENROLMENT_REQUIRED).
      Returns:
      true for SUCCESS_SECOND_FACTOR_REQUIRED, SUCCESS_PASSKEY_REQUIRED and SUCCESS_PASSKEY_ENROLMENT_REQUIRED, false otherwise.
    • mustChangePassword

      public boolean mustChangePassword()
      Returns if the user must change password.
      Returns:
      true if user must change password to continue, i.e. SUCCESS_CHANGE_PASSWORD, false otherwise.
    • forClient

      public SigninResult forClient()
      Gets the result a sign-in answers its client with, so that nothing in the answer tells an unknown user name from a wrong password, from a disabled account, or from an account held back by its failed attempts: every refusal that is about the account becomes INVALID_USER_OR_PASSWORD. A result about the server or the application (not started, stopping, sign-in disabled, application not found or disabled, a system failure), and every successful result, is returned as it is. The real reason is in the server log (CC-LOGIN-SERVER-CORE; D-19 of the SignIn survey: no enumeration).
      Returns:
      The result to answer the client with, never null.
    • getID

      public String getID()
      Gets the text ID.
      Specified by:
      getID in interface IEnumLocaleString
      Returns:
      The text ID string.
    • getFallback

      public String getFallback()
      Gets the fallback String.
      Specified by:
      getFallback in interface IEnumLocaleString
      Returns:
      The fallback string.
    • getText

      public String getText(IAppSessionGyro appGyro)
      Gets the text from text table using current language setting.
      Parameters:
      appGyro - The Application Gyro instance.
      Returns:
      The localized string.
    • formatText

      public String formatText(IAppSessionGyro appGyro, Object... params)
      Formats the text from the text table using the current language settings with specified parameters.
      Parameters:
      appGyro - The Application Gyro instance.
      params - The parameters.
      Returns:
      The localized string.