diff --git a/routes/index.js b/routes/index.js
index 9c18c01..02a20a0 100644
--- a/routes/index.js
+++ b/routes/index.js
@@ -4,7 +4,7 @@ const router = express.Router();
const db = require('../modules/db');
const magnet = require('./magnet');
-template = (magnet, meta) => (`
+const foundTemplate = (magnet, meta) => (`
@@ -22,24 +22,39 @@ template = (magnet, meta) => (`
`)
-router.get('/:shortlink', (req, res, next) => {
+const notFoundTemplate = () => (`
+
+
+
+
+
+ Not Found
+
+
+
+ ⚡ Oops! Nothing found here.
+
+
+`)
+
+router.get('/:shortlink', (req, res) => {
db.get(req.params.shortlink)
.then(record => {
const r = String(record);
- const [ magnet, title ] = r.split('@@title@@');
+ const [magnet, title] = r.split('@@title@@');
const meta = {
title: title ? '⚡ ' + title : '⚡ :magnet:'
}
- res.send(template(magnet, meta))
+ res.send(foundTemplate(magnet, meta))
})
.catch(e => {
console.log(`[ERR!] Occured while retrieving shortlink`, e.stack);
- res.end('Invalid shortlink')
+ res.send(notFoundTemplate())
});
-})
+});
/* GET home page. */
-router.get('/', function(req, res, next) {
+router.get('/', function (req, res) {
res.render('index', { title: ':magnet: ⚡️' });
});
diff --git a/routes/magnet.js b/routes/magnet.js
index 9b01af6..b514719 100644
--- a/routes/magnet.js
+++ b/routes/magnet.js
@@ -3,47 +3,59 @@ const router = express.Router();
const db = require('../modules/db');
-const createMagnet = (uri, title, baseUrl, ctx) => {
- const key = Math.random().toString(36).slice(4);
- if (!uri.match(/magnet:\?xt=urn:.*/i)) {
- console.log(`[ERR!] Invalid request ${uri}`);
- ctx.res.status(400);
- ctx.res.json({
- err: 'Invalid magnet URI'
- });
- return;
- }
-
- const value = title ? uri + '@@title@@' + title : uri;
-
- db.put(key, value)
- .then(() => ctx.res.json({
- status: 'OK',
- uri: baseUrl + '/' + key
- }))
- .catch(e => {
+const handleSuccess = ({ res, baseUrl, key }) => res.json({ status: 'OK', uri: baseUrl + '/' + key })
+
+const handleError = ({ res, uri }, err) => {
+ switch (err.message) {
+ case "ERR_NO_URI": {
+ console.log(`[ERR!] Invalid request ${uri}`);
+ return res.status(400).json({
+ err: 'No magnet URI found'
+ });
+ }
+ case "ERR_INVALID_URI": {
+ console.log(`[ERR!] Invalid request ${uri}`);
+ return res.status(400).json({
+ err: 'Invalid magnet URI'
+ });
+ }
+ default: {
console.log(`[ERR!] Occured while creating new shortlink`, e.stack);
- ctx.res.status(520);
- ctx.res.json({
+ return res.status(520).json({
err: 'Unknown err! Please try again'
});
- })
+ }
+ }
}
-router.get('/:body', (req, res, next) => {
+const createMagnet = (uri, title, baseUrl, res) => {
+ if (!uri)
+ return Promise.reject(new Error("ERR_NO_URI"));
+
+ if (!uri.match(/magnet:\?xt=urn:.*/i))
+ return Promise.reject(new Error("ERR_INVALID_URI"));
+
+ const key = Math.random().toString(36).slice(4);
+ const value = title ? uri + '@@title@@' + title : uri;
+ return db.put(key, value)
+ .then(() => handleSuccess({ res, baseUrl, key }))
+ .catch(handleError.bind(undefined, { res, uri }));
+}
+
+router.get('/:body', (req, res) => {
const body = req.originalUrl.split('/api/')[1];
- const [ uri, title ] = body.split('@@title@@');
+ const [uri, title] = body.split('@@title@@');
const baseUrl = req.protocol + '://' + req.get('host');
- return createMagnet(uri, title, baseUrl, { req, res });
-})
+ return createMagnet(uri, title, baseUrl, res);
+});
/* POST magnet link. */
-router.post('/', (req, res, next) => {
+router.post('/', (req, res) => {
const { uri, title } = req.body;
const baseUrl = req.protocol + '://' + req.get('host');
- return createMagnet(uri, title, baseUrl, { req, res });
+ return createMagnet(uri, title, baseUrl, res);
});
module.exports = router;
\ No newline at end of file