Seditio Source
Root |
./othercms/xenForo 2.2.8/src/XF/Repository/UserTfaTrusted.php
<?php

namespace XF\Repository;

use
XF\Mvc\Entity\Repository;

class
UserTfaTrusted extends Repository
{
    public function
createTrustedKey($userId, $trustedUntil = null)
    {
       
$userTrusted = $this->em->create('XF:UserTfaTrusted');
       
$userTrusted->user_id = $userId;
        if (
$trustedUntil)
        {
           
$userTrusted->trusted_until = $trustedUntil;
        }
       
$userTrusted->save();

        return
$userTrusted->trusted_key;
    }

   
/**
     * @param int $userId
     * @param string $key
     *
     * @return \XF\Entity\UserTfaTrusted|null
     */
   
public function getTfaTrustRecord($userId, $key)
    {
        return
$this->finder('XF:UserTfaTrusted')
            ->
where(['user_id' => $userId, 'trusted_key' => $key])
            ->
where('trusted_until', '>=', \XF::$time)
            ->
fetchOne();
    }

    public function
hasOtherTrustedDevices($userId, $thisDeviceTrustKey = null)
    {
       
$total = $this->db()->fetchOne("
            SELECT COUNT(*)
            FROM xf_user_tfa_trusted
            WHERE user_id = ?
                "
. ($thisDeviceTrustKey ? "AND trusted_key <> " . $this->db()->quote($thisDeviceTrustKey) : '') . "
        "
, $userId);

        return (
$total > 0);
    }

    public function
untrustDevice($userId, $trustKey)
    {
        if (
$trustKey)
        {
           
$this->db()->delete('xf_user_tfa_trusted', 'user_id = ? AND trusted_key = ?', [$userId, $trustKey]);
        }
    }

    public function
untrustOtherDevices($userId, $thisDeviceTrustKey = null)
    {
       
$this->db()->query("
            DELETE FROM xf_user_tfa_trusted
            WHERE user_id = ?
                "
. ($thisDeviceTrustKey ? "AND trusted_key <> " . $this->db()->quote($thisDeviceTrustKey) : '') . "
        "
, $userId);
    }

    public function
pruneTrustedKeys($cutOff = null)
    {
        if (
$cutOff === null)
        {
           
$cutOff = \XF::$time;
        }

        return
$this->db()->delete('xf_user_tfa_trusted', 'trusted_until < ?', $cutOff);
    }
}