diff --git a/applications/tempfiles/index.js b/applications/tempfiles/index.js index cab9556..0e39383 100644 --- a/applications/tempfiles/index.js +++ b/applications/tempfiles/index.js @@ -64,6 +64,15 @@ async function clearDatabase (config, dbPromise) { files.length, hashes.length, shorts.length) } +function handleAuthHeader (req, res) { + let header = req.header('authorization') + if (!header) return null + let token = header.split(/\s+/).pop() || '' + let auth = Buffer.from(token, 'base64').toString() + let parts = auth.split(/:/) + return (parts[1] && parts[1] !== '') ? parts[1] : null +} + async function init () { // Load configuration let config = await cfgLoader @@ -79,16 +88,28 @@ async function init () { await clearDatabase(config, dbPromise) + // Upload file form + router.get('/publish', (req, res, next) => { + let token = handleAuthHeader(req, res) + if (!token || !config.tokens[token]) { + return res.status(401).set('WWW-Authenticate', 'Basic realm="Token Auth", charset="UTF-8"').end() + } + next() + }, async (req, res) => { + res.sendFile(path.join(__dirname, 'up.html')) + }) + // Upload a file or publish a hash router.post('/publish', async (req, res, next) => { let ip = req.ip let token = req.header('token') || req.body.token + if (req.header('authorization')) token = handleAuthHeader(req, res) if (!token || !config.tokens[token]) return res.status(402).send('Forbidden') let baseurl = config.tokens[token] // Handle IPFS hash let hash = req.query.hash || req.body.hash - if (hash) { + if (hash && hash !== '') { let filename = req.query.filename || req.body.filename if (!filename) filename = crypto.randomBytes(8).toString('hex') @@ -146,14 +167,22 @@ async function init () { } if (uploadedFiles.length === 0) return res.status(400).send('No files were uploaded') + let tagify = fields && fields['tagify'] + if (tagify != null) { + for (let i in uploadedFiles) { + uploadedFiles[i] = '' + uploadedFiles[i] + '' + } + } - res.send(uploadedFiles.join('\n')) + res.send(uploadedFiles.join(tagify ? '
' : '\n')) }) + // Shorten URL form router.get('/shorten', async (req, res) => { res.sendFile(path.join(__dirname, 'go.html')) }) + // Shorten URLs router.post('/shorten', async (req, res) => { let ip = req.ip let url = req.body.url