@@ -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. Может перенести конфиг на другой сервер без потери лимита
|
||||
Reference in New Issue
Block a user