diff options
Diffstat (limited to 'Psso/Challenge/Password.php')
| -rw-r--r-- | Psso/Challenge/Password.php | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/Psso/Challenge/Password.php b/Psso/Challenge/Password.php new file mode 100644 index 0000000..c20f5e2 --- /dev/null +++ b/Psso/Challenge/Password.php @@ -0,0 +1,32 @@ +<?php +namespace Psso\Challenge; + +use Psso\{Challenge, ChallengeResult, Input, AuthProvider, AuthInterface}; + +class Password extends Challenge { + public function getInputs(): array { + if (isset($this->context->user)) { + return [ + new Input('password', Input::SECRET, 'challenge.input.password') + ]; + } + return [ + new Input('username', Input::TEXT, 'challenge.input.username'), + new Input('password', Input::SECRET, 'challenge.input.password'), + ]; + } + + public function validate( + AuthProvider $provider, array $inputData + ): ChallengeResult { + self::requireInterface($provider, AuthInterface\Password::class); + $successful = $provider->validatePassword( + $inputData['username'] ?? $this->context->user, + $inputData['password'] + ); + return new ChallengeResult( + self::class, $successful, $inputData['username'] ?? null, + $successful ? null : 'challenge.message.wrong-password' + ); + } +} |
