# Trashbox — Минималистичный CGI-файловый сервер Легковесный файлообменник на чистом C для Linux/Debian. Работает через связку **Nginx (Reverse Proxy)** + **BusyBox `httpd` (CGI Backend)**. > **Примечания:**
1) Nginx опционален, нужен только если необходимен Reverse Proxy, например, для SSL.
> 2) Зачем? Хотелось что-то легковесного, но сам я не погромист, потому был применён вайбкод подход, делал вместе с DeepSeek. Вдохновленно [этим](https://github.com/metalx1000/Directory-Index-for-httpd) проектом, но там есть нюанс, сурсы закрыты, а что-то такое от рута пускать такое себе.
> 3) [Здесь](https://home.mashup.su) можно потыкать и посмотреть как работает.
> 4) Нейрокод вряд-ли качественный, да и конечно же без багов никуда, есть issue, PR, кому это инетерсно, конечно.
> 5) Активно (не очень) какаю в репу в своем [GitLab](https://git.mashup.su/RomkaZVO/Trashbox), а тут скорее просто результат. ## Скриншоты: ### Главная страница (светлая тема) https://home.mashup.su/trashpics/1.png ### Тёмная тема https://home.mashup.su/trashpics/2.png ### Мобильная версия https://home.mashup.su/trashpics/3.png ### Форма пароля https://home.mashup.su/trashpics/4.png ## Полный список возможностей ### Авторизация и безопасность | № | Особенность| Примечание | | :-: | :--- | :--- | | **1** | **Пароль на папки** | Защита отдельных директорий через `.htpasswd`. | | **2** | **POST-форма авторизации** | Безопасная передача пароля. | | **3** | **Токены сессий** | Уникальные токены для доступа к защищённым разделам. | | **4** | **Токен в localStorage** | Сохранение авторизации в браузере между переходами. | | **5** | **Время жизни сессии** | Токен валиден **1 час**, после чего автоматически удаляется на сервере. | | **6** | **Защита от брутфорса** | Лимит в **5 неудачных попыток** ввода пароля. | | **7** | **Временный бан** | Блокировка доступа на **15 минут** при превышении лимита попыток. | ### Навигация и работа с файлами | № | Особенность| Примечание | | :-: | :--- | :--- | | **1** | **Навигация** | Удобная (вроде) навигационная цепочка. | | **2** | **Просмотр директорий** | Наглядное отображение полного содержимого папок. | | **3** | **Гибкая сортировка** | Сортировка по имени, размеру и дате. | | **4** | **Поиск файлов** | Рекурсивный поиск по имени внутри текущей директории. | | **5** | **Скачивание файлов** | Прямая выдача файлов. | | **6** | **Предпросмотр** | Модальное окно для просмотра картинок, видео, аудио, PDF и текста. | | **7** | **Копирование ссылок** | Быстрое копирование чистой прямой ссылки на файл или папку. | | **8** | **Иконки типов файлов** | Наглядные эмодзи-иконки для разграничения форматов. | | **9** | **Подсчет размера папок** | Рекурсивный расчет и отображение общего объема папки. | | **10** | **Сводная статистика** | Подсчет количества файлов, папок и их суммарного размера. | ### Интерфейс и UX | № | Особенность| Примечание | | :-: | :--- | :--- | | **1** | **Адаптивный дизайн** | Полная оптимизация под ПК, планшеты и смартфоны. | | **2** | **Тёмная / Светлая тема** | Переключение оформления с сохранением выбора. | | **3** | **Сохранение контекста** | Навигация по хлебным крошкам без потери авторизации. | | **4** | **Единая высота тулбара** | Одинаковый размер и стиль для элементов поиска и сортировки. | | **5** | **Увеличенный UI на мобильных устройствах** | Крупные кнопки и элементы для удобного нажатия пальцами. | | **6** | **Кнопка «Наверх»** | Быстрая прокрутка к началу страницы. | | **7** | **Фиксированная сетка** | Фиксированная ширина иконок без «прыжков» верстки. | | **8** | **Папки жирным шрифтом** | Визуальное отличие папок от файлов. | | **9** | **Модальная авторизация** | Красивое окно запроса пароля при входе в закрытую папку. | ### Мониторинг и логи | № | Особенность| Примечание | | :-: | :--- | :--- | | **1** | **Статус сервера** | Показывает память BusyBox/Nginx и нагрузку CPU. | | **2** | **Асинхронные метрики** | Подгрузка статистики без блокировки основного UI и сессии. | ### Технические особенности | № | Особенность| Примечание | | :-: | :--- | :--- | | **1** | **Чистый C** | Без PHP/Python/Node.js, максимум производительности при минимуме зависимостей. | | **2** | **Универсальный CGI** | Работает через CGI на любом веб-сервере. | | **3** | **Оптимизация под BusyBox** | Идеально подходит для встраиваемых систем и домашних серверов. | | **4** | **~2 МБ RAM** | Минимальное потребление оперативной памяти. | | **5** | **Хранение токенов в `/tmp`** | Автоматическая очистка сессий при перезагрузке системы. | | **6** | **Конфигурация `config.ini`** | Гибкая настройка путей и параметров без пересборки. | ### Оптимизация для мобильных устройств | № | Особенность| Примечание | | :-: | :--- | :--- | | **1** | **Крупные кнопки** | Размер тач-зон 38–44px для удобства клика пальцем. | | **2** | **Скрытие даты** | На маленьких экранах дата скрыта, отображается только размер. | | **3** | **Увеличенные иконки** | Значки 32px вместо мелких 20px. | --- ## Установка зависимостей ``` bash sudo apt update sudo apt install nginx busybox gcc make ``` --- ## Настройка структуры и загрузка ``` bash mkdir -p /patch/to/www/cgi-bin cd /patch/to/www/cgi-bin git clone https://git.mashup.su/RomkaZVO/Trashbox.git . ``` --- ## Структура ``` bash cgi-bin/ ├── Makefile ├── config.ini ├── template.html ├── style.css ├── .htpasswd # Файл с паролями для защищенных папок ├── src/ │ ├── main.c # Точка входа главного CGI-скрипта │ ├── config.c / .h # Парсинг конфигурации (config.ini) │ ├── auth.c / .h # Авторизация, сессии и защита от брутфорса │ ├── fs.c / .h # Навигация по файловой системе и операции │ ├── render.c / .h # Шаблонизатор и генерация HTML │ ├── utils.c / .h # Вспомогательные функции (URL encoding, escape, форматирование) │ ├── style.c # Выдача и кэширование CSS │ └── status.c # Мониторинг системных ресурсов ├── index.cgi # Бинарник списка файлов / навигации ├── style.cgi # Бинарник отдачи стилей └── status.cgi # Бинарник системной статистики ``` > **Примечание:** Кастомные страницы ошибок 403.html и 404.html опционально размещаются на уровень выше cgi-bin - в /patch/to/www/. --- ## Компиляция и установка ``` bash cd src make sudo make install ``` --- ## Конфигурация Nginx Создайте файл конфигурации /etc/nginx/sites-available/service. Образец конфигурации доступен по ссылке: [Конфигурация BusyBox + Nginx](https://git.mashup.su/RomkaZVO/Trashbox/src/branch/main/busybox_nginx_reverse.txt) Активация виртуального хоста: ``` bash sudo ln -s /etc/nginx/sites-available/service /etc/nginx/sites-enabled/ sudo nginx -t && sudo systemctl reload nginx ``` --- ## Запуск BusyBox Запуск фонового CGI-сервера: ``` bash busybox httpd -p 127.0.0.1:8050 -h /patch/to/www ``` --- ## Настройка папок с паролями (.htpasswd) Папка создается обычным образом в файловой системе. Чтобы задать для нее пароль, добавьте запись в файл .htpasswd: ``` bash cat >> /patch/to/www/cgi-bin/.htpasswd << EOF secret_folder:mysecretpassword EOF ``` --- ### Лицензия Ну это даже не смешно, это вайбкод проект, делайте что хотите, а если по нормальному, то GPLv3, но не обижусь если что-то и проприектарное будет.