@@ -4,7 +4,7 @@ const moment = require('moment');
const basicAuth = require('basic-auth');
const crypto = require('crypto');
const mmm = require('mmmagic'),
Magic = mmm.Magic;
Magic = mmm.Magic;
// local modules
const helpers = require('../lib/helpers');
@@ -41,22 +41,13 @@ const getPaste = (pasteId) => {
const download = (req, res, next) => {
const paste = getPaste(req.params.paste);
if (paste === false) {
return res.status(400).send('Paste not found');
}
if (paste.archived) {
return res.status(400).send('This paste has been archived and is no longer publicly available.');
}
if (paste.expired || paste.data == null) {
return res.status(400).send('This paste has expired and is no longer available.');
const pasteIsUnavailable = helpers.pasteIsUnavailable(paste, res);
if (pasteIsUnavailable !== false) {
return pasteIsUnavailable;
}
// Do not show pastes have a currently invalid mime type
if (helpers.validateMimeType(paste) === false || typeof paste.metadata.contentType === 'undefined') {
return res.status(500).send('Invalid type');
}
helpers.increaseTimesOpened(paste);
console.log(paste);
@@ -66,21 +57,10 @@ const download = (req, res, next) => {
const filename = (req, res, next) => {
const paste = getPaste(req.params.paste);
if (paste === false) {
return res.status(400).send('Paste not found');
}
if (paste.archived) {
return res.status(400).send('This paste has been archived and is no longer publicly available.');
}
if (paste.expired || paste.data == null) {
return res.status(400).send('This paste has expired and is no longer available.');
}
// Do not show pastes have a currently invalid mime type
if (helpers.validateMimeType(paste) === false || typeof paste.metadata.contentType === 'undefined') {
return res.status(500).send('Invalid type');
const pasteIsUnavailable = helpers.pasteIsUnavailable(paste, res);
if (pasteIsUnavailable !== false) {
return pasteIsUnavailable;
}
res.status(200).send(paste.metadata.id + '.' + paste.metadata.extension + (paste.metadata.encrypted ? '.gpg' : ''));
@@ -88,16 +68,10 @@ const filename = (req, res, next) => {
const getFormatted = (req, res, next) => {
const paste = getPaste(req.params.paste);
if (paste === false) {
return res.status(400).send('Paste not found');
}
if (paste.archived) {
return res.status(400).send('This paste has been archived and is no longer publicly available.');
}
if (paste.expired || paste.data == null) {
return res.status(400).send('This paste has expired and is no longer available.');
const pasteIsUnavailable = helpers.pasteIsUnavailable(paste, res);
if (pasteIsUnavailable !== false) {
return pasteIsUnavailable;
}
// TODO: Cleanup/simplification
@@ -117,11 +91,6 @@ const getFormatted = (req, res, next) => {
version: config.version
};
// Do not show pastes have a currently invalid mime type
if (helpers.validateMimeType(paste) === false) {
return res.status(500).send('Invalid type');
}
if (paste.metadata.type == 'text' || paste.metadata.contentType.split('/')[0] == 'text') {
// We're good..
} else if (paste.metadata.type == "image" || paste.metadata.contentType.split('/')[0] == 'image') {
@@ -132,27 +101,21 @@ const getFormatted = (req, res, next) => {
} else {
return res.status(500).send('Invalid type');
}
helpers.increaseTimesOpened(paste);
res.render(template, options);
}
const getRaw = (req, res, next) => {
const paste = getPaste(req.params.paste);
if (paste === false) {
return res.status(400).send('Paste not found');
}
if (paste.archived) {
return res.status(400).send('This paste has been archived and is no longer publicly available.');
const pasteIsUnavailable = helpers.pasteIsUnavailable(paste, res);
if (pasteIsUnavailable !== false) {
return pasteIsUnavailable;
}
if (paste.expired || paste.data == null) {
return res.status(400).send('This paste has expired and is no longer available.');
}
// Do not show pastes have a currently invalid mime type
if (helpers.validateMimeType(paste) === false || typeof paste.metadata.contentType === 'undefined') {
return res.status(500).send('Invalid type');
}
helpers.increaseTimesOpened(paste);
if (paste.metadata.type === "text") {
res.setHeader("Content-Type", "text/plain");
@@ -163,16 +126,11 @@ const getRaw = (req, res, next) => {
const getMeta = (req, res, next) => {
const paste = getPaste(req.params.paste);
if (paste === false) {
return res.status(400).send('Paste not found');
}
if (paste.archived) {
return res.status(400).send('This paste has been archived and is no longer publicly available.');
}
const pasteIsUnavailable = helpers.pasteIsUnavailable(paste, res);
if (paste.expired || paste.data == null ) {
return res.status(400).send('This paste has expired and is no longer available.') ;
if (pasteIsUnavailable !== false) {
return pasteIsUnavailable ;
}
res.setHeader("Content-Type", "application/json");
@@ -213,7 +171,7 @@ const add = (req, res, next) => {
fs.unlinkSync(req.file.path);
return res.status(400).send('MIME type not allowed: ' + mimeType);
}
if (config.mime_types[mimeType]) {
type = config.mime_types[mimeType].type;
contentType = config.mime_types[mimeType].mime_type;
@@ -232,6 +190,7 @@ const add = (req, res, next) => {
contentType: contentType,
extension: extension,
submitter: user.name,
timesOpened: 0,
encrypted: req.body.encrypted == 1 ? true : false,
}
@@ -239,6 +198,11 @@ const add = (req, res, next) => {
// TODO: Consider if this should be an option in the UI instead?
metadata.plain = req.body.plain == 1 ? true : false;
// Can this paste only be opened X times?
if (req.body.maxopens && parseInt(req.body.maxopens) > 0) {
metadata.maxOpens = parseInt(req.body.maxopens);
}
// If provided, set paste age. If not provided, use default age from config.
// Age of 0 means no expiration.
metadata.expiresAt = req.body.age ? helpers.parseAge(req.body.age) : null;
@@ -253,8 +217,7 @@ const add = (req, res, next) => {
}
// Create .meta file
// TODO: Move this to function or module
fs.writeFileSync(config.path + filename + '.meta', JSON.stringify(metadata));
helpers.saveMetadata(filename, metadata);
// Move uploaded file to its final destination
fs.renameSync(req.file.path, config.path + filename + '.' + extension);