[0.6.1] - 2025-09-02
### 🚀 Изменено - Упрощение архитектуры - **Генерация миниатюр**: Полностью удалена из Quoter, теперь управляется Vercel Edge API - **Очистка legacy кода**: Удалены все функции генерации миниатюр и сложность - **Документация**: Сокращена с 17 файлов до 7, следуя принципам KISS/DRY - **Смена фокуса**: Quoter теперь сосредоточен на upload + storage, Vercel обрабатывает миниатюры - **Логирование запросов**: Добавлена аналитика источников для оптимизации CORS whitelist - **Реализация таймаутов**: Добавлены настраиваемые таймауты для S3, Redis и внешних операций - **Упрощенная безопасность**: Удален сложный rate limiting, оставлена только необходимая защита upload ### 📝 Обновлено - Консолидирована документация в практическую структуру: - Основной README.md с быстрым стартом - docs/SETUP.md для конфигурации и развертывания - Упрощенный features.md с фокусом на основную функциональность - Добавлен акцент на Vercel по всему коду и документации ### 🗑️ Удалено - Избыточные файлы документации (api-reference, deployment, development, и т.д.) - Дублирующийся контент в нескольких документах - Излишне детальная документация для простого файлового прокси 💋 **Упрощение**: KISS принцип применен - убрали избыточность, оставили суть.
This commit is contained in:
27
src/main.rs
27
src/main.rs
@@ -10,14 +10,14 @@ use actix_cors::Cors;
|
||||
use actix_web::{
|
||||
App, HttpServer,
|
||||
http::header,
|
||||
middleware::{Logger, DefaultHeaders},
|
||||
middleware::{DefaultHeaders, Logger},
|
||||
web,
|
||||
};
|
||||
use app_state::AppState;
|
||||
use security::{SecurityConfig, security_middleware};
|
||||
use security::SecurityConfig;
|
||||
|
||||
use handlers::universal_handler;
|
||||
use log::{warn, info};
|
||||
use log::{info, warn};
|
||||
use std::env;
|
||||
use tokio::task::spawn_blocking;
|
||||
|
||||
@@ -41,10 +41,11 @@ async fn main() -> std::io::Result<()> {
|
||||
|
||||
// Конфигурация безопасности
|
||||
let security_config = SecurityConfig::default();
|
||||
info!("Security config: max_payload={} MB, upload_rate_limit={}/{}s",
|
||||
security_config.max_payload_size / (1024 * 1024),
|
||||
security_config.upload_rate_limit.max_requests,
|
||||
security_config.upload_rate_limit.window_seconds);
|
||||
info!(
|
||||
"Security config: max_payload={} MB, timeout={}s",
|
||||
security_config.max_payload_size / (1024 * 1024),
|
||||
security_config.request_timeout_seconds
|
||||
);
|
||||
|
||||
HttpServer::new(move || {
|
||||
// Настройка CORS middleware - ограничиваем в продакшене
|
||||
@@ -71,14 +72,20 @@ async fn main() -> std::io::Result<()> {
|
||||
.add(("X-Frame-Options", "DENY"))
|
||||
.add(("X-XSS-Protection", "1; mode=block"))
|
||||
.add(("Referrer-Policy", "strict-origin-when-cross-origin"))
|
||||
.add(("Content-Security-Policy", "default-src 'self'; img-src 'self' data: https:; object-src 'none';"))
|
||||
.add(("Strict-Transport-Security", "max-age=31536000; includeSubDomains"));
|
||||
.add((
|
||||
"Content-Security-Policy",
|
||||
"default-src 'self'; img-src 'self' data: https:; object-src 'none';",
|
||||
))
|
||||
.add((
|
||||
"Strict-Transport-Security",
|
||||
"max-age=31536000; includeSubDomains",
|
||||
));
|
||||
|
||||
App::new()
|
||||
.app_data(web::Data::new(app_state.clone()))
|
||||
.app_data(web::PayloadConfig::new(security_config.max_payload_size))
|
||||
.app_data(web::JsonConfig::default().limit(1024 * 1024)) // 1MB для JSON
|
||||
.wrap(actix_web::middleware::from_fn(security_middleware))
|
||||
|
||||
.wrap(security_headers)
|
||||
.wrap(cors)
|
||||
.wrap(Logger::default())
|
||||
|
||||
Reference in New Issue
Block a user