diff --git a/README.md b/README.md index 6d6f0d0..f703091 100644 --- a/README.md +++ b/README.md @@ -1,63 +1,167 @@ -[English](https://github.com/denpiligrim/3dp-manager/blob/main/README_EN.md) +[English](/README_EN.md) | [中文](/README_CN.md) | [فارسی](/README_IR.md) | [Türkmençe](/README_TK.md) + +

3dp-manager preview

+ +![Version](https://img.shields.io/badge/version-1.0-blue.svg) [![License](https://img.shields.io/badge/license-GPL%20V3-blue.svg?longCache=true)](https://www.gnu.org/licenses/gpl-3.0) [![Telegram](https://img.shields.io/badge/Telegram-26A5E4?style=flat&logo=telegram&logoColor=white)](https://t.me/denpiligrim_web) [![YouTube Channel Subscribers](https://img.shields.io/youtube/channel/subscribers/UCOv2tFFYDY4mXOM60PVz8zw)](https://www.youtube.com/@denpiligrim) # 3DP-MANAGER -> [!WARNING] -> **Это бета-версия!** -> -> Программа находится в активной разработке. Возможны баги, нестабильность и изменения API. -> Используйте с осторожностью. +Утилита для автогенерации инбаундов к панели [3x-ui](https://github.com/MHSanaei/3x-ui), формирования единой подписки и настройки перенаправления трафика с промежуточного сервера на основной. -3DP-MANAGER — утилита, которая позволяет регулярно генерировать входящие подключения для панели 3X-UI на основе списка разрешённых доменов (whitelist). Белый список общий, но вы также можете добавить свой собственный список, назвав его `my_whitelist.txt` и поместив его в папку `/opt/3dp-manager/app` на вашем сервере. -Обсуждения доступны в Телеграм канале: [@denpiligrim_web](https://t.me/denpiligrim_web/719) +**Поддержать проект** -### Установка -```bash -bash <(curl -fsSL https://raw.githubusercontent.com/denpiligrim/3dp-manager/main/install.sh) -``` +- Реквизиты / донаты: + - Карта МИР: `2204320436318077` + - Карта MasterCard: `5395452209474530` + - PayPal: `vasiljevdenisx@gmail.com` + - USDT | ETH (ERC20 | BEP20): `0x6fe140040f6Cdc1E1Ff2136cd1d60C0165809463` + - USDT | TRX (TRC20): `TEWxXmJxvkAmhshp7E61XJGHB3VyM9hNAb` + - Bitcoin: `bc1qctntwncsv2yn02x2vgnkrqm00c4h04c0afkgpl` + - TON: `UQCZ3MiwyYHXftPItMMzJRYRiKHugr16jFMq2nfOQOOoemLy` + - Bybit ID: `165292278` -### Обновление -```bash -bash <(curl -fsSL https://raw.githubusercontent.com/denpiligrim/3dp-manager/main/update.sh) -``` +## Описание -### Удаление -```bash -bash <(curl -fsSL https://raw.githubusercontent.com/denpiligrim/3dp-manager/main/delete.sh) -``` +Главная цель утилиты — сделать так, чтобы ваш трафик не выглядел одинаковым. Бот генерирует по заданному интервалу 10 подключений с разными параметрами: + +- протоколы: `vless`, `vmess`, `shadowsocks`, `trojan`; +- порты: `443`, `8443` (фиксированные) и случайные из диапазона `10000-60000`; +- транспорт: `tcp`, `websocket`, `grpc`, `xhttp`; +- SNI берутся из белого списка доменов (whitelist); можно использовать свой список. + +Все подключения объединяются в одну подписку со статичным URL. Бот работает с панелью `3x-ui` и не вмешивается в её работу напрямую, используя открытое API панели. + +Вторичная цель — стабильность подключения: клиент получает 10 вариантов поключений и может выбрать любое из них. + +Дополнительно: бот можно использовать в каскадной схеме. Сервис перенаправления автоматически настроит переадресацию подписки и трафика к основному серверу. + +Рекомендации: + +- Используйте HTTPS для подписки (домен + SSL сертификат). +- Интервал генерации задавайте ≥ 10 минут; для стабильности рекомендуется — раз в сутки (1440 минут). +- В клиенте установите автообновление чаще (например, каждый час), чтобы была синхронизация с сервером. + +## Возможности + +- Генерация 10 разнообразных подключений +- Формирование единой подписки со статичным URL +- Поддержка кастомного `whitelist` доменов +- Автоматическая настройка перенаправления трафика (опционально) + +## Требования + +- Ubuntu 20.04 (и выше) +- Панель `3x-ui` +- Домен + SSL сертификат (опционально) --- -Сервис подписок и перенаправления входящего трафика работает совместно с **3DP-MANAGER** и позволяет перенаправлять весь входящий трафик с промежуточного сервера на основной сервер. Перенаправляются те же порты: `443`, `8443` и диапазон `10000-60000`. Сервис также создаёт ссылку на подписку, автоматически заменяя IP-адрес или домен в конфигурациях. Перенаправления настраиваются добавлением правил iptables в конфигурационный файл ufw, что обеспечивает стабильную работу в сочетании с файрволом. Рекомендуется устанавливать сервис на чистый сервер без ранее настроенных правил. +## Установка + +Установите проект на сервер командой: -### Установка перенаправления ```bash -bash <(curl -fsSL https://raw.githubusercontent.com/denpiligrim/3dp-manager/main/forwarding_install.sh) +bash <(curl -fsSL https://raw.githubusercontent.com/denpiligrim/3dp-manager/dp-fix/install.sh) ``` -### Удаление перенаправления +Краткое описание: запускает скрипт установки и разворачивает контейнеры и сервисы. + +## Обновление + +Обновление до последней версии: + ```bash -bash <(curl -fsSL https://raw.githubusercontent.com/denpiligrim/3dp-manager/main/forwarding_delete.sh) +bash <(curl -fsSL https://raw.githubusercontent.com/denpiligrim/3dp-manager/dp-fix/update.sh) ``` +Краткое описание: подтягивает последние изменения и перезапускает контейнеры. + +## Удаление + +Полное удаление сервиса: + +```bash +bash <(curl -fsSL https://raw.githubusercontent.com/denpiligrim/3dp-manager/dp-fix/delete.sh) +``` + +Краткое описание: удаляет контейнеры и файлы конфигурации, возвращая систему к состоянию до установки. + --- -### Показать URL подписки +## Установка сервиса перенаправления (forwarding) + +Сервис перенаправления позволяет проксировать входящие порты с промежуточного сервера на основной. + +```bash +bash <(curl -fsSL https://raw.githubusercontent.com/denpiligrim/3dp-manager/dp-fix/forwarding_install.sh) +``` + +Краткое описание: добавляет правила перенаправления и создает сервис для обновления подписки. + +## Удаление перенаправления + +```bash +bash <(curl -fsSL https://raw.githubusercontent.com/denpiligrim/3dp-manager/dp-fix/forwarding_delete.sh) +``` + +Краткое описание: удаляет правила и отключает сервис перенаправления. + +--- + +## Показать URL подписки + +Команда для вывода текущего URL подписки из среды контейнера: + ```bash cd /opt/3dp-manager && docker compose exec node env | grep SUB_URL | cut -d'=' -f2 ``` ---- +Краткое описание: выводит статичный URL подписки, который можно использовать в клиентах. Работает как на оснвном, так и на промежуточном сервере. + +## Сбор доменов из мульти-подписок + +Утилита извлекает домены из подписок и формирует `whitelist` для генератора. -### Утилита для сбора доменов из мульти-подписок -Позволяет собирать домены из подписок с несколькими конфигурациями. В интернете встречается много подобных списков конфигураций, использующих белый SNI. Инструмент позволяет извлечь домены и подготовить готовый список для дальнейшего использования в генераторе входящих подключений. -Вставьте ссылку на подписку в скрипт и запустите команду в окружении `Node.js`. ```bash node get_domains.js ``` -### Использовать свой белый список -Файл должен иметь структуру аналогичную `whitelist.txt`. Переименуйте имя файла на `my_whitelist.txt`. Загрузите файл в папку `/opt/3dp-manager/app` на сервере и выполните команду: +Краткое описание: добавьте ссылку на мульти-подписку в скрипт и запустите команду — на выходе получите список доменов. Неободим `Node.js` для работы скрипта. + +## Использование собственного белого списка + +1. Подготовьте файл в формате `whitelist.txt`. +2. Переименуйте на `my_whitelist.txt` и скопируйте в папку `/opt/3dp-manager/app`. + ```bash cd /opt/3dp-manager && docker cp ./app/my_whitelist.txt node:/app/my_whitelist.txt -``` \ No newline at end of file +``` + +Краткое описание: добавляет ваш файл доменов в контейнер приложения. + +--- + +## Замечания и текущие ограничения + +- Общий список доменов работает не у всех провайдеров, поэтому рекомендуется составить и использовать свой whitelist. + +--- + +## Внести вклад + +Буду рад любому вкладу в разработку проекта! Простой процесс для контрибьюторов: + +1. Форкните репозиторий на GitHub. +2. Создайте ветку с осмысленным именем, например `feature/add-README` или `fix/whitelist-load`. +3. Внесите изменения и добавьте короткое описание в коммите. +4. Запустите локально базовые проверки (если есть). +5. Отправьте ветку в ваш форк и создайте Pull Request в основной репозиторий. + +Советы: описывайте изменения в PR, указывайте цель и тестовые шаги. Если изменения большие — разделяйте на маленькие коммиты. + +--- + +## Обсуждение + +- Телеграм: [@denpiligrim_web](https://t.me/denpiligrim_web) +- Раздел Issues в данном репозитории \ No newline at end of file diff --git a/README_EN.md b/README_EN.md index 50dd28e..eadb1f4 100644 --- a/README_EN.md +++ b/README_EN.md @@ -1,4 +1,4 @@ -[Русский](https://github.com/denpiligrim/3dp-manager/blob/main/README.md) +[Русский](https://github.com/denpiligrim/3dp-manager/blob/dp-fix/README.md) # 3DP-MANAGER @@ -13,17 +13,17 @@ Discussions are available on the Telegram channel: [@denpiligrim_web](https://t. ### Install ```bash -bash <(curl -fsSL https://raw.githubusercontent.com/denpiligrim/3dp-manager/main/install.sh) +bash <(curl -fsSL https://raw.githubusercontent.com/denpiligrim/3dp-manager/dp-fix/install.sh) ``` ### Update ```bash -bash <(curl -fsSL https://raw.githubusercontent.com/denpiligrim/3dp-manager/main/update.sh) +bash <(curl -fsSL https://raw.githubusercontent.com/denpiligrim/3dp-manager/dp-fix/update.sh) ``` ### Delete ```bash -bash <(curl -fsSL https://raw.githubusercontent.com/denpiligrim/3dp-manager/main/delete.sh) +bash <(curl -fsSL https://raw.githubusercontent.com/denpiligrim/3dp-manager/dp-fix/delete.sh) ``` --- @@ -31,12 +31,12 @@ bash <(curl -fsSL https://raw.githubusercontent.com/denpiligrim/3dp-manager/main The subscription and inbound redirection service works in conjunction with **3DP-MANAGER** and allows you to redirect all inbound traffic from the intermediate server to the main server. The same ports are redirected, namely `443`, `8443`, and the range `10000-60000`. The service also creates a link to the subscription, automatically replacing the IP address or domain in the configurations. Redirects are configured by adding iptables rules to the ufw configuration file, which ensures stable operation in conjunction with the firewall. It is recommended to install the service on a clean server without any previously installed rules. ### Install forwarding ```bash -bash <(curl -fsSL https://raw.githubusercontent.com/denpiligrim/3dp-manager/main/forwarding_install.sh) +bash <(curl -fsSL https://raw.githubusercontent.com/denpiligrim/3dp-manager/dp-fix/forwarding_install.sh) ``` ### Delete forwarding ```bash -bash <(curl -fsSL https://raw.githubusercontent.com/denpiligrim/3dp-manager/main/forwarding_delete.sh) +bash <(curl -fsSL https://raw.githubusercontent.com/denpiligrim/3dp-manager/dp-fix/forwarding_delete.sh) ``` --- diff --git a/app/assets/flags.json b/app/assets/flags.json new file mode 100644 index 0000000..4c0a92a --- /dev/null +++ b/app/assets/flags.json @@ -0,0 +1,1307 @@ +[ + { + "name": "Ascension Island", + "code": "AC", + "emoji": "%F0%9F%87%A6%F0%9F%87%A8" + }, + { + "name": "Andorra", + "code": "AD", + "emoji": "%F0%9F%87%A6%F0%9F%87%A9" + }, + { + "name": "United Arab Emirates", + "code": "AE", + "emoji": "%F0%9F%87%A6%F0%9F%87%AA" + }, + { + "name": "Afghanistan", + "code": "AF", + "emoji": "%F0%9F%87%A6%F0%9F%87%AB" + }, + { + "name": "Antigua & Barbuda", + "code": "AG", + "emoji": "%F0%9F%87%A6%F0%9F%87%AC" + }, + { + "name": "Anguilla", + "code": "AI", + "emoji": "%F0%9F%87%A6%F0%9F%87%AE" + }, + { + "name": "Albania", + "code": "AL", + "emoji": "%F0%9F%87%A6%F0%9F%87%B1" + }, + { + "name": "Armenia", + "code": "AM", + "emoji": "%F0%9F%87%A6%F0%9F%87%B2" + }, + { + "name": "Angola", + "code": "AO", + "emoji": "%F0%9F%87%A6%F0%9F%87%B4" + }, + { + "name": "Antarctica", + "code": "AQ", + "emoji": "%F0%9F%87%A6%F0%9F%87%B6" + }, + { + "name": "Argentina", + "code": "AR", + "emoji": "%F0%9F%87%A6%F0%9F%87%B7" + }, + { + "name": "American Samoa", + "code": "AS", + "emoji": "%F0%9F%87%A6%F0%9F%87%B8" + }, + { + "name": "Austria", + "code": "AT", + "emoji": "%F0%9F%87%A6%F0%9F%87%B9" + }, + { + "name": "Australia", + "code": "AU", + "emoji": "%F0%9F%87%A6%F0%9F%87%BA" + }, + { + "name": "Aruba", + "code": "AW", + "emoji": "%F0%9F%87%A6%F0%9F%87%BC" + }, + { + "name": "Åland Islands", + "code": "AX", + "emoji": "%F0%9F%87%A6%F0%9F%87%BD" + }, + { + "name": "Azerbaijan", + "code": "AZ", + "emoji": "%F0%9F%87%A6%F0%9F%87%BF" + }, + { + "name": "Bosnia & Herzegovina", + "code": "BA", + "emoji": "%F0%9F%87%A7%F0%9F%87%A6" + }, + { + "name": "Barbados", + "code": "BB", + "emoji": "%F0%9F%87%A7%F0%9F%87%A7" + }, + { + "name": "Bangladesh", + "code": "BD", + "emoji": "%F0%9F%87%A7%F0%9F%87%A9" + }, + { + "name": "Belgium", + "code": "BE", + "emoji": "%F0%9F%87%A7%F0%9F%87%AA" + }, + { + "name": "Burkina Faso", + "code": "BF", + "emoji": "%F0%9F%87%A7%F0%9F%87%AB" + }, + { + "name": "Bulgaria", + "code": "BG", + "emoji": "%F0%9F%87%A7%F0%9F%87%AC" + }, + { + "name": "Bahrain", + "code": "BH", + "emoji": "%F0%9F%87%A7%F0%9F%87%AD" + }, + { + "name": "Burundi", + "code": "BI", + "emoji": "%F0%9F%87%A7%F0%9F%87%AE" + }, + { + "name": "Benin", + "code": "BJ", + "emoji": "%F0%9F%87%A7%F0%9F%87%AF" + }, + { + "name": "St. Barthélemy", + "code": "BL", + "emoji": "%F0%9F%87%A7%F0%9F%87%B1" + }, + { + "name": "Bermuda", + "code": "BM", + "emoji": "%F0%9F%87%A7%F0%9F%87%B2" + }, + { + "name": "Brunei", + "code": "BN", + "emoji": "%F0%9F%87%A7%F0%9F%87%B3" + }, + { + "name": "Bolivia", + "code": "BO", + "emoji": "%F0%9F%87%A7%F0%9F%87%B4" + }, + { + "name": "Caribbean Netherlands", + "code": "BQ", + "emoji": "%F0%9F%87%A7%F0%9F%87%B6" + }, + { + "name": "Brazil", + "code": "BR", + "emoji": "%F0%9F%87%A7%F0%9F%87%B7" + }, + { + "name": "Bahamas", + "code": "BS", + "emoji": "%F0%9F%87%A7%F0%9F%87%B8" + }, + { + "name": "Bhutan", + "code": "BT", + "emoji": "%F0%9F%87%A7%F0%9F%87%B9" + }, + { + "name": "Bouvet Island", + "code": "BV", + "emoji": "%F0%9F%87%A7%F0%9F%87%BB" + }, + { + "name": "Botswana", + "code": "BW", + "emoji": "%F0%9F%87%A7%F0%9F%87%BC" + }, + { + "name": "Belarus", + "code": "BY", + "emoji": "%F0%9F%87%A7%F0%9F%87%BE" + }, + { + "name": "Belize", + "code": "BZ", + "emoji": "%F0%9F%87%A7%F0%9F%87%BF" + }, + { + "name": "Canada", + "code": "CA", + "emoji": "%F0%9F%87%A8%F0%9F%87%A6" + }, + { + "name": "Cocos (Keeling) Islands", + "code": "CC", + "emoji": "%F0%9F%87%A8%F0%9F%87%A8" + }, + { + "name": "Congo - Kinshasa", + "code": "CD", + "emoji": "%F0%9F%87%A8%F0%9F%87%A9" + }, + { + "name": "Central African Republic", + "code": "CF", + "emoji": "%F0%9F%87%A8%F0%9F%87%AB" + }, + { + "name": "Congo - Brazzaville", + "code": "CG", + "emoji": "%F0%9F%87%A8%F0%9F%87%AC" + }, + { + "name": "Switzerland", + "code": "CH", + "emoji": "%F0%9F%87%A8%F0%9F%87%AD" + }, + { + "name": "Côte d’Ivoire", + "code": "CI", + "emoji": "%F0%9F%87%A8%F0%9F%87%AE" + }, + { + "name": "Cook Islands", + "code": "CK", + "emoji": "%F0%9F%87%A8%F0%9F%87%B0" + }, + { + "name": "Chile", + "code": "CL", + "emoji": "%F0%9F%87%A8%F0%9F%87%B1" + }, + { + "name": "Cameroon", + "code": "CM", + "emoji": "%F0%9F%87%A8%F0%9F%87%B2" + }, + { + "name": "China", + "code": "CN", + "emoji": "%F0%9F%87%A8%F0%9F%87%B3" + }, + { + "name": "Colombia", + "code": "CO", + "emoji": "%F0%9F%87%A8%F0%9F%87%B4" + }, + { + "name": "Clipperton Island", + "code": "CP", + "emoji": "%F0%9F%87%A8%F0%9F%87%B5" + }, + { + "name": "Costa Rica", + "code": "CR", + "emoji": "%F0%9F%87%A8%F0%9F%87%B7" + }, + { + "name": "Cuba", + "code": "CU", + "emoji": "%F0%9F%87%A8%F0%9F%87%BA" + }, + { + "name": "Cape Verde", + "code": "CV", + "emoji": "%F0%9F%87%A8%F0%9F%87%BB" + }, + { + "name": "Curaçao", + "code": "CW", + "emoji": "%F0%9F%87%A8%F0%9F%87%BC" + }, + { + "name": "Christmas Island", + "code": "CX", + "emoji": "%F0%9F%87%A8%F0%9F%87%BD" + }, + { + "name": "Cyprus", + "code": "CY", + "emoji": "%F0%9F%87%A8%F0%9F%87%BE" + }, + { + "name": "Czechia", + "code": "CZ", + "emoji": "%F0%9F%87%A8%F0%9F%87%BF" + }, + { + "name": "Germany", + "code": "DE", + "emoji": "%F0%9F%87%A9%F0%9F%87%AA" + }, + { + "name": "Diego Garcia", + "code": "DG", + "emoji": "%F0%9F%87%A9%F0%9F%87%AC" + }, + { + "name": "Djibouti", + "code": "DJ", + "emoji": "%F0%9F%87%A9%F0%9F%87%AF" + }, + { + "name": "Denmark", + "code": "DK", + "emoji": "%F0%9F%87%A9%F0%9F%87%B0" + }, + { + "name": "Dominica", + "code": "DM", + "emoji": "%F0%9F%87%A9%F0%9F%87%B2" + }, + { + "name": "Dominican Republic", + "code": "DO", + "emoji": "%F0%9F%87%A9%F0%9F%87%B4" + }, + { + "name": "Algeria", + "code": "DZ", + "emoji": "%F0%9F%87%A9%F0%9F%87%BF" + }, + { + "name": "Ceuta & Melilla", + "code": "EA", + "emoji": "%F0%9F%87%AA%F0%9F%87%A6" + }, + { + "name": "Ecuador", + "code": "EC", + "emoji": "%F0%9F%87%AA%F0%9F%87%A8" + }, + { + "name": "Estonia", + "code": "EE", + "emoji": "%F0%9F%87%AA%F0%9F%87%AA" + }, + { + "name": "Egypt", + "code": "EG", + "emoji": "%F0%9F%87%AA%F0%9F%87%AC" + }, + { + "name": "Western Sahara", + "code": "EH", + "emoji": "%F0%9F%87%AA%F0%9F%87%AD" + }, + { + "name": "Eritrea", + "code": "ER", + "emoji": "%F0%9F%87%AA%F0%9F%87%B7" + }, + { + "name": "Spain", + "code": "ES", + "emoji": "%F0%9F%87%AA%F0%9F%87%B8" + }, + { + "name": "Ethiopia", + "code": "ET", + "emoji": "%F0%9F%87%AA%F0%9F%87%B9" + }, + { + "name": "European Union", + "code": "EU", + "emoji": "%F0%9F%87%AA%F0%9F%87%BA" + }, + { + "name": "Finland", + "code": "FI", + "emoji": "%F0%9F%87%AB%F0%9F%87%AE" + }, + { + "name": "Fiji", + "code": "FJ", + "emoji": "%F0%9F%87%AB%F0%9F%87%AF" + }, + { + "name": "Falkland Islands", + "code": "FK", + "emoji": "%F0%9F%87%AB%F0%9F%87%B0" + }, + { + "name": "Micronesia", + "code": "FM", + "emoji": "%F0%9F%87%AB%F0%9F%87%B2" + }, + { + "name": "Faroe Islands", + "code": "FO", + "emoji": "%F0%9F%87%AB%F0%9F%87%B4" + }, + { + "name": "France", + "code": "FR", + "emoji": "%F0%9F%87%AB%F0%9F%87%B7" + }, + { + "name": "Gabon", + "code": "GA", + "emoji": "%F0%9F%87%AC%F0%9F%87%A6" + }, + { + "name": "United Kingdom", + "code": "GB", + "emoji": "%F0%9F%87%AC%F0%9F%87%A7" + }, + { + "name": "Grenada", + "code": "GD", + "emoji": "%F0%9F%87%AC%F0%9F%87%A9" + }, + { + "name": "Georgia", + "code": "GE", + "emoji": "%F0%9F%87%AC%F0%9F%87%AA" + }, + { + "name": "French Guiana", + "code": "GF", + "emoji": "%F0%9F%87%AC%F0%9F%87%AB" + }, + { + "name": "Guernsey", + "code": "GG", + "emoji": "%F0%9F%87%AC%F0%9F%87%AC" + }, + { + "name": "Ghana", + "code": "GH", + "emoji": "%F0%9F%87%AC%F0%9F%87%AD" + }, + { + "name": "Gibraltar", + "code": "GI", + "emoji": "%F0%9F%87%AC%F0%9F%87%AE" + }, + { + "name": "Greenland", + "code": "GL", + "emoji": "%F0%9F%87%AC%F0%9F%87%B1" + }, + { + "name": "Gambia", + "code": "GM", + "emoji": "%F0%9F%87%AC%F0%9F%87%B2" + }, + { + "name": "Guinea", + "code": "GN", + "emoji": "%F0%9F%87%AC%F0%9F%87%B3" + }, + { + "name": "Guadeloupe", + "code": "GP", + "emoji": "%F0%9F%87%AC%F0%9F%87%B5" + }, + { + "name": "Equatorial Guinea", + "code": "GQ", + "emoji": "%F0%9F%87%AC%F0%9F%87%B6" + }, + { + "name": "Greece", + "code": "GR", + "emoji": "%F0%9F%87%AC%F0%9F%87%B7" + }, + { + "name": "South Georgia & South Sandwich Islands", + "code": "GS", + "emoji": "%F0%9F%87%AC%F0%9F%87%B8" + }, + { + "name": "Guatemala", + "code": "GT", + "emoji": "%F0%9F%87%AC%F0%9F%87%B9" + }, + { + "name": "Guam", + "code": "GU", + "emoji": "%F0%9F%87%AC%F0%9F%87%BA" + }, + { + "name": "Guinea-Bissau", + "code": "GW", + "emoji": "%F0%9F%87%AC%F0%9F%87%BC" + }, + { + "name": "Guyana", + "code": "GY", + "emoji": "%F0%9F%87%AC%F0%9F%87%BE" + }, + { + "name": "Hong Kong SAR China", + "code": "HK", + "emoji": "%F0%9F%87%AD%F0%9F%87%B0" + }, + { + "name": "Heard & McDonald Islands", + "code": "HM", + "emoji": "%F0%9F%87%AD%F0%9F%87%B2" + }, + { + "name": "Honduras", + "code": "HN", + "emoji": "%F0%9F%87%AD%F0%9F%87%B3" + }, + { + "name": "Croatia", + "code": "HR", + "emoji": "%F0%9F%87%AD%F0%9F%87%B7" + }, + { + "name": "Haiti", + "code": "HT", + "emoji": "%F0%9F%87%AD%F0%9F%87%B9" + }, + { + "name": "Hungary", + "code": "HU", + "emoji": "%F0%9F%87%AD%F0%9F%87%BA" + }, + { + "name": "Canary Islands", + "code": "IC", + "emoji": "%F0%9F%87%AE%F0%9F%87%A8" + }, + { + "name": "Indonesia", + "code": "ID", + "emoji": "%F0%9F%87%AE%F0%9F%87%A9" + }, + { + "name": "Ireland", + "code": "IE", + "emoji": "%F0%9F%87%AE%F0%9F%87%AA" + }, + { + "name": "Israel", + "code": "IL", + "emoji": "%F0%9F%87%AE%F0%9F%87%B1" + }, + { + "name": "Isle of Man", + "code": "IM", + "emoji": "%F0%9F%87%AE%F0%9F%87%B2" + }, + { + "name": "India", + "code": "IN", + "emoji": "%F0%9F%87%AE%F0%9F%87%B3" + }, + { + "name": "British Indian Ocean Territory", + "code": "IO", + "emoji": "%F0%9F%87%AE%F0%9F%87%B4" + }, + { + "name": "Iraq", + "code": "IQ", + "emoji": "%F0%9F%87%AE%F0%9F%87%B6" + }, + { + "name": "Iran", + "code": "IR", + "emoji": "%F0%9F%87%AE%F0%9F%87%B7" + }, + { + "name": "Iceland", + "code": "IS", + "emoji": "%F0%9F%87%AE%F0%9F%87%B8" + }, + { + "name": "Italy", + "code": "IT", + "emoji": "%F0%9F%87%AE%F0%9F%87%B9" + }, + { + "name": "Jersey", + "code": "JE", + "emoji": "%F0%9F%87%AF%F0%9F%87%AA" + }, + { + "name": "Jamaica", + "code": "JM", + "emoji": "%F0%9F%87%AF%F0%9F%87%B2" + }, + { + "name": "Jordan", + "code": "JO", + "emoji": "%F0%9F%87%AF%F0%9F%87%B4" + }, + { + "name": "Japan", + "code": "JP", + "emoji": "%F0%9F%87%AF%F0%9F%87%B5" + }, + { + "name": "Kenya", + "code": "KE", + "emoji": "%F0%9F%87%B0%F0%9F%87%AA" + }, + { + "name": "Kyrgyzstan", + "code": "KG", + "emoji": "%F0%9F%87%B0%F0%9F%87%AC" + }, + { + "name": "Cambodia", + "code": "KH", + "emoji": "%F0%9F%87%B0%F0%9F%87%AD" + }, + { + "name": "Kiribati", + "code": "KI", + "emoji": "%F0%9F%87%B0%F0%9F%87%AE" + }, + { + "name": "Comoros", + "code": "KM", + "emoji": "%F0%9F%87%B0%F0%9F%87%B2" + }, + { + "name": "St. Kitts & Nevis", + "code": "KN", + "emoji": "%F0%9F%87%B0%F0%9F%87%B3" + }, + { + "name": "North Korea", + "code": "KP", + "emoji": "%F0%9F%87%B0%F0%9F%87%B5" + }, + { + "name": "South Korea", + "code": "KR", + "emoji": "%F0%9F%87%B0%F0%9F%87%B7" + }, + { + "name": "Kuwait", + "code": "KW", + "emoji": "%F0%9F%87%B0%F0%9F%87%BC" + }, + { + "name": "Cayman Islands", + "code": "KY", + "emoji": "%F0%9F%87%B0%F0%9F%87%BE" + }, + { + "name": "Kazakhstan", + "code": "KZ", + "emoji": "%F0%9F%87%B0%F0%9F%87%BF" + }, + { + "name": "Laos", + "code": "LA", + "emoji": "%F0%9F%87%B1%F0%9F%87%A6" + }, + { + "name": "Lebanon", + "code": "LB", + "emoji": "%F0%9F%87%B1%F0%9F%87%A7" + }, + { + "name": "St. Lucia", + "code": "LC", + "emoji": "%F0%9F%87%B1%F0%9F%87%A8" + }, + { + "name": "Liechtenstein", + "code": "LI", + "emoji": "%F0%9F%87%B1%F0%9F%87%AE" + }, + { + "name": "Sri Lanka", + "code": "LK", + "emoji": "%F0%9F%87%B1%F0%9F%87%B0" + }, + { + "name": "Liberia", + "code": "LR", + "emoji": "%F0%9F%87%B1%F0%9F%87%B7" + }, + { + "name": "Lesotho", + "code": "LS", + "emoji": "%F0%9F%87%B1%F0%9F%87%B8" + }, + { + "name": "Lithuania", + "code": "LT", + "emoji": "%F0%9F%87%B1%F0%9F%87%B9" + }, + { + "name": "Luxembourg", + "code": "LU", + "emoji": "%F0%9F%87%B1%F0%9F%87%BA" + }, + { + "name": "Latvia", + "code": "LV", + "emoji": "%F0%9F%87%B1%F0%9F%87%BB" + }, + { + "name": "Libya", + "code": "LY", + "emoji": "%F0%9F%87%B1%F0%9F%87%BE" + }, + { + "name": "Morocco", + "code": "MA", + "emoji": "%F0%9F%87%B2%F0%9F%87%A6" + }, + { + "name": "Monaco", + "code": "MC", + "emoji": "%F0%9F%87%B2%F0%9F%87%A8" + }, + { + "name": "Moldova", + "code": "MD", + "emoji": "%F0%9F%87%B2%F0%9F%87%A9" + }, + { + "name": "Montenegro", + "code": "ME", + "emoji": "%F0%9F%87%B2%F0%9F%87%AA" + }, + { + "name": "St. Martin", + "code": "MF", + "emoji": "%F0%9F%87%B2%F0%9F%87%AB" + }, + { + "name": "Madagascar", + "code": "MG", + "emoji": "%F0%9F%87%B2%F0%9F%87%AC" + }, + { + "name": "Marshall Islands", + "code": "MH", + "emoji": "%F0%9F%87%B2%F0%9F%87%AD" + }, + { + "name": "North Macedonia", + "code": "MK", + "emoji": "%F0%9F%87%B2%F0%9F%87%B0" + }, + { + "name": "Mali", + "code": "ML", + "emoji": "%F0%9F%87%B2%F0%9F%87%B1" + }, + { + "name": "Myanmar (Burma)", + "code": "MM", + "emoji": "%F0%9F%87%B2%F0%9F%87%B2" + }, + { + "name": "Mongolia", + "code": "MN", + "emoji": "%F0%9F%87%B2%F0%9F%87%B3" + }, + { + "name": "Macao SAR China", + "code": "MO", + "emoji": "%F0%9F%87%B2%F0%9F%87%B4" + }, + { + "name": "Northern Mariana Islands", + "code": "MP", + "emoji": "%F0%9F%87%B2%F0%9F%87%B5" + }, + { + "name": "Martinique", + "code": "MQ", + "emoji": "%F0%9F%87%B2%F0%9F%87%B6" + }, + { + "name": "Mauritania", + "code": "MR", + "emoji": "%F0%9F%87%B2%F0%9F%87%B7" + }, + { + "name": "Montserrat", + "code": "MS", + "emoji": "%F0%9F%87%B2%F0%9F%87%B8" + }, + { + "name": "Malta", + "code": "MT", + "emoji": "%F0%9F%87%B2%F0%9F%87%B9" + }, + { + "name": "Mauritius", + "code": "MU", + "emoji": "%F0%9F%87%B2%F0%9F%87%BA" + }, + { + "name": "Maldives", + "code": "MV", + "emoji": "%F0%9F%87%B2%F0%9F%87%BB" + }, + { + "name": "Malawi", + "code": "MW", + "emoji": "%F0%9F%87%B2%F0%9F%87%BC" + }, + { + "name": "Mexico", + "code": "MX", + "emoji": "%F0%9F%87%B2%F0%9F%87%BD" + }, + { + "name": "Malaysia", + "code": "MY", + "emoji": "%F0%9F%87%B2%F0%9F%87%BE" + }, + { + "name": "Mozambique", + "code": "MZ", + "emoji": "%F0%9F%87%B2%F0%9F%87%BF" + }, + { + "name": "Namibia", + "code": "NA", + "emoji": "%F0%9F%87%B3%F0%9F%87%A6" + }, + { + "name": "New Caledonia", + "code": "NC", + "emoji": "%F0%9F%87%B3%F0%9F%87%A8" + }, + { + "name": "Niger", + "code": "NE", + "emoji": "%F0%9F%87%B3%F0%9F%87%AA" + }, + { + "name": "Norfolk Island", + "code": "NF", + "emoji": "%F0%9F%87%B3%F0%9F%87%AB" + }, + { + "name": "Nigeria", + "code": "NG", + "emoji": "%F0%9F%87%B3%F0%9F%87%AC" + }, + { + "name": "Nicaragua", + "code": "NI", + "emoji": "%F0%9F%87%B3%F0%9F%87%AE" + }, + { + "name": "Netherlands", + "code": "NL", + "emoji": "%F0%9F%87%B3%F0%9F%87%B1" + }, + { + "name": "Norway", + "code": "NO", + "emoji": "%F0%9F%87%B3%F0%9F%87%B4" + }, + { + "name": "Nepal", + "code": "NP", + "emoji": "%F0%9F%87%B3%F0%9F%87%B5" + }, + { + "name": "Nauru", + "code": "NR", + "emoji": "%F0%9F%87%B3%F0%9F%87%B7" + }, + { + "name": "Niue", + "code": "NU", + "emoji": "%F0%9F%87%B3%F0%9F%87%BA" + }, + { + "name": "New Zealand", + "code": "NZ", + "emoji": "%F0%9F%87%B3%F0%9F%87%BF" + }, + { + "name": "Oman", + "code": "OM", + "emoji": "%F0%9F%87%B4%F0%9F%87%B2" + }, + { + "name": "Panama", + "code": "PA", + "emoji": "%F0%9F%87%B5%F0%9F%87%A6" + }, + { + "name": "Peru", + "code": "PE", + "emoji": "%F0%9F%87%B5%F0%9F%87%AA" + }, + { + "name": "French Polynesia", + "code": "PF", + "emoji": "%F0%9F%87%B5%F0%9F%87%AB" + }, + { + "name": "Papua New Guinea", + "code": "PG", + "emoji": "%F0%9F%87%B5%F0%9F%87%AC" + }, + { + "name": "Philippines", + "code": "PH", + "emoji": "%F0%9F%87%B5%F0%9F%87%AD" + }, + { + "name": "Pakistan", + "code": "PK", + "emoji": "%F0%9F%87%B5%F0%9F%87%B0" + }, + { + "name": "Poland", + "code": "PL", + "emoji": "%F0%9F%87%B5%F0%9F%87%B1" + }, + { + "name": "St. Pierre & Miquelon", + "code": "PM", + "emoji": "%F0%9F%87%B5%F0%9F%87%B2" + }, + { + "name": "Pitcairn Islands", + "code": "PN", + "emoji": "%F0%9F%87%B5%F0%9F%87%B3" + }, + { + "name": "Puerto Rico", + "code": "PR", + "emoji": "%F0%9F%87%B5%F0%9F%87%B7" + }, + { + "name": "Palestinian Territories", + "code": "PS", + "emoji": "%F0%9F%87%B5%F0%9F%87%B8" + }, + { + "name": "Portugal", + "code": "PT", + "emoji": "%F0%9F%87%B5%F0%9F%87%B9" + }, + { + "name": "Palau", + "code": "PW", + "emoji": "%F0%9F%87%B5%F0%9F%87%BC" + }, + { + "name": "Paraguay", + "code": "PY", + "emoji": "%F0%9F%87%B5%F0%9F%87%BE" + }, + { + "name": "Qatar", + "code": "QA", + "emoji": "%F0%9F%87%B6%F0%9F%87%A6" + }, + { + "name": "Réunion", + "code": "RE", + "emoji": "%F0%9F%87%B7%F0%9F%87%AA" + }, + { + "name": "Romania", + "code": "RO", + "emoji": "%F0%9F%87%B7%F0%9F%87%B4" + }, + { + "name": "Serbia", + "code": "RS", + "emoji": "%F0%9F%87%B7%F0%9F%87%B8" + }, + { + "name": "Russia", + "code": "RU", + "emoji": "%F0%9F%87%B7%F0%9F%87%BA" + }, + { + "name": "Rwanda", + "code": "RW", + "emoji": "%F0%9F%87%B7%F0%9F%87%BC" + }, + { + "name": "Saudi Arabia", + "code": "SA", + "emoji": "%F0%9F%87%B8%F0%9F%87%A6" + }, + { + "name": "Solomon Islands", + "code": "SB", + "emoji": "%F0%9F%87%B8%F0%9F%87%A7" + }, + { + "name": "Seychelles", + "code": "SC", + "emoji": "%F0%9F%87%B8%F0%9F%87%A8" + }, + { + "name": "Sudan", + "code": "SD", + "emoji": "%F0%9F%87%B8%F0%9F%87%A9" + }, + { + "name": "Sweden", + "code": "SE", + "emoji": "%F0%9F%87%B8%F0%9F%87%AA" + }, + { + "name": "Singapore", + "code": "SG", + "emoji": "%F0%9F%87%B8%F0%9F%87%AC" + }, + { + "name": "St. Helena", + "code": "SH", + "emoji": "%F0%9F%87%B8%F0%9F%87%AD" + }, + { + "name": "Slovenia", + "code": "SI", + "emoji": "%F0%9F%87%B8%F0%9F%87%AE" + }, + { + "name": "Svalbard & Jan Mayen", + "code": "SJ", + "emoji": "%F0%9F%87%B8%F0%9F%87%AF" + }, + { + "name": "Slovakia", + "code": "SK", + "emoji": "%F0%9F%87%B8%F0%9F%87%B0" + }, + { + "name": "Sierra Leone", + "code": "SL", + "emoji": "%F0%9F%87%B8%F0%9F%87%B1" + }, + { + "name": "San Marino", + "code": "SM", + "emoji": "%F0%9F%87%B8%F0%9F%87%B2" + }, + { + "name": "Senegal", + "code": "SN", + "emoji": "%F0%9F%87%B8%F0%9F%87%B3" + }, + { + "name": "Somalia", + "code": "SO", + "emoji": "%F0%9F%87%B8%F0%9F%87%B4" + }, + { + "name": "Suriname", + "code": "SR", + "emoji": "%F0%9F%87%B8%F0%9F%87%B7" + }, + { + "name": "South Sudan", + "code": "SS", + "emoji": "%F0%9F%87%B8%F0%9F%87%B8" + }, + { + "name": "São Tomé & Príncipe", + "code": "ST", + "emoji": "%F0%9F%87%B8%F0%9F%87%B9" + }, + { + "name": "El Salvador", + "code": "SV", + "emoji": "%F0%9F%87%B8%F0%9F%87%BB" + }, + { + "name": "Sint Maarten", + "code": "SX", + "emoji": "%F0%9F%87%B8%F0%9F%87%BD" + }, + { + "name": "Syria", + "code": "SY", + "emoji": "%F0%9F%87%B8%F0%9F%87%BE" + }, + { + "name": "Eswatini", + "code": "SZ", + "emoji": "%F0%9F%87%B8%F0%9F%87%BF" + }, + { + "name": "Tristan da Cunha", + "code": "TA", + "emoji": "%F0%9F%87%B9%F0%9F%87%A6" + }, + { + "name": "Turks & Caicos Islands", + "code": "TC", + "emoji": "%F0%9F%87%B9%F0%9F%87%A8" + }, + { + "name": "Chad", + "code": "TD", + "emoji": "%F0%9F%87%B9%F0%9F%87%A9" + }, + { + "name": "French Southern Territories", + "code": "TF", + "emoji": "%F0%9F%87%B9%F0%9F%87%AB" + }, + { + "name": "Togo", + "code": "TG", + "emoji": "%F0%9F%87%B9%F0%9F%87%AC" + }, + { + "name": "Thailand", + "code": "TH", + "emoji": "%F0%9F%87%B9%F0%9F%87%AD" + }, + { + "name": "Tajikistan", + "code": "TJ", + "emoji": "%F0%9F%87%B9%F0%9F%87%AF" + }, + { + "name": "Tokelau", + "code": "TK", + "emoji": "%F0%9F%87%B9%F0%9F%87%B0" + }, + { + "name": "Timor-Leste", + "code": "TL", + "emoji": "%F0%9F%87%B9%F0%9F%87%B1" + }, + { + "name": "Turkmenistan", + "code": "TM", + "emoji": "%F0%9F%87%B9%F0%9F%87%B2" + }, + { + "name": "Tunisia", + "code": "TN", + "emoji": "%F0%9F%87%B9%F0%9F%87%B3" + }, + { + "name": "Tonga", + "code": "TO", + "emoji": "%F0%9F%87%B9%F0%9F%87%B4" + }, + { + "name": "Turkey", + "code": "TR", + "emoji": "%F0%9F%87%B9%F0%9F%87%B7" + }, + { + "name": "Trinidad & Tobago", + "code": "TT", + "emoji": "%F0%9F%87%B9%F0%9F%87%B9" + }, + { + "name": "Tuvalu", + "code": "TV", + "emoji": "%F0%9F%87%B9%F0%9F%87%BB" + }, + { + "name": "Taiwan", + "code": "TW", + "emoji": "%F0%9F%87%B9%F0%9F%87%BC" + }, + { + "name": "Tanzania", + "code": "TZ", + "emoji": "%F0%9F%87%B9%F0%9F%87%BF" + }, + { + "name": "Ukraine", + "code": "UA", + "emoji": "%F0%9F%87%BA%F0%9F%87%A6" + }, + { + "name": "Uganda", + "code": "UG", + "emoji": "%F0%9F%87%BA%F0%9F%87%AC" + }, + { + "name": "U.S. Outlying Islands", + "code": "UM", + "emoji": "%F0%9F%87%BA%F0%9F%87%B2" + }, + { + "name": "United Nations", + "code": "UN", + "emoji": "%F0%9F%87%BA%F0%9F%87%B3" + }, + { + "name": "United States", + "code": "US", + "emoji": "%F0%9F%87%BA%F0%9F%87%B8" + }, + { + "name": "Uruguay", + "code": "UY", + "emoji": "%F0%9F%87%BA%F0%9F%87%BE" + }, + { + "name": "Uzbekistan", + "code": "UZ", + "emoji": "%F0%9F%87%BA%F0%9F%87%BF" + }, + { + "name": "Vatican City", + "code": "VA", + "emoji": "%F0%9F%87%BB%F0%9F%87%A6" + }, + { + "name": "St. Vincent & Grenadines", + "code": "VC", + "emoji": "%F0%9F%87%BB%F0%9F%87%A8" + }, + { + "name": "Venezuela", + "code": "VE", + "emoji": "%F0%9F%87%BB%F0%9F%87%AA" + }, + { + "name": "British Virgin Islands", + "code": "VG", + "emoji": "%F0%9F%87%BB%F0%9F%87%AC" + }, + { + "name": "U.S. Virgin Islands", + "code": "VI", + "emoji": "%F0%9F%87%BB%F0%9F%87%AE" + }, + { + "name": "Vietnam", + "code": "VN", + "emoji": "%F0%9F%87%BB%F0%9F%87%B3" + }, + { + "name": "Vanuatu", + "code": "VU", + "emoji": "%F0%9F%87%BB%F0%9F%87%BA" + }, + { + "name": "Wallis & Futuna", + "code": "WF", + "emoji": "%F0%9F%87%BC%F0%9F%87%AB" + }, + { + "name": "Samoa", + "code": "WS", + "emoji": "%F0%9F%87%BC%F0%9F%87%B8" + }, + { + "name": "Kosovo", + "code": "XK", + "emoji": "%F0%9F%87%BD%F0%9F%87%B0" + }, + { + "name": "Yemen", + "code": "YE", + "emoji": "%F0%9F%87%BE%F0%9F%87%AA" + }, + { + "name": "Mayotte", + "code": "YT", + "emoji": "%F0%9F%87%BE%F0%9F%87%B9" + }, + { + "name": "South Africa", + "code": "ZA", + "emoji": "%F0%9F%87%BF%F0%9F%87%A6" + }, + { + "name": "Zambia", + "code": "ZM", + "emoji": "%F0%9F%87%BF%F0%9F%87%B2" + }, + { + "name": "Zimbabwe", + "code": "ZW", + "emoji": "%F0%9F%87%BF%F0%9F%87%BC" + }, + { + "name": "England", + "code": "ENGLAND", + "emoji": "%F0%9F%8F%B4%F3%A0%81%A7%F3%A0%81%A2%F3%A0%81%A5%F3%A0%81%AE%F3%A0%81%A7%F3%A0%81%BF" + }, + { + "name": "Scotland", + "code": "SCOTLAND", + "emoji": "%F0%9F%8F%B4%F3%A0%81%A7%F3%A0%81%A2%F3%A0%81%B3%F3%A0%81%A3%F3%A0%81%B4%F3%A0%81%BF" + }, + { + "name": "Wales", + "code": "WALES", + "emoji": "%F0%9F%8F%B4%F3%A0%81%A7%F3%A0%81%A2%F3%A0%81%B7%F3%A0%81%AC%F3%A0%81%B3%F3%A0%81%BF" + } +] \ No newline at end of file diff --git a/app/builders/buildInboundLink.js b/app/builders/buildInboundLink.js index ad5d620..fa9967e 100644 --- a/app/builders/buildInboundLink.js +++ b/app/builders/buildInboundLink.js @@ -1,3 +1,5 @@ +const flag = process.env.COUNTRY_FLAG ?? '%F0%9F%92%AF'; + export function buildInboundLink(inbound, domain, idOrPass) { let link = ""; @@ -48,7 +50,7 @@ function buildVlessLink(inbound, domain, uuid) { params.set("fp", r.settings.fingerprint || "random"); params.set("sni", r.serverNames?.[0] || ""); params.set("sid", r.shortIds?.[0] || ""); - params.set("spx", '%2F'); + params.set("spx", '/'); // TCP Reality flow if (network === "tcp") { @@ -88,7 +90,7 @@ function buildVlessLink(inbound, domain, uuid) { return ( `vless://${uuid}@${domain}:${inbound.port}` + `?${params.toString()}` + - `#${encodeURIComponent(inbound.remark)}` + `#${flag}%20${encodeURIComponent(inbound.remark)}` ); } @@ -105,7 +107,7 @@ function buildVmessLink(inbound, domain, uuid) { net: stream.network || "tcp", path: "/", port: inbound.port, - ps: inbound.remark, + ps: flag + ' ' + inbound.remark, scy: "", sni: "", tls: stream.security || "none", @@ -134,7 +136,7 @@ function buildSsLink(inbound, domain) { .from(userInfo, "utf8") .toString("base64"); - return `ss://${base64}@${domain}:${inbound.port}?type=tcp#${inbound.remark}`; + return `ss://${base64}@${domain}:${inbound.port}?type=tcp#${flag}%20${inbound.remark}`; } function buildTrojanLink(inbound, domain, password) { @@ -155,6 +157,6 @@ function buildTrojanLink(inbound, domain, password) { `&sni=${sni}` + `&sid=${sid}` + `&spx=${spx}` + - `#${inbound.remark}-${password}` + `#${flag}%20${inbound.remark}-${password}` ); } \ No newline at end of file diff --git a/app/index.js b/app/index.js index 9e15455..fece88d 100644 --- a/app/index.js +++ b/app/index.js @@ -23,7 +23,7 @@ api.interceptors.request.use(config => { }); const WHITELIST_FILE = "/app/whitelist.txt"; -const WHITELIST_REPO_URL = "https://raw.githubusercontent.com/denpiligrim/3dp-manager/main/whitelist.txt"; +const WHITELIST_REPO_URL = "https://raw.githubusercontent.com/denpiligrim/3dp-manager/dp-fix/whitelist.txt"; // Вспомогательные функции async function updateWhitelist() { diff --git a/forwarding_install.sh b/forwarding_install.sh index be6dd2b..af077e7 100644 --- a/forwarding_install.sh +++ b/forwarding_install.sh @@ -115,7 +115,7 @@ cd "$BASE_DIR" ################################# # DOWNLOAD FILES ################################# -REPO="https://raw.githubusercontent.com/denpiligrim/3dp-manager/main" +REPO="https://raw.githubusercontent.com/denpiligrim/3dp-manager/dp-fix" NGINX_PORT=$ORIGIN_PORT SUB_URL="$ORIGIN_PROTO://$LOCAL_HOST:$NGINX_PORT$SUB_PATH" diff --git a/install.sh b/install.sh index 0116fc1..4200947 100644 --- a/install.sh +++ b/install.sh @@ -135,12 +135,32 @@ log "Используется директория проекта: $PROJECT_DIR" mkdir -p "$PROJECT_DIR" cd "$PROJECT_DIR" +################################# +# Получаем флаг +################################# +REPO_BASE="https://raw.githubusercontent.com/denpiligrim/3dp-manager/dp-fix" +COUNTRY_FLAG="" + +# Получаем countryCode +IP_JSON=$(curl -s --fail http://ip-api.com/json/ || true) +[ -z "$IP_JSON" ] && exit 0 + +COUNTRY_CODE=$(echo "$IP_JSON" | jq -r '.countryCode // empty' 2>/dev/null) +[ -z "$COUNTRY_CODE" ] && exit 0 + +# URL флагов +FLAGS_JSON_URL="$REPO_BASE/app/assets/flags.json" + +FLAGS_JSON=$(curl -s "$FLAGS_JSON_URL" || true) +[ -z "$FLAGS_JSON" ] && exit 0 + +# Ищем emoji +COUNTRY_FLAG=$(echo "$FLAGS_JSON" | jq -r --arg code "$COUNTRY_CODE" '.[] | select(.code == $code) | .emoji // empty' 2>/dev/null | head -n1) + ################################# # Белый лист ################################# -REPO_BASE="https://raw.githubusercontent.com/denpiligrim/3dp-manager/main" - curl -fsSL "$REPO_BASE/whitelist.txt" -o whitelist.txt log "whitelist.txt скопирован" @@ -207,6 +227,7 @@ SUB_TOKEN=$SUB_TOKEN UI_URL=$UI_URL UI_LOGIN=$UI_LOGIN UI_PASSWORD=$UI_PASSWORD +COUNTRY_FLAG=$COUNTRY_FLAG NGINX_PORT=$NGINX_PORT UI_HOST=$UI_HOST UI_PROTO=$UI_PROTO diff --git a/update.sh b/update.sh index 865c835..a7658d0 100644 --- a/update.sh +++ b/update.sh @@ -23,7 +23,7 @@ need_root() { ################################# PROJECT_DIR="/opt/3dp-manager" -REPO_RAW="https://raw.githubusercontent.com/denpiligrim/3dp-manager/main" +REPO_RAW="https://raw.githubusercontent.com/denpiligrim/3dp-manager/dp-fix" ################################# # START