Code cleanup

master
wgapi Cloud9 2021-10-21 22:21:59 -06:00
parent 0a6c042b11
commit 37fa81eda4
6 changed files with 194 additions and 170 deletions

View File

@ -12,16 +12,23 @@ const local_secret = env.SERVERS.filter(
)[0].secret
module.exports = async (req, res) => {
// Check secret auth
if (req.query['secret']!==local_secret) {
console.log(`Peer sent from ${req.requester} without correct secret querystring!`)
return res.sendStatus(403)
} else try {
}
// Add request body to wg config
try {
await fs.appendFile(env.WG_CONFIG_FILE, req.body)
} catch (err) {
console.error(`Failed to save new peer config from ${req.requester} to ${env.WG_CONFIG_FILE}`,err)
return res.sendStatus(500)
} finally {
console.log(`Saved new peer from ${req.requester}`)
return res.sendStatus(200)
}
console.log(`Saved new peer from ${req.requester}`)
// Respond
return res.sendStatus(200)
}

View File

@ -19,15 +19,17 @@ module.exports = async (req, res) => {
if (req.query['secret']!==local_secret) {
console.log(`Peer sent from ${req.requester} without correct secret querystring!`)
return res.sendStatus(403)
}
// Read config file
} else try {
else try {
const config_file = await fs.readFile(env.WG_CONFIG_FILE)
config = config_file.toString()
} catch (err) {
}
catch (err) {
console.error(`Failed to load config from ${env.WG_CONFIG_FILE}:\n`,err)
res.sendStatus(500)
} finally {
}
// Find peer in config
const peer = config.split('\n\n')
@ -38,22 +40,17 @@ module.exports = async (req, res) => {
})
// Delete peer
try {
await fs.writeFile(env.WG_CONFIG_FILE,
try { await fs.writeFile(env.WG_CONFIG_FILE,
config.replace(`\n\n${peer}`,'')
.replace('\n\n\n','\n\n')
)
} catch (err) {
) }
catch (err) {
console.error(`Failed to delete peer config from ${env.WG_CONFIG_FILE}:\n`,err)
return res.sendStatus(500)
} finally {
}
// Success
console.log(`Saved new peer from ${req.requester}`)
console.log(`Deleted peer by requested from ${req.requester}`)
return res.sendStatus(200)
}
}
}

View File

@ -1,5 +1,5 @@
'use strict'
/* add.js
/* app/add.js
* route for a client to add a peer
*/
@ -34,7 +34,7 @@ module.exports = async (req, res) => {
return res.sendStatus(err)
} console.log(`${req.requester} must be ${user.name}`)
// Check user token
// Check token
if (req.query['token']!==helper.getToken(req.requester)) {
console.log(`Invalid token from ${req.requester}: ${req.query['token']}`)
return res.sendStatus(403)
@ -129,7 +129,7 @@ update add *.${domain} ${env.DNS_TTL} CNAME ${domain}`)
console.error(`Failed to add ns record:\n${err}`)
return res.sendStatus(500)
}
finally { console.log(`Updated nameserver to add ${domain}.`) }
console.log(`Updated nameserver to add ${domain}.`)
// Generate user config
const listen_port = Math.floor(50000 + Math.random() * 10000)

View File

@ -1,5 +1,5 @@
'use strict'
/* del.js
/* app/del.js
* route to let clients delete a peer
*/
@ -28,10 +28,10 @@ module.exports = async (req, res) => {
catch (err) {
console.error(`Failed to get user from ${req.requester}`)
return res.sendStatus(err)
} finally {
}
console.log(`${req.requester} must be ${user.name}`)
// Check user token
// Check token
if (req.query['token']!==helper.getToken(req.requester)) {
console.log(`Invalid token from ${req.requester}: ${req.query['token']}`)
return res.sendStatus(403)
@ -41,7 +41,6 @@ module.exports = async (req, res) => {
let config_file
try { config_file = await fs.readFile(env.WG_CONFIG_FILE) }
catch (err) { console.error(err); return res.sendStatus(500) }
finally {
// Search for peer
let peer_pubkey
@ -112,7 +111,7 @@ module.exports = async (req, res) => {
} catch (err) {
console.error(`Failed to delete ${peer_name}:\n`,err)
return res.sendStatus(500)
} finally {
}
// Inform other servers
for (const server of env.SERVERS) {
@ -137,18 +136,12 @@ update delete ${peer_name}. AAAA
update delete *.${peer_name}. CNAME`)
}
catch (err) {
console.error(`Failed to delete ns record:\n${err}`)
console.error(`Failed to delete ns record`)
if (err) console.error(err)
return res.sendStatus(500)
}
finally { console.log(`Updated nameserver to delete ${peer_name}.`) }
console.log(`Updated nameserver to delete ${peer_name}.`)
// Inform user that delete was successful
res.sendStatus(200)
}
}
}
return res.sendStatus(200)
}

View File

@ -15,7 +15,6 @@ module.exports = async (req, res) => {
console.error(`Failed to get user from ${req.requester}`)
return res.sendStatus(err)
}
finally {
console.log(`${req.requester} must be ${user.name}`)
// Get or generate token
@ -24,14 +23,9 @@ module.exports = async (req, res) => {
console.error(`Failed to set token for ${req.requester}`)
return res.sendStatus(err)
}
finally {
// Send user
res.setHeader('content-type', 'text/json')
res.send(user)
}
}
}

View File

@ -25,7 +25,7 @@ module.exports = {
}).filter( (peer) => {
return peer.includes(`${env.IPV4_NET}.${subnet}`) || peer.includes(`${env.IPV6_NET}:${subnet}`)
})
} catch (err) { console.log(err) }
} catch (err) { console.log(err); reject(500) }
let found_usernames = []
let found_hosts = []
for (const userpeer of userpeers) {
@ -73,6 +73,39 @@ module.exports = {
}
}),
getAllUsers: () =>
new Promise( async (resolve, reject) => {
let users = {}
let peers; try {
peers = (await fs.readFile(env.WG_CONFIG_FILE)).toString()
.split('\n\n').filter( (paragraph) => {
return paragraph.includes('[Peer]')
})
} catch (err) { console.log(err) }
for (const peer of peers) {
let peer_obj = {}
let peer_username
for (const line of peer.split('\n')) {
if (line.includes('[Peer] # ')) {
const domain = line.split(' # ')[1].split('.')
peer_obj.name = domain[0]
peer_username = domain[1]
}
else if (line.includes('AllowedIPs = ')) {
const ips = line.split('=')[1].split(', ')
peer_obj.ipv4 = ips.filter( (ip) => ip.includes(env.IPV4_NET) )[0].trim()
peer_obj.ipv6 = ips.filter( (ip) => ip.includes(env.IPV6_NET) )[0].trim()
}
}
if (!users[peer_username]) users[peer_username] = {
name: peer_username,
peers: [],
}
users[peer_username].peers.push(peer_obj)
}
resolve(users)
}),
getToken: (ip) => tokens[ip],
setToken: (ip) =>
new Promise ( async (resolve, reject) => {