From bac78dd3fc2da5b225902df56060df4acf6ddd1b Mon Sep 17 00:00:00 2001 From: orohi Date: Mon, 27 Jul 2026 08:18:58 +0300 Subject: [PATCH] first commit Co-authored-by: Cursor --- README.md | 110 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..20f3254 --- /dev/null +++ b/README.md @@ -0,0 +1,110 @@ +# Amnezia VPN Share Panel + +Система управления гостевыми VPN-ссылками для Amnezia Web Panel. + +## Требования + +- PHP 8.0+ +- MySQL 8.0+ +- cURL (расширение PHP) +- Amnezia Web Panel (установленная и настроенная) + +## Установка + +1. Скопируйте файлы на веб-сервер (Apache/Nginx с поддержкой PHP). + +2. Создайте базу данных MySQL и пользователя: + +```sql +CREATE DATABASE amnezia_share CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; +``` + +3. Скопируйте `config.sample.php` в `config.php` и заполните параметры подключения к БД. + +4. Выполните SQL-миграции из папки `sql/`: + +```bash +mysql -u user -p amnezia_share < sql/users.sql +mysql -u user -p amnezia_share < sql/site_settings.sql +mysql -u user -p amnezia_share < sql/share_links.sql +mysql -u user -p amnezia_share < sql/share_link_creations.sql +mysql -u user -p amnezia_share < sql/panel_server_labels.sql +``` + +5. Откройте `install.php` в браузере — создайте первого администратора. + +6. Войдите в админку (`admin/index.php`) и настройте: + - **URL панели Amnezia** и **API-токен** (Настройки) + - **Названия серверов** и **флаги стран** (Серверы) + - **Протоколы** для каждого сервера (Серверы) + +## Подключение Pocket ID (OIDC) + +Pocket ID — OIDC-провайдер с авторизацией через passkey (без паролей). + +### Настройка в Pocket ID + +1. Откройте админку Pocket ID → OIDC Clients → создайте нового клиента. + +2. Укажите **Callback URL**: + +``` +https://your-domain.com/oidc_callback.php +``` + +3. Скопируйте **Client ID** и **Client Secret**. + +### Настройка в панели + +1. Откройте **Настройки** в админке. + +2. В блоке **Pocket ID (OIDC)** заполните: + - **URL Pocket ID** — адрес вашего Pocket ID (например `https://id.example.com`) + - **Client ID** — скопированный из Pocket ID + - **Client Secret** — секрет клиента + +3. Нажмите «Сохранить Pocket ID». + +4. На странице входа появится кнопка **«Войти через Pocket ID»**. + +### Логика авторизации + +- Имя пользователя из Pocket ID (`preferred_username`) сопоставляется с `username` в таблице `users`. +- Если пользователей в базе нет — первый вошедший через Pocket ID автоматически становится администратором. +- Если пользователь не найден — доступ запрещён (админ должен создать учётную запись с таким именем). + +## Структура проекта + +``` +├── admin/ +│ ├── index.php — Панель управления +│ ├── share_links.php — Управление ссылками +│ ├── server_labels.php — Серверы: названия, флаги, протоколы +│ ├── server_traffic_notices.php — Уведомления о трафике +│ ├── settings.php — Настройки (панель + Pocket ID) +│ └── admin_layout.php — Общий шаблон админки +├── includes/ +│ ├── amnezia_settings.php — Настройки сайта и Pocket ID +│ ├── auth.php — Авторизация и CSRF +│ ├── bootstrap.php — Инициализация +│ ├── db.php — Подключение к MySQL +│ ├── panel_http.php — HTTP-запросы к Amnezia Panel API +│ ├── share_repo.php — Логика ссылок и конфигов +│ └── share_downloads.php — Генерация файлов для скачивания +├── share.php — Гостевая страница (создание конфигов) +├── share_servers.php — API: список серверов для гостя +├── oidc_callback.php — Callback для Pocket ID OIDC +├── login.php — Вход администратора +├── index.php — Редирект на admin/ +└── config.php — Конфигурация БД (не в git) +``` + +## Гостевая ссылка + +Формат: `share.php?k=<32-символьный токен>` + +Пользователь по ссылке: +1. Выбирает сервер (с флагами стран и бейджами протоколов) +2. Выбирает тип подключения (WireGuard / AmneziaWG 2) +3. Получает конфигурацию (файл, QR-код, текст) +4. Может перенести конфиг на другой сервер без потери лимита