Added album check to uploads

This commit is contained in:
Pitu 2017-08-30 04:48:17 -03:00
parent f8d6cc7db6
commit 80117235f9
2 changed files with 68 additions and 59 deletions

View File

@ -75,12 +75,12 @@ albumsController.create = function(req, res, next) {
}).then((album) => { }).then((album) => {
if (album.length !== 0) return res.json({ success: false, description: 'There\'s already an album with that name' }) if (album.length !== 0) return res.json({ success: false, description: 'There\'s already an album with that name' })
db.table('albums').insert({ db.table('albums').insert({
name: name, name: name,
enabled: 1, enabled: 1,
userid: user[0].id, userid: user[0].id,
identifier: randomstring.generate(8), identifier: randomstring.generate(8),
timestamp: Math.floor(Date.now() / 1000) timestamp: Math.floor(Date.now() / 1000)
}).then(() => { }).then(() => {
return res.json({ success: true }) return res.json({ success: true })
}) })
@ -144,7 +144,7 @@ albumsController.get = function(req, res, next) {
let title = albums[0].name let title = albums[0].name
db.table('files').select('name').where('albumid', albums[0].id).orderBy('id', 'DESC').then((files) => { db.table('files').select('name').where('albumid', albums[0].id).orderBy('id', 'DESC').then((files) => {
let basedomain = req.get('host') let basedomain = req.get('host')
for (let domain of config.domains) for (let domain of config.domains)
if (domain.host === req.get('host')) if (domain.host === req.get('host'))

View File

@ -62,67 +62,76 @@ uploadsController.upload = function(req, res, next) {
album = req.params.albumid album = req.params.albumid
} }
upload(req, res, function (err) { db.table('albums').where({ id: album, userid: userid }).then((albums) => {
if (err) { if (albums.length === 0) {
console.error(err) return res.json({
return res.json({
success: false, success: false,
description: err description: 'Album doesn\'t exist or it doesn\'t belong to the user'
}) })
} }
if (req.files.length === 0) return res.json({ success: false, description: 'no-files' }) upload(req, res, function (err) {
if (err) {
let files = [] console.error(err)
let existingFiles = [] return res.json({
let iteration = 1 success: false,
description: err
req.files.forEach(function(file) {
// Check if the file exists by checking hash and size
let hash = crypto.createHash('md5')
let stream = fs.createReadStream(path.join(__dirname, '..', config.uploads.folder, file.filename))
stream.on('data', function (data) {
hash.update(data, 'utf8')
})
stream.on('end', function () {
let fileHash = hash.digest('hex')
db.table('files')
.where(function() {
if (userid === undefined)
this.whereNull('userid')
else
this.where('userid', userid)
}) })
.where({ }
hash: fileHash,
size: file.size
}).then((dbfile) => {
if (dbfile.length !== 0) { if (req.files.length === 0) return res.json({ success: false, description: 'no-files' })
uploadsController.deleteFile(file.filename).then(() => {}).catch((e) => console.error(e))
existingFiles.push(dbfile[0])
} else {
files.push({
name: file.filename,
original: file.originalname,
type: file.mimetype,
size: file.size,
hash: fileHash,
ip: req.ip,
albumid: album,
userid: userid,
timestamp: Math.floor(Date.now() / 1000)
})
}
if (iteration === req.files.length) let files = []
return uploadsController.processFilesForDisplay(req, res, files, existingFiles) let existingFiles = []
iteration++ let iteration = 1
}).catch(function(error) { console.log(error); res.json({ success: false, description: 'error' }) })
req.files.forEach(function(file) {
// Check if the file exists by checking hash and size
let hash = crypto.createHash('md5')
let stream = fs.createReadStream(path.join(__dirname, '..', config.uploads.folder, file.filename))
stream.on('data', function (data) {
hash.update(data, 'utf8')
})
stream.on('end', function () {
let fileHash = hash.digest('hex')
db.table('files')
.where(function() {
if (userid === undefined)
this.whereNull('userid')
else
this.where('userid', userid)
})
.where({
hash: fileHash,
size: file.size
}).then((dbfile) => {
if (dbfile.length !== 0) {
uploadsController.deleteFile(file.filename).then(() => {}).catch((e) => console.error(e))
existingFiles.push(dbfile[0])
} else {
files.push({
name: file.filename,
original: file.originalname,
type: file.mimetype,
size: file.size,
hash: fileHash,
ip: req.ip,
albumid: album,
userid: userid,
timestamp: Math.floor(Date.now() / 1000)
})
}
if (iteration === req.files.length)
return uploadsController.processFilesForDisplay(req, res, files, existingFiles)
iteration++
}).catch(function(error) { console.log(error); res.json({ success: false, description: 'error' }) })
})
}) })
}) })
}) })
@ -268,7 +277,7 @@ uploadsController.list = function(req, res) {
file.date = utils.getPrettyDate(file.date) // file.date.getFullYear() + '-' + (file.date.getMonth() + 1) + '-' + file.date.getDate() + ' ' + (file.date.getHours() < 10 ? '0' : '') + file.date.getHours() + ':' + (file.date.getMinutes() < 10 ? '0' : '') + file.date.getMinutes() + ':' + (file.date.getSeconds() < 10 ? '0' : '') + file.date.getSeconds() file.date = utils.getPrettyDate(file.date) // file.date.getFullYear() + '-' + (file.date.getMonth() + 1) + '-' + file.date.getDate() + ' ' + (file.date.getHours() < 10 ? '0' : '') + file.date.getHours() + ':' + (file.date.getMinutes() < 10 ? '0' : '') + file.date.getMinutes() + ':' + (file.date.getSeconds() < 10 ? '0' : '') + file.date.getSeconds()
file.album = '' file.album = ''
if (file.albumid !== undefined) if (file.albumid !== undefined)
for (let album of albums) for (let album of albums)
if (file.albumid === album.id) if (file.albumid === album.id)