hanyuu/src/Users/Db/DbUserTOTPInfo.php
2023-10-18 10:34:30 +00:00

46 lines
1.2 KiB
PHP

<?php
namespace Hanyuu\Users\Db;
use Index\DateTime;
use Index\Data\IDbResult;
use Hanyuu\OTP\TOTPGenerator;
use Hanyuu\Users\IUserTOTPInfo;
class DbUserTOTPInfo implements IUserTOTPInfo {
private string $userId;
private string $secretKey;
private DateTime $changed;
public function __construct(IDbResult $result) {
$this->userId = $result->getString(0);
$this->secretKey = $result->getString(1);
$this->changed = DateTime::fromUnixTimeSeconds($result->getInteger(2));
}
public function getUserId(): string {
return $this->userId;
}
public function getSecretKey(): string {
return $this->secretKey;
}
public function getChangedTime(): DateTime {
return $this->changed;
}
public function createGenerator(): TOTPGenerator {
return new TOTPGenerator($this->secretKey);
}
public function generateValidCodes(int $offset = 0, int $timeStamp = -1): array {
$generator = $this->createGenerator();
return [
$generator->generate(-1 + $offset, $timeStamp),
$generator->generate($offset, $timeStamp),
$generator->generate(1 + $offset, $timeStamp),
];
}
}