Files

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` (без планировщика)