From 5bb3de2675967eb2f6ea295e7c3e969769ed2a70 Mon Sep 17 00:00:00 2001 From: Wu Cheng-Han Date: Fri, 16 Dec 2016 15:38:05 +0800 Subject: [PATCH] Add support of allow free url config option with correspond modifications --- README.md | 2 ++ lib/config.js | 3 +++ lib/response.js | 11 +++++++++-- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 7aa8b06..ed29854 100644 --- a/README.md +++ b/README.md @@ -119,6 +119,7 @@ Environment variables (will overwrite other server configs) | HMD_URL_ADDPORT | `true` or `false` | set to add port on callback url (port 80 or 443 won't applied) (only applied when domain is set) | | HMD_USECDN | `true` or `false` | set to use CDN resources or not (default is `true`) | | HMD_ALLOW_ANONMYOUS | `true` or `false` | set to allow anonmyous usage (default is `true`) | +| HMD_ALLOW_FREEURL | `true` or `false` | set to allow new note by accessing not exist note url | | HMD_FACEBOOK_CLIENTID | no example | Facebook API client id | | HMD_FACEBOOK_CLIENTSECRET | no example | Facebook API client secret | | HMD_TWITTER_CONSUMERKEY | no example | Twitter API consumer key | @@ -155,6 +156,7 @@ Server settings `config.json` | urladdport | `true` or `false` | set to add port on callback url (port 80 or 443 won't applied) (only applied when domain is set) | | usecdn | `true` or `false` | set to use CDN resources or not (default is `true`) | | allowanonmyous | `true` or `false` | set to allow anonmyous usage (default is `true`) | +| allowfreeurl | `true` or `false` | set to allow new note by accessing not exist note url | | db | `{ "dialect": "sqlite", "storage": "./db.hackmd.sqlite" }` | set the db configs, [see more here](http://sequelize.readthedocs.org/en/latest/api/sequelize/) | | sslkeypath | `./cert/client.key` | ssl key path (only need when you set usessl) | | sslcertpath | `./cert/hackmd_io.crt` | ssl cert path (only need when you set usessl) | diff --git a/lib/config.js b/lib/config.js index fee2865..d87964a 100644 --- a/lib/config.js +++ b/lib/config.js @@ -21,6 +21,8 @@ var usecdn = process.env.HMD_USECDN ? (process.env.HMD_USECDN === 'true') : ((ty var allowanonmyous = process.env.HMD_ALLOW_ANONMYOUS ? (process.env.HMD_ALLOW_ANONMYOUS === 'true') : ((typeof config.allowanonmyous === 'boolean') ? config.allowanonmyous : true); +var allowfreeurl = process.env.HMD_ALLOW_FREEURL ? (process.env.HMD_ALLOW_FREEURL === 'true') : !!config.allowfreeurl; + // db var db = config.db || { dialect: 'sqlite', @@ -128,6 +130,7 @@ module.exports = { serverurl: getserverurl(), usecdn: usecdn, allowanonmyous: allowanonmyous, + allowfreeurl: allowfreeurl, db: db, sslkeypath: path.join(cwd, sslkeypath), sslcertpath: path.join(cwd, sslcertpath), diff --git a/lib/response.js b/lib/response.js index 3f837e7..3374eaf 100755 --- a/lib/response.js +++ b/lib/response.js @@ -112,7 +112,8 @@ function newNote(req, res, next) { return response.errorForbidden(res); } models.Note.create({ - ownerId: owner + ownerId: owner, + alias: req.alias ? req.alias : null }).then(function (note) { return res.redirect(config.serverurl + "/" + LZString.compressToBase64(note.id)); }).catch(function (err) { @@ -133,6 +134,7 @@ function checkViewPermission(req, note) { } function findNote(req, res, callback, include) { + var noteId = req.params.noteId; var id = req.params.noteId || req.params.shortid; models.Note.parseNoteId(id, function (err, _id) { models.Note.findOne({ @@ -142,7 +144,12 @@ function findNote(req, res, callback, include) { include: include || null }).then(function (note) { if (!note) { - return response.errorNotFound(res); + if (config.allowfreeurl && noteId) { + req.alias = noteId; + return newNote(req, res); + } else { + return response.errorNotFound(res); + } } if (!checkViewPermission(req, note)) { return response.errorForbidden(res);