Add paste expiry

pull/1/head
Joe Biellik 10 years ago
parent 5271bd812b
commit 3f3feab55e

@ -4,6 +4,14 @@
"cacheAge": 86400, "cacheAge": 86400,
"sizeLimit": "2mb", "sizeLimit": "2mb",
"prettyHtml": true, "prettyHtml": true,
"expiresDefault": 604800,
"expires": {
"3600": "1 hour",
"86400": "1 day",
"604800": "1 week",
"2592000": "1 month",
"31536000 ": "1 year"
},
"highlights": { "highlights": {
"abap": "ABAP", "abap": "ABAP",
"actionscript": "ActionScript", "actionscript": "ActionScript",

@ -4,13 +4,13 @@ var Paste = require('../models/paste');
module.exports = { module.exports = {
*view(next) { *view(next) {
try { try {
let paste = yield Paste.findOne({ link: this.params.id }).exec(); let paste = yield Paste.findById(this.params.id).exec();
let lang = Object.keys(this.query)[0]; let lang = Object.keys(this.query)[0];
if (lang) { if (lang) {
yield this.render('highlight', { yield this.render('highlight', {
pretty: config.prettyHtml, pretty: config.prettyHtml,
title: 'Paste ' + paste.link, title: 'Paste ' + paste.id,
paste: paste.paste, paste: paste.paste,
lang: lang lang: lang
}); });
@ -24,20 +24,30 @@ module.exports = {
}, },
*create(next) { *create(next) {
if (this.request.body.fields && this.request.body.fields.paste) { if (this.request.body.fields) {
this.request.body.paste = this.request.body.fields.paste; if (this.request.body.fields.paste) {
this.request.body.paste = this.request.body.fields.paste;
}
if (this.request.body.fields.highlight) {
this.request.body.highlight = this.request.body.fields.highlight;
}
if (this.request.body.fields.expire) {
this.request.body.expire = this.request.body.fields.expire;
}
} }
if (this.request.body.fields && this.request.body.fields.highlight) {
this.request.body.highlight = this.request.body.fields.highlight; if (!this.request.body.expire) {
this.request.body.expire = config.expiresDefault;
} }
let paste = new Paste({ let paste = new Paste({
paste: this.request.body.paste paste: this.request.body.paste,
expiresAt: new Date(Date.now() + this.request.body.expire * 1000)
}); });
yield paste.save(); yield paste.save();
let link = paste.link; let link = paste.id;
if (this.request.body.highlight) { if (this.request.body.highlight) {
link += '?' + this.request.body.highlight; link += '?' + this.request.body.highlight;

@ -1,19 +1,12 @@
var mongoose = require('mongoose'); var mongoose = require('mongoose');
var shortId = require('short-mongo-id'); var shortid = require('shortid');
var paste = new mongoose.Schema({ var paste = new mongoose.Schema({
_id: { type: String, unique: true, default: shortid.generate },
paste: { type: String }, paste: { type: String },
link: { type: String } expiresAt: { type: Date, expires: 0, default: new Date(Date.now() + 1000 * 60 * 60 * 24 * 7) }
}, { }, {
timestamps: true timestamps: true
}); });
paste.pre('save', function(next) {
if (this.isNew) {
this.link = shortId(this._id);
next();
}
});
module.exports = mongoose.model('Paste', paste); module.exports = mongoose.model('Paste', paste);

@ -19,9 +19,8 @@
], ],
"main": "server.js", "main": "server.js",
"scripts": { "scripts": {
"start": "node .",
"watch": "./node_modules/.bin/nodemon -L -e js,json", "watch": "./node_modules/.bin/nodemon -L -e js,json",
"lint": "./node_modules/.bin/eslint ." "lint": "./node_modules/.bin/eslint . && ./node_modules/.bin/jade-lint ./views/"
}, },
"dependencies": { "dependencies": {
"babel-core": "^6.1.2", "babel-core": "^6.1.2",
@ -37,11 +36,12 @@
"koa-static-cache": "^3.1.2", "koa-static-cache": "^3.1.2",
"koa-views": "^3.1.0", "koa-views": "^3.1.0",
"mongoose": "^4.1.12", "mongoose": "^4.1.12",
"short-mongo-id": "^0.1.1" "shortid": "^2.2.4"
}, },
"devDependencies": { "devDependencies": {
"babel-eslint": "^4.1.3", "babel-eslint": "^4.1.3",
"eslint": "^1.7.2", "eslint": "^1.7.2",
"jade-lint": "^2.0.0",
"nodemon": "^1.7.2" "nodemon": "^1.7.2"
} }
} }

@ -6,7 +6,8 @@ router.get('/', function *() {
yield this.render('index', { yield this.render('index', {
pretty: config.prettyHtml, pretty: config.prettyHtml,
title: 'Paste', title: 'Paste',
url: this.request.origin + '/', url: this.request.origin,
expires: config.expires,
highlights: config.highlights highlights: config.highlights
}); });
}); });

@ -1,7 +1,7 @@
extends layout extends layout
block head block head
link(rel='stylesheet', href='http://fonts.googleapis.com/css?family=Open+Sans:400,300,600') link(rel='stylesheet', href='http://fonts.googleapis.com/css?family=Open+Sans:400,300')
link(rel='stylesheet', href='https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha/css/bootstrap.min.css') link(rel='stylesheet', href='https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha/css/bootstrap.min.css')
style. style.
html { html {
@ -33,10 +33,17 @@ block content
form(action='/?redirect', method='POST', accept-charset='UTF-8') form(action='/?redirect', method='POST', accept-charset='UTF-8')
fieldset.form-group fieldset.form-group
textarea.form-control(name='paste', rows='5', required, autofocus) textarea.form-control(name='paste', rows='5', required, autofocus)
select.c-select.select-lg.m-t-md(name='highlight')
select.c-select.select-lg.m-t-md.m-r-md(name='highlight')
option(value='', selected) Choose syntax highlighting option(value='', selected) Choose syntax highlighting
each val, key in highlights each val, key in highlights
option(value='#{key}') #{val} option(value='#{key}') #{val}
select.c-select.select-lg.m-t-md(name='expire')
option(value='', selected) Choose expiry
each val, key in expires
option(value='#{key}') #{val}
button.btn.btn-primary.btn-lg.m-t-md.m-l-md.pull-right(type='submit') Upload button.btn.btn-primary.btn-lg.m-t-md.m-l-md.pull-right(type='submit') Upload
footer.hidden-sm-down footer.hidden-sm-down

Loading…
Cancel
Save