# TRAIL DPS 4.2 - LOT 5.0 OVH - Acteur SECURITY pour tracking mobile

## Objectif

Préparer le serveur OVH à accepter les équipes de sécurité comme catégorie terrain distincte des secours, ouvreurs et fermeurs.

Cette étape précède le correctif PLACE LOT 5.1 afin que les QR codes de sécurité puissent être générés proprement.

## Modifications serveur

### Fichiers PHP modifiés

- `SRC/Tracking/TrackingValidation.php`
  - ajout de `SECURITY` dans les `actor_type` autorisés ;
  - acceptation des libellés `SECURITY`, `SECURITE` et `SÉCURITÉ` dans la normalisation.

- `SRC/Tracking/TrackingHttp.php`
  - ajout de l'en-tête CORS `X-Activation-Secret` ;
  - ajout de `requireActivationSecret()` pour sécuriser la création de tokens d'activation mobile.

- `public/api/tracking/create_device_activation.php`
  - contrôle obligatoire de `X-Activation-Secret` ;
  - autorisation de `actor_type = SECURITY` ;
  - obligation de `local_team_id` pour `RESCUE` et `SECURITY`.

### Fichiers SQL modifiés

- `sql/tracking_schema.sql`
  - ajout de `SECURITY` dans les ENUM `actor_type` pour une installation neuve.

- `sql/lot6_device_activation_tokens.sql`
  - ajout de `SECURITY` dans l'ENUM `actor_type` des tokens d'activation pour une installation neuve ou rejouée.

### Fichier SQL créé

- `sql/lot_5_0_security_actor_type.sql`
  - migration non destructive à exécuter sur la base existante ;
  - élargit les ENUM `actor_type` sur les tables tracking existantes.

## Tables concernées par la migration

- `tracking_devices`
- `tracking_bindings`
- `tracking_positions`
- `tracking_positions_latest`
- `tracking_positions_trace`
- `tracking_device_activation_tokens`

## Exemple de création activation SECURITY

```powershell
$body = @{
    place_instance_id = "PLACE-TEST"
    event_remote_id = "EVENT-REMOTE-TEST"
    event_local_id = 2026
    run_id = $null
    event_name = "TEST SECURITE"
    actor_type = "SECURITY"
    actor_label = "Equipe securite 1"
    device_uid = "SECURITY-IOS-001"
    device_label = "Equipe securite 1"
    local_team_id = 12
    local_staff_team_id = $null
} | ConvertTo-Json -Depth 5

Invoke-RestMethod `
    -Uri "https://tracking.synoluvia.fr/api/tracking/create_device_activation.php" `
    -Method POST `
    -Headers @{
        "X-Api-Key" = $publicApiKey
        "X-Activation-Secret" = $activationSecret
    } `
    -ContentType "application/json; charset=utf-8" `
    -Body $body
```

## Points de vigilance

- `SECURITY` est volontairement distinct de `RESCUE`.
- Les équipes sécurité restent rattachées à `local_team_id`, comme les secours, car elles relèvent de la table PLACE `teams` et non de `course_staff_teams`.
- Les ouvreurs/fermeurs restent rattachés à `local_staff_team_id`.
- Le secret d'activation protège uniquement la création des tokens d'enrôlement. Les endpoints mobiles continuent d'utiliser le `device_token` reçu après activation.
- Les clients PLACE devront envoyer `X-Activation-Secret` au LOT 5.1.

## Tests recommandés

1. Déployer les fichiers PHP modifiés.
2. Exécuter `sql/lot_5_0_security_actor_type.sql`.
3. Tester un appel `create_device_activation.php` sans `X-Activation-Secret` : réponse attendue 401.
4. Tester avec le secret correct et `actor_type = SECURITY` + `local_team_id` : réponse attendue 201.
5. Activer le token depuis mobile et vérifier que `actor_type = SECURITY` est conservé dans le binding.
