# Droits par topic de l'assistant vocal (étape 15), pour Mosquitto 2.x.
#
# Tout ce qui n'est pas permis ici est INTERDIT, et Mosquitto refuse en silence :
# une publication interdite est jetée sans erreur côté client, un abonnement
# interdit ne reçoit simplement rien. Symptôme typique : « tout est connecté,
# mais rien ne se passe ».

# Le serveur vocal, et les outils du Makefile qui prennent ses identifiants
# (mqtt-watch, tone-mqtt, play-mqtt...) : tout voice/, la domotique home/ et les
# agents Linux agent/ (étape 15b).
user voice-server
topic readwrite voice/#
topic readwrite home/#
topic readwrite agent/#

# Chaque carte : SES topics seulement. %u est remplacé par le nom d'utilisateur
# MQTT, qui est donc le DEVICE_ID de la carte (esp32-01). Une carte ne peut ni
# écouter le micro d'une autre, ni publier sous son nom.
pattern write voice/%u/state
pattern write voice/%u/event
pattern write voice/%u/audio/in
pattern write voice/%u/audio/stream
pattern read voice/%u/control
pattern read voice/%u/audio/out

# Chaque agent Linux (étape 15b) : compte = son id (pc-bureau). Il ne reçoit que SES
# commandes : sans ces droits, n'importe qui pourrait éteindre toutes les machines.
pattern write agent/%u/state
pattern write agent/%u/result
pattern read agent/%u/command

# Présence du serveur (« online », ou « offline » publié par son testament) :
# toutes les cartes la lisent, pour couper leur micro quand il disparaît.
# Au démarrage, Mosquitto prévient « ACL pattern 'voice/server/status' does not
# contain '%c' or '%u' » : c'est voulu (le même topic pour tous), et la règle
# s'applique bien (vérifié).
pattern read voice/server/status
