Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 39 additions & 17 deletions routes/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,11 +36,13 @@ exports.index = function (req, res, next) {

exports.loginHandler = function (req, res, next) {
if (validator.isEmail(req.body.username)) {
User.find({ username: req.body.username, password: req.body.password }, function (err, users) {
const username = req.body.username.toString();
const password = req.body.password.toString();

User.find({ username: username, password: password }, function (err, users) {
if (users.length > 0) {
const redirectPage = req.body.redirectPage
const session = req.session
const username = req.body.username
return adminLoginSuccess(redirectPage, session, username, res)
} else {
return res.status(401).send()
Expand All @@ -58,7 +60,11 @@ function adminLoginSuccess(redirectPage, session, username, res) {
console.log(`User logged in: ${username}`)

if (redirectPage) {
return res.redirect(redirectPage)
if (redirectPage.startsWith('/') && !redirectPage.startsWith('//')) {
return res.redirect(redirectPage)
} else {
return res.redirect('/admin')
}
} else {
return res.redirect('/admin')
}
Expand Down Expand Up @@ -158,12 +164,11 @@ exports.create = function (req, res, next) {
var url = item.match(imgRegex)[1];
console.log('found img: ' + url);

exec('identify ' + url, function (err, stdout, stderr) {
console.log(err);
if (err !== null) {
console.log('Error (' + err + '):' + stderr);
}
});
if (validator.isURL(url, { protocols: ['http', 'https'] })) {
console.log('Image URL validated but command execution disabled for security');
} else {
console.log('Invalid image URL provided');
}

} else {
item = parse(item);
Expand Down Expand Up @@ -254,14 +259,25 @@ exports.import = function (req, res, next) {
if (importedFileType["mime"] === zipFileExt["mime"]) {
var zip = AdmZip(importFile.data);
var extracted_path = "/tmp/extracted_files";
zip.extractAllTo(extracted_path, true);
data = "No backup.txt file found";
fs.readFile('backup.txt', 'ascii', function (err, data) {
if (!err) {
data = data;
}

var zipEntries = zip.getEntries();
var hasUnsafePath = zipEntries.some(function(entry) {
var entryName = entry.entryName;
return entryName.includes('../') || entryName.startsWith('/') || entryName.includes('..\\');
});
} else {

if (hasUnsafePath) {
data = "Unsafe zip file detected - extraction blocked for security";
} else {
zip.extractAllTo(extracted_path, true);
data = "No backup.txt file found";
fs.readFile('backup.txt', 'ascii', function (err, data) {
if (!err) {
data = data;
}
});
}
}else {
data = importFile.data.toString('ascii');
}
var lines = data.split('\n');
Expand Down Expand Up @@ -344,7 +360,13 @@ exports.chat = {
icon: '👋',
};

_.merge(message, req.body.message, {
const userMessage = req.body.message || {};
const safeMessage = {
text: userMessage.text ? userMessage.text.toString() : '',
icon: userMessage.icon ? userMessage.icon.toString() : message.icon
};

Object.assign(message, safeMessage, {
id: lastId++,
timestamp: Date.now(),
userName: user.name,
Expand Down