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) {
|
return api.getAllData().then(L.bind(function(data) {
|
||||||
var status = data.status || {};
|
var status = data.status || {};
|
||||||
var interfaces = (data.interfaces || {}).interfaces || [];
|
// Handle RPC expect unwrapping - may be array or object
|
||||||
var peers = (data.peers || {}).peers || [];
|
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.updateStats(status);
|
||||||
this.updatePeers(peers);
|
this.updatePeers(peers);
|
||||||
@ -240,8 +243,11 @@ return view.extend({
|
|||||||
render: function(data) {
|
render: function(data) {
|
||||||
var self = this;
|
var self = this;
|
||||||
var status = data.status || {};
|
var status = data.status || {};
|
||||||
var interfaces = (data.interfaces || {}).interfaces || [];
|
// Handle RPC expect unwrapping - may be array or object
|
||||||
var peers = (data.peers || {}).peers || [];
|
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
|
// Store peer descriptions
|
||||||
this.peerDescriptions = data.descriptions || {};
|
this.peerDescriptions = data.descriptions || {};
|
||||||
|
|||||||
@ -178,10 +178,14 @@ return baseclass.extend({
|
|||||||
callGetTraffic(),
|
callGetTraffic(),
|
||||||
callPeerDescriptions()
|
callPeerDescriptions()
|
||||||
]).then(function(results) {
|
]).then(function(results) {
|
||||||
|
// Handle RPC expect unwrapping - results may be array or object
|
||||||
|
var peersData = results[1] || [];
|
||||||
|
var interfacesData = results[2] || [];
|
||||||
|
|
||||||
return {
|
return {
|
||||||
status: results[0] || {},
|
status: results[0] || {},
|
||||||
peers: results[1] || { peers: [] },
|
peers: Array.isArray(peersData) ? peersData : (peersData.peers || []),
|
||||||
interfaces: results[2] || { interfaces: [] },
|
interfaces: Array.isArray(interfacesData) ? interfacesData : (interfacesData.interfaces || []),
|
||||||
traffic: results[3] || {},
|
traffic: results[3] || {},
|
||||||
descriptions: (results[4] || {}).descriptions || {}
|
descriptions: (results[4] || {}).descriptions || {}
|
||||||
};
|
};
|
||||||
@ -196,10 +200,14 @@ return baseclass.extend({
|
|||||||
callBandwidthRates(),
|
callBandwidthRates(),
|
||||||
callPeerDescriptions()
|
callPeerDescriptions()
|
||||||
]).then(function(results) {
|
]).then(function(results) {
|
||||||
|
// Handle RPC expect unwrapping - results may be array or object
|
||||||
|
var peersData = results[1] || [];
|
||||||
|
var ratesData = results[2] || [];
|
||||||
|
|
||||||
return {
|
return {
|
||||||
status: results[0] || {},
|
status: results[0] || {},
|
||||||
peers: results[1] || { peers: [] },
|
peers: Array.isArray(peersData) ? peersData : (peersData.peers || []),
|
||||||
rates: (results[2] || {}).rates || [],
|
rates: Array.isArray(ratesData) ? ratesData : (ratesData.rates || []),
|
||||||
descriptions: (results[3] || {}).descriptions || {}
|
descriptions: (results[3] || {}).descriptions || {}
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user