mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-06-05 20:54:14 +00:00
Fix Telegram bot client lookup without traffic rows
This commit is contained in:
parent
c64cdbb0ed
commit
11bd082d8f
2 changed files with 66 additions and 8 deletions
|
|
@ -2301,6 +2301,48 @@ func (s *InboundService) GetClientInboundByEmail(email string) (traffic *xray.Cl
|
||||||
inbound, err = s.GetInbound(traffics[0].InboundId)
|
inbound, err = s.GetInbound(traffics[0].InboundId)
|
||||||
return traffics[0], inbound, err
|
return traffics[0], inbound, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type linkedClient struct {
|
||||||
|
InboundId int
|
||||||
|
Email string
|
||||||
|
Enable bool
|
||||||
|
TotalGB int64
|
||||||
|
ExpiryTime int64
|
||||||
|
Reset int
|
||||||
|
}
|
||||||
|
var linked linkedClient
|
||||||
|
err = db.Table("clients").
|
||||||
|
Select(`client_inbounds.inbound_id,
|
||||||
|
clients.email,
|
||||||
|
clients.enable,
|
||||||
|
clients.total_gb,
|
||||||
|
clients.expiry_time,
|
||||||
|
clients.reset`).
|
||||||
|
Joins("JOIN client_inbounds ON client_inbounds.client_id = clients.id").
|
||||||
|
Joins("JOIN inbounds ON inbounds.id = client_inbounds.inbound_id").
|
||||||
|
Where("clients.email = ?", email).
|
||||||
|
Order("client_inbounds.inbound_id ASC").
|
||||||
|
Limit(1).
|
||||||
|
Scan(&linked).Error
|
||||||
|
if err != nil {
|
||||||
|
logger.Warningf("Error retrieving linked client with email %s: %v", email, err)
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
if linked.Email != "" {
|
||||||
|
inbound, err = s.GetInbound(linked.InboundId)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
return &xray.ClientTraffic{
|
||||||
|
InboundId: linked.InboundId,
|
||||||
|
Email: linked.Email,
|
||||||
|
Enable: linked.Enable,
|
||||||
|
Total: linked.TotalGB,
|
||||||
|
ExpiryTime: linked.ExpiryTime,
|
||||||
|
Reset: linked.Reset,
|
||||||
|
}, inbound, nil
|
||||||
|
}
|
||||||
|
|
||||||
return nil, nil, nil
|
return nil, nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -2313,6 +2355,19 @@ func (s *InboundService) GetClientByEmail(clientEmail string) (*xray.ClientTraff
|
||||||
return nil, nil, common.NewError("Inbound Not Found For Email:", clientEmail)
|
return nil, nil, common.NewError("Inbound Not Found For Email:", clientEmail)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
linkedClients, err := s.clientService.ListForInbound(nil, inbound.Id)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
for _, client := range linkedClients {
|
||||||
|
if client.Email == clientEmail {
|
||||||
|
traffic.Enable = client.Enable
|
||||||
|
traffic.UUID = client.ID
|
||||||
|
traffic.SubId = client.SubID
|
||||||
|
return traffic, &client, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
clients, err := s.GetClients(inbound)
|
clients, err := s.GetClients(inbound)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
|
|
|
||||||
|
|
@ -53,14 +53,6 @@ func TestGetClientTrafficTgBotUsesNormalizedRemoteNodeClients(t *testing.T) {
|
||||||
}}); err != nil {
|
}}); err != nil {
|
||||||
t.Fatalf("SyncInbound: %v", err)
|
t.Fatalf("SyncInbound: %v", err)
|
||||||
}
|
}
|
||||||
if err := db.Create(&xray.ClientTraffic{
|
|
||||||
InboundId: inbound.Id,
|
|
||||||
Email: email,
|
|
||||||
Enable: true,
|
|
||||||
Total: 1024,
|
|
||||||
}).Error; err != nil {
|
|
||||||
t.Fatalf("create traffic: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
traffics, err := (&InboundService{}).GetClientTrafficTgBot(tgID)
|
traffics, err := (&InboundService{}).GetClientTrafficTgBot(tgID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
@ -72,6 +64,17 @@ func TestGetClientTrafficTgBotUsesNormalizedRemoteNodeClients(t *testing.T) {
|
||||||
if traffics[0].Email != email || traffics[0].UUID != uuid || traffics[0].SubId != subID {
|
if traffics[0].Email != email || traffics[0].UUID != uuid || traffics[0].SubId != subID {
|
||||||
t.Fatalf("unexpected traffic: %#v", traffics[0])
|
t.Fatalf("unexpected traffic: %#v", traffics[0])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
traffic, client, err := (&InboundService{}).GetClientByEmail(email)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("GetClientByEmail: %v", err)
|
||||||
|
}
|
||||||
|
if traffic == nil || client == nil {
|
||||||
|
t.Fatalf("expected linked client without traffic row, got traffic=%#v client=%#v", traffic, client)
|
||||||
|
}
|
||||||
|
if client.Email != email || client.ID != uuid || client.SubID != subID {
|
||||||
|
t.Fatalf("unexpected linked client: %#v", client)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGetClientTrafficTgBotFallsBackToCompactSettingsJSON(t *testing.T) {
|
func TestGetClientTrafficTgBotFallsBackToCompactSettingsJSON(t *testing.T) {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue