From 208070d2e776c437154e6ead552364b3956adf1c Mon Sep 17 00:00:00 2001 From: Dylan Dervaux Date: Fri, 1 Feb 2019 12:33:27 +0100 Subject: [PATCH] Add lutim support Signed-off-by: Dylan Dervaux --- docs/configuration-config-file.md | 10 ++++++++-- docs/configuration-env-vars.md | 8 +++++++- lib/config/default.js | 5 ++++- lib/config/environment.js | 3 +++ lib/config/index.js | 4 ++-- lib/web/imageRouter/lutim.js | 31 +++++++++++++++++++++++++++++++ package.json | 1 + 7 files changed, 56 insertions(+), 6 deletions(-) create mode 100644 lib/web/imageRouter/lutim.js diff --git a/docs/configuration-config-file.md b/docs/configuration-config-file.md index ca02794..cbc6534 100644 --- a/docs/configuration-config-file.md +++ b/docs/configuration-config-file.md @@ -1,7 +1,7 @@ Configuration Using Config file === -You can choose to configure CodiMD with either a config file or with +You can choose to configure CodiMD with either a config file or with [environment variables](configuration-env-vars.md). The config file is processed in [`lib/config/index.js`](../lib/config/index.js) - so this is the first place to look if anything is missing not obvious from this document. The @@ -29,7 +29,7 @@ to `config.json` before filling in your own details. | `dbURL` | `mysql://localhost:3306/database` | set the db URL; if set, then db config (below) won't be applied | | `forbiddenNoteIDs` | `['robots.txt']` | disallow creation of notes, even if `allowFreeUrl` is `true` | | `loglevel` | `info` | Defines what kind of logs are provided to stdout. | -| `imageUploadType` | `imgur`, `s3`, `minio`, `azure` or `filesystem`(default) | Where to upload images. For S3, see our Image Upload Guides for [S3](guides/s3-image-upload.md) or [Minio](guides/minio-image-upload.md)| +| `imageUploadType` | `imgur`, `s3`, `minio`, `azure`, `lutim` or `filesystem`(default) | Where to upload images. For S3, see our Image Upload Guides for [S3](guides/s3-image-upload.md) or [Minio](guides/minio-image-upload.md)| | `sourceURL` | `https://github.com/codimd/server/tree/` | Provides the link to the source code of CodiMD on the entry page (Please, make sure you change this when you run a modified version) | | `staticCacheTime` | `1 * 24 * 60 * 60 * 1000` | static file cache time | | `heartbeatInterval` | `5000` | socket.io heartbeat interval | @@ -144,4 +144,10 @@ Most of these have never been documented for the config.json, feel free to expan | --------- | ------ | ----------- | | `minio` | `{ "accessKey": "YOUR_MINIO_ACCESS_KEY", "secretKey": "YOUR_MINIO_SECRET_KEY", "endpoint": "YOUR_MINIO_HOST", port: 9000, secure: true }` | When `imageUploadType` is set to `minio`, you need to set this key. Also check out our [Minio Image Upload Guide](guides/minio-image-upload.md) | +### Lutim + +| variables | example values | description | +| --------- | ------ | ----------- | +|`lutim`| `{"url": "YOUR_LUTIM_URL"}`| When `imageUploadType` is set to `lutim`, you can setup the lutim url| + 1: relative paths are based on CodiMD's base directory diff --git a/docs/configuration-env-vars.md b/docs/configuration-env-vars.md index b512f48..ba635cd 100644 --- a/docs/configuration-env-vars.md +++ b/docs/configuration-env-vars.md @@ -33,7 +33,7 @@ defaultNotePath can't be set from env-vars | `CMD_DB_URL` | `mysql://localhost:3306/database` | set the database URL | | `CMD_LOGLEVEL` | `info`, `debug` ... | Defines what kind of logs are provided to stdout. | | `CMD_FORBIDDEN_NOTE_IDS` | `'robots.txt'` | disallow creation of notes, even if `CMD_ALLOW_FREEURL` is `true` | -| `CMD_IMAGE_UPLOAD_TYPE` | `imgur`, `s3`, `minio` or `filesystem` | Where to upload images. For S3, see our Image Upload Guides for [S3](guides/s3-image-upload.md) or [Minio](guides/minio-image-upload.md), also there's a whole section on their respective env vars below. | +| `CMD_IMAGE_UPLOAD_TYPE` | `imgur`, `s3`, `minio`, `lutim` or `filesystem` | Where to upload images. For S3, see our Image Upload Guides for [S3](guides/s3-image-upload.md) or [Minio](guides/minio-image-upload.md), also there's a whole section on their respective env vars below. | | `CMD_SOURCE_URL` | `https://github.com/codimd/server/tree/` | Provides the link to the source code of CodiMD on the entry page (Please, make sure you change this when you run a modified version) | @@ -244,6 +244,12 @@ you don't have to use either of these. | `CMD_MINIO_SECURE` | `true` | If set to `true` HTTPS is used for Minio | +### Lutim + +| variable | example value | description | +| -------- | ------------- | ----------- | +| `CMD_LUTIM_URL` | `https://framapic.org/` | When `CMD_IMAGE_UPLOAD_TYPE` is set to `lutim`, you can setup the lutim url | + **Note:** *Due to the rename process we renamed all `HMD_`-prefix variables to be `CMD_`-prefixed. The old ones continue to work.* **Note:** *relative paths are based on CodiMD's base directory* diff --git a/lib/config/default.js b/lib/config/default.js index 98ccee9..c87beda 100644 --- a/lib/config/default.js +++ b/lib/config/default.js @@ -58,8 +58,11 @@ module.exports = { heartbeatTimeout: 10000, // document documentMaxLength: 100000, - // image upload setting, available options are imgur/s3/filesystem/azure + // image upload setting, available options are imgur/s3/filesystem/azure/lutim imageUploadType: 'filesystem', + lutim: { + url: 'https://framapic.org/' + }, imgur: { clientID: undefined }, diff --git a/lib/config/environment.js b/lib/config/environment.js index 882df14..508c1ba 100644 --- a/lib/config/environment.js +++ b/lib/config/environment.js @@ -49,6 +49,9 @@ module.exports = { secure: toBooleanConfig(process.env.CMD_MINIO_SECURE), port: toIntegerConfig(process.env.CMD_MINIO_PORT) }, + lutim: { + url: process.env.CMD_LUTIM_URL + }, s3bucket: process.env.CMD_S3_BUCKET, azure: { connectionString: process.env.CMD_AZURE_CONNECTION_STRING, diff --git a/lib/config/index.js b/lib/config/index.js index 4c28196..e102dce 100644 --- a/lib/config/index.js +++ b/lib/config/index.js @@ -164,8 +164,8 @@ if (config.sessionSecret === 'secret') { } // Validate upload upload providers -if (['filesystem', 's3', 'minio', 'imgur', 'azure'].indexOf(config.imageUploadType) === -1) { - logger.error('"imageuploadtype" is not correctly set. Please use "filesystem", "s3", "minio", "azure" or "imgur". Defaulting to "filesystem"') +if (['filesystem', 's3', 'minio', 'imgur', 'azure', 'lutim'].indexOf(config.imageUploadType) === -1) { + logger.error('"imageuploadtype" is not correctly set. Please use "filesystem", "s3", "minio", "azure", "lutim" or "imgur". Defaulting to "filesystem"') config.imageUploadType = 'filesystem' } diff --git a/lib/web/imageRouter/lutim.js b/lib/web/imageRouter/lutim.js new file mode 100644 index 0000000..78b856c --- /dev/null +++ b/lib/web/imageRouter/lutim.js @@ -0,0 +1,31 @@ +'use strict' +const config = require('../../config') +const logger = require('../../logger') + +const lutim = require('lutim') + +exports.uploadImage = function (imagePath, callback) { + if (!imagePath || typeof imagePath !== 'string') { + callback(new Error('Image path is missing or wrong'), null) + return + } + + if (!callback || typeof callback !== 'function') { + logger.error('Callback has to be a function') + return + } + + if (config.lutim && config.lutim.url) { + lutim.setAPIUrl(config.lutim.url) + } + + lutim.uploadImage(imagePath) + .then(function (json) { + if (config.debug) { + logger.info('SERVER uploadimage success: ' + JSON.stringify(json)) + } + callback(null, lutim.getAPIUrl() + json.msg.short) + }).catch(function (err) { + callback(new Error(err), null) + }) +} diff --git a/package.json b/package.json index f265c6f..2c43732 100644 --- a/package.json +++ b/package.json @@ -62,6 +62,7 @@ "keymaster": "^1.6.2", "list.js": "^1.5.0", "lodash": "^4.17.11", + "lutim": "^1.0.2", "lz-string": "git+https://github.com/hackmdio/lz-string.git", "markdown-it": "^8.2.2", "markdown-it-abbr": "^1.0.4",