GET /presence/{token}/arrivee et /depart modifiaient l'état (save_presence,
append_log) : c'est anti-pattern REST, CSRF-trivial via <img src="..."> si
le token fuite, et le token se retrouvait dans les logs reverse-proxy,
l'historique navigateur et les referrers.
Les deux routes passent en POST. C'est un breaking change pour les clients
Tasker actuels, mais Tasker supporte HTTP POST nativement et la doc
docs/notifications.md est mise à jour (Tasker : HTTP Request méthode POST ;
script NetworkManager : curl -X POST).
Les tests existants qui utilisaient client.get(...) sur ces routes passent
en client.post(...). Un nouveau test vérifie que le GET renvoie désormais
405 Method Not Allowed et que le POST continue de fonctionner.
💘 Generated with Crush
Assisted-by: Crush:glm-5.2
113 lines
3.7 KiB
Markdown
113 lines
3.7 KiB
Markdown
# Rappels de pointage
|
||
|
||
L'app peut te relancer automatiquement si tu es détecté présent au bureau sans
|
||
avoir pointé le matin, ou parti sans avoir pointé la sortie. Ça repose sur deux
|
||
briques :
|
||
|
||
- **Réception des notifs** : [ntfy](https://ntfy.sh), un service gratuit de
|
||
notifications push par topic.
|
||
- **Détection de présence** : ton appareil (téléphone ou laptop) appelle une
|
||
URL de l'app quand il entre/sort du bureau. L'app fait le reste (vérifie
|
||
toutes les 5 min, 7h–20h en semaine, si un pointage manque).
|
||
|
||
Avant de commencer : va sur `/settings`, choisis un nom de topic ntfy secret
|
||
(ex: `prenom-pointeuse-a1b2`, pas devinable), enregistre-le. La page affiche
|
||
ensuite tes deux URLs personnelles **Arrivée** et **Départ** — elles
|
||
contiennent un token secret, ne les partage pas.
|
||
|
||
---
|
||
|
||
## Android
|
||
|
||
### 1. Recevoir les notifs
|
||
|
||
1. Installe l'app **ntfy** depuis le Play Store.
|
||
2. Bouton **+** → entre le nom de topic choisi sur `/settings` → valide.
|
||
Laisse le serveur par défaut (`ntfy.sh`).
|
||
|
||
### 2. Détecter la présence (Tasker)
|
||
|
||
1. Installe **Tasker**.
|
||
2. Autorise Tasker à utiliser la localisation en arrière-plan (sinon Android
|
||
coupe la géolocalisation quand l'app n'est pas au premier plan).
|
||
3. Crée un profil : **Trigger → Location** → renseigne l'adresse/coordonnées
|
||
du bureau et un rayon (~100–150 m) → événement **Enter**.
|
||
Tâche associée : **Net → HTTP Request**, méthode `POST`, URL = ton lien
|
||
**Arrivée** (copié depuis `/settings`).
|
||
4. Crée un second profil symétrique : même géofence, événement **Exit**,
|
||
tâche HTTP POST vers ton lien **Départ**.
|
||
|
||
### 3. Vérifier
|
||
|
||
- Force une entrée/sortie de zone (ou lance la tâche HTTP manuellement dans
|
||
Tasker) et vérifie que la réponse est `{"ok":true}`.
|
||
- Simule une journée sans pointage matin pendant que tu es marqué "présent" :
|
||
une notif ntfy doit arriver dans les 5 minutes.
|
||
|
||
---
|
||
|
||
## Ubuntu (laptop)
|
||
|
||
### 1. Recevoir les notifs
|
||
|
||
Le plus simple est le client CLI officiel, qui affiche une notif desktop
|
||
native (`notify-send`) à chaque message reçu sur ton topic.
|
||
|
||
```bash
|
||
# via le script d'install officiel
|
||
curl -sSL https://archive.ntfy.sh/gpg.key | sudo tee /etc/apt/keyrings/ntfy.asc
|
||
echo "deb [signed-by=/etc/apt/keyrings/ntfy.asc] https://archive.ntfy.sh/deb stable main" \
|
||
| sudo tee /etc/apt/sources.list.d/ntfy.list
|
||
sudo apt update && sudo apt install ntfy
|
||
```
|
||
|
||
Lance un abonnement persistant (à mettre dans un service systemd user, voir
|
||
plus bas, ou simplement dans un terminal/tmux) :
|
||
|
||
```bash
|
||
ntfy subscribe --output=notify-send TON_TOPIC
|
||
```
|
||
|
||
### 2. Détecter la présence (hook réseau NetworkManager)
|
||
|
||
Objectif : appeler l'URL "Arrivée" dès que le laptop se connecte au Wi-Fi du
|
||
bureau, et l'URL "Départ" dès qu'il s'en déconnecte.
|
||
|
||
Crée `/etc/NetworkManager/dispatcher.d/99-pointeuse` :
|
||
|
||
```bash
|
||
#!/bin/bash
|
||
# $1 = nom de l'interface, $2 = événement (up/down/...)
|
||
BUREAU_SSID="NomDuWifiBureau"
|
||
URL_ARRIVEE="https://ton-serveur/presence/TON_TOKEN/arrivee"
|
||
URL_DEPART="https://ton-serveur/presence/TON_TOKEN/depart"
|
||
|
||
current_ssid=$(nmcli -t -f active,ssid dev wifi | grep '^yes' | cut -d: -f2)
|
||
|
||
case "$2" in
|
||
up)
|
||
[ "$current_ssid" = "$BUREAU_SSID" ] && curl -fsS -X POST "$URL_ARRIVEE"
|
||
;;
|
||
down)
|
||
[ "$current_ssid" != "$BUREAU_SSID" ] && curl -fsS -X POST "$URL_DEPART"
|
||
;;
|
||
esac
|
||
```
|
||
|
||
```bash
|
||
sudo chmod +x /etc/NetworkManager/dispatcher.d/99-pointeuse
|
||
```
|
||
|
||
Le script tourne automatiquement à chaque changement de connexion réseau —
|
||
pas besoin de cron ni de service à part.
|
||
|
||
### 3. Vérifier
|
||
|
||
```bash
|
||
# teste le script à la main
|
||
sudo /etc/NetworkManager/dispatcher.d/99-pointeuse wlp0s20f3 up
|
||
```
|
||
|
||
La réponse doit être `{"ok":true}`. Reconnecte-toi ensuite au vrai Wi-Fi du
|
||
bureau pour valider le déclenchement automatique.
|