Изменение V2Board для интеграции с Karing
Материалы
- V2Board 1.7.4: https://github.com/v2board/v2board/releases/tag/1.7.4
- karing-connect: https://github.com/KaringX/karing-connect
- Содержит файлы, изменяемые в этом примере
Видео-пример
- Заклинание:
v2board - Страница подключения провайдера:
http://v2board.local/karing-connect.html - Демонстрация:
Вариант A: быстрая привязка Karing
- Karing уже содержит код автоматической привязки для последних версий(>=2024.1) sspanel, v2board, xboard. Достаточно выбрать соответствующую систему в поле системы.
- В этом варианте не нужно менять систему панели и добавлять страницу подключения; в параметр
connectдостаточно указать URL входа на сайт. 
- В этом варианте не нужно менять систему панели и добавлять страницу подключения; в параметр
- Если после выбора системы панели и тестирования привязка не завершается, выберите “Other” и попробуйте вариант B
Вариант B: привязка Karing через заклинание
Идея
- Дисклеймер: автор не является специалистом по v2board и frontend, пример сделан по личной логике.
- Если есть лучший способ, пожалуйста, поделитесь им: отправьте connect issue или свяжитесь с автором @elon
- Сначала Karing APP открывает промежуточную страницу
karing-connect.html- Устанавливает cookie
karing=connectкак метку входа подключения Karing - Переходит на
/#/login
- Устанавливает cookie
- Затем открывается frontend-страница v2board и загружается пользовательский JS-файл
custom.js- 1 Проверяет, находится ли страница в webview-контейнере Karing и есть ли cookie-метка
- 2 Проверяет, вошел ли текущий пользователь
- 3 Загружает JS-файл интеграции
karing.js - 4 Вызывает backend API
/api/v1/user/getSubscribe, чтобы получить информацию пользователя и ссылку подписки - 5 Вызывает метод
_karingдля импорта информации пользователя
- В конце Karing APP получает информацию, проверяет ее и завершает привязку провайдера.
Первый шаг: система v2board
- Добавьте два файла в каталог v2board
- custom.js:
public/theme/v2board/assets/custom.js - karing-connect.html:
public/karing-connect.html - Примечание: если используете другую тему, замените
theme/v2boardв пути custom - Актуальный адрес файлов: - https://github.com/KaringX/karing-connect/tree/main/v2board
- custom.js:
Описание custom.js
- custom загружает удаленный файл
karing.min.js- Также можно скачать исходный файл с GitHub и развернуть самостоятельно.
- Кроме имени интерфейса, разработанного Karing, остальные части можно менять под свои задачи.
- Исходный файл не зашифрован и содержит комментарии.
- Параметр debug в файле по умолчанию false. Если установить true:
- В терминал выводятся логи
- Не проверяется наличие объекта window.karing, процесс симулируется напрямую
- В итоге будет ошибка: импорт конфигурации не удался.
Второй шаг: панель harry.karing.app
Способ 1: быстрая настройка заклинания
- Войдите в harry, список провайдеров, нажмите кнопку
Настроить заклинание. - Настройте заклинание и connect url
Способ 2: изменить конфигурационный файл base.json
- Поле connect
- Поле заклинаний spells, рекомендуется использовать имя провайдера.
{
"pid": 123456,
...
"connet": "https://your-domain/karing-connect.html",
"spells": [
'急速云',
'RapidNetwork',
],
...
}
В конце: тест привязки
- Karing APP -> Настройки -> ISP/привязка провайдера -> введите заклинание -> войдите в v2board -> привязка завершена
Вариант C: отображение информации провайдера через ссылку подписки
-
Напоминание: если вы уже завершили подключение к Karing, например настроили файл
base.json, изменения ссылки подписки ниже не обязательны. -
При добавлении isp-информации Karing сможет:
- Показывать информацию провайдера(вход) на странице настроек
- Напоминать об окончании подписки
Изменение кода
-
Karing поддерживает форматы подписок clash, clash.meta, v2ray, shadowsocks и другие
- Здесь для простоты изменяется только один файл
ClientController.php
- Здесь для простоты изменяется только один файл
-
Файл:
- app/Http/Controllers/Client/ClientController.php
-
Перед вызовом handle и die добавьте три строки с префиксом
isp-
app/Http/Controllers/Client/ClientController.php
class ClientController extends Controller
{
public function subscribe(Request $request)
{
// ...
$userService = new UserService();
if ($userService->isAvailable($user)) {
$serverService = new ServerService();
$servers = $serverService->getAvailableServers($user);
$this->setSubscribeInfoToServers($servers, $user);
// for karing
$appName = config('v2board.app_name', 'V2Board');
$appURL = config('v2board.app_url');
header("isp-name: " . urlencode($appName));
header("isp-url: " . urlencode($appURL . '/#/plan'));
header("isp-faq: " . urlencode($appURL . '/#/knowledge'));
// ...
die($class->handle());
}
}
- Подсказка:
- После сохранения изменения кода перезагрузите процесс php-fpm, чтобы opcode-кеш не мешал отладке
- Обязательно проверьте через инструмент отладки, что isp-url и isp-faq являются нужными адресами
- Если app_name содержит китайский, нужно использовать urlencode
Итоговый результат
-
Отладочная информация:
-
Меню настроек
