Skip to content

Кабинет клиента

Кабинет живёт в том же SPA под /portal/*; вход — magic link, пароль или OAuth (Аутентификация), токен со scope client не подходит к админским роутам. API — /portal/v1.

Вход — форма строится по GET /portal/v1/auth/methods: пароль и OAuth-кнопки (если включены) + «войти по ссылке» (magic link, всегда; он же — «забыли пароль»). Ответ на запрос ссылки одинаков для любого email.

Регистрация — виден при registration != closed: email + пароль или OAuth-кнопки → подтверждение email (для пароля) → в режиме application — экран «заявка на рассмотрении», в open — сразу кабинет. Пароль можно задать/сменить и позже, в настройках аккаунта.

ПодпискиGET /portal/v1/me: список подписок клиента, для каждой:

  • статус и срок (expires_at, обратный отсчёт);
  • расход трафика: прогресс traffic_used_bytes / traffic_limit_bytes, график по дням (GET …/usage?granularity=day);
  • ссылка подписки + QR (GET …/link) с кнопками импорта в популярные клиенты;
  • перевыпуск ключей (POST …/rotate-credentials) с подтверждением: старые конфиги перестанут работать сразу.

Оплата — при включённом биллинге: тарифы (GET /portal/v1/plans), выбор способа оплаты, если провайдеров несколько (GET /portal/v1/payment-methods), POST /portal/v1/checkout → редирект на агрегатора. Статус платежа кабинет узнаёт поллингом своей подписки — активация происходит по вебхуку на backend (Платежи).

Подписка suspended по лимиту показывает дату сброса периода или предложение продлить; expired — только продление.