mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-11-13 00:25:04 +03:00
fix(clients): re-enable only quota-disabled clients on a traffic reset
Every traffic reset re-enabled its clients unconditionally, in the client record and in the traffic row a master treats as the client's state. A master forwards an inbound's scheduled reset and "reset all" to its nodes through the per-client reset calls, so a client disabled by hand on a node inbound came back on at the next scheduled reset. Each reset now decides, before it zeroes the counters, which of its clients the quota switched off, counting cross-panel usage, and re-enables only those; a client disabled below its quota keeps its record and traffic row off. The reset API docs say so.
This commit is contained in:
@@ -160,6 +160,15 @@ func quotaDisabledEmails(tx *gorm.DB, within []string) ([]string, error) {
|
||||
if err := clientResetCycles(tx).Where("c.enable = ?", false).Scan(&cycles).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
// Cross-panel usage depletes too: a client cut off on pushed usage was the quota's doing.
|
||||
rows := make([]xray.ClientTraffic, len(cycles))
|
||||
for i, c := range cycles {
|
||||
rows[i] = xray.ClientTraffic{Email: c.Email, Up: c.Up, Down: c.Down, Total: c.Total}
|
||||
}
|
||||
overlayGlobalTrafficValues(tx, rows)
|
||||
for i := range cycles {
|
||||
cycles[i].Up, cycles[i].Down = rows[i].Up, rows[i].Down
|
||||
}
|
||||
var in map[string]bool
|
||||
if within != nil {
|
||||
in = make(map[string]bool, len(within))
|
||||
|
||||
Reference in New Issue
Block a user