modified: Dockerfile modified: composer.json modified: composer.lock modified: config/packages/twig.yaml modified: config/services.yaml modified: docs/Caddyfile modified: docs/compose.yaml renamed: docs/env.example -> docs/example.env modified: public/index.php modified: readme.md modified: src/Command/GenerateBackupCodesCommand.php modified: src/ConfigBag.php modified: src/Data/Payload.php modified: src/Enum/Scope.php modified: src/Listener/AcceptListener.php modified: src/Listener/AllowListener.php modified: src/Listener/InterceptListener.php modified: src/Listener/LoginListener.php modified: src/MonitorCacheKeys.php modified: src/PersistCache.php modified: src/Service/BackupCodeManager.php modified: src/Service/DomainManager.php new file: src/Service/LoginManager.php modified: src/Trait/CookieNameTrait.php modified: src/Trait/GetTotpTrait.php modified: src/Trait/MakeNonceTrait.php modified: src/Trait/StringTrait.php modified: src/Utilities.php modified: templates/_script.html.twig modified: templates/_style.html.twig modified: templates/base.html.twig modified: templates/login.html.twig
30 lines
729 B
PHP
30 lines
729 B
PHP
<?php
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Trait;
|
|
|
|
use App\ConfigBag;
|
|
use OTPHP\Factory;
|
|
use OTPHP\TOTPInterface;
|
|
use Symfony\Component\HttpKernel\Exception\HttpException;
|
|
use Symfony\Contracts\Service\Attribute\Required;
|
|
|
|
trait GetTotpTrait {
|
|
protected readonly ConfigBag $config;
|
|
|
|
#[Required]
|
|
public function setConfig(ConfigBag $config): void {
|
|
$this->config = $config;
|
|
}
|
|
|
|
protected function getTotp(): TOTPInterface {
|
|
$otp = Factory::loadFromProvisioningUri(
|
|
$this->config->totpUri(), $this->config->clock()
|
|
);
|
|
if ($otp instanceof TOTPInterface) {
|
|
return $otp;
|
|
}
|
|
throw new HttpException(500, 'Internal Server Exception');
|
|
}
|
|
}
|