summaryrefslogtreecommitdiff
path: root/lib/web/imageRouter.js
diff options
context:
space:
mode:
authorSheogorath2018-03-18 02:14:50 +0100
committerSheogorath2018-03-20 11:00:11 +0100
commit1756e76dc31495d03c8792fa672ae6bb94d24ea8 (patch)
treecc6e8a8e946458e152e81806a5e5a3079fcc138f /lib/web/imageRouter.js
parent9cbe03d8a8eb503170b7b481e97c37d66447dd37 (diff)
Refactoring imageRouter to modularity
This should make the imageRouter more modular and easier to extent. Also a lot of code duplication was removed which should simplify maintenance in future. In the new setup we only need to provide a new module file which exports a function called `uploadImage` and takes a filePath and a callback as argument. The callback itself takes an error and an url as parameter. This eliminates the need of a try-catch-block around the statement and re-enabled the optimization in NodeJS. Signed-off-by: Sheogorath <sheogorath@shivering-isles.com>
Diffstat (limited to '')
-rw-r--r--lib/web/imageRouter.js132
1 files changed, 0 insertions, 132 deletions
diff --git a/lib/web/imageRouter.js b/lib/web/imageRouter.js
deleted file mode 100644
index 483be64b..00000000
--- a/lib/web/imageRouter.js
+++ /dev/null
@@ -1,132 +0,0 @@
-'use strict'
-var fs = require('fs')
-var url = require('url')
-var path = require('path')
-
-const Router = require('express').Router
-const formidable = require('formidable')
-var imgur = require('imgur')
-
-const config = require('../config')
-const logger = require('../logger')
-const response = require('../response')
-
-const imageRouter = module.exports = Router()
-
-// upload image
-imageRouter.post('/uploadimage', function (req, res) {
- var form = new formidable.IncomingForm()
-
- form.keepExtensions = true
-
- if (config.imageuploadtype === 'filesystem') {
- form.uploadDir = 'public/uploads'
- }
-
- form.parse(req, function (err, fields, files) {
- if (err || !files.image || !files.image.path) {
- response.errorForbidden(res)
- } else {
- if (config.debug) { logger.info('SERVER received uploadimage: ' + JSON.stringify(files.image)) }
-
- try {
- switch (config.imageuploadtype) {
- case 'filesystem':
- res.send({
- link: url.resolve(config.serverurl + '/', files.image.path.match(/^public\/(.+$)/)[1])
- })
-
- break
-
- case 's3':
- var AWS = require('aws-sdk')
- var awsConfig = new AWS.Config(config.s3)
- var s3 = new AWS.S3(awsConfig)
- const {getImageMimeType} = require('../utils')
- fs.readFile(files.image.path, function (err, buffer) {
- if (err) {
- logger.error(err)
- res.status(500).end('upload image error')
- return
- }
- var params = {
- Bucket: config.s3bucket,
- Key: path.join('uploads', path.basename(files.image.path)),
- Body: buffer
- }
-
- var mimeType = getImageMimeType(files.image.path)
- if (mimeType) { params.ContentType = mimeType }
-
- s3.putObject(params, function (err, data) {
- if (err) {
- logger.error(err)
- res.status(500).end('upload image error')
- return
- }
-
- var s3Endpoint = 's3.amazonaws.com'
- if (config.s3.region && config.s3.region !== 'us-east-1') { s3Endpoint = `s3-${config.s3.region}.amazonaws.com` }
- res.send({
- link: `https://${s3Endpoint}/${config.s3bucket}/${params.Key}`
- })
- })
- })
- break
-
- case 'minio':
- var utils = require('../utils')
- var Minio = require('minio')
- var minioClient = new Minio.Client({
- endPoint: config.minio.endPoint,
- port: config.minio.port,
- secure: config.minio.secure,
- accessKey: config.minio.accessKey,
- secretKey: config.minio.secretKey
- })
- fs.readFile(files.image.path, function (err, buffer) {
- if (err) {
- logger.error(err)
- res.status(500).end('upload image error')
- return
- }
-
- var key = path.join('uploads', path.basename(files.image.path))
- var protocol = config.minio.secure ? 'https' : 'http'
-
- minioClient.putObject(config.s3bucket, key, buffer, buffer.size, utils.getImageMimeType(files.image.path), function (err, data) {
- if (err) {
- logger.error(err)
- res.status(500).end('upload image error')
- return
- }
- res.send({
- link: `${protocol}://${config.minio.endPoint}:${config.minio.port}/${config.s3bucket}/${key}`
- })
- })
- })
- break
-
- case 'imgur':
- default:
- imgur.setClientId(config.imgur.clientID)
- imgur.uploadFile(files.image.path)
- .then(function (json) {
- if (config.debug) { logger.info('SERVER uploadimage success: ' + JSON.stringify(json)) }
- res.send({
- link: json.data.link.replace(/^http:\/\//i, 'https://')
- })
- })
- .catch(function (err) {
- logger.error(err)
- return res.status(500).end('upload image error')
- })
- break
- }
- } catch (err) {
- logger.error(err)
- return res.status(500).end('upload image error')
- }
- }
- })
-})