diff --git a/class-two-factor-core.php b/class-two-factor-core.php index d98cbfe6..92086bbc 100644 --- a/class-two-factor-core.php +++ b/class-two-factor-core.php @@ -77,6 +77,34 @@ class Two_Factor_Core { */ const REST_NAMESPACE = 'two-factor/1.0'; + /** + * User meta key for the recovery token hash. + * + * @var string + */ + const RECOVERY_TOKEN_META_KEY = '_two_factor_recovery_token'; + + /** + * User meta key for the recovery token timestamp. + * + * @var string + */ + const RECOVERY_TOKEN_TIMESTAMP_META_KEY = '_two_factor_recovery_token_timestamp'; + + /** + * User meta key for the time the recovery request was confirmed. + * + * @var string + */ + const RECOVERY_REQUEST_TIME_META_KEY = '_two_factor_recovery_request_time'; + + /** + * User meta key for the recovery cancel token hash. + * + * @var string + */ + const RECOVERY_CANCEL_TOKEN_META_KEY = '_two_factor_recovery_cancel_token'; + /** * Keep track of all the password-based authentication sessions that * need to invalidated before the second factor authentication. @@ -107,6 +135,10 @@ public static function add_hooks( $compat ) { add_action( 'after_password_reset', array( __CLASS__, 'clear_password_reset_notice' ) ); add_action( 'login_form_validate_2fa', array( __CLASS__, 'login_form_validate_2fa' ) ); add_action( 'login_form_revalidate_2fa', array( __CLASS__, 'login_form_revalidate_2fa' ) ); + add_action( 'login_form_lost_2fa', array( __CLASS__, 'login_form_lost_2fa' ) ); + add_action( 'login_form_confirm_2fa_recovery', array( __CLASS__, 'login_form_confirm_2fa_recovery' ) ); + add_action( 'login_form_complete_2fa_recovery', array( __CLASS__, 'login_form_complete_2fa_recovery' ) ); + add_action( 'login_form_cancel_2fa_recovery', array( __CLASS__, 'login_form_cancel_2fa_recovery' ) ); add_action( 'show_user_profile', array( __CLASS__, 'user_two_factor_options' ) ); add_action( 'edit_user_profile', array( __CLASS__, 'user_two_factor_options' ) ); @@ -187,6 +219,10 @@ public static function uninstall() { self::USER_RATE_LIMIT_KEY, self::USER_FAILED_LOGIN_ATTEMPTS_KEY, self::USER_PASSWORD_WAS_RESET_KEY, + self::RECOVERY_TOKEN_META_KEY, + self::RECOVERY_TOKEN_TIMESTAMP_META_KEY, + self::RECOVERY_REQUEST_TIME_META_KEY, + self::RECOVERY_CANCEL_TOKEN_META_KEY, ); $option_keys = array(); @@ -1197,6 +1233,12 @@ public static function login_html( $user, $login_nonce, $redirect_to, $error_msg + +