82668768d01b17d45d977e350ca570df0347f207
### Security Features: - **Rate Limiting**: Redis-based IP tracking with configurable limits - General: 100 requests/minute (5min block) - Upload: 10 requests/5min (10min block) - Auth: 20 requests/15min (30min block) - **Request Validation**: Path length, header count, suspicious patterns - **Attack Detection**: Admin paths, script injections, bot patterns - **Enhanced JWT**: Format validation, length checks, character filtering - **IP Tracking**: X-Forwarded-For and X-Real-IP support ### Security Headers: - X-Content-Type-Options: nosniff - X-Frame-Options: DENY - X-XSS-Protection: 1; mode=block - Content-Security-Policy with strict rules - Strict-Transport-Security with includeSubDomains ### CORS Hardening: - Limited to specific domains: discours.io, new.discours.io - Restricted methods: GET, POST, OPTIONS only - Essential headers only ### Infrastructure: - Security middleware for all requests - Local cache + Redis for performance - Comprehensive logging and monitoring - Progressive blocking for repeat offenders ### Documentation: - Complete security guide (docs/security.md) - Configuration examples - Incident response procedures - Monitoring recommendations Version bump to 0.6.0 for major security enhancement.
Quoter 🚀
Микросервис для управления файлами с поддержкой квот, миниатюр и интеграции с S3 хранилищами
Quoter - это высокопроизводительный сервис для загрузки и управления файлами, построенный на Rust с использованием Actix Web. Поддерживает автоматическое создание миниатюр, управление квотами пользователей и интеграцию с различными S3-совместимыми хранилищами.
📖 Документация
Подробная документация доступна в папке docs/:
Основные разделы
- 📚 Оглавление - Полная структура документации
- 🔧 API Reference - Документация API
- ⚙️ Конфигурация - Настройка переменных окружения
- 🚀 Развертывание - Инструкции по развертыванию
- 📊 Мониторинг - Логирование и мониторинг
Технические детали
- 🏗️ Архитектура - Техническая архитектура системы
- 🔍 Как это работает - Подробное описание процессов
- 🧪 Тестирование - Полное покрытие тестами (36 тестов)
- 💻 Разработка - Настройка среды разработки
- 🤝 Contributing - Руководство для контрибьюторов
✨ Основные возможности
- 🔐 Аутентификация через JWT токены
- 📁 Загрузка файлов в S3/Storj с автоматическим определением MIME-типов
- 🖼️ Автоматические миниатюры для изображений (10, 40, 110, 300, 600, 800, 1400px)
- 💾 Управление квотами пользователей (5 ГБ по умолчанию)
- 🎨 Оверлеи для shout с автоматическим наложением текста
- 🔄 CORS поддержка для веб-приложений
- ⚡ Высокая производительность благодаря асинхронной архитектуре
- 📊 Мониторинг и логирование всех операций
🏗️ Архитектура
Quoter построен на современном стеке технологий:
- Backend: Rust + Actix Web
- База данных: Redis для квот и кэширования
- Хранилище: S3-совместимые сервисы (Storj, AWS S3)
- Аутентификация: JWT токены через GraphQL API
- Обработка изображений: image-rs + imageproc
🧪 Тестирование
Запуск тестов
# Все тесты
cargo test
# Конкретный тест
cargo test test_health_check
# Тесты с покрытием
./scripts/test-coverage.sh
Статистика тестов
- basic_test.rs: 23 теста (основная функциональность)
- handler_tests.rs: 13 тестов (HTTP endpoints)
- Общее покрытие: 100% основных компонентов
- Статус: Все тесты проходят успешно
📋 Требования
- Rust: 1.70 или выше
- Redis: 6.0 или выше
- S3 совместимое хранилище: Storj, AWS S3 или другое
- API ядра: для аутентификации и получения данных shout
🚀 CI/CD и автоматизация
Статус конвейера
- ✅ Тесты: 36/36 проходят успешно
- ✅ Компиляция: без ошибок
- ✅ Покрытие: 100% основных компонентов
- 🚀 Деплой: автоматический при успешном прохождении тестов
Автоматизация
- Автоматический запуск тестов при каждом коммите
- Проверка качества кода и покрытия
- Автоматический деплой в продакшн
- Полностью автоматизированный конвейер "тесты → деплой"
🔧 Использование
Переменные окружения
Подробная информация о настройке переменных окружения доступна в документации по конфигурации.
API Endpoints
Основные API endpoints:
| Метод | Endpoint | Описание |
|---|---|---|
GET |
/ |
Проверка состояния сервера |
POST |
/ |
Загрузка файла |
GET |
/{filename} |
Получение файла/миниатюры |
GET |
/quota |
Информация о квоте пользователя |
POST |
/quota/increase |
Увеличение квоты |
POST |
/quota/set |
Установка квоты |
Подробная документация API доступна в API Reference.
Примеры использования
Загрузка файла
curl -X POST http://localhost:8080/ \
-H "Authorization: Bearer your-token" \
-F "file=@image.jpg"
Получение миниатюры
curl http://localhost:8080/image_300.jpg
Увеличение квоты
curl -X POST http://localhost:8080/quota/increase \
-H "Authorization: Bearer your-token" \
-H "Content-Type: application/json" \
-d '{"user_id": "user123", "additional_bytes": 1073741824}'
🧪 Разработка
cargo build # сборка
cargo test # запуск тестов
cargo clippy # Проверка кода
cargo fmt # Форматирование
RUST_LOG=debug cargo run # подробные логи
Метрики
Основные метрики для мониторинга:
- Количество загруженных файлов
- Использование квот пользователями
- Время ответа API
- Ошибки аутентификации
- Ошибки загрузки в S3
Languages
Rust
98.6%
Dockerfile
1.4%