fix(wireguard): Handle RPC expect unwrapping in API and views
The RPC expect clause unwraps responses - when `expect: { peers: [] }`
is used, the response `{peers: [...]}` gets unwrapped to just `[...]`.
Fixed:
- api.js: getAllData and getMonitoringData now handle both array
and object formats for peers, interfaces, and rates
- overview.js: render and polling functions now safely unwrap
data that may be array or nested object
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
787fe3864e
commit
785ba9eb4c
@ -222,8 +222,11 @@ return view.extend({
|
||||
|
||||
return api.getAllData().then(L.bind(function(data) {
|
||||
var status = data.status || {};
|
||||
var interfaces = (data.interfaces || {}).interfaces || [];
|
||||
var peers = (data.peers || {}).peers || [];
|
||||
// Handle RPC expect unwrapping - may be array or object
|
||||
var interfacesData = data.interfaces || [];
|
||||
var peersData = data.peers || [];
|
||||
var interfaces = Array.isArray(interfacesData) ? interfacesData : (interfacesData.interfaces || []);
|
||||
var peers = Array.isArray(peersData) ? peersData : (peersData.peers || []);
|
||||
|
||||
this.updateStats(status);
|
||||
this.updatePeers(peers);
|
||||
@ -240,8 +243,11 @@ return view.extend({
|
||||
render: function(data) {
|
||||
var self = this;
|
||||
var status = data.status || {};
|
||||
var interfaces = (data.interfaces || {}).interfaces || [];
|
||||
var peers = (data.peers || {}).peers || [];
|
||||
// Handle RPC expect unwrapping - may be array or object
|
||||
var interfacesData = data.interfaces || [];
|
||||
var peersData = data.peers || [];
|
||||
var interfaces = Array.isArray(interfacesData) ? interfacesData : (interfacesData.interfaces || []);
|
||||
var peers = Array.isArray(peersData) ? peersData : (peersData.peers || []);
|
||||
|
||||
// Store peer descriptions
|
||||
this.peerDescriptions = data.descriptions || {};
|
||||
|
||||
@ -178,10 +178,14 @@ return baseclass.extend({
|
||||
callGetTraffic(),
|
||||
callPeerDescriptions()
|
||||
]).then(function(results) {
|
||||
// Handle RPC expect unwrapping - results may be array or object
|
||||
var peersData = results[1] || [];
|
||||
var interfacesData = results[2] || [];
|
||||
|
||||
return {
|
||||
status: results[0] || {},
|
||||
peers: results[1] || { peers: [] },
|
||||
interfaces: results[2] || { interfaces: [] },
|
||||
peers: Array.isArray(peersData) ? peersData : (peersData.peers || []),
|
||||
interfaces: Array.isArray(interfacesData) ? interfacesData : (interfacesData.interfaces || []),
|
||||
traffic: results[3] || {},
|
||||
descriptions: (results[4] || {}).descriptions || {}
|
||||
};
|
||||
@ -196,10 +200,14 @@ return baseclass.extend({
|
||||
callBandwidthRates(),
|
||||
callPeerDescriptions()
|
||||
]).then(function(results) {
|
||||
// Handle RPC expect unwrapping - results may be array or object
|
||||
var peersData = results[1] || [];
|
||||
var ratesData = results[2] || [];
|
||||
|
||||
return {
|
||||
status: results[0] || {},
|
||||
peers: results[1] || { peers: [] },
|
||||
rates: (results[2] || {}).rates || [],
|
||||
peers: Array.isArray(peersData) ? peersData : (peersData.peers || []),
|
||||
rates: Array.isArray(ratesData) ? ratesData : (ratesData.rates || []),
|
||||
descriptions: (results[3] || {}).descriptions || {}
|
||||
};
|
||||
});
|
||||
|
||||
Loading…
Reference in New Issue
Block a user