first commit

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
orohi
2026-07-27 08:18:58 +03:00
co-authored by Cursor
commit bac78dd3fc
+110
View File
@@ -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. Может перенести конфиг на другой сервер без потери лимита