mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-02-28 05:02:59 +00:00
feat: implement field for Happ custom routing rules
This commit is contained in:
parent
fd3260659f
commit
ca026483df
19 changed files with 70 additions and 19 deletions
|
|
@ -173,6 +173,11 @@ func (s *Server) initRouter() (*gin.Engine, error) {
|
|||
return nil, err
|
||||
}
|
||||
|
||||
SubRoutingRules, err := s.settingService.GetSubRoutingRules()
|
||||
if err != nil {
|
||||
SubRoutingRules = ""
|
||||
}
|
||||
|
||||
// set per-request localizer from headers/cookies
|
||||
engine.Use(locale.LocalizerMiddleware())
|
||||
|
||||
|
|
@ -252,7 +257,7 @@ func (s *Server) initRouter() (*gin.Engine, error) {
|
|||
s.sub = NewSUBController(
|
||||
g, LinksPath, JsonPath, subJsonEnable, Encrypt, ShowInfo, RemarkModel, SubUpdates,
|
||||
SubJsonFragment, SubJsonNoises, SubJsonMux, SubJsonRules, SubTitle, SubSupportUrl,
|
||||
SubProfileUrl, SubAnnounce, SubEnableRouting)
|
||||
SubProfileUrl, SubAnnounce, SubEnableRouting, SubRoutingRules)
|
||||
|
||||
return engine, nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ type SUBController struct {
|
|||
subProfileUrl string
|
||||
subAnnounce string
|
||||
subEnableRouting bool
|
||||
subRoutingRules string
|
||||
subPath string
|
||||
subJsonPath string
|
||||
jsonEnabled bool
|
||||
|
|
@ -47,6 +48,7 @@ func NewSUBController(
|
|||
subProfileUrl string,
|
||||
subAnnounce string,
|
||||
subEnableRouting bool,
|
||||
subRoutingRules string,
|
||||
) *SUBController {
|
||||
sub := NewSubService(showInfo, rModel)
|
||||
a := &SUBController{
|
||||
|
|
@ -55,6 +57,7 @@ func NewSUBController(
|
|||
subProfileUrl: subProfileUrl,
|
||||
subAnnounce: subAnnounce,
|
||||
subEnableRouting: subEnableRouting,
|
||||
subRoutingRules: subRoutingRules,
|
||||
subPath: subPath,
|
||||
subJsonPath: jsonPath,
|
||||
jsonEnabled: jsonEnabled,
|
||||
|
|
@ -140,7 +143,7 @@ func (a *SUBController) subs(c *gin.Context) {
|
|||
|
||||
// Add headers
|
||||
header := fmt.Sprintf("upload=%d; download=%d; total=%d; expire=%d", traffic.Up, traffic.Down, traffic.Total, traffic.ExpiryTime/1000)
|
||||
a.ApplyCommonHeaders(c, header, a.updateInterval, a.subTitle, a.subSupportUrl, a.subProfileUrl, a.subAnnounce, a.subEnableRouting)
|
||||
a.ApplyCommonHeaders(c, header, a.updateInterval, a.subTitle, a.subSupportUrl, a.subProfileUrl, a.subAnnounce, a.subEnableRouting, a.subRoutingRules)
|
||||
|
||||
if a.subEncrypt {
|
||||
c.String(200, base64.StdEncoding.EncodeToString([]byte(result)))
|
||||
|
|
@ -159,7 +162,7 @@ func (a *SUBController) subJsons(c *gin.Context) {
|
|||
c.String(400, "Error!")
|
||||
} else {
|
||||
// Add headers
|
||||
a.ApplyCommonHeaders(c, header, a.updateInterval, a.subTitle, a.subSupportUrl, a.subProfileUrl, a.subAnnounce, a.subEnableRouting)
|
||||
a.ApplyCommonHeaders(c, header, a.updateInterval, a.subTitle, a.subSupportUrl, a.subProfileUrl, a.subAnnounce, a.subEnableRouting, a.subRoutingRules)
|
||||
|
||||
c.String(200, jsonSub)
|
||||
}
|
||||
|
|
@ -175,6 +178,7 @@ func (a *SUBController) ApplyCommonHeaders(
|
|||
profileUrl string,
|
||||
profileAnnounce string,
|
||||
profileEnableRouting bool,
|
||||
profileRoutingRules string,
|
||||
) {
|
||||
c.Writer.Header().Set("Subscription-Userinfo", header)
|
||||
c.Writer.Header().Set("Profile-Update-Interval", updateInterval)
|
||||
|
|
@ -183,4 +187,5 @@ func (a *SUBController) ApplyCommonHeaders(
|
|||
c.Writer.Header().Set("Profile-Web-Page-Url", profileUrl)
|
||||
c.Writer.Header().Set("Announce", "base64:"+base64.StdEncoding.EncodeToString([]byte(profileAnnounce)))
|
||||
c.Writer.Header().Set("Routing-Enable", strconv.FormatBool(profileEnableRouting))
|
||||
c.Writer.Header().Set("Routing", profileRoutingRules)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -33,6 +33,7 @@ class AllSetting {
|
|||
this.subProfileUrl = "";
|
||||
this.subAnnounce = "";
|
||||
this.subEnableRouting = true;
|
||||
this.subRoutingRules = "";
|
||||
this.subListen = "";
|
||||
this.subPort = 2096;
|
||||
this.subPath = "/sub/";
|
||||
|
|
|
|||
|
|
@ -61,6 +61,7 @@ type AllSetting struct {
|
|||
SubProfileUrl string `json:"subProfileUrl" form:"subProfileUrl"` // Subscription profile URL
|
||||
SubAnnounce string `json:"subAnnounce" form:"subAnnounce"` // Subscription announce
|
||||
SubEnableRouting bool `json:"subEnableRouting" form:"subEnableRouting"` // Enable routing for subscription
|
||||
SubRoutingRules string `json:"subRoutingRules" form:"subRoutingRules"` // Subscription global routing rules (Only for Happ)
|
||||
SubListen string `json:"subListen" form:"subListen"` // Subscription server listen IP
|
||||
SubPort int `json:"subPort" form:"subPort"` // Subscription server port
|
||||
SubPath string `json:"subPath" form:"subPath"` // Base path for subscription URLs
|
||||
|
|
|
|||
|
|
@ -71,7 +71,7 @@
|
|||
<a-switch v-model="allSetting.subShowInfo"></a-switch>
|
||||
</template>
|
||||
</a-setting-list-item>
|
||||
<a-divider></a-divider>
|
||||
<a-divider>{{ i18n "pages.xray.basicTemplate"}}</a-divider>
|
||||
<a-setting-list-item paddings="small">
|
||||
<template #title>{{ i18n "pages.settings.subTitle"}}</template>
|
||||
<template #description>{{ i18n "pages.settings.subTitleDesc"}}</template>
|
||||
|
|
@ -83,14 +83,14 @@
|
|||
<template #title>{{ i18n "pages.settings.subSupportUrl"}}</template>
|
||||
<template #description>{{ i18n "pages.settings.subSupportUrlDesc"}}</template>
|
||||
<template #control>
|
||||
<a-input type="text" v-model="allSetting.subSupportUrl"></a-input>
|
||||
<a-input type="text" v-model="allSetting.subSupportUrl" placeholder="https://example.com"></a-input>
|
||||
</template>
|
||||
</a-setting-list-item>
|
||||
<a-setting-list-item paddings="small">
|
||||
<template #title>{{ i18n "pages.settings.subProfileUrl"}}</template>
|
||||
<template #description>{{ i18n "pages.settings.subProfileUrlDesc"}}</template>
|
||||
<template #control>
|
||||
<a-input type="text" v-model="allSetting.subProfileUrl"></a-input>
|
||||
<a-input type="text" v-model="allSetting.subProfileUrl" placeholder="https://example.com"></a-input>
|
||||
</template>
|
||||
</a-setting-list-item>
|
||||
<a-setting-list-item paddings="small">
|
||||
|
|
@ -100,6 +100,7 @@
|
|||
<a-textarea v-model="allSetting.subAnnounce"></a-textarea>
|
||||
</template>
|
||||
</a-setting-list-item>
|
||||
<a-divider>{{ i18n "pages.xray.advancedTemplate"}} (Happ)</a-divider>
|
||||
<a-setting-list-item paddings="small">
|
||||
<template #title>{{ i18n "pages.settings.subEnableRouting"}}</template>
|
||||
<template #description>{{ i18n "pages.settings.subEnableRoutingDesc"}}</template>
|
||||
|
|
@ -107,6 +108,13 @@
|
|||
<a-switch v-model="allSetting.subEnableRouting"></a-switch>
|
||||
</template>
|
||||
</a-setting-list-item>
|
||||
<a-setting-list-item paddings="small">
|
||||
<template #title>{{ i18n "pages.settings.subRoutingRules"}}</template>
|
||||
<template #description>{{ i18n "pages.settings.subRoutingRulesDesc"}}</template>
|
||||
<template #control>
|
||||
<a-textarea v-model="allSetting.subRoutingRules" placeholder="happ://routing/add/..."></a-textarea>
|
||||
</template>
|
||||
</a-setting-list-item>
|
||||
</a-collapse-panel>
|
||||
<a-collapse-panel key="3" header='{{ i18n "pages.settings.certs" }}'>
|
||||
<a-setting-list-item paddings="small">
|
||||
|
|
|
|||
|
|
@ -57,6 +57,7 @@ var defaultValueMap = map[string]string{
|
|||
"subProfileUrl": "",
|
||||
"subAnnounce": "",
|
||||
"subEnableRouting": "true",
|
||||
"subRoutingRules": "",
|
||||
"subListen": "",
|
||||
"subPort": "2096",
|
||||
"subPath": "/sub/",
|
||||
|
|
@ -479,6 +480,10 @@ func (s *SettingService) GetSubEnableRouting() (bool, error) {
|
|||
return s.getBool("subEnableRouting")
|
||||
}
|
||||
|
||||
func (s *SettingService) GetSubRoutingRules() (string, error) {
|
||||
return s.getString("subRoutingRules")
|
||||
}
|
||||
|
||||
func (s *SettingService) GetSubListen() (string, error) {
|
||||
return s.getString("subListen")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -381,7 +381,9 @@
|
|||
"subAnnounce" = "إعلان"
|
||||
"subAnnounceDesc" = "نص الإعلان المعروض في عميل VPN"
|
||||
"subEnableRouting" = "تفعيل التوجيه"
|
||||
"subEnableRoutingDesc" = "إعداد عام لتمكين التوجيه (Routing) في عميل VPN."
|
||||
"subEnableRoutingDesc" = "إعداد عام لتمكين التوجيه (Routing) في عميل VPN. (فقط لـ Happ)"
|
||||
"subRoutingRules" = "قواعد التوجيه"
|
||||
"subRoutingRulesDesc" = "قواعد التوجيه العامة لعميل VPN. (فقط لـ Happ)"
|
||||
"subListen" = "IP الاستماع"
|
||||
"subListenDesc" = "عنوان IP لخدمة الاشتراك. (سيبه فاضي عشان يستمع على كل الـ IPs)"
|
||||
"subPort" = "بورت الاستماع"
|
||||
|
|
|
|||
|
|
@ -381,7 +381,9 @@
|
|||
"subAnnounce" = "Announce"
|
||||
"subAnnounceDesc" = "The text of the announce displayed in the VPN client"
|
||||
"subEnableRouting" = "Enable routing"
|
||||
"subEnableRoutingDesc" = "Global setting to enable routing in the VPN client."
|
||||
"subEnableRoutingDesc" = "Global setting to enable routing in the VPN client. (Only for Happ)"
|
||||
"subRoutingRules" = "Routing rules"
|
||||
"subRoutingRulesDesc" = "Global routing rules for the VPN client. (Only for Happ)"
|
||||
"subListen" = "Listen IP"
|
||||
"subListenDesc" = "The IP address for the subscription service. (leave blank to listen on all IPs)"
|
||||
"subPort" = "Listen Port"
|
||||
|
|
|
|||
|
|
@ -381,7 +381,9 @@
|
|||
"subAnnounce" = "Anuncio"
|
||||
"subAnnounceDesc" = "El texto del anuncio mostrado en el cliente VPN"
|
||||
"subEnableRouting" = "Habilitar enrutamiento"
|
||||
"subEnableRoutingDesc" = "Configuración global para habilitar el enrutamiento en el cliente VPN."
|
||||
"subEnableRoutingDesc" = "Configuración global para habilitar el enrutamiento en el cliente VPN. (Solo para Happ)"
|
||||
"subRoutingRules" = "Reglas de enrutamiento"
|
||||
"subRoutingRulesDesc" = "Reglas de enrutamiento globales para el cliente VPN. (Solo para Happ)"
|
||||
"subListen" = "Listening IP"
|
||||
"subListenDesc" = "Dejar en blanco por defecto para monitorear todas las IPs."
|
||||
"subPort" = "Puerto de Suscripción"
|
||||
|
|
|
|||
|
|
@ -381,7 +381,9 @@
|
|||
"subAnnounce" = "اعلان"
|
||||
"subAnnounceDesc" = "متن اعلانی که در کلاینت VPN نمایش داده میشود"
|
||||
"subEnableRouting" = "فعالسازی مسیریابی"
|
||||
"subEnableRoutingDesc" = "تنظیمات سراسری برای فعالسازی مسیریابی در کلاینت VPN."
|
||||
"subEnableRoutingDesc" = "تنظیمات سراسری برای فعالسازی مسیریابی در کلاینت VPN. (فقط برای Happ)"
|
||||
"subRoutingRules" = "قوانین مسیریابی"
|
||||
"subRoutingRulesDesc" = "قوانین مسیریابی سراسری برای کلاینت VPN. (فقط برای Happ)"
|
||||
"subListen" = "آدرس آیپی"
|
||||
"subListenDesc" = "آدرس آیپی برای سرویس سابسکریپشن. برای گوش دادن بهتمام آیپیها خالیبگذارید"
|
||||
"subPort" = "پورت"
|
||||
|
|
|
|||
|
|
@ -381,7 +381,9 @@
|
|||
"subAnnounce" = "Pengumuman"
|
||||
"subAnnounceDesc" = "Teks pengumuman yang ditampilkan di klien VPN"
|
||||
"subEnableRouting" = "Aktifkan perutean"
|
||||
"subEnableRoutingDesc" = "Pengaturan global untuk mengaktifkan perutean (routing) di klien VPN."
|
||||
"subEnableRoutingDesc" = "Pengaturan global untuk mengaktifkan perutean (routing) di klien VPN. (Hanya untuk Happ)"
|
||||
"subRoutingRules" = "Aturan routing"
|
||||
"subRoutingRulesDesc" = "Aturan routing global untuk klien VPN. (Hanya untuk Happ)"
|
||||
"subListen" = "IP Pendengar"
|
||||
"subListenDesc" = "Alamat IP untuk layanan langganan. (biarkan kosong untuk mendengarkan semua IP)"
|
||||
"subPort" = "Port Pendengar"
|
||||
|
|
|
|||
|
|
@ -381,7 +381,9 @@
|
|||
"subAnnounce" = "お知らせ"
|
||||
"subAnnounceDesc" = "VPNクライアントに表示されるお知らせのテキスト"
|
||||
"subEnableRouting" = "ルーティングを有効化"
|
||||
"subEnableRoutingDesc" = "VPNクライアントでルーティングを有効にするためのグローバル設定。"
|
||||
"subEnableRoutingDesc" = "VPNクライアントでルーティングを有効にするためのグローバル設定。(Happのみ)"
|
||||
"subRoutingRules" = "ルーティングルール"
|
||||
"subRoutingRulesDesc" = "VPNクライアントのグローバルルーティングルール。(Happのみ)"
|
||||
"subListen" = "監視IP"
|
||||
"subListenDesc" = "サブスクリプションサービスが監視するIPアドレス(空白にするとすべてのIPを監視)"
|
||||
"subPort" = "監視ポート"
|
||||
|
|
|
|||
|
|
@ -381,7 +381,9 @@
|
|||
"subAnnounce" = "Anúncio"
|
||||
"subAnnounceDesc" = "O texto do anúncio exibido no cliente VPN"
|
||||
"subEnableRouting" = "Ativar roteamento"
|
||||
"subEnableRoutingDesc" = "Configuração global para habilitar o roteamento no cliente VPN."
|
||||
"subEnableRoutingDesc" = "Configuração global para habilitar o roteamento no cliente VPN. (Apenas para Happ)"
|
||||
"subRoutingRules" = "Regras de roteamento"
|
||||
"subRoutingRulesDesc" = "Regras de roteamento globais para o cliente VPN. (Apenas para Happ)"
|
||||
"subListen" = "IP de Escuta"
|
||||
"subListenDesc" = "O endereço IP para o serviço de assinatura. (deixe em branco para escutar em todos os IPs)"
|
||||
"subPort" = "Porta de Escuta"
|
||||
|
|
|
|||
|
|
@ -381,7 +381,9 @@
|
|||
"subAnnounce" = "Объявление"
|
||||
"subAnnounceDesc" = "Текст объявления, отображаемый в VPN-клиенте"
|
||||
"subEnableRouting" = "Включить маршрутизацию"
|
||||
"subEnableRoutingDesc" = "Глобальная настройка для включения маршрутизации в VPN-клиенте."
|
||||
"subEnableRoutingDesc" = "Глобальная настройка для включения маршрутизации в VPN-клиенте. (Только для Happ)"
|
||||
"subRoutingRules" = "Правила маршрутизации"
|
||||
"subRoutingRulesDesc" = "Глобальные правила маршрутизации для VPN-клиента. (Только для Happ)"
|
||||
"subListen" = "Прослушивание IP"
|
||||
"subListenDesc" = "Оставьте пустым по умолчанию, чтобы отслеживать все IP-адреса"
|
||||
"subPort" = "Порт подписки"
|
||||
|
|
|
|||
|
|
@ -381,7 +381,9 @@
|
|||
"subAnnounce" = "Duyuru"
|
||||
"subAnnounceDesc" = "VPN istemcisinde görüntülenen duyuru metni"
|
||||
"subEnableRouting" = "Yönlendirmeyi etkinleştir"
|
||||
"subEnableRoutingDesc" = "VPN istemcisinde yönlendirmeyi etkinleştirmek için genel ayar."
|
||||
"subEnableRoutingDesc" = "VPN istemcisinde yönlendirmeyi etkinleştirmek için genel ayar. (Yalnızca Happ için)"
|
||||
"subRoutingRules" = "Yönlendirme kuralları"
|
||||
"subRoutingRulesDesc" = "VPN istemcisi için genel yönlendirme kuralları. (Yalnızca Happ için)"
|
||||
"subListen" = "Dinleme IP"
|
||||
"subListenDesc" = "Abonelik hizmeti için IP adresi. (tüm IP'leri dinlemek için boş bırakın)"
|
||||
"subPort" = "Dinleme Portu"
|
||||
|
|
|
|||
|
|
@ -381,7 +381,9 @@
|
|||
"subAnnounce" = "Оголошення"
|
||||
"subAnnounceDesc" = "Текст оголошення, що відображається у VPN-клієнті"
|
||||
"subEnableRouting" = "Увімкнути маршрутизацію"
|
||||
"subEnableRoutingDesc" = "Глобальне налаштування для увімкнення маршрутизації у VPN-клієнті."
|
||||
"subEnableRoutingDesc" = "Глобальне налаштування для увімкнення маршрутизації у VPN-клієнті. (Тільки для Happ)"
|
||||
"subRoutingRules" = "Правила маршрутизації"
|
||||
"subRoutingRulesDesc" = "Глобальні правила маршрутизації для VPN-клієнта. (Тільки для Happ)"
|
||||
"subListen" = "Слухати IP"
|
||||
"subListenDesc" = "IP-адреса для служби підписки. (залиште порожнім, щоб слухати всі IP-адреси)"
|
||||
"subPort" = "Слухати порт"
|
||||
|
|
|
|||
|
|
@ -381,7 +381,9 @@
|
|||
"subAnnounce" = "Thông báo"
|
||||
"subAnnounceDesc" = "Văn bản thông báo hiển thị trong ứng dụng VPN"
|
||||
"subEnableRouting" = "Bật định tuyến"
|
||||
"subEnableRoutingDesc" = "Cài đặt toàn cục để bật định tuyến trong ứng dụng khách VPN."
|
||||
"subEnableRoutingDesc" = "Cài đặt toàn cục để bật định tuyến trong ứng dụng khách VPN. (Chỉ dành cho Happ)"
|
||||
"subRoutingRules" = "Quy tắc định tuyến"
|
||||
"subRoutingRulesDesc" = "Quy tắc định tuyến toàn cầu cho client VPN. (Chỉ dành cho Happ)"
|
||||
"subListen" = "Listening IP"
|
||||
"subListenDesc" = "Mặc định để trống để nghe tất cả các IP"
|
||||
"subPort" = "Cổng gói đăng ký"
|
||||
|
|
|
|||
|
|
@ -381,7 +381,9 @@
|
|||
"subAnnounce" = "公告"
|
||||
"subAnnounceDesc" = "VPN 客户端中显示的公告文本"
|
||||
"subEnableRouting" = "启用路由"
|
||||
"subEnableRoutingDesc" = "在 VPN 客户端中启用路由的全局设置。"
|
||||
"subEnableRoutingDesc" = "在 VPN 客户端中启用路由的全局设置。(僅限 Happ)"
|
||||
"subRoutingRules" = "路由規則"
|
||||
"subRoutingRulesDesc" = "VPN 用戶端的全域路由規則。(僅限 Happ)"
|
||||
"subListen" = "监听 IP"
|
||||
"subListenDesc" = "订阅服务监听的 IP 地址(留空表示监听所有 IP)"
|
||||
"subPort" = "监听端口"
|
||||
|
|
|
|||
|
|
@ -381,7 +381,9 @@
|
|||
"subAnnounce" = "公告"
|
||||
"subAnnounceDesc" = "VPN 用戶端中顯示的公告文字"
|
||||
"subEnableRouting" = "啟用路由"
|
||||
"subEnableRoutingDesc" = "在 VPN 用戶端中啟用路由的全域設定。"
|
||||
"subEnableRoutingDesc" = "在 VPN 用戶端中啟用路由的全域設定。(僅限 Happ)"
|
||||
"subRoutingRules" = "路由規則"
|
||||
"subRoutingRulesDesc" = "VPN 用戶端的全域路由規則。(僅限 Happ)"
|
||||
"subListen" = "監聽 IP"
|
||||
"subListenDesc" = "訂閱服務監聽的 IP 地址(留空表示監聽所有 IP)"
|
||||
"subPort" = "監聽埠"
|
||||
|
|
|
|||
Loading…
Reference in a new issue