diff --git a/ass.js b/ass.js index dfcb21c..9b30461 100644 --- a/ass.js +++ b/ass.js @@ -1,12 +1,12 @@ require('dotenv').config(); const fs = require('fs-extra'); -const path = require('path'); const uuid = require('uuid').v4; const express = require('express'); const multer = require('multer'); const zws = require('./zws'); +const { path, saveData, log, verify } = require('./utils'); -//#region Variables? +//#region Variables, module setup const app = express(); const upload = multer({ dest: 'uploads/' }); const resourceIdSize = 8; @@ -18,38 +18,53 @@ startup(); function preStartup() { // Make sure .env exists - if (!fs.existsSync(path.join(__dirname, '.env'))) fs.copyFileSync(path.join(__dirname, '.env.example'), path.join(__dirname, '.env')); + if (!fs.existsSync(path('.env'))) { + fs.copyFileSync(path('.env.example'), path('.env')); + log('File [.env] created'); + require('dotenv').config(); + } else log('File [.env] exists'); // Make sure data.json exists - if (!fs.existsSync(path.join(__dirname, 'data.json'))) fs.writeJsonSync(path.join(__dirname, 'data.json'), data, { spaces: 4 }); + if (!fs.existsSync(path('data.json'))) { + fs.writeJsonSync(path('data.json'), data, { spaces: 4 }); + log('File [data.json] created'); + } else log('File [data.json] exists'); // Make sure auth.json exists and generate the first key - if (!fs.existsSync(path.join(__dirname, 'auth.json'))) { + if (!fs.existsSync(path('auth.json'))) { tokens.push(uuid().replace(/-/g, '')); - fs.writeJsonSync(path.join(__dirname, 'auth.json'), { tokens }, { spaces: 4 }); - console.log('!! Important: save this token in a secure spot: ' + tokens[0]); - } + fs.writeJsonSync(path('auth.json'), { tokens }, { spaces: 4 }); + log('File [auth.json] created'); - // Read tokens and data - tokens = fs.readJsonSync(path.join(__dirname, 'auth.json')).tokens; - data = fs.readJsonSync(path.join(__dirname, 'data.json')); + log(`\n!! Important: save this token in a secure spot: ${tokens[0]}`); + } else log('File [auth.json] exists'); + // Read tokens and data + tokens = fs.readJsonSync(path('auth.json')).tokens; + data = fs.readJsonSync(path('data.json')); + log('Tokens & data read from filesystem'); } function startup() { - app.post('/', upload.single('file'), (req, res, next) => { - if (!req.headers.authorization || !tokens.includes(req.headers.authorization)) return res.sendStatus(401); + // Upload file + app.post('/', upload.single('file'), (req, res) => { + if (!verify(req, tokens)) return res.sendStatus(401); + + log(`Uploaded: ${req.file.originalname} (${req.file.mimetype})`); + // Save the file information let resourceId = zws(resourceIdSize); data[resourceId] = req.file; + saveData(data); res.type('text').send(`http://lh:${process.env.PORT}/${resourceId}`); }); + // View file app.get('/:resourceId', (req, res) => { let resourceId = req.params.resourceId; - console.log(data); - if (data[resourceId]) res.type(data[resourceId].mimetype).sendFile(path.join(__dirname, data[resourceId].path)); + if (data[resourceId]) res.type(data[resourceId].mimetype).sendFile(path(data[resourceId].path)); + else res.sendStatus(404); }); app.listen(process.env.PORT, () => console.log(`Server started on port ${process.env.PORT}`));