Регистрация и вход
Два начина да си направиш акаунт — email/парола или Google.
Кога правиш акаунт?
Setup wizard-ът ти позволява първо да попълниш конфигурацията на бота, без регистрация. След като свършиш и видиш preview-а, идва signup wall-ът — там те питаме за акаунт. Идеята е: първо виждаш стойността, после плащаш.
Email + парола
Полета на /register:
• **Име** — опционално.
• **Имейл** — задължителен; форматът се проверява, disposable домейни се блокират.
• **Парола** — минимум **6** символа.
• **Потвърждение на паролата** — трябва да съвпада.
Има rate limit от 5 регистрации на минута на IP. След „Регистрация“ изпращаме 6-цифрен код на имейла — въвеждаш го на следващия екран.
Под бутона „Създай акаунт“ има разделител „или“ и бутон „Регистрирай с Google“ — описан в следващата стъпка.
Google Sign-In
Втори бутон на /register и /login — „Sign in with Google“. Кликаш → Google account picker → връщаш се вече логнат. Scope-ът е `openid email profile` (различен от Google Calendar OAuth-а, който се ползва само за календара). Имейлът от Google автоматично е верифициран — без 6-цифрен код.
Ако вече имаш акаунт с имейл/парола и решиш да минеш на Google със същия имейл — двата метода се сливат автоматично (запазваме съществуващия user row и добавяме `oauth_provider=google` и `oauth_provider_id`).
Вход в съществуващ акаунт
На /login: имейл + парола (с „Покажи паролата“ toggle, чекбокс „Запомни ме“ и линк „Забравена парола?“) или Google бутон. Rate limit: 10 опита/мин на IP. Ако опиташ да влезеш с парола в акаунт, който е само Google — получаваш специфична грешка „OAUTH_ONLY“ и UI-ят те насочва към Google бутона.
Сесия
След успешен вход се сетва httpOnly cookie `rai_session` — JWT, подписан с HMAC-SHA256, с валидност 30 дни. С „Запомни ме“ cookie-то се пази дълго; без него е session-only.
Излизане: `POST /api/auth/logout` (изтрива cookie-то).