# 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. Может перенести конфиг на другой сервер без потери лимита