inbound_sublink.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. package service
  2. import (
  3. "github.com/mhsanaei/3x-ui/v3/internal/database/model"
  4. "github.com/mhsanaei/3x-ui/v3/internal/util/common"
  5. )
  6. type SubLinkProvider interface {
  7. SubLinksForSubId(host, subId string) ([]string, error)
  8. LinksForClient(host string, inbound *model.Inbound, email string) []string
  9. }
  10. var registeredSubLinkProvider SubLinkProvider
  11. func RegisterSubLinkProvider(p SubLinkProvider) {
  12. registeredSubLinkProvider = p
  13. }
  14. func (s *InboundService) GetSubLinks(host, subId string) ([]string, error) {
  15. if registeredSubLinkProvider == nil {
  16. return nil, common.NewError("sub link provider not registered")
  17. }
  18. return registeredSubLinkProvider.SubLinksForSubId(host, subId)
  19. }
  20. func (s *InboundService) GetAllClientLinks(host string, email string) ([]string, error) {
  21. if email == "" {
  22. return nil, common.NewError("client email is required")
  23. }
  24. if registeredSubLinkProvider == nil {
  25. return nil, common.NewError("sub link provider not registered")
  26. }
  27. rec, err := s.clientService.GetRecordByEmail(nil, email)
  28. if err != nil {
  29. return nil, err
  30. }
  31. inboundIds, err := s.clientService.GetInboundIdsForRecord(rec.Id)
  32. if err != nil {
  33. return nil, err
  34. }
  35. var links []string
  36. for _, ibId := range inboundIds {
  37. inbound, getErr := s.GetInbound(ibId)
  38. if getErr != nil {
  39. return nil, getErr
  40. }
  41. links = append(links, registeredSubLinkProvider.LinksForClient(host, inbound, email)...)
  42. }
  43. return links, nil
  44. }