web_api_tokens v0.2.1 [base]


API-токены веб-панели и одноразовые ticket для WebSocket.

versiondatecommitфайлов
0.2.12026-09-1791610a9fc1559

README

# web_api_tokens

API-токены веб-панели и одноразовые пропуска для живого канала.

Тип: Модуль. Категория: `base`. Зависимостей нет.

## Описание

Токены — это пароль для скриптов и автоматики: предъявляются заголовком вместо логина в браузере. Каждый токен выпускается с ограниченной областью — подмножеством прав владельца. Выдать прав больше, чем есть у самого владельца, нельзя. Сам секрет показывается один раз при выпуске, дальше хранится только его хеш.

Для живого канала связи долгий токен в адресе светить запрещено: клиент меняет его на одноразовый пропуск, который сгорает при первом же подключении.

У пользователей Telegram нет аккаунта кабинета, поэтому токены им привязать не к чему. Для этого есть привязка: в кабинете выпускается одноразовый код с коротким сроком жизни, в боте он вводится командой — и Telegram-id связывается с учётной записью. После этого токены выпускаются прямо из бота. Разорвать связь можно с любой стороны.

## Возможности

- `lookup {token: str}` → проверить Bearer-токен (идентификация запроса транспортом)
- `create {uid: int, username: str, name: str, scope: list|None, created_by: int}` → выпустить API-токен (секрет — только здесь и сейчас)
- `list {uid: int}` → токены пользователя (без секретов)
- `revoke {uid: int, token_id: str}` → отозвать один токен
- `mint_ticket {uid: int, username: str, scope: list|None}` → одноразовый ticket для WebSocket
- `consume_ticket {ticket: str}` → погасить ticket при открытии WS (одноразово)
- `link_code {uid: int}` → одноразовый код привязки TG (10 мин, из веб-кабинета)
- `link_consume {code: str, telegram_qid: str}` → погасить код из `/link` (привязать TG к web-uid)
- `linked_uid {telegram_qid: str}` → web-uid, привязанный к TG
- `linked_telegram {uid: int}` → TG-qid, привязанный к web-uid
- `unlink {telegram_qid: str}` → снять привязку TG
- `unlink_uid {uid: int}` → снять все привязки пользователя

## Права

- `tokens_tg` — API-токены и привязка через Telegram (/link, /token…) — только явным списком

## Telegram

- `/link <код>` — привязать TG к web-аккаунту (код из веб-кабинета)
- `/unlink` — отвязать
- `/token [имя]` — выпустить токен (показывается один раз)
- `/tokens` — список своих токенов
- `/token_del <id>` — отозвать токен

## Web

- `POST /api/auth/token` — выпустить токен
- `GET /api/auth/tokens` — список своих токенов
- `POST /api/auth/token/revoke` — отозвать токен
- `POST /api/auth/ticket` — ticket для WebSocket
- `POST /api/auth/link_code` — код привязки TG
- `GET /api/auth/link` — кто привязан
- `POST /api/auth/unlink` — отвязать

## Конфигурация (`config.schema.json`)

- Опциональные: `API_TOKENS_FILE` = ``, `TG_LINKS_FILE` = ``

Манифест

{
  "name": "web_api_tokens",
  "version": "0.2.1",
  "category": "base",
  "description": "API-токены веб-панели и одноразовые ticket для WebSocket.",
  "requires": [],
  "rights": [],
  "api_methods": [],
  "web_routes": [],
  "commit": "91610a9fc1556c139f02139ef0fd9a4504251dcf",
  "updated": "2026-09-17 12:26:56 +0300",
  "integrity": "sha256:e8f6b13f2b370ff1d5e0b95cd26885e72f908372a79ecb4bdf0e71ad5dd9b54c",
  "files": "[9 файлов — см. вкладки ниже]",
  "note": "",
  "wdesc": "",
  "wbody": "",
  "_extra": {
    "api": "",
    "tg_commands": "",
    "events_emitted": "[]",
    "events_subscribed": "[]",
    "audit_allow": "",
    "shared_routes": "",
    "config_schema": "config.schema.json",
    "env_example": ".env.example"
  }
}

Файлы и исходники

Дерево файлов

  • · корень
    • 3.9 КБ
    • 0.1 КБ
    • 15.0 КБ
    • 3.9 КБ
    • 2.1 КБ
    • 4.3 КБ
    • 3.3 КБ
  • web/
    • 2.9 КБ
    • 8.5 КБ

Предпросмотр

Выберите файл в дереве выше — код откроется здесь.