Airship\Cabin\Bridge\Blueprint\UserAccounts::getRecoveryData PHP Method

getRecoveryData() public method

Get the data necessary to recover an account.
public getRecoveryData ( string $selector, integer $maxTokenLife ) : array
$selector string
$maxTokenLife integer
return array
    public function getRecoveryData(string $selector, int $maxTokenLife) : array
    {
        if ($maxTokenLife < 10) {
            $maxTokenLife = '0' . $maxTokenLife;
        }
        $dateTime = new \DateTime('now');
        $dateTime->sub(new \DateInterval('PT' . $maxTokenLife . 'S'));
        $result = $this->db->row('SELECT * FROM airship_user_recovery WHERE selector = ? AND created >= ?', $selector, $dateTime->format(\AIRSHIP_DATE_FORMAT));
        if (empty($result)) {
            return [];
        }
        // Clean up:
        $this->db->delete('airship_user_recovery', ['selector' => $selector]);
        return $result;
    }

Usage Example

Example #1
0
 /**
  * If the token is valid, log in as the user.
  *
  * @param string $token
  */
 protected function processRecoveryToken(string $token)
 {
     if (Util::stringLength($token) < UserAccounts::RECOVERY_CHAR_LENGTH) {
         \Airship\redirect($this->airship_cabin_prefix . '/login');
     }
     $selector = Util::subString($token, 0, 32);
     $validator = Util::subString($token, 32);
     $ttl = (int) $this->config('password-reset.ttl');
     if (empty($ttl)) {
         \Airship\redirect($this->airship_cabin_prefix . '/login');
     }
     $recoveryInfo = $this->acct->getRecoveryData($selector, $ttl);
     if (empty($recoveryInfo)) {
         \Airship\redirect($this->airship_cabin_prefix . '/login');
     }
     $state = State::instance();
     if (Symmetric::verify($validator . $recoveryInfo['userid'], $state->keyring['auth.recovery_key'], $recoveryInfo['hashedtoken'])) {
         $_SESSION['userid'] = (int) $recoveryInfo['userid'];
         $_SESSION['session_canary'] = $this->acct->createSessionCanary($recoveryInfo['userid']);
         $this->acct->deleteRecoveryToken($selector);
         \Airship\redirect($this->airship_cabin_prefix . '/my/account');
     }
     \Airship\redirect($this->airship_cabin_prefix . '/login');
 }