Files
shrt/routes.js
2017-08-26 17:48:10 +02:00

67 lines
1.5 KiB
JavaScript

const Joi = require('joi');
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const hash = require('./hash');
const HASHLEN = 7;
const baseUrl = process.env.BASE_URL || 'shrt.in';
const schema = new Schema({
shrt: String,
url: String,
});
const Shrt = mongoose.model('Shrt', schema);
module.exports = [
{
method: 'GET',
path: '/',
handler(request, reply) {
reply.file('views/index.html');
}
},
{
method: 'GET',
path: '/public/{file}',
handler(request, reply) {
reply.file(`public/${request.params.file}`);
}
},
{
method: 'POST',
path: '/new',
handler(request, reply) {
const uid = hash(HASHLEN);
const r = new Shrt({
short: `${baseUrl}/${uniqueID}`,
url: request.payload.url,
});
r.save((err, redir) => err ? reply(err) : reply(redir));
},
config: {
validate: {
payload: {
url: Joi.string()
.regex(/^https?:\/\/([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/)
.required()
}
}
}
},
{
method: 'GET',
path:'/{hash}',
handler(request, reply) {
const query = {
'short': `${baseUrl}/${request.params.hash}`
};
Shrt.findOne(query, (err, shrt) => {
if (err) return reply(err);
else if (shrt) reply().redirect(shrt.url);
else reply.file('views/404.html').code(404);
});
}
},
];