mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-08-25 04:17:15 +00:00
feat(wireguard): make client allowedIPs editable with validation
The WireGuard peer address was allocated server-side and shown read-only in the client editor, so changing it required hand-editing the inbound's raw settings JSON (#5715). The backend add/update paths already honored a submitted allowedIPs; only the form withheld it. Make the field editable (comma-separated, empty still auto-assigns) and validate submissions server-side: entries must parse as an IP or CIDR, bare addresses normalize to single-host prefixes, and an address already used by another peer on the inbound is rejected. Closes #5715
This commit is contained in:
@@ -528,6 +528,26 @@ func (s *ClientService) UpdateInboundClient(inboundSvc *InboundService, data *mo
|
||||
}
|
||||
if len(clients[0].AllowedIPs) == 0 {
|
||||
clients[0].AllowedIPs = old.AllowedIPs
|
||||
} else {
|
||||
normalized, nErr := normalizeWireguardAllowedIPs(clients[0].AllowedIPs)
|
||||
if nErr != nil {
|
||||
return false, nErr
|
||||
}
|
||||
if len(normalized) == 0 {
|
||||
clients[0].AllowedIPs = old.AllowedIPs
|
||||
} else {
|
||||
peers := make([]string, 0, len(oldClients))
|
||||
for i := range oldClients {
|
||||
if i == clientIndex {
|
||||
continue
|
||||
}
|
||||
peers = append(peers, oldClients[i].AllowedIPs...)
|
||||
}
|
||||
if hit := wireguardAllowedIPsCollision(normalized, peers); hit != "" {
|
||||
return false, common.NewError("wireguard: allowedIPs entry already used by another client:", hit)
|
||||
}
|
||||
clients[0].AllowedIPs = normalized
|
||||
}
|
||||
}
|
||||
if clients[0].PreSharedKey == "" {
|
||||
clients[0].PreSharedKey = old.PreSharedKey
|
||||
|
||||
Reference in New Issue
Block a user