gurix
b3f3db6f13
feat: add pluggable alarm styles and migrate wecker.py
...
Introduce a styles/ plugin package:
- styles/base.py: AlarmStyle ABC (injected set_led, update()->bool contract)
- styles/blink.py: BlinkStyle, the existing count-the-blinks puzzle moved
out of wecker.py's AlarmClock
- styles/simple.py: SimpleStyle, press-once-to-stop (the new default style)
- styles/__init__.py: STYLES registry + get_style() validator + LEGACY_STYLE
wecker.py now resolves the style via the registry and owns only the shared
music/button/cleanup loop; the --style CLI arg defaults to blink so existing
cron entries keep their behaviour. Unknown styles raise before hardware init.
2026-07-31 16:19:14 +02:00
gurix
7ee28d72b6
docs: plan for pluggable alarm styles
2026-07-31 13:41:17 +02:00
gurix
e118dbc357
refactor: share alarm loading between get_alarms and get_alarm
2026-06-22 10:37:52 +02:00
gurix
3fae274aa0
refactor: centralize alarm dict-to-GraphQL mapping
2026-06-22 10:30:01 +02:00
gurix
a67f57c37e
refactor: remove command field from GraphQL Alarm type
...
command is generated internally and has no informational value to API
consumers, so stop exposing it on getAlarms/getAlarm/setAlarm.
2026-06-22 10:04:48 +02:00
gurix
b2bb5bdaf9
docs: document API security considerations and rate-limiting recommendation
2026-06-18 17:22:55 +02:00
gurix
8a46ff8487
refactor: locate project root by pyproject.toml marker
2026-06-18 17:20:51 +02:00
gurix
77f215be84
refactor: explicitly handle missing API key header
2026-06-18 17:20:01 +02:00
gurix
0472de5a5d
fix: add SIGKILL fallback when SIGTERM does not stop the alarm
2026-06-18 17:17:56 +02:00
gurix
4d9f08f21f
refactor: make blink_led non-blocking in the state machine
2026-06-18 17:09:10 +02:00
gurix
dfc9f0cd94
feat: make alarm music file configurable via env var and CLI arg
2026-06-18 17:01:26 +02:00
gurix
434c49b609
refactor: move GPIO and pygame initialization into setup()
2026-06-18 16:58:57 +02:00
gurix
0621ab6190
chore: replace weak example API key with strong generated key
2026-06-18 16:53:15 +02:00
gurix
748a3be4b8
fix: validate cron expression before writing to crontab
2026-06-18 16:47:56 +02:00
gurix
1a8e4e2186
fix: verify /proc/PID/cmdline in isRinging to prevent PID reuse false positives
2026-06-18 16:45:52 +02:00
gurix
b62a1d10c1
fix: rotate wecker.log to prevent unbounded growth
2026-06-18 16:41:30 +02:00
gurix
d349478e07
fix: start wecker without shell=True
2026-06-18 16:38:58 +02:00
gurix
7e8e915024
fix: use fcntl file lock to prevent PID file race condition
2026-06-18 15:27:21 +02:00
gurix
058de8089c
fix: use constant-time comparison for API key
2026-06-18 15:23:57 +02:00
gurix
124a6a4916
fix: remove custom command from setAlarm to prevent command injection
2026-06-18 15:23:14 +02:00