mirror of
https://gitverse.ru/kpa39l/md2vk.git
synced 2026-09-29 01:50:04 +00:00
60 lines
4.4 KiB
Markdown
60 lines
4.4 KiB
Markdown
# md2vk — Статус (история изменений)
|
|
|
|
> Актуальный статус работ — в `openspec/` и `todo`-файлах; здесь хроника и границы.
|
|
|
|
## 2026-09: Документация, деплой, git, openspec
|
|
|
|
**Сделано:**
|
|
- [x] Аудит проекта (FastAPI ядро, Phase 1)
|
|
- [x] Документация в `docs/` (index, access, architecture, vk-api, security, deploy, status) + `AGENTS.md`
|
|
- [x] Аудит-лог авторизации (JSONL, ротация по дням) — см. `app/api/audit.py` + middleware
|
|
- [x] Docker: порт 8420 (8000 занят), bind `./data`→`/data`, `./logs`→`/logs`, HEALTHCHECK через python (curl в slim-образе нет)
|
|
- [x] openspec инициализирован (specs/ baseline)
|
|
- [x] git init, push на gitverse.ru (kpa39l/md2vk), pull mirror в gitea.nixg.ru (estorozhenko/md2vk)
|
|
- [x] Caddy на vps02: md2vk.nixg.ru + basic_auth estorozhenko (bcrypt), reverse_proxy 10.8.0.2:8420
|
|
- [x] fail2ban на vps02: jail md2vk, ban после 5 попыток, ручной unban
|
|
- [x] Сквозная проверка: https + auth + блокировка + unban
|
|
|
|
## Phase 1 — Ядро (DONE, из STATUS.md)
|
|
|
|
- Каркас проекта, структура директорий
|
|
- Config из env (pydantic-settings)
|
|
- Async SQLAlchemy + SQLite, инициализация БД
|
|
- ORM-модели (User, VkAccount, Publication)
|
|
- Fernet-шифрование/дешифрование токенов
|
|
- Генерация и верификация API-ключей
|
|
- Конвертер Markdown → VK format_data
|
|
- VK API клиент (wall.post, users.get, check_token)
|
|
- Pydantic-схемы запросов/ответов
|
|
- API: /health, /accounts (CRUD), /publish, /convert, /publications
|
|
- Аутентификация по API-ключу (заголовок + тело)
|
|
- Генерация ключа шифрования
|
|
- Проверка импортов и запуск
|
|
- Тест конвертации через API (curl)
|
|
|
|
## Открытые задачи
|
|
|
|
- [ ] **БЛОКЕР: VK API недоступен для физлиц.** По состоянию на 2026-09-20 доступ к VK API (создание приложения, токены) — только для юрлиц, ИП и самозанятых (VK ID, «подтвердите профиль бизнеса»). У пользователя статуса нет → публикация/тест поста невозможны до изменения условий VK. Кабинет приложений: https://id.vk.ru/about/business/go/accounts/465683/apps (типы приложений: Web/Android/iOS; Standalone убран). Когда доступ откроют: см. `docs/vk-token-howto.md`.
|
|
- [ ] Планировщик отложенных постов (status=scheduled → wall.post). Модель готова, worker нет.
|
|
- [ ] OAuth-флоу VK ID (кнопка «Прикрепить аккаунт»); нужны client_id/secret VK-приложения
|
|
- [ ] Web UI (форма поста + превью)
|
|
- [ ] Unit-тесты конвертера (pytest)
|
|
- [ ] Integration-тесты API (pytest + httpx)
|
|
- [ ] Rate limiting (in-memory bucket, RATE_LIMIT_PER_MINUTE)
|
|
- [ ] Retry при сетевых ошибках VK API
|
|
- [ ] Graceful shutdown
|
|
- [ ] Read-only rootfs (уже `read_only: true` в compose, но /logs мешает; пересмотреть)
|
|
- [ ] CORS (ограничение по origin)
|
|
- [ ] Обработка длинных постов (multipart: пост + комментарии)
|
|
- [ ] Hermes skill md2vk (проверка сервиса, публикация, добавление аккаунта)
|
|
|
|
## Границы Phase 1
|
|
|
|
- Конвертация Markdown → VK format_data (жирный, курсив, код, ссылки, заголовки, цитаты, блоки кода)
|
|
- Публикация поста на стене VK
|
|
- Шифрование токенов (Fernet + Docker secret)
|
|
- Аутентификация по API-ключу
|
|
- Управление VK-аккаунтами (добавить, список, удалить)
|
|
- Архив публикаций с фильтрацией
|
|
- Конвертация без публикации (preview)
|
|
- Отложенные посты: только запись `scheduled` (без планировщика) |