2019-03-24 14:15:49 +00:00
|
|
|
/*
|
|
|
|
* This is a script to fake the Duo API for push notifications.
|
|
|
|
*
|
|
|
|
* Access is allowed by default but one can change the behavior at runtime
|
|
|
|
* by POSTing to /allow or /deny. Then the /auth/v2/auth endpoint will act
|
|
|
|
* accordingly.
|
|
|
|
*/
|
|
|
|
|
|
|
|
const express = require("express");
|
|
|
|
const app = express();
|
|
|
|
const port = 3000;
|
|
|
|
|
|
|
|
app.set('trust proxy', true);
|
|
|
|
|
|
|
|
let permission = 'allow';
|
|
|
|
|
|
|
|
app.post('/allow', (req, res) => {
|
|
|
|
permission = 'allow';
|
2019-11-30 16:49:52 +00:00
|
|
|
console.log("set allowed!");
|
2019-03-24 14:15:49 +00:00
|
|
|
res.send('ALLOWED');
|
|
|
|
});
|
|
|
|
|
|
|
|
app.post('/deny', (req, res) => {
|
|
|
|
permission = 'deny';
|
2019-11-30 16:49:52 +00:00
|
|
|
console.log("set denied!");
|
2019-03-24 14:15:49 +00:00
|
|
|
res.send('DENIED');
|
|
|
|
});
|
|
|
|
|
|
|
|
app.post('/auth/v2/auth', (req, res) => {
|
2019-11-30 16:49:52 +00:00
|
|
|
setTimeout(() => {
|
|
|
|
let response;
|
|
|
|
if (permission == 'allow') {
|
|
|
|
response = {
|
|
|
|
response: {
|
|
|
|
result: 'allow',
|
|
|
|
status: 'allow',
|
|
|
|
status_msg: 'The user allowed access.',
|
|
|
|
},
|
|
|
|
stat: 'OK',
|
|
|
|
};
|
|
|
|
} else {
|
|
|
|
response = {
|
|
|
|
response: {
|
|
|
|
result: 'deny',
|
|
|
|
status: 'deny',
|
|
|
|
status_msg: 'The user denied access.',
|
|
|
|
},
|
|
|
|
stat: 'OK',
|
|
|
|
};
|
|
|
|
}
|
|
|
|
res.json(response);
|
|
|
|
}, 2000);
|
2019-03-24 14:15:49 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
app.listen(port, () => console.log(`Duo API listening on port ${port}!`));
|
|
|
|
|
|
|
|
// The signals we want to handle
|
|
|
|
// NOTE: although it is tempting, the SIGKILL signal (9) cannot be intercepted and handled
|
|
|
|
var signals = {
|
|
|
|
'SIGHUP': 1,
|
|
|
|
'SIGINT': 2,
|
|
|
|
'SIGTERM': 15
|
|
|
|
};
|
|
|
|
// Create a listener for each of the signals that we want to handle
|
|
|
|
Object.keys(signals).forEach((signal) => {
|
|
|
|
process.on(signal, () => {
|
|
|
|
console.log(`process received a ${signal} signal`);
|
|
|
|
process.exit(128 + signals[signal]);
|
|
|
|
});
|
|
|
|
});
|