feat(altcha): add altcha validation layer to login
Some checks are pending
Cadoles/hydra-sql/pipeline/pr-develop Build started...
Some checks are pending
Cadoles/hydra-sql/pipeline/pr-develop Build started...
This commit is contained in:
37
src/Flag/Controller/FlagController.php
Normal file
37
src/Flag/Controller/FlagController.php
Normal file
@ -0,0 +1,37 @@
|
||||
<?php
|
||||
|
||||
namespace App\Flag\Controller;
|
||||
|
||||
use App\Flag\FlagAccessor;
|
||||
use App\Flag\FlagEnum;
|
||||
use Psr\Cache\CacheItemPoolInterface;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||
use Symfony\Component\HttpFoundation\Exception\JsonException;
|
||||
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use Symfony\Component\Routing\Annotation\Route;
|
||||
|
||||
class FlagController extends AbstractController
|
||||
{
|
||||
#[Route('/flag/{flagName}', name: 'flag_update', methods: ['PUT'])]
|
||||
public function updateFlag(CacheItemPoolInterface $cache, Request $request, string $flagName): Response
|
||||
{
|
||||
try {
|
||||
FlagEnum::from($flagName);
|
||||
$flagValue = \json_decode($request->getContent(), true, flags: JSON_THROW_ON_ERROR)[FlagAccessor::FLAG_VALUE];
|
||||
} catch (\ValueError $e) {
|
||||
throw new \InvalidArgumentException('invalid flag name provided');
|
||||
} catch (JsonException $e) {
|
||||
throw new \InvalidArgumentException('invalid json format');
|
||||
}
|
||||
|
||||
$flag = $cache->getItem($flagName);
|
||||
$flag->set($flagValue);
|
||||
$cache->save($flag);
|
||||
|
||||
return new JsonResponse(
|
||||
[\sprintf('flag %s has been %s.', $flagName, $flagValue ? 'enabled' : 'disabled')]
|
||||
);
|
||||
}
|
||||
}
|
26
src/Flag/FlagAccessor.php
Normal file
26
src/Flag/FlagAccessor.php
Normal file
@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
namespace App\Flag;
|
||||
|
||||
use Psr\Cache\CacheItemPoolInterface;
|
||||
|
||||
class FlagAccessor
|
||||
{
|
||||
public const FLAG_VALUE = 'flagValue';
|
||||
|
||||
public function __construct(
|
||||
private readonly CacheItemPoolInterface $cache
|
||||
) {
|
||||
}
|
||||
|
||||
public function isFlagEnabled(FlagEnum $flagName, bool $fallbackValue = false): bool
|
||||
{
|
||||
$flagValue = $this->cache->getItem($flagName->value)->get();
|
||||
|
||||
if (null === $flagValue) {
|
||||
return $fallbackValue;
|
||||
}
|
||||
|
||||
return (bool) $flagValue;
|
||||
}
|
||||
}
|
8
src/Flag/FlagEnum.php
Normal file
8
src/Flag/FlagEnum.php
Normal file
@ -0,0 +1,8 @@
|
||||
<?php
|
||||
|
||||
namespace App\Flag;
|
||||
|
||||
enum FlagEnum: string
|
||||
{
|
||||
case Altcha = 'altcha';
|
||||
}
|
Reference in New Issue
Block a user