aboutsummaryrefslogtreecommitdiff
path: root/Psso/Challenge/Password.php
diff options
context:
space:
mode:
authorwinter Sparkles2026-08-08 23:01:51 +0100
committerwinter Sparkles2026-08-08 23:01:51 +0100
commitb422b6ded608807c7d3bb8b965b3797ca513610b (patch)
tree7925fa972efbfff2a9bf8648334d49e3fd6b5df1 /Psso/Challenge/Password.php
parent880a274e1ecbed42c76d3dc4a81161b3ae372726 (diff)
implement a large chunk of the auth system itself :D
Diffstat (limited to 'Psso/Challenge/Password.php')
-rw-r--r--Psso/Challenge/Password.php32
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'
+ );
+ }
+}