[Unit]
Description=DECNET Canary Token Callback Receiver (HTTP + DNS)
Documentation=https://git.resacachile.cl/anti/DECNET/wiki/Workers#canary
After=network-online.target decnet-bus.service decnet-api.service
Wants=network-online.target decnet-bus.service

[Service]
Type=simple
User={{ user }}
Group={{ group }}
WorkingDirectory={{ install_dir }}
EnvironmentFile=-{{ install_dir }}/.env.local
Environment=DECNET_SYSTEM_LOGS=/var/log/decnet/decnet.canary.log
ExecStart={{ venv_dir }}/bin/decnet canary
StandardOutput=append:/var/log/decnet/decnet.canary.log
StandardError=append:/var/log/decnet/decnet.canary.log

# Bind low-numbered DNS port (53) and HTTP port (80/443) requires
# CAP_NET_BIND_SERVICE; the default DECNET_CANARY_HTTP_PORT (8088)
# and DECNET_CANARY_DNS_PORT (5353) are unprivileged, so the
# capability is granted only when an operator overrides those to
# privileged values via .env.local.
AmbientCapabilities=CAP_NET_BIND_SERVICE
CapabilityBoundingSet=CAP_NET_BIND_SERVICE

# Persist canary blobs (operator uploads) under /var/lib/decnet —
# the same posture the rest of the workers use for runtime data.
ReadWritePaths={{ install_dir }} /var/log/decnet /var/lib/decnet

# Security Hardening
NoNewPrivileges=yes
ProtectSystem=full
ProtectHome=read-only
PrivateTmp=yes
ProtectKernelTunables=yes
ProtectKernelModules=yes
ProtectControlGroups=yes
RestrictSUIDSGID=yes
LockPersonality=yes

Restart=on-failure
RestartSec=5
TimeoutStopSec=15

[Install]
WantedBy=multi-user.target
