Airship\Cabin\Bridge\Landing\Account::processRecoverAccount PHP Method

processRecoverAccount() protected method

Process account recovery
protected processRecoverAccount ( array $post ) : boolean
$post array
return boolean
    protected function processRecoverAccount(array $post) : bool
    {
        $username = $post['forgot_passphrase_for'];
        $airBrake = Gears::get('AirBrake');
        if (IDE_HACKS) {
            $airBrake = new AirBrake();
        }
        $failFast = $airBrake->failFast($username, $_SERVER['REMOTE_ADDR'], $airBrake::ACTION_RECOVER);
        if ($failFast) {
            $this->lens('recover_account', ['form_message' => \__('You are doing that too fast. Please wait a few seconds and try again.')]);
        } elseif (!$airBrake->getFastExit()) {
            $delay = $airBrake->getDelay($username, $_SERVER['REMOTE_ADDR'], $airBrake::ACTION_RECOVER);
            if ($delay > 0) {
                \usleep($delay * 1000);
            }
        }
        try {
            $recoverInfo = $this->acct->getRecoveryInfo($username);
        } catch (UserNotFound $ex) {
            // Username not found. Is this a harvester?
            $airBrake->registerAccountRecoveryAttempt($username, $_SERVER['REMOTE_ADDR']);
            $this->log('Password reset attempt for nonexistent user.', LogLevel::NOTICE, ['username' => $username]);
            return false;
        }
        if (!$recoverInfo['allow_reset'] || empty($recoverInfo['email'])) {
            // Opted out or no email address? Act like the user doesn't exist.
            $airBrake->registerAccountRecoveryAttempt($username, $_SERVER['REMOTE_ADDR']);
            return false;
        }
        $token = $this->acct->createRecoveryToken((int) $recoverInfo['userid']);
        if (empty($token)) {
            return false;
        }
        $state = State::instance();
        if (IDE_HACKS) {
            $state->mailer = new Sendmail();
            $state->gpgMailer = new GPGMailer($state->mailer);
        }
        $message = (new Message())->addTo($recoverInfo['email'], $username)->setSubject('Password Reset')->setFrom($state->universal['email']['from'] ?? 'no-reply@' . $_SERVER['HTTP_HOST'])->setBody($this->recoveryMessage($token));
        try {
            if (!empty($recoverInfo['gpg_public_key'])) {
                // This will be encrypted with the user's public key:
                $state->gpgMailer->send($message, $recoverInfo['gpg_public_key']);
            } else {
                // This will be sent as-is:
                $state->mailer->send($message);
            }
        } catch (InvalidArgumentException $ex) {
            return false;
        }
        return true;
    }