-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfiles.js
87 lines (69 loc) · 2.28 KB
/
files.js
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
const router = require('express').Router()
const path = require('path')
const multer = require('multer')
const File = require('../models/File')
const { v4: uuid4 } = require('uuid')
const sendEmail = require('../services/emailService')
require('dotenv').config()
const storage = multer.diskStorage({
destination: (req, file, cb) => {
cb(null, 'uploads/')
},
filename: (req, file, cb) => {
const uniqueName = `${Date.now()}-${Math.round(Math.random() * 1E9)}${path.extname(file.originalname)}`
cb(null, uniqueName)
}
})
const upload = multer({
storage: storage,
limits: { fieldSize: 1000000 * 100 }
}).single('myfile')
router.post('/', (req, res) => {
upload(req, res, async (err) => {
if (!req.file) {
return res.json({ error: "All fields required." })
}
if (err) {
return res.status(500).send({ error: err.message })
}
const fileUpload = new File({
filename: req.file.filename,
uuid: uuid4(),
path: req.file.path,
size: req.file.size
})
const response = await fileUpload.save()
return res.render('pathsToDownload', {
filePath: `${process.env.APP_BASE_URL}/files/${response.uuid}`,
uuid: response.uuid,
})
})
})
router.post('/send', async (req, res) => {
const { uuid, emailFrom, emailTo } = req.body;
if (!uuid || !emailFrom || !emailTo) {
return res.status(422).send({ error: "All fields are required." })
}
const file = await File.findOne({ uuid: uuid })
if (file.sender) {
return res.status(422).send({ error: "Email Already sent." })
}
file.sender = emailFrom
file.reciever = emailTo
const response = await file.save()
// Send Email
sendEmail({
from: emailFrom,
to: emailTo,
subject: 'FileShare',
text: `${emailFrom} has shared an email with you.`,
html: require('../services/emailTemplate')( {
text: `${emailFrom} has shared an email with you.`,
downloadLink: `${process.env.APP_BASE_URL}/file/download/${file.uuid}`,
size: file.size,
expires: "24 hours"
} )
})
return res.send({ success: true })
})
module.exports = router