Prevent subdirectories in user export

This commit also refactors the code a bit, and adds a '-' separator
between a filename and its duplicate index.

This commit fixes #1079.

Signed-off-by: Daan Sprenkels <hello@dsprenkels.com>
This commit is contained in:
Daan Sprenkels 2018-11-27 22:56:53 +01:00
parent 8bace89cab
commit 9fba268288

View file

@ -90,18 +90,20 @@ UserRouter.get('/me/export', function (req, res) {
ownerId: user.id ownerId: user.id
} }
}).then(function (notes) { }).then(function (notes) {
let list = [] let filenames = {}
async.each(notes, function (note, callback) { async.each(notes, function (note, callback) {
let title let basename = note.title.replace(/\//g, '-') // Prevent subdirectories
let extension = '' let filename
let suffix = ''
do { do {
title = note.title + extension let seperator = typeof suffix === 'number' ? '-' : ''
extension++ filename = basename + seperator + suffix + '.md'
} while (list.indexOf(title) !== -1) suffix++
} while (filenames[filename])
filenames[filename] = true
list.push(title) logger.debug('Write: ' + filename)
logger.debug('Write: ' + title + '.md') archive.append(Buffer.from(note.content), { name: filename, date: note.lastchangeAt })
archive.append(Buffer.from(note.content), { name: title + '.md', date: note.lastchangeAt })
callback(null, null) callback(null, null)
}, function (err) { }, function (err) {
if (err) { if (err) {