inbound_sublink.go 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  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. LinksForInbounds(host string, inbounds []*model.Inbound) []string
  10. }
  11. var registeredSubLinkProvider SubLinkProvider
  12. func RegisterSubLinkProvider(p SubLinkProvider) {
  13. registeredSubLinkProvider = p
  14. }
  15. func (s *InboundService) GetSubLinks(host, subId string) ([]string, error) {
  16. if registeredSubLinkProvider == nil {
  17. return nil, common.NewError("sub link provider not registered")
  18. }
  19. return registeredSubLinkProvider.SubLinksForSubId(host, subId)
  20. }
  21. func (s *InboundService) GetAllInboundLinks(host string, userId int) ([]string, error) {
  22. if registeredSubLinkProvider == nil {
  23. return nil, common.NewError("sub link provider not registered")
  24. }
  25. inbounds, err := s.GetInbounds(userId)
  26. if err != nil {
  27. return nil, err
  28. }
  29. return registeredSubLinkProvider.LinksForInbounds(host, inbounds), nil
  30. }
  31. func (s *InboundService) GetAllClientLinks(host string, email string) ([]string, error) {
  32. if email == "" {
  33. return nil, common.NewError("client email is required")
  34. }
  35. if registeredSubLinkProvider == nil {
  36. return nil, common.NewError("sub link provider not registered")
  37. }
  38. rec, err := s.clientService.GetRecordByEmail(nil, email)
  39. if err != nil {
  40. return nil, err
  41. }
  42. inboundIds, err := s.clientService.GetInboundIdsForRecord(rec.Id)
  43. if err != nil {
  44. return nil, err
  45. }
  46. var links []string
  47. for _, ibId := range inboundIds {
  48. inbound, getErr := s.GetInbound(ibId)
  49. if getErr != nil {
  50. return nil, getErr
  51. }
  52. links = append(links, registeredSubLinkProvider.LinksForClient(host, inbound, email)...)
  53. }
  54. return links, nil
  55. }