Files
Trashbox/README.md
2026-07-29 00:20:24 +08:00

170 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Trashbox — Минималистичный CGI-файловый сервер
Легковесный файлообменник на чистом C для Linux/Debian. Работает через связку **Nginx (Reverse Proxy)** + **BusyBox `httpd` (CGI Backend)**.
> **Примечания:**<br> 1) Nginx опционален, нужен только если необходимен Reverse Proxy, например, для SSL.<br>
> 2) Зачем? Хотелось что-то легковесного, но сам я не погромист, потому был применён вайбкод подход, делал вместе с DeepSeek. Вдохновленно [этим](https://github.com/metalx1000/Directory-Index-for-httpd) проектом, но там есть нюанс, сурсы закрыты, а что-то такое от рута пускать такое себе.<br>
> 3) [Здесь](https://home.mashup.su) можно потыкать и посмотреть как работает.<br>
> 4) Нейрокод вряд-ли качественный, да и конечно же без багов никуда, есть issue, PR, кому это инетерсно, конечно.<br>
> 5) Активно (не очень) какаю в репу в своем [Gitea](https://git.mashup.su/RomkaZVO/Trashbox), а тут скорее просто результат.
## Скриншоты:
### Главная страница (светлая тема)
![Главная страница (светлая тема)](imgs/1.png)
### Тёмная тема
![Тёмная тема](imgs/2.png)
### Мобильная версия
![Мобильная версия](imgs/3.png)
### Форма пароля
![Форма пароля](imgs/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** | **Крупные кнопки** | Размер тач-зон 3844px для удобства клика пальцем. |
| **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, но не обижусь если что-то и проприетарное будет.