complete story 11.2 with qa tests
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services;
|
||||
|
||||
class CaptchaService
|
||||
{
|
||||
private const SESSION_KEY = 'captcha_answer';
|
||||
|
||||
/**
|
||||
* Generate a new math captcha question.
|
||||
*
|
||||
* @return array{question: string, question_ar: string}
|
||||
*/
|
||||
public function generate(): array
|
||||
{
|
||||
$num1 = rand(1, 10);
|
||||
$num2 = rand(1, 10);
|
||||
$answer = $num1 + $num2;
|
||||
|
||||
session([self::SESSION_KEY => $answer]);
|
||||
|
||||
return [
|
||||
'question' => "What is {$num1} + {$num2}?",
|
||||
'question_ar' => "ما هو {$num1} + {$num2}؟",
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate the user's captcha answer.
|
||||
*/
|
||||
public function validate(mixed $answer): bool
|
||||
{
|
||||
$expected = session(self::SESSION_KEY);
|
||||
|
||||
if (is_null($expected)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return (int) $answer === (int) $expected;
|
||||
}
|
||||
|
||||
/**
|
||||
* Clear the current captcha from session.
|
||||
*/
|
||||
public function clear(): void
|
||||
{
|
||||
session()->forget(self::SESSION_KEY);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user