links.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package sub
  2. import (
  3. "strings"
  4. "github.com/mhsanaei/3x-ui/v3/database/model"
  5. "github.com/mhsanaei/3x-ui/v3/web/service"
  6. )
  7. type LinkProvider struct {
  8. settingService service.SettingService
  9. }
  10. func NewLinkProvider() *LinkProvider {
  11. return &LinkProvider{}
  12. }
  13. func (p *LinkProvider) build(host string) *SubService {
  14. showInfo, _ := p.settingService.GetSubShowInfo()
  15. rModel, err := p.settingService.GetRemarkModel()
  16. if err != nil {
  17. rModel = "-ieo"
  18. }
  19. svc := NewSubService(showInfo, rModel)
  20. svc.PrepareForRequest(host)
  21. return svc
  22. }
  23. func (p *LinkProvider) SubLinksForSubId(host, subId string) ([]string, error) {
  24. svc := p.build(host)
  25. links, _, _, err := svc.GetSubs(subId, host)
  26. if err != nil {
  27. return nil, err
  28. }
  29. out := make([]string, 0, len(links))
  30. for _, l := range links {
  31. out = append(out, splitLinkLines(l)...)
  32. }
  33. return out, nil
  34. }
  35. func (p *LinkProvider) LinksForClient(host string, inbound *model.Inbound, email string) []string {
  36. svc := p.build(host)
  37. return splitLinkLines(svc.GetLink(inbound, email))
  38. }
  39. func splitLinkLines(raw string) []string {
  40. if raw == "" {
  41. return nil
  42. }
  43. parts := strings.Split(raw, "\n")
  44. out := make([]string, 0, len(parts))
  45. for _, p := range parts {
  46. if p = strings.TrimSpace(p); p != "" {
  47. out = append(out, p)
  48. }
  49. }
  50. return out
  51. }