-
-
Notifications
You must be signed in to change notification settings - Fork 15
/
main.js
executable file
·128 lines (124 loc) · 3.54 KB
/
main.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#!/usr/bin/env electron
const path = require('path')
const { app, Menu, Tray, dialog } = require('electron')
const wififox = require('./lib/wififox')
const isRoot = (process.getuid && process.getuid() === 0)
if (!isRoot) {
console.log('WiFiFox must run as root.')
process.exit(0)
} else {
let tray = null
let isConnected = false
let isConnecting = false
let hasNetwork = false
let validMacs = []
let silentMode = false
let isScanning = false
function updateMenu() {
const status = hasNetwork ?
(isConnected ?
'Gateway Bypassed' :
(isConnecting ? 'Bypassing...' : 'Ready to Bypassed')) :
'Not Connected to Any Open Network'
const contextMenu = Menu.buildFromTemplate([
{
label: status,
type: 'normal',
enabled: false
},
{
label: isConnected ? 'Undo Bypass' : 'Bypass', type: 'normal', enabled: !isConnecting && hasNetwork,
click: () => {
if (!isConnected && !isConnecting) {
isConnecting = true
wififox.connect(silentMode).then(() => {
isConnected = true
isConnecting = false
updateMenu()
})
.then(async () => {
validMacs = await wififox.listValidMacs()
updateMenu()
})
.catch((err) => {
isConnected = false
isConnecting = false
dialog.showErrorBox('Could Not Connect', err.message)
updateMenu()
})
updateMenu()
} else if (isConnected) {
wififox.reset()
isConnected = false
isConnecting = false
updateMenu()
}
}
},
{ type: 'separator' },
{
type: 'submenu',
label: 'Network Scan',
submenu: [
{
type: 'normal', label: isScanning ? 'Scanning...' : (silentMode ? "Scan Disabled in Silent Mode" : 'Scan'), enabled: !silentMode && !isScanning, click: () => {
wififox.manualScan()
.then(async () => {
isScanning = false
updateMenu()
validMacs = await wififox.listValidMacs()
updateMenu()
})
.catch(err => {
console.error(err)
isScanning = false
updateMenu()
})
isScanning = true
updateMenu()
}
},
{ type: 'separator' }
].concat(validMacs.length > 0 ? validMacs.map(mac => {
return {
type: 'normal',
label: mac,
enabled: false
}
}) : [
{
type: 'normal',
label: 'No Clients',
enabled: false
}
])
},
{
type: 'checkbox',
label: 'Silent Mode',
checked: silentMode,
click: () => {
silentMode = !silentMode
updateMenu()
}
},
{ type: 'separator' },
{
label: 'Quit WiFiFox', type: 'normal', click: async () => {
await wififox.reset()
app.quit()
}
}
])
tray.setContextMenu(contextMenu)
}
app.whenReady().then(async () => {
tray = new Tray(path.join(__dirname, 'assets/icon-white.png'))
hasNetwork = await wififox.isOnOpenNetwork()
updateMenu()
setInterval(async () => {
hasNetwork = await wififox.isOnOpenNetwork()
updateMenu()
}, 5000)
})
}