feat(altcha): remove feature flag for security
This commit is contained in:
parent
303b0279f8
commit
79337efef0
@ -2,10 +2,6 @@ controllers:
|
||||
resource: ../../src/Controller/
|
||||
type: annotation
|
||||
|
||||
controllers_flag:
|
||||
resource: ../../src/Flag/Controller/
|
||||
type: annotation
|
||||
|
||||
kernel:
|
||||
resource: ../../src/Kernel.php
|
||||
type: annotation
|
||||
|
15
readme.md
15
readme.md
@ -46,6 +46,7 @@ Elle permet de se connecter à une base de donnée et de vérifier un mot de pas
|
||||
| `PHP_FPM_PM_MIN_SPARE_SERVERS` | Définition du nombre minimum de processus enfants inactifs que PHP-FPM doit conserver en réserve. | 1 | |
|
||||
| `PHP_FPM_PM_MAX_SPARE_SERVERS` | Définition du nombre maximum de processus enfants inactifs que PHP-FPM peut conserver en réserve. | 3 | |
|
||||
| `XDG_DATA_HOME` | Définition du répertoire de base pour le stockage des données spécifiques à l'utilisateur. | /tmp/data | |
|
||||
| `ALTCHA_ENABLED` | Désactivation d'altcha lors de la connexion | true | |
|
||||
|
||||
### Algorithmes de hashage compatibles
|
||||
|
||||
@ -110,20 +111,6 @@ ex : `'redis:?host[redis1:26379]&host[redis2:26379]&host[redis3:26379]&redis_sen
|
||||
| `mariadb` | Base de donnée mariadb support du test | `3306` |
|
||||
| `pgadmin` | pour administrer la base de donnée | `8085` |
|
||||
|
||||
### Configuration d'Altcha
|
||||
|
||||
Altcha est activable/désactivable par un feature flag disponible à la route /flag/altcha (port 8082 par défaut).
|
||||
La valeur de ce flag est stockée dans Redis (clé `altcha`) afin de pouvoir la modifier à la volée. Par sécurité, un fallback sur la variable d'environnement `ALTCHA_ENABLED` est effectué si la clé n'existe pas dans Redis.
|
||||
|
||||
Exemple de désactivation:
|
||||
```shell
|
||||
curl --request PUT \
|
||||
--url https://dev.mse.local/auth/sql/flag/altcha \
|
||||
--header 'Content-Type: application/json' \
|
||||
--data '{"flagValue": false}'
|
||||
```
|
||||
|
||||
|
||||
### build du sql theme
|
||||
|
||||
copier les images et les fonts dans les dossier ./assets
|
||||
|
@ -1,37 +0,0 @@
|
||||
<?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')]
|
||||
);
|
||||
}
|
||||
}
|
@ -1,26 +0,0 @@
|
||||
<?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;
|
||||
}
|
||||
}
|
@ -1,8 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Flag;
|
||||
|
||||
enum FlagEnum: string
|
||||
{
|
||||
case Altcha = 'altcha';
|
||||
}
|
@ -3,8 +3,6 @@
|
||||
namespace App\Form;
|
||||
|
||||
use App\Altcha\Form\AltchaType;
|
||||
use App\Flag\FlagAccessor;
|
||||
use App\Flag\FlagEnum;
|
||||
use Symfony\Component\Form\AbstractType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\TextType;
|
||||
@ -14,7 +12,6 @@ use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||
class LoginType extends AbstractType
|
||||
{
|
||||
public function __construct(
|
||||
private readonly FlagAccessor $flagAccessor,
|
||||
private readonly bool $altchaEnabled
|
||||
) {
|
||||
}
|
||||
@ -32,7 +29,7 @@ class LoginType extends AbstractType
|
||||
])
|
||||
;
|
||||
|
||||
if ($this->flagAccessor->isFlagEnabled(FlagEnum::Altcha, $this->altchaEnabled)) {
|
||||
if ($this->altchaEnabled) {
|
||||
$builder->add('altcha', AltchaType::class, [
|
||||
'translation_domain' => 'form',
|
||||
'label' => 'altcha.widget.title',
|
||||
|
Loading…
x
Reference in New Issue
Block a user