71 lines
2 KiB
JavaScript
71 lines
2 KiB
JavaScript
// Made with love by ChrisChrome
|
|
const fs = require("fs")
|
|
const pjs = require("./pjsipauth")
|
|
const pjsipAuth = pjs.parseConfig(fs.readFileSync("/etc/asterisk/pjsip.auth.conf").toString())
|
|
const express = require("express")
|
|
const ejs = require("ejs")
|
|
const session = require("express-session")
|
|
const app = express()
|
|
app.use(express.urlencoded({ extended: true }))
|
|
const {execSync} = require("child_process")
|
|
|
|
app.use(session({
|
|
secret: 'your-secret-key',
|
|
resave: false,
|
|
saveUninitialized: true,
|
|
cookie: { secure: false } // Set to true if using HTTPS
|
|
}))
|
|
|
|
app.set('view engine', 'ejs')
|
|
app.set('views', __dirname + '/views')
|
|
|
|
app.post('/login', (req, res) => {
|
|
const { extension, password } = req.body
|
|
// Replace with your actual authentication logic
|
|
const valid = pjs.validateCredentials(pjsipAuth, extension, password)
|
|
console.log(req.body)
|
|
console.log(valid)
|
|
if (valid) {
|
|
req.session.authenticated = true
|
|
req.session.uid = extension
|
|
res.redirect('.')
|
|
} else {
|
|
res.render('login', { error: 'Invalid credentials' })
|
|
}
|
|
})
|
|
|
|
app.get('/logout', (req, res) => {
|
|
req.session.destroy()
|
|
// get parent of /logout
|
|
res.redirect('.')
|
|
});
|
|
|
|
app.get('/', (req, res) => {
|
|
if (req.session.authenticated) {
|
|
res.render('gencall', { username: req.session.uid })
|
|
} else {
|
|
req.session.destroy()
|
|
res.render('login')
|
|
}
|
|
});
|
|
|
|
app.post("/genCall", (req, res) => {
|
|
// exec /var/lib/asterisk/bin/callback "callee" webcallback.s.1 0 0 "base64cid"
|
|
const { name, number } = req.body
|
|
const { uid } = req.session
|
|
console.log(req.body);
|
|
console.log(session)
|
|
// do some regex on the name and number to prevent command injection
|
|
if (name.match(/^[a-zA-Z0-9\s]+$/) && number.match(/^\d+$/) && uid) {
|
|
const cmd = `/var/lib/asterisk/bin/callback "${uid}" webcallback.s.1 0 0 "${Buffer.from(`"${name}" <${number}>`).toString('base64')}"`
|
|
console.log(cmd)
|
|
execSync(cmd)
|
|
return res.redirect(".")
|
|
} else {
|
|
return res.redirect(".")
|
|
}
|
|
})
|
|
|
|
app.listen(3002, () => {
|
|
console.log("Server started on port 3002")
|
|
}); |