You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
paste/controllers/pastes.js

63 lines
1.4 KiB
JavaScript

const config = require('config');
const Paste = require('../models/paste');
module.exports = {
async view(ctx) {
try {
let paste = await Paste.findById(ctx.params.id).exec();
let lang = Object.keys(ctx.query)[0];
if (lang) {
await ctx.render('highlight', {
pretty: config.prettyHtml,
title: config.name + ' ' + paste.id,
paste: paste.paste,
lang: lang
});
} else {
ctx.type = 'text/plain';
ctx.body = paste.paste;
}
} catch (ex) {
ctx.throw(404, 'Paste Not Found');
}
},
async create(ctx) {
if (ctx.request.body.fields) {
if (ctx.request.body.fields.paste) {
ctx.request.body.paste = ctx.request.body.fields.paste;
}
if (ctx.request.body.fields.highlight) {
ctx.request.body.highlight = ctx.request.body.fields.highlight;
}
if (ctx.request.body.fields.expire) {
ctx.request.body.expire = ctx.request.body.fields.expire;
}
}
if (!ctx.request.body.expire) {
ctx.request.body.expire = config.expiresDefault;
}
let paste = new Paste({
paste: ctx.request.body.paste,
expiresAt: new Date(Date.now() + ctx.request.body.expire * 1000)
});
await paste.save();
let link = paste.id;
if (ctx.request.body.highlight) {
link += '?' + ctx.request.body.highlight;
}
if (Object.keys(ctx.query).includes('redirect')) {
ctx.redirect(link);
} else {
ctx.body = ctx.request.origin + '/' + link + '\n';
}
}
};