src/PeskyCMF/Db/Traits/ResetsPasswordsViaAccessKey.php
static public function loadFromPasswordRecoveryAccessKey(string $accessKey) {
        try {
            $data = \Crypt::decrypt($accessKey);
        } catch (DecryptException $exc) {
            return false;
        }
        if (empty($data)) {
            return false;
        }
        $data = json_decode($data, true);
        $now = new \DateTime('now', new \DateTimeZone('UTC'));
        if (
            empty($data)
            || !is_array($data)
            || !isset($data['added_keys'])
            || !is_array($data['added_keys'])
            || empty($data['account_id'])
            || empty($data['expires_at'])
            || $data['expires_at'] < $now->getTimestamp()
        ) {
            return false;
        }
        /** @var ResetsPasswordsViaAccessKey|CmfDbRecord $user */
        $user = static::newEmptyRecord();
        $conditions = [
            $user::getPrimaryKeyColumnName() => $data['account_id'],
        ];
        $additionalColumns = $data['added_keys'];
        foreach ($additionalColumns as $columnName) {
            if (!array_key_exists($columnName, $data)) {
                return false;
            }
            $fieldType = $user::getColumn($columnName)->getType();
            switch ($fieldType) {
                case Column::TYPE_DATE:
                    $conditions[$columnName . '::date'] = DbExpr::create("``$data[$columnName]``::date");
                    break;
                case Column::TYPE_TIME:
                    $conditions[$columnName . '::time'] = DbExpr::create("``$data[$columnName]``::time");
                    break;
                case Column::TYPE_TIMESTAMP:
                    $conditions[] = DbExpr::create("`{$columnName}`::timestamp(0) = ``{$data[$columnName]}``::timestamp(0)");
                    break;
                default:
                    $conditions[$columnName] = $data[$columnName];
            }
        }
        if (!$user->fromDb($conditions)->existsInDb()) {
            return false;
        }
        return $user;
    }
static public function loadFromPasswordRecoveryAccessKey(string $accessKey) {
        try {
            $data = \Crypt::decrypt($accessKey);
        } catch (DecryptException $exc) {
            return false;
        }
        if (empty($data)) {
            return false;
        }
        $data = json_decode($data, true);
        $now = new \DateTime('now', new \DateTimeZone('UTC'));
        if (
            empty($data)
            || !is_array($data)
            || !isset($data['added_keys'])
            || !is_array($data['added_keys'])
            || empty($data['account_id'])
            || empty($data['expires_at'])
            || $data['expires_at'] < $now->getTimestamp()
        ) {
            return false;
        }
        /** @var ResetsPasswordsViaAccessKey|CmfDbRecord $user */
        $user = static::newEmptyRecord();
        $conditions = [
            $user::getPrimaryKeyColumnName() => $data['account_id'],
        ];
        $additionalColumns = $data['added_keys'];
        foreach ($additionalColumns as $columnName) {
            if (!array_key_exists($columnName, $data)) {
                return false;
            }
            $fieldType = $user::getColumn($columnName)->getType();
            switch ($fieldType) {
                case Column::TYPE_DATE:
                    $conditions[$columnName . '::date'] = DbExpr::create("``$data[$columnName]``::date");
                    break;
                case Column::TYPE_TIME:
                    $conditions[$columnName . '::time'] = DbExpr::create("``$data[$columnName]``::time");
                    break;
                case Column::TYPE_TIMESTAMP:
                    $conditions[] = DbExpr::create("`{$columnName}`::timestamp(0) = ``{$data[$columnName]}``::timestamp(0)");
                    break;
                default:
                    $conditions[$columnName] = $data[$columnName];
            }
        }
        if (!$user->fromDb($conditions)->existsInDb()) {
            return false;
        }
        return $user;
    }
static public function loadFromPasswordRecoveryAccessKey ( string $ accessKey ) { try { $ data = \ Crypt :: decrypt ( $ accessKey ) ; } catch ( DecryptException $ exc ) { return false ; } if ( empty ( $ data ) ) { return false ; } $ data = json_decode ( $ data , true ) ; $ now = new \ DateTime ( 'now' , new \ DateTimeZone ( 'UTC' ) ) ; if ( empty ( $ data ) || ! is_array ( $ data ) || ! isset ( $ data [ 'added_keys' ] ) || ! is_array ( $ data [ 'added_keys' ] ) || empty ( $ data [ 'account_id' ] ) || empty ( $ data [ 'expires_at' ] ) || $ data [ 'expires_at' ] < $ now -> getTimestamp ( ) ) { return false ; } /** @var ResetsPasswordsViaAccessKey|CmfDbRecord $user */ $ user = static :: newEmptyRecord ( ) ; $ conditions = [ $ user :: getPrimaryKeyColumnName ( ) => $ data [ 'account_id' ] , ] ; $ additionalColumns = $ data [ 'added_keys' ] ; foreach ( $ additionalColumns as $ columnName ) { if ( ! array_key_exists ( $ columnName , $ data ) ) { return false ; } $ fieldType = $ user :: getColumn ( $ columnName ) -> getType ( ) ; switch ( $ fieldType ) { case Column :: TYPE_DATE : $ conditions [ $ columnName . '::date' ] = DbExpr :: create ( "``$data[$columnName]``::date" ) ; break ; case Column :: TYPE_TIME : $ conditions [ $ columnName . '::time' ] = DbExpr :: create ( "``$data[$columnName]``::time" ) ; break ; case Column :: TYPE_TIMESTAMP : $ conditions [ ] = DbExpr :: create ( "`{$columnName}`::timestamp(0) = ``{$data[$columnName]}``::timestamp(0)" ) ; break ; default : $ conditions [ $ columnName ] = $ data [ $ columnName ] ; } } if ( ! $ user -> fromDb ( $ conditions ) -> existsInDb ( ) ) { return false ; } return $ user ; }
Vlidate access key and find user
@param string $accessKey
@return CmfDbRecord|bool - false = failed to parse access key, validate data or load user
@throws \UnexpectedValueException
@throws \PeskyORM\Exception\OrmException
@throws \PDOException
@throws \InvalidArgumentException
@throws \BadMethodCallException
Vlidate access key and find user