#!/usr/bin/ucode let ubus = require('ubus').connect(); let uci = require('uci').cursor(); function restart() { system('/etc/init.d/spotfilter restart'); system('/etc/init.d/uhttpd restart'); } function interfaces() { let interfaces = []; uci.foreach('uspot', 'uspot', (d) => { if (!d[".anonymous"]) push(interfaces, d[".name"]); }); return uniq(interfaces); } switch(ARGV[0]) { case 'dump': for (let interface in interfaces()) { let clients = ubus.call('spotfilter', 'client_list', { interface }); printf('%.J\n', clients); } break; case 'clients': for (let interface in interfaces()) { let clients = ubus.call('spotfilter', 'client_list', { interface}); let res = {}; let t = time(); for (let c, val in clients) { res[c] = { status: val.state ? 'Authenticated' : 'Garden', idle: val.idle || 0, time: val.data.connect ? t - val.data.connect : 0, ip4addr: val.ip4addr || '', ip6addr: val.ip6addr || '', packets_ul: val.packets_ul || 0, bytes_ul: val.bytes_ul || 0, packets_dl: val.packets_dl || 0, bytes_dl: val.bytes_dl || 0, }; } printf('%.J\n', res); } break; case 'restart': restart(); break; case 'log': system('logread -f | grep uspot:'); break; case 'debugon': case 'debugoff': uci.set('uspot', 'def_captive', 'debug', 1); uci.commit(); restart(); break; default: break; }