Sécurisation, déploiement CI/CD Gitea et documentation INFCDAAL3
- CI/CD Gitea Actions: ci.yml (Pint + PHPUnit), deploy.yml (déploiement SSH) - Suppression de l'ancien workflow GitHub cassé - En-têtes de sécurité: ajout CSP et Permissions-Policy - RGPD: droit à l'effacement (anonymisation du compte) + tests - Correctifs: ForceHttps hors env testing, timestamps du modèle Utilisateur, suppression des migrations en doublon (migrate échouait sur base neuve) - Qualité: formatage Laravel Pint sur l'ensemble du code - Documentation dossier technique (docs/) + .docx + .pptx Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
<?php
|
||||
|
||||
namespace Tests\Feature;
|
||||
|
||||
use App\Models\Role;
|
||||
use App\Models\Utilisateur;
|
||||
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use Tests\TestCase;
|
||||
|
||||
class SecuriteTest extends TestCase
|
||||
{
|
||||
use RefreshDatabase;
|
||||
|
||||
/**
|
||||
* Vérifie que les en-têtes de sécurité sont bien présents sur les réponses.
|
||||
*/
|
||||
public function test_les_entetes_de_securite_sont_presents(): void
|
||||
{
|
||||
$response = $this->get('/');
|
||||
|
||||
$response->assertStatus(200);
|
||||
$response->assertHeader('X-Content-Type-Options', 'nosniff');
|
||||
$response->assertHeader('X-Frame-Options', 'SAMEORIGIN');
|
||||
$response->assertHeader('Referrer-Policy', 'strict-origin-when-cross-origin');
|
||||
$response->assertHeader('Content-Security-Policy');
|
||||
$response->assertHeader('Permissions-Policy');
|
||||
}
|
||||
|
||||
/**
|
||||
* Vérifie que les pages protégées redirigent un visiteur non authentifié
|
||||
* vers la page de connexion (contrôle d'accès).
|
||||
*/
|
||||
public function test_les_pages_protegees_exigent_une_authentification(): void
|
||||
{
|
||||
$response = $this->get('/profile/settings');
|
||||
|
||||
$response->assertRedirect('/login');
|
||||
}
|
||||
|
||||
/**
|
||||
* Vérifie le droit à l'effacement RGPD : la suppression du compte
|
||||
* anonymise bien les données personnelles de l'utilisateur.
|
||||
*/
|
||||
public function test_la_suppression_de_compte_anonymise_les_donnees(): void
|
||||
{
|
||||
$role = Role::create(['Nom' => 'Utilisateur']);
|
||||
|
||||
$user = Utilisateur::create([
|
||||
'Pseudo' => 'JeanDupont',
|
||||
'Email' => 'jean.dupont@example.com',
|
||||
'MotDePasse' => Hash::make('motdepasse123'),
|
||||
'ID_Role' => $role->ID_Role,
|
||||
'Statut' => 'Actif',
|
||||
]);
|
||||
|
||||
$response = $this->actingAs($user)->delete('/profile', [
|
||||
'MotDePasse_Confirmation' => 'motdepasse123',
|
||||
]);
|
||||
|
||||
$response->assertRedirect('/');
|
||||
|
||||
$user->refresh();
|
||||
$this->assertSame('Utilisateur supprimé', $user->Pseudo);
|
||||
$this->assertSame('Inactif', $user->Statut);
|
||||
$this->assertStringNotContainsString('jean.dupont', $user->Email);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user