Add possibility to remove client email from sub (#4297)

This commit is contained in:
Vladislav Kasperov
2026-05-13 20:04:17 +03:00
committed by GitHub
parent 5543466fcc
commit 67b098dfd3
18 changed files with 49 additions and 1 deletions
+1
View File
@@ -57,6 +57,7 @@ export class AllSetting {
this.subUpdates = 12; this.subUpdates = 12;
this.subEncrypt = true; this.subEncrypt = true;
this.subShowInfo = true; this.subShowInfo = true;
this.subEmailInRemark = true;
this.subURI = ""; this.subURI = "";
this.subJsonURI = ""; this.subJsonURI = "";
this.subClashURI = ""; this.subClashURI = "";
@@ -112,6 +112,14 @@ function normalizeSubPath() {
</template> </template>
</SettingListItem> </SettingListItem>
<SettingListItem paddings="small">
<template #title>{{ t('pages.settings.subEmailInRemark') }}</template>
<template #description>{{ t('pages.settings.subEmailInRemarkDesc') }}</template>
<template #control>
<a-switch v-model:checked="allSetting.subEmailInRemark" />
</template>
</SettingListItem>
<a-divider>{{ t('pages.settings.subTitle') }}</a-divider> <a-divider>{{ t('pages.settings.subTitle') }}</a-divider>
<SettingListItem paddings="small"> <SettingListItem paddings="small">
+8 -1
View File
@@ -28,6 +28,7 @@ type SubService struct {
showInfo bool showInfo bool
remarkModel string remarkModel string
datepicker string datepicker string
emailInRemark bool
inboundService service.InboundService inboundService service.InboundService
settingService service.SettingService settingService service.SettingService
// nodesByID is populated per request from the Node table so // nodesByID is populated per request from the Node table so
@@ -76,6 +77,12 @@ func (s *SubService) GetSubs(subId string, host string) ([]string, int64, xray.C
if err != nil { if err != nil {
s.datepicker = "gregorian" s.datepicker = "gregorian"
} }
s.emailInRemark, err = s.settingService.GetSubEmailInRemark()
if err != nil {
s.emailInRemark = true
}
seenEmails := make(map[string]struct{}) seenEmails := make(map[string]struct{})
for _, inbound := range inbounds { for _, inbound := range inbounds {
clients, err := s.inboundService.GetClients(inbound) clients, err := s.inboundService.GetClients(inbound)
@@ -886,7 +893,7 @@ func (s *SubService) genRemark(inbound *model.Inbound, email string, extra strin
'e': "", 'e': "",
'o': "", 'o': "",
} }
if len(email) > 0 { if len(email) > 0 && s.emailInRemark {
orders['e'] = email orders['e'] = email
} }
if len(inbound.Remark) > 0 { if len(inbound.Remark) > 0 {
+1
View File
@@ -75,6 +75,7 @@ type AllSetting struct {
RestartXrayOnClientDisable bool `json:"restartXrayOnClientDisable" form:"restartXrayOnClientDisable"` // Restart Xray when clients are auto-disabled by expiry/traffic limit RestartXrayOnClientDisable bool `json:"restartXrayOnClientDisable" form:"restartXrayOnClientDisable"` // Restart Xray when clients are auto-disabled by expiry/traffic limit
SubEncrypt bool `json:"subEncrypt" form:"subEncrypt"` // Encrypt subscription responses SubEncrypt bool `json:"subEncrypt" form:"subEncrypt"` // Encrypt subscription responses
SubShowInfo bool `json:"subShowInfo" form:"subShowInfo"` // Show client information in subscriptions SubShowInfo bool `json:"subShowInfo" form:"subShowInfo"` // Show client information in subscriptions
SubEmailInRemark bool `json:"subEmailInRemark" form:"subEmailInRemark"` // Include email in subscription remark/name
SubURI string `json:"subURI" form:"subURI"` // Subscription server URI SubURI string `json:"subURI" form:"subURI"` // Subscription server URI
SubJsonPath string `json:"subJsonPath" form:"subJsonPath"` // Path for JSON subscription endpoint SubJsonPath string `json:"subJsonPath" form:"subJsonPath"` // Path for JSON subscription endpoint
SubJsonURI string `json:"subJsonURI" form:"subJsonURI"` // JSON subscription server URI SubJsonURI string `json:"subJsonURI" form:"subJsonURI"` // JSON subscription server URI
+5
View File
@@ -70,6 +70,7 @@ var defaultValueMap = map[string]string{
"subUpdates": "12", "subUpdates": "12",
"subEncrypt": "true", "subEncrypt": "true",
"subShowInfo": "true", "subShowInfo": "true",
"subEmailInRemark": "true",
"subURI": "", "subURI": "",
"subJsonPath": "/json/", "subJsonPath": "/json/",
"subJsonURI": "", "subJsonURI": "",
@@ -592,6 +593,10 @@ func (s *SettingService) GetSubShowInfo() (bool, error) {
return s.getBool("subShowInfo") return s.getBool("subShowInfo")
} }
func (s *SettingService) GetSubEmailInRemark() (bool, error) {
return s.getBool("subEmailInRemark")
}
func (s *SettingService) GetPageSize() (int, error) { func (s *SettingService) GetPageSize() (int, error) {
return s.getInt("pageSize") return s.getInt("pageSize")
} }
+2
View File
@@ -547,6 +547,8 @@
"subEncryptDesc": "المحتوى اللي هيترجع من خدمة الاشتراك هيكون مشفر بـ Base64.", "subEncryptDesc": "المحتوى اللي هيترجع من خدمة الاشتراك هيكون مشفر بـ Base64.",
"subShowInfo": "اظهر معلومات الاستخدام", "subShowInfo": "اظهر معلومات الاستخدام",
"subShowInfoDesc": "هيظهر الترافيك المتبقي والتاريخ في تطبيقات العملاء.", "subShowInfoDesc": "هيظهر الترافيك المتبقي والتاريخ في تطبيقات العملاء.",
"subEmailInRemark": "تضمين البريد الإلكتروني في الاسم",
"subEmailInRemarkDesc": "تضمين بريد العميل الإلكتروني في اسم ملف تعريف الاشتراك.",
"subURI": "مسار البروكسي العكسي", "subURI": "مسار البروكسي العكسي",
"subURIDesc": "مسار URI لرابط الاشتراك عشان تستخدمه ورا البروكسي.", "subURIDesc": "مسار URI لرابط الاشتراك عشان تستخدمه ورا البروكسي.",
"externalTrafficInformEnable": "تنبيه الترافيك الخارجي", "externalTrafficInformEnable": "تنبيه الترافيك الخارجي",
+2
View File
@@ -547,6 +547,8 @@
"subEncryptDesc": "The returned content of subscription service will be Base64 encoded.", "subEncryptDesc": "The returned content of subscription service will be Base64 encoded.",
"subShowInfo": "Show Usage Info", "subShowInfo": "Show Usage Info",
"subShowInfoDesc": "The remaining traffic and date will be displayed in the client apps.", "subShowInfoDesc": "The remaining traffic and date will be displayed in the client apps.",
"subEmailInRemark": "Include Email in Name",
"subEmailInRemarkDesc": "Include the client email in the subscription profile name.",
"subURI": "Reverse Proxy URI", "subURI": "Reverse Proxy URI",
"subURIDesc": "The URI path of the subscription URL for use behind proxies.", "subURIDesc": "The URI path of the subscription URL for use behind proxies.",
"externalTrafficInformEnable": "External Traffic Inform", "externalTrafficInformEnable": "External Traffic Inform",
+2
View File
@@ -547,6 +547,8 @@
"subEncryptDesc": "Encriptar las configuraciones devueltas en la suscripción.", "subEncryptDesc": "Encriptar las configuraciones devueltas en la suscripción.",
"subShowInfo": "Mostrar información de uso", "subShowInfo": "Mostrar información de uso",
"subShowInfoDesc": "Mostrar tráfico restante y fecha después del nombre de configuración.", "subShowInfoDesc": "Mostrar tráfico restante y fecha después del nombre de configuración.",
"subEmailInRemark": "Incluir Email en el nombre",
"subEmailInRemarkDesc": "Incluir el correo del cliente en el nombre del perfil de suscripción.",
"subURI": "URI de proxy inverso", "subURI": "URI de proxy inverso",
"externalTrafficInformEnable": "Informe de tráfico externo", "externalTrafficInformEnable": "Informe de tráfico externo",
"externalTrafficInformEnableDesc": "Informar a la API externa sobre cada actualización de tráfico.", "externalTrafficInformEnableDesc": "Informar a la API externa sobre cada actualización de tráfico.",
+2
View File
@@ -547,6 +547,8 @@
"subEncryptDesc": "کدگذاری خواهدشد Base64 محتوای برگشتی سرویس سابسکریپشن برپایه", "subEncryptDesc": "کدگذاری خواهدشد Base64 محتوای برگشتی سرویس سابسکریپشن برپایه",
"subShowInfo": "نمایش اطلاعات مصرف", "subShowInfo": "نمایش اطلاعات مصرف",
"subShowInfoDesc": "ترافیک و زمان باقی‌مانده را در برنامه‌های کاربری نمایش می‌دهد", "subShowInfoDesc": "ترافیک و زمان باقی‌مانده را در برنامه‌های کاربری نمایش می‌دهد",
"subEmailInRemark": "گنجاندن ایمیل در نام",
"subEmailInRemarkDesc": "ایمیل کاربر در نام پروفایل اشتراک گنجانده می‌شود.",
"subURI": "پروکسی معکوس URI مسیر", "subURI": "پروکسی معکوس URI مسیر",
"subURIDesc": "سابسکریپشن را برای استفاده در پشت پراکسی‌ها تغییر می‌دهد URI مسیر", "subURIDesc": "سابسکریپشن را برای استفاده در پشت پراکسی‌ها تغییر می‌دهد URI مسیر",
"externalTrafficInformEnable": "اطلاع رسانی خارجی مصرف ترافیک", "externalTrafficInformEnable": "اطلاع رسانی خارجی مصرف ترافیک",
+2
View File
@@ -547,6 +547,8 @@
"subEncryptDesc": "Konten yang dikembalikan dari layanan langganan akan dienkripsi Base64.", "subEncryptDesc": "Konten yang dikembalikan dari layanan langganan akan dienkripsi Base64.",
"subShowInfo": "Tampilkan Info Penggunaan", "subShowInfo": "Tampilkan Info Penggunaan",
"subShowInfoDesc": "Sisa traffic dan tanggal akan ditampilkan di aplikasi klien.", "subShowInfoDesc": "Sisa traffic dan tanggal akan ditampilkan di aplikasi klien.",
"subEmailInRemark": "Sertakan Email dalam Nama",
"subEmailInRemarkDesc": "Sertakan email klien dalam nama profil langganan.",
"subURI": "URI Proxy Terbalik", "subURI": "URI Proxy Terbalik",
"subURIDesc": "Path URI dari URL langganan untuk digunakan di belakang proxy.", "subURIDesc": "Path URI dari URL langganan untuk digunakan di belakang proxy.",
"externalTrafficInformEnable": "Informasikan API eksternal pada setiap pembaruan lalu lintas.", "externalTrafficInformEnable": "Informasikan API eksternal pada setiap pembaruan lalu lintas.",
+2
View File
@@ -547,6 +547,8 @@
"subEncryptDesc": "サブスクリプションサービスが返す内容をBase64エンコードする", "subEncryptDesc": "サブスクリプションサービスが返す内容をBase64エンコードする",
"subShowInfo": "利用情報を表示", "subShowInfo": "利用情報を表示",
"subShowInfoDesc": "クライアントアプリで残りのトラフィックと日付情報を表示する", "subShowInfoDesc": "クライアントアプリで残りのトラフィックと日付情報を表示する",
"subEmailInRemark": "名前にメールを含める",
"subEmailInRemarkDesc": "サブスクリプションプロファイル名にクライアントのメールアドレスを含めます。",
"subURI": "リバースプロキシURI", "subURI": "リバースプロキシURI",
"subURIDesc": "プロキシ後ろのサブスクリプションURLのURIパスに使用する", "subURIDesc": "プロキシ後ろのサブスクリプションURLのURIパスに使用する",
"externalTrafficInformEnable": "外部トラフィック情報", "externalTrafficInformEnable": "外部トラフィック情報",
+2
View File
@@ -547,6 +547,8 @@
"subEncryptDesc": "O conteúdo retornado pelo serviço de assinatura será codificado em Base64.", "subEncryptDesc": "O conteúdo retornado pelo serviço de assinatura será codificado em Base64.",
"subShowInfo": "Mostrar Informações de Uso", "subShowInfo": "Mostrar Informações de Uso",
"subShowInfoDesc": "O tráfego restante e a data serão exibidos nos aplicativos de cliente.", "subShowInfoDesc": "O tráfego restante e a data serão exibidos nos aplicativos de cliente.",
"subEmailInRemark": "Incluir Email no nome",
"subEmailInRemarkDesc": "Incluir o email do cliente no nome do perfil de assinatura.",
"subURI": "URI de Proxy Reverso", "subURI": "URI de Proxy Reverso",
"subURIDesc": "O caminho URI da URL de assinatura para uso por trás de proxies.", "subURIDesc": "O caminho URI da URL de assinatura para uso por trás de proxies.",
"externalTrafficInformEnable": "Informações de tráfego externo", "externalTrafficInformEnable": "Informações de tráfego externo",
+2
View File
@@ -547,6 +547,8 @@
"subEncryptDesc": "Шифровать возвращенные конфиги в подписке", "subEncryptDesc": "Шифровать возвращенные конфиги в подписке",
"subShowInfo": "Показать информацию об использовании", "subShowInfo": "Показать информацию об использовании",
"subShowInfoDesc": "Отображать остаток трафика и дату окончания после имени конфигурации", "subShowInfoDesc": "Отображать остаток трафика и дату окончания после имени конфигурации",
"subEmailInRemark": "Включать Email в название",
"subEmailInRemarkDesc": "Включать email клиента в название профиля подписки.",
"subURI": "URI обратного прокси", "subURI": "URI обратного прокси",
"subURIDesc": "Изменить базовый URI URL-адреса подписки для использования за прокси-серверами", "subURIDesc": "Изменить базовый URI URL-адреса подписки для использования за прокси-серверами",
"externalTrafficInformEnable": "Информация о внешнем трафике", "externalTrafficInformEnable": "Информация о внешнем трафике",
+2
View File
@@ -547,6 +547,8 @@
"subEncryptDesc": "Abonelik hizmetinin döndürülen içeriği Base64 ile şifrelenir.", "subEncryptDesc": "Abonelik hizmetinin döndürülen içeriği Base64 ile şifrelenir.",
"subShowInfo": "Kullanım Bilgisini Göster", "subShowInfo": "Kullanım Bilgisini Göster",
"subShowInfoDesc": "Kalan trafik ve tarih müşteri uygulamalarında görüntülenir.", "subShowInfoDesc": "Kalan trafik ve tarih müşteri uygulamalarında görüntülenir.",
"subEmailInRemark": "Ada Email Ekle",
"subEmailInRemarkDesc": "Abonelik profil adına istemcinin e-postasını dahil edin.",
"subURI": "Ters Proxy URI", "subURI": "Ters Proxy URI",
"subURIDesc": "Proxy arkasında kullanılacak abonelik URL'sinin URI yolu.", "subURIDesc": "Proxy arkasında kullanılacak abonelik URL'sinin URI yolu.",
"externalTrafficInformEnable": "Harici Trafik Bilgisi", "externalTrafficInformEnable": "Harici Trafik Bilgisi",
+2
View File
@@ -547,6 +547,8 @@
"subEncryptDesc": "Повернений вміст послуги підписки матиме кодування Base64.", "subEncryptDesc": "Повернений вміст послуги підписки матиме кодування Base64.",
"subShowInfo": "Показати інформацію про використання", "subShowInfo": "Показати інформацію про використання",
"subShowInfoDesc": "Залишок трафіку та дата відображатимуться в клієнтських програмах.", "subShowInfoDesc": "Залишок трафіку та дата відображатимуться в клієнтських програмах.",
"subEmailInRemark": "Включати Email до назви",
"subEmailInRemarkDesc": "Включати email клієнта до назви профілю підписки.",
"subURI": "URI зворотного проксі", "subURI": "URI зворотного проксі",
"subURIDesc": "URI до URL-адреси підписки для використання за проксі.", "subURIDesc": "URI до URL-адреси підписки для використання за проксі.",
"externalTrafficInformEnable": "Інформація про зовнішній трафік", "externalTrafficInformEnable": "Інформація про зовнішній трафік",
+2
View File
@@ -547,6 +547,8 @@
"subEncryptDesc": "Mã hóa các cấu hình được trả về trong gói đăng ký", "subEncryptDesc": "Mã hóa các cấu hình được trả về trong gói đăng ký",
"subShowInfo": "Hiển thị thông tin sử dụng", "subShowInfo": "Hiển thị thông tin sử dụng",
"subShowInfoDesc": "Hiển thị lưu lượng truy cập còn lại và ngày sau tên cấu hình", "subShowInfoDesc": "Hiển thị lưu lượng truy cập còn lại và ngày sau tên cấu hình",
"subEmailInRemark": "Thêm Email vào tên",
"subEmailInRemarkDesc": "Thêm email của client vào tên hồ sơ đăng ký.",
"subURI": "URI proxy trung gian", "subURI": "URI proxy trung gian",
"subURIDesc": "Thay đổi URI cơ sở của URL gói đăng ký để sử dụng cho proxy trung gian", "subURIDesc": "Thay đổi URI cơ sở của URL gói đăng ký để sử dụng cho proxy trung gian",
"externalTrafficInformEnable": "Thông báo giao thông bên ngoài", "externalTrafficInformEnable": "Thông báo giao thông bên ngoài",
+2
View File
@@ -547,6 +547,8 @@
"subEncryptDesc": "订阅服务返回的内容将采用 Base64 编码", "subEncryptDesc": "订阅服务返回的内容将采用 Base64 编码",
"subShowInfo": "显示使用信息", "subShowInfo": "显示使用信息",
"subShowInfoDesc": "客户端应用中将显示剩余流量和日期信息", "subShowInfoDesc": "客户端应用中将显示剩余流量和日期信息",
"subEmailInRemark": "在名称中包含邮箱",
"subEmailInRemarkDesc": "在订阅配置名称中包含客户端邮箱。",
"subURI": "反向代理 URI", "subURI": "反向代理 URI",
"subURIDesc": "用于代理后面的订阅 URL 的 URI 路径", "subURIDesc": "用于代理后面的订阅 URL 的 URI 路径",
"externalTrafficInformEnable": "外部交通通知", "externalTrafficInformEnable": "外部交通通知",
+2
View File
@@ -547,6 +547,8 @@
"subEncryptDesc": "訂閱服務返回的內容將採用 Base64 編碼", "subEncryptDesc": "訂閱服務返回的內容將採用 Base64 編碼",
"subShowInfo": "顯示使用資訊", "subShowInfo": "顯示使用資訊",
"subShowInfoDesc": "客戶端應用中將顯示剩餘流量和日期資訊", "subShowInfoDesc": "客戶端應用中將顯示剩餘流量和日期資訊",
"subEmailInRemark": "在名稱中包含郵箱",
"subEmailInRemarkDesc": "在訂閱配置名稱中包含客戶端郵箱。",
"subURI": "反向代理 URI", "subURI": "反向代理 URI",
"subURIDesc": "用於代理後面的訂閱 URL 的 URI 路徑", "subURIDesc": "用於代理後面的訂閱 URL 的 URI 路徑",
"externalTrafficInformEnable": "外部交通通知", "externalTrafficInformEnable": "外部交通通知",