fix: never re-enable SSID pool broadcast (crash guard) + top-bar health chip
Mode 'active' and the advertise toggle could re-enable the SSID-pool broadcast that segfaults pineapd. active preset now skips ssidpool/enable (advertise stays false), the advertise endpoint refuses with an explanation when the pool is disabled, get_ap reports the real pool state, and the PineAP overview disables the toggle with a notice. Added a top-bar health chip (PINEAP OK / POOL OFF / PINEAPD DOWN) polled every 15s.
This commit is contained in:
@@ -276,6 +276,9 @@ views.pineap = (root) => {
|
||||
h('div', { class: 'pineap-card-title' }, 'Quick Settings'));
|
||||
quickCard.appendChild(h('label', { class: 'switch' }, quick.collect, h('span', { class: 'track' }), 'Capture SSIDs to Pool'));
|
||||
quickCard.appendChild(h('label', { class: 'switch' }, quick.advertise, h('span', { class: 'track' }), 'Advertise AP Impersonation Pool'));
|
||||
const poolNotice = h('div', { class: 'pineap-infobox warn', style: 'margin-top:8px',
|
||||
text: 'Pool broadcast disabled: it segfaults pineapd on this firmware (crash-loop fix).' });
|
||||
quickCard.appendChild(poolNotice);
|
||||
quickCard.appendChild(h('div', { class: 'muted', style: 'margin-top:8px;font-size:12px' },
|
||||
'Client connect/disconnect notifications are handled by the Pager alert payload system.'));
|
||||
|
||||
@@ -305,10 +308,10 @@ views.pineap = (root) => {
|
||||
on(requested).then(() => {
|
||||
if (remember) remember(requested);
|
||||
load();
|
||||
}).catch(() => {
|
||||
}).catch((e) => {
|
||||
cb.checked = !requested;
|
||||
load();
|
||||
App.toast('Failed', 'error');
|
||||
App.toast((e && e.message) || 'Failed', 'error');
|
||||
});
|
||||
});
|
||||
}
|
||||
@@ -332,7 +335,7 @@ views.pineap = (root) => {
|
||||
}
|
||||
const descriptions = {
|
||||
passive: ['Capture SSIDs to the impersonation pool', 'Do not broadcast the pool', 'Keep the PineAP response engine disabled'],
|
||||
active: ['Capture SSIDs to the impersonation pool', 'Broadcast the impersonation pool', 'Enable the PineAP response engine']
|
||||
active: ['Capture SSIDs to the impersonation pool', 'Enable the PineAP response engine', 'Pool broadcast stays disabled (firmware crash fix)']
|
||||
};
|
||||
if (m === 'advanced') {
|
||||
modeInfo.textContent = 'All supported PineAP features are individually customizable from Quick Settings and the PineAP tabs.';
|
||||
@@ -401,6 +404,10 @@ views.pineap = (root) => {
|
||||
: Object.prototype.hasOwnProperty.call(c, 'autossidpool') ? !!c.autossidpool : null;
|
||||
setKnownCheckbox(quick.collect, collect);
|
||||
const pool = a.pool || {};
|
||||
const poolDisabled = pool.disabled === true;
|
||||
poolNotice.classList.toggle('hidden', !poolDisabled);
|
||||
quick.advertise.disabled = poolDisabled;
|
||||
quick.advertise.title = poolDisabled ? 'Disabled by firmware crash fix' : '';
|
||||
if (pool.disabled != null) PINEAP_SESSION.advertise = pool.disabled === false;
|
||||
setKnownCheckbox(quick.advertise, PINEAP_SESSION.advertise);
|
||||
cards.karma.value.textContent = PINEAP_SESSION.karma == null ? 'Unknown' : (PINEAP_SESSION.karma ? 'On' : 'Off');
|
||||
|
||||
Reference in New Issue
Block a user