Trashbox — Минималистичный CGI-файловый сервер

Легковесный файлообменник на чистом C для Linux/Debian. Работает через связку Nginx (Reverse Proxy) + BusyBox httpd (CGI Backend).

Примечания:
1) Nginx опционален, нужен только если необходимен Reverse Proxy, например, для SSL.
2) Зачем? Хотелось что-то легковесного, но сам я не погромист, потому был применён вайбкод подход, делал вместе с DeepSeek. Вдохновленно этим проектом, но там есть нюанс, сурсы закрыты, а что-то такое от рута пускать такое себе.
3) Здесь можно потыкать и посмотреть как работает.
4) Нейрокод вряд-ли качественный, да и конечно же без багов никуда, есть issue, PR, кому это инетерсно, конечно.
5) Активно (не очень) какаю в репу в своем GitLab, а тут скорее просто результат.

Скриншоты:

Главная страница (светлая тема)

Главная страница (светлая тема)

Тёмная тема

Тёмная тема

Мобильная версия

Мобильная версия

Форма пароля

Форма пароля

Полный список возможностей

Авторизация и безопасность

Особенность Примечание
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 Крупные кнопки Размер тач-зон 3844px для удобства клика пальцем.
2 Скрытие даты На маленьких экранах дата скрыта, отображается только размер.
3 Увеличенные иконки Значки 32px вместо мелких 20px.

Установка зависимостей

sudo apt update
sudo apt install nginx busybox gcc make

Настройка структуры и загрузка

mkdir -p /patch/to/www/cgi-bin
cd /patch/to/www/cgi-bin
git clone https://git.mashup.su/RomkaZVO/Trashbox.git .

Структура

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/.


Компиляция и установка

cd src
make
sudo make install

Конфигурация Nginx

Создайте файл конфигурации /etc/nginx/sites-available/service.
Образец конфигурации доступен по ссылке:
Конфигурация BusyBox + Nginx

Активация виртуального хоста:

sudo ln -s /etc/nginx/sites-available/service /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

Запуск BusyBox

Запуск фонового CGI-сервера:

busybox httpd -p 127.0.0.1:8050 -h /patch/to/www

Настройка папок с паролями (.htpasswd)

Папка создается обычным образом в файловой системе. Чтобы задать для нее пароль, добавьте запись в файл .htpasswd:

cat >> /patch/to/www/cgi-bin/.htpasswd << EOF
secret_folder:mysecretpassword
EOF

Лицензия

Ну это даже не смешно, это вайбкод проект, делайте что хотите, а если по нормальному, то GPLv3, но не обижусь если что-то и проприектарное будет.

Description
Simple file manager for busybox httpd
https://home.mashup.su/
Readme GPL-3.0 617 KiB
Languages
C 55.8%
CSS 22%
HTML 21.8%
Makefile 0.4%