46 lines
1.2 KiB
PHP
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),
|
|
];
|
|
}
|
|
}
|