Закрыты все открытые вопросы проектирования. Пароль не покидает клиент (два ключа из мастера), TOFU для публичных ключей, устройства и конверт, атомарный rekey комнат, регистрация и контакты, схема SQLite и драйвер без cgo, сессии и CSRF, деплой через nginx+systemd, правила пушей, айдентика «Скобы» на системном mono. Иконки PWA в web/icons. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015DbCjVfTFq4ZFG8juD45YJ
2.5 KiB
2.5 KiB
ADR-019: Регистрация, ники и контакты
Контекст
Открытые вопросы: открытая регистрация или инвайты; как добавляется контакт и начинается чат 1:1. Bare — маленький инструмент для небольших групп, а не публичная сеть.
Решение
- Ник:
^[a-z0-9_]{2,32}$. Только строчные — уникальность без регистровых коллизий и омоглифов. Ник постоянен, смены нет. - Регистрация открыта. Оператор может задать один общий инвайт-код (
BARE_INVITE_CODEв окружении); если задан, регистрация требует его. Персональных инвайтов, ссылок и списков нет. - Чат 1:1 начинается с ввода ника: клиент получает публичный ключ (
GET /api/users/{nick}) и пишет. Согласия получателя не требуется — как в e-mail. Контакт — строка в списке чатов, которую сервер заводит обеим сторонам при первом сообщении в любую сторону, чтобы новое устройство видело список чатов без истории.DELETE /api/contacts/{nick}убирает чат из списка, не блокируя собеседника. - Блокировки в v1 нет. Защита от спама — инвайт-код и rate limiting (ADR-021).
- Удаление аккаунта:
DELETE /api/meс подтверждениемauthKeyудаляет аккаунт, устройства, контакты, членство и очереди. Комнаты, где пользователь владелец, передаются по правилу ADR-018.
Следствия
- Ник — публичный идентификатор; что он существует, узнать можно. Это не секрет и не считается утечкой.
- Общий инвайт-код — барьер от ботов, не от людей, которым его передали. Большего v1 не обещает.
- Блокировка и персональные инвайты — кандидаты на следующие ADR, если понадобятся.