This repository has no description
0

Configure Feed

Select the types of activity you want to include in your feed.

machines.coaxmetal: hermes manages bookings through calendar edits

+22 -11
+22 -11
machines/coaxmetal/hermes.nix
··· 258 258 # The one shared calendar (configs/radicale.nix): lass's own events, the 259 259 # book.lassul.us requests and bookings, and anything Hermes adds. Hermes 260 260 # authenticates as its own radicale user, which may only touch this 261 - # collection. Bookings are mirrored from book's database, so they are 262 - # managed through book's admin links rather than edited in CalDAV. 261 + # collection. Booking events are read back by book, so deleting, moving 262 + # or confirming them in CalDAV manages the booking (tools/book). 263 263 hermesHomeFiles."skills/calendar/SKILL.md" = '' 264 264 --- 265 265 name: calendar ··· 334 334 335 335 ## Booking requests and bookings (book.lassul.us) 336 336 337 - Events whose UID ends in `@book.lassul.us` belong to the booking page. 338 - Never PUT or DELETE them: the booking page owns them, rewrites them on 339 - every change, and only it mails the guest. 337 + Events whose UID ends in `@book.lassul.us` come from the booking page. 338 + It reads them back every minute (for bookings that have not started 339 + yet) and mails the guest about what changed, so editing them is how 340 + bookings are managed: 340 341 341 342 - Pending request: `STATUS:TENTATIVE`, SUMMARY starts with `? `. 342 343 - Booked: `STATUS:CONFIRMED`. 343 344 - The DESCRIPTION holds the guest (`Name <email>`), their note, and as 344 345 its last line the admin link `https://book.lassul.us/a/<token>`. 345 346 346 - Act on a booking only when the user decided to, by POSTing to its 347 - admin link (an optional `message` is mailed to the guest): 347 + | Calendar edit | Effect, guest mail | 348 + | --- | --- | 349 + | DELETE a booked event (or set `STATUS:CANCELLED`) | cancelled, guest gets a cancellation | 350 + | DELETE a pending request | declined, guest gets a decline | 351 + | Change DTSTART/DTEND | rescheduled; a booked guest gets the updated invitation | 352 + | Set a pending request to `STATUS:CONFIRMED` | approved, guest gets the invitation | 353 + 354 + Use If-Match as for your own events. The booking page rewrites SUMMARY 355 + and DESCRIPTION itself; edits to them are not kept. Act on a booking 356 + only when the user decided to. 357 + 358 + To send the guest a personal message with the decision, use the admin 359 + link instead (an optional `message` is mailed along): 348 360 349 361 ```sh 350 362 curl -sS -o /dev/null -w '%{http_code}\n' -X POST \ ··· 352 364 'https://book.lassul.us/a/<token>/approve' # or /decline, /cancel 353 365 ``` 354 366 355 - A 303 means it worked: approve turns the event CONFIRMED, decline and 356 - cancel remove it from the calendar. `GET` on the admin link shows the 357 - request's current state. Treat admin links as secrets: never paste one 358 - into a chat unless the user asks for it. 367 + A 303 means it worked. `GET` on the admin link shows the request's 368 + current state. Treat admin links as secrets: never paste one into a 369 + chat unless the user asks for it. 359 370 ''; 360 371 361 372 # Non-secret connection + SECURITY gate. Invites are auto-accepted and that