feat(inbounds): apply remark template to Export all inbound links

Export-all now renders links through the subscription engine via a new GET /panel/api/inbounds/allLinks endpoint, so the configured remark template (name-only display part) is applied per client -- matching the client info/QR pages. Previously it generated links client-side with a hardcoded inbound-email remark.

Host-aware: managed Host endpoints win over the plain link, so HOST and per-host variants render; duplicate client JSON entries are deduped by email and the list is scoped to the logged-in user.
This commit is contained in:
MHSanaei
2026-06-27 11:22:45 +02:00
parent 535b89a352
commit 439245d42b
8 changed files with 158 additions and 15 deletions
+12
View File
@@ -8,6 +8,7 @@ import (
type SubLinkProvider interface {
SubLinksForSubId(host, subId string) ([]string, error)
LinksForClient(host string, inbound *model.Inbound, email string) []string
LinksForInbounds(host string, inbounds []*model.Inbound) []string
}
var registeredSubLinkProvider SubLinkProvider
@@ -23,6 +24,17 @@ func (s *InboundService) GetSubLinks(host, subId string) ([]string, error) {
return registeredSubLinkProvider.SubLinksForSubId(host, subId)
}
func (s *InboundService) GetAllInboundLinks(host string, userId int) ([]string, error) {
if registeredSubLinkProvider == nil {
return nil, common.NewError("sub link provider not registered")
}
inbounds, err := s.GetInbounds(userId)
if err != nil {
return nil, err
}
return registeredSubLinkProvider.LinksForInbounds(host, inbounds), nil
}
func (s *InboundService) GetAllClientLinks(host string, email string) ([]string, error) {
if email == "" {
return nil, common.NewError("client email is required")