aboutsummaryrefslogtreecommitdiff
path: root/controllers/uploadController.js
blob: cbb4e646f152dd6390b7d9d76b896408329617dd (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
const path = require('path')
const config = require('../config.js')
const multer  = require('multer')
const randomstring = require('randomstring')
const db = require('knex')(config.database)

let uploadsController = {}

const storage = multer.diskStorage({
	destination: function (req, file, cb) {
		cb(null, './' + config.uploads.folder + '/')
	},
	filename: function (req, file, cb) {
		cb(null, randomstring.generate(config.uploads.fileLength) + path.extname(file.originalname))
	}
})

const upload = multer({
	storage: storage,
	limits: { fileSize: config.uploads.maxsize }
}).array('files[]')

uploadsController.upload = function(req, res, next){

	if(config.private === true)
		if(req.headers.auth !== config.clientToken)
			return res.status(401).send('not-authorized')

	let album = req.headers.album
	
	if(album !== undefined)
		if(req.headers.adminauth !== config.adminToken)
			return res.status(401).send('not-authorized')
	
	upload(req, res, function (err) {
		if (err) {
			console.error(err)
			return res.json({ 
				success: false,
				description: err
			})
		}

		let files = []
		req.files.forEach(function(file) {
			files.push({
				name: file.filename, 
				original: file.originalname,
				type: file.mimetype,
				size: file.size, 
				ip: req.ip,
				albumid: album,
				timestamp: Math.floor(Date.now() / 1000)
			})
		})

		db.table('files').insert(files).then(() => {
			
			res.json({
				success: true,
				files: files.map(file => {
					return {
						name: file.name,
						size: file.size,
						url: config.basedomain + file.name
					}
				})
			})

		})
	})

}

uploadsController.list = function(req, res){

	if(req.headers.auth !== config.adminToken)
		return res.status(401).send('not-authorized')

	db.table('files')
	.where(function(){
		if(req.headers.albumid === undefined)
			this.where('id', '<>', '')
		else
			this.where('albumid', req.headers.albumid)
	})
	.then((files) => {
		db.table('albums').then((albums) => {

			for(let file of files){
				file.file = config.basedomain + config.uploads.prefix + file.name
				file.date = new Date(file.timestamp * 1000)
				file.date = file.date.getFullYear() + '-' + file.date.getMonth() + '-' + 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 = ''
				
				if(file.albumid !== undefined)
					for(let album of albums)
						if(file.albumid === album.id)
							file.album = album.name

			}

			return res.json(files)
		})

	})
}

module.exports = uploadsController