diff options
| author | winter Sparkles | 2026-08-08 23:01:51 +0100 |
|---|---|---|
| committer | winter Sparkles | 2026-08-08 23:01:51 +0100 |
| commit | b422b6ded608807c7d3bb8b965b3797ca513610b (patch) | |
| tree | 7925fa972efbfff2a9bf8648334d49e3fd6b5df1 /Psso/Challenge/Totp.php | |
| parent | 880a274e1ecbed42c76d3dc4a81161b3ae372726 (diff) | |
implement a large chunk of the auth system itself :D
Diffstat (limited to 'Psso/Challenge/Totp.php')
| -rw-r--r-- | Psso/Challenge/Totp.php | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/Psso/Challenge/Totp.php b/Psso/Challenge/Totp.php new file mode 100644 index 0000000..4fd47f4 --- /dev/null +++ b/Psso/Challenge/Totp.php @@ -0,0 +1,27 @@ +<?php +namespace Psso\Challenge; +use Psso\{Challenge, AuthProvider, ChallengeResult, Context, Input, AuthInterface}; + +class Totp extends Challenge { + public static function create(Context $context): static { + self::requireKnownUser($context); + return new self($context); + } + + public function getInputs(): array { + return [new Input('otp', Input::NUMERIC, 'challenge.input.otp')]; + } + + public function validate( + AuthProvider $provider, array $inputData + ): ChallengeResult { + self::requireInterface($provider, AuthInterface\Totp::class); + $success = $provider->validateTotp( + $this->context->user, $inputData['otp'] + ); + return new ChallengeResult( + self::class, $success, null, + $success ? null : 'challenge.message.wrong-otp' + ); + } +} |
