# VPN Links HTTP Server Простой HTTP-сервер на Dart для хранения и выдачи VPN-ссылок через SQLite. ## Что делает сервер - Поднимает HTTP-сервер на `0.0.0.0:8080`. - Создает SQLite-базу `data/vpn_links.db` при первом запуске. - Создает таблицу `connections`, если ее нет. - Добавляет стартовые ссылки (seed) один раз через `INSERT OR IGNORE`. Формат ответа списка ссылок: ```json { "links": [ "vless://...", "vmess://...", "trojan://..." ] } ``` ## Установка и запуск ### Локально (Dart) 1. Установить зависимости: ```bash dart pub get ``` 2. Запустить сервер: ```bash dart run bin/vpn_server.dart ``` После запуска сервер доступен по адресу `http://127.0.0.1:8080`. ### Через Docker Собрать и запустить контейнер: ```bash docker build -t vpn_server . docker run --rm -p 8080:8080 -v "$(pwd)/data:/app/data" vpn_server ``` `-v "$(pwd)/data:/app/data"` сохраняет SQLite-базу между перезапусками. ### Через Docker Compose В проекте есть `compose.yml` с `healthcheck` (проверка `GET /connections`). Запуск: ```bash docker compose -f compose.yml up --build -d ``` Проверка статуса и health: ```bash docker compose -f compose.yml ps docker inspect --format='{{json .State.Health}}' vpn_server ``` ## API ### `GET /connections` Возвращает все ссылки из базы. Пример: ```bash curl http://127.0.0.1:8080/connections ``` Успешный ответ: `200 OK` ```json { "links": [ "vless://example", "trojan://example" ] } ``` ### `POST /connections` Добавляет новую ссылку. Тело запроса: ```json { "url": "trojan://example-link" } ``` Пример: ```bash curl -X POST http://127.0.0.1:8080/connections \ -H "Content-Type: application/json" \ -d '{"url":"trojan://example-link"}' ``` Ответы: - `201 Created` — ссылка добавлена. - `409 Conflict` — такая ссылка уже есть. - `400 Bad Request` — неверный JSON или отсутствует `url`. ### `DELETE /connections` Удаляет ссылку по точному значению `url`. Тело запроса: ```json { "url": "trojan://example-link" } ``` Пример: ```bash curl -X DELETE http://127.0.0.1:8080/connections \ -H "Content-Type: application/json" \ -d '{"url":"trojan://example-link"}' ``` Ответы: - `200 OK` — ссылка удалена. - `404 Not Found` — ссылка не найдена. - `400 Bad Request` — неверный JSON или отсутствует `url`. ## Прочее поведение - Неизвестный путь: `404 Not Found`. - Неподдерживаемый метод для `/connections`: `405 Method Not Allowed`. - Заголовок `Allow` для `/connections`: `GET, POST, DELETE`.