← все проекты

Загрузка картинок для рассылок

Страница myvisionagency.ru/mail/zagruzka/: верстальщик по паролю заливает картинку и получает постоянную ссылку для письма.

repo: E:/Проекты для Гитхаба/mail-uploadserver: cfru /opt/mail-upload, systemd mail-upload, 127.0.0.1:3215, файлы /opt/mv-home/mail/udocs: docs/
готовS1 · С1 · Загрузка по паролю13/13

Цель: Верстальщик сам заливает картинку и получает ссылку

Страница загрузки картинок с паролем
Критерии docs/ACCEPTANCE.md, экзамены tests/exam.py
✓ Выкачено на myvisionagency.ru/mail/zagruzka/. ОТК 3 круга: сверка со спекой, критик (10 находок закрыты), масштаб (20 000 строк журнала, 20 загрузок параллельно), регресс 13/13 + экзамены 11/11.
feature
A1. Без пароля или с неверным паролем загрузить нельзя
✓ exam.py на проде 22.10 после круга 3 ОТК: 11/11 зелёные. Без пароля 401, чужой 401, папка не выросла.
acceptance
A2. 10 неверных паролей с одного адреса закрывают вход на 10 минут
✓ exam.py на проде 22.10 после круга 3 ОТК: 11/11 зелёные. 10 ошибок → верный пароль 429. Регресс R4: после 9 ошибок верный проходит (200), после 10 — 429. Окно счёта 10 мин, помечено REVIEW в ACCEPTANCE.
acceptance
A3. PNG, JPG, GIF, WebP загружаются, ссылка живая, файл байт в байт
✓ exam.py на проде 22.10 после круга 3 ОТК: 11/11 зелёные. PNG/JPEG/GIF/WebP 200, отдаются image/*, sha256 совпадает. Регресс R2b: GIF, WebP lossless и с прозрачностью тоже проходят.
acceptance
A4. Ссылка латиницей, русское имя транслитом, одноимённые не затираются
✓ exam.py на проде 22.10 после круга 3 ОТК: 11/11 зелёные. «Несезон акция.png» дважды → nesezon-aktsiya.png и nesezon-aktsiya-7be7f6.png, обе 200. Регресс R3: имя с Mac (NFD) → mayskaya-elka.png.
acceptance
A5. Не картинку не принимает, даже с расширением .png
✓ exam.py на проде 22.10 после круга 3 ОТК: 11/11 зелёные. html/svg/текст → 415. Регресс R2: оборванные PNG/JPEG/WebP, «GIF89a hello», html с заголовком PNG → 415.
acceptance
A6. Больше 10 МБ не принимает и говорит понятно
✓ exam.py на проде 22.10 после круга 3 ОТК: 11/11 зелёные. 11 МБ → 413 «Файл больше 10 МБ. Сожмите его и загрузите снова». Регресс R8: 413 приходит целиком, без обрыва.
acceptance
A7. Видны ширина и высота, кнопки «ссылка» и «тег img»
✓ exam.py на проде 22.10 после круга 3 ОТК: 11/11 зелёные. JPEG 640×200 → 640×200. Регресс R1/R1c: фото с поворотом в EXIF (и EXIF+XMP) → размеры как на экране + пометка. Кнопки проверены кликом: ссылка и <img width height>.
acceptance
A8. После входа список последних загрузок с превью
✓ exam.py на проде 22.10 после круга 3 ОТК: 11/11 зелёные. Список с паролем 200, без пароля 401. Playwright: после перезагрузки страницы список с превью на месте.
acceptance
A9. Несколько файлов перетаскиванием и вставка из буфера
✓ Playwright на проде: перетаскивание 2 файлов, вставка из буфера, выбор через окно — 4 карточки с размерами и ссылками.
acceptance
A10. Страница не в поиске, нормально на телефоне
✓ exam.py на проде 22.10 после круга 3 ОТК: 11/11 зелёные. X-Robots-Tag: noindex, nofollow. Скриншот 390 px: прокрутки вбок нет (scrollWidth 375). www → 301 на основной домен.
acceptance
A11. Не root, порт внутри, пароль 600, автозапуск
✓ exam.py на проде 22.10 после круга 3 ОТК: 11/11 зелёные. user=mailup, 127.0.0.1:3215, .env 600 mailup, systemd enabled. Пароль в браузере не хранится: cookie HttpOnly Secure SameSite=Strict, localStorage пуст.
acceptance
A12. Старые ссылки /mail/vebinar-2210/ живые
✓ exam.py на проде 22.10 после круга 3 ОТК: 11/11 зелёные. /mail/vebinar-2210/nesezon.png и oblojka.png → 200.
acceptance

Ворклог (места остановки)

22.10.2026, 07:11:25 · С1 · claude

Сделана страница загрузки картинок для рассылок: верстальщик по паролю перетаскивает картинку и копирует ссылку или тег img. Сервис под своим пользователем, порт внутри, cookie-сессия 30 дней, папка картинок в nginx отдаёт только картинки. ОТК 3 круга зелёный.

→ Передать верстальщику адрес и пароль (делает владелец). Срезанные углы в docs/SCOPE-CUTS-LOG.md: удаление из интерфейса, учётки по именам, отдельный домен под картинки чужих брендов.