Skip to content
Snippets Groups Projects
Commit 7ff4c6d0 authored by Bogdan Cochior's avatar Bogdan Cochior
Browse files

feat(mts): add ftp upload

parent 5f745dc6
No related branches found
No related tags found
2 merge requests!21Sprint #16 features,!15MTS integration
...@@ -23,8 +23,19 @@ const defaultS3Config = { ...@@ -23,8 +23,19 @@ const defaultS3Config = {
bucket: process.env.AWS_S3_BUCKET, bucket: process.env.AWS_S3_BUCKET,
} }
const defaultFTPConfig = {
user: 'dlpuser@dlptest.com',
password: '3D6XZV9MKdhM5fF',
host: 'ftp.dlptest.com',
port: 21,
localRoot: `../files`,
remoteRoot: '/',
exclude: ['*.js'],
}
module.exports = { module.exports = {
defaultConfig, defaultConfig,
defaultParseXmlOptions, defaultParseXmlOptions,
defaultS3Config, defaultS3Config,
defaultFTPConfig,
} }
...@@ -3,7 +3,9 @@ ...@@ -3,7 +3,9 @@
"version": "1.0.0", "version": "1.0.0",
"description": "Create package for MTS integration", "description": "Create package for MTS integration",
"main": "index.js", "main": "index.js",
"files": ["src"], "files": [
"src"
],
"scripts": { "scripts": {
"test": "jest", "test": "jest",
"convert": "xml-js xml.xml --spaces 4 --out test.json" "convert": "xml-js xml.xml --spaces 4 --out test.json"
...@@ -33,6 +35,7 @@ ...@@ -33,6 +35,7 @@
"dependencies": { "dependencies": {
"archiver": "^2.1.1", "archiver": "^2.1.1",
"aws-sdk": "^2.185.0", "aws-sdk": "^2.185.0",
"ftp-deploy": "^2.1.2",
"lodash": "^4.17.10", "lodash": "^4.17.10",
"xml-js": "^1.6.7" "xml-js": "^1.6.7"
} }
......
...@@ -4,11 +4,12 @@ const { get } = require('lodash') ...@@ -4,11 +4,12 @@ const { get } = require('lodash')
const { promisify } = require('util') const { promisify } = require('util')
const nodeArchiver = require('archiver') const nodeArchiver = require('archiver')
const logger = require('@pubsweet/logger') const logger = require('@pubsweet/logger')
const FtpDeploy = require('ftp-deploy')
const filterByType = (fileTypes = []) => ({ Metadata: { filetype } }) => const filterByType = (fileTypes = []) => ({ Metadata: { filetype } }) =>
fileTypes.length > 0 ? fileTypes.includes(filetype) : true fileTypes.length > 0 ? fileTypes.includes(filetype) : true
const createFilesPackage = (s3Config, archiver = nodeArchiver) => { const createFilesPackage = (s3Config, ftpConfig, archiver = nodeArchiver) => {
AWS.config.update({ AWS.config.update({
secretAccessKey: s3Config.secretAccessKey, secretAccessKey: s3Config.secretAccessKey,
accessKeyId: s3Config.accessKeyId, accessKeyId: s3Config.accessKeyId,
...@@ -57,11 +58,13 @@ const createFilesPackage = (s3Config, archiver = nodeArchiver) => { ...@@ -57,11 +58,13 @@ const createFilesPackage = (s3Config, archiver = nodeArchiver) => {
throw err throw err
}) })
archive.on('end', err => { archive.on('end', err => {
const filename = `${manuscriptName}.zip`
if (err) throw err if (err) throw err
uploadToS3({ uploadFiles({
s3, s3,
filename: `${manuscriptName}.zip`, filename,
Bucket: s3Config.bucket, Bucket: s3Config.bucket,
config: ftpConfig,
}) })
}) })
archive.finalize() archive.finalize()
...@@ -85,28 +88,35 @@ const readFile = filename => ...@@ -85,28 +88,35 @@ const readFile = filename =>
}) })
}) })
const uploadToS3 = async ({ s3, filename, Bucket }) => { const uploadFiles = async ({ s3, filename, Bucket, config }) => {
const data = await readFile(filename) const data = await readFile(filename)
const params = { const params = {
Bucket, Bucket,
Body: data, Body: data,
Key: `mts/${filename}`, Key: `mts/${filename}`,
} }
s3.upload(params, (err, data) => { s3.upload(params, async err => {
await uploadFTP({ filename, config })
.then(res => {
logger.info(`Successfully uploaded ${filename} to FTP`)
})
.catch(err => {
logger.error(err)
})
deleteFile(filename) deleteFile(filename)
if (err) { if (err) {
throw err throw err
} else { } else {
logger.info(`Successfully uploaded ${filename}`) logger.info(`Successfully uploaded ${filename} to S3`)
} }
}) })
} }
const deleteFile = filename => { const deleteFile = filename => {
fs.access(filename, fs.constants.F_OK, err => { fs.access(filename, fs.constants.F_OK, err => {
if (err) { if (!err) {
if (err) throw err
} else {
fs.unlink(filename, err => { fs.unlink(filename, err => {
if (err) throw err if (err) throw err
logger.info(`Deleted ${filename}`) logger.info(`Deleted ${filename}`)
...@@ -115,4 +125,13 @@ const deleteFile = filename => { ...@@ -115,4 +125,13 @@ const deleteFile = filename => {
}) })
} }
const uploadFTP = ({ filename, config }) => {
const ftpDeploy = new FtpDeploy()
const configs = {
...config,
include: [filename],
}
return ftpDeploy.deploy(configs)
}
module.exports = createFilesPackage module.exports = createFilesPackage
...@@ -7,6 +7,7 @@ const { ...@@ -7,6 +7,7 @@ const {
defaultConfig, defaultConfig,
defaultParseXmlOptions, defaultParseXmlOptions,
defaultS3Config, defaultS3Config,
defaultFTPConfig,
} = require('../config/default') } = require('../config/default')
class MTS { class MTS {
...@@ -14,11 +15,13 @@ class MTS { ...@@ -14,11 +15,13 @@ class MTS {
config = defaultConfig, config = defaultConfig,
options = defaultParseXmlOptions, options = defaultParseXmlOptions,
s3Config = defaultS3Config, s3Config = defaultS3Config,
ftpConfig = defaultFTPConfig,
) { ) {
this.config = config this.config = config
this.options = options this.options = options
this.jsonTemplate = mts.getJsonTemplate(config) this.jsonTemplate = mts.getJsonTemplate(config)
this.s3Config = s3Config this.s3Config = s3Config
this.ftpConfig = ftpConfig
} }
createFileName(id = Date.now()) { createFileName(id = Date.now()) {
...@@ -208,7 +211,10 @@ class MTS { ...@@ -208,7 +211,10 @@ class MTS {
async createMTSPackage(fragment = {}) { async createMTSPackage(fragment = {}) {
const xmlFile = this.convertFragmentToXML(fragment) const xmlFile = this.convertFragmentToXML(fragment)
await createFilesPackage(this.s3Config)({ fragment, xmlFile }) await createFilesPackage(this.s3Config, this.ftpConfig)({
fragment,
xmlFile,
})
} }
} }
......
...@@ -85,6 +85,13 @@ ...@@ -85,6 +85,13 @@
lodash "^4.2.0" lodash "^4.2.0"
to-fast-properties "^2.0.0" to-fast-properties "^2.0.0"
"@icetee/ftp@^0.3.15":
version "0.3.15"
resolved "https://registry.yarnpkg.com/@icetee/ftp/-/ftp-0.3.15.tgz#d32efd91ab7585f0a3b6cbed9ceffe2763b04ec6"
dependencies:
readable-stream "1.1.x"
xregexp "2.0.0"
"@pubsweet/component-aws-s3@^1.1.2": "@pubsweet/component-aws-s3@^1.1.2":
version "1.1.2" version "1.1.2"
resolved "https://registry.yarnpkg.com/@pubsweet/component-aws-s3/-/component-aws-s3-1.1.2.tgz#ef7c6c7f22a19ce6f547412b73ab8de3fc81c3ee" resolved "https://registry.yarnpkg.com/@pubsweet/component-aws-s3/-/component-aws-s3-1.1.2.tgz#ef7c6c7f22a19ce6f547412b73ab8de3fc81c3ee"
...@@ -844,20 +851,6 @@ aws-sdk@^2.185.0, aws-sdk@^2.197.0, aws-sdk@^2.2.36: ...@@ -844,20 +851,6 @@ aws-sdk@^2.185.0, aws-sdk@^2.197.0, aws-sdk@^2.2.36:
xml2js "0.4.17" xml2js "0.4.17"
xmlbuilder "4.2.1" xmlbuilder "4.2.1"
aws-sdk@^2.281.1:
version "2.281.1"
resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.281.1.tgz#12ef82cf8a70a2c97c90e644038684a01cb8cc0c"
dependencies:
buffer "4.9.1"
events "1.1.1"
ieee754 "1.1.8"
jmespath "0.15.0"
querystring "0.2.0"
sax "1.2.1"
url "0.10.3"
uuid "3.1.0"
xml2js "0.4.19"
aws-sign2@~0.6.0: aws-sign2@~0.6.0:
version "0.6.0" version "0.6.0"
resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f"
...@@ -1647,6 +1640,10 @@ block-stream@*: ...@@ -1647,6 +1640,10 @@ block-stream@*:
dependencies: dependencies:
inherits "~2.0.0" inherits "~2.0.0"
bluebird@2.x:
version "2.11.0"
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-2.11.0.tgz#534b9033c022c9579c56ba3b3e5a5caafbb650e1"
bluebird@^3.4.7, bluebird@^3.5.0, bluebird@^3.5.1: bluebird@^3.4.7, bluebird@^3.5.0, bluebird@^3.5.1:
version "3.5.1" version "3.5.1"
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9"
...@@ -3658,7 +3655,7 @@ eventemitter2@0.4.14: ...@@ -3658,7 +3655,7 @@ eventemitter2@0.4.14:
version "0.4.14" version "0.4.14"
resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-0.4.14.tgz#8f61b75cde012b2e9eb284d4545583b5643b61ab" resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-0.4.14.tgz#8f61b75cde012b2e9eb284d4545583b5643b61ab"
events@1.1.1, events@^1.0.0, events@^1.1.1: events@^1.0.0, events@^1.1.1:
version "1.1.1" version "1.1.1"
resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924"
...@@ -4097,6 +4094,16 @@ fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2: ...@@ -4097,6 +4094,16 @@ fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2:
mkdirp ">=0.5 0" mkdirp ">=0.5 0"
rimraf "2" rimraf "2"
ftp-deploy@^2.1.2:
version "2.1.2"
resolved "https://registry.yarnpkg.com/ftp-deploy/-/ftp-deploy-2.1.2.tgz#d8b4c6619f563eff189fa64ee1f5c8159ca15960"
dependencies:
bluebird "^3.5.1"
minimatch "3.0.4"
promise-ftp "^1.3.5"
read "^1.0.7"
upath "^1.0.5"
function-bind@^1.0.2, function-bind@^1.1.0, function-bind@^1.1.1: function-bind@^1.0.2, function-bind@^1.1.0, function-bind@^1.1.1:
version "1.1.1" version "1.1.1"
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
...@@ -4674,7 +4681,7 @@ icss-utils@^2.1.0: ...@@ -4674,7 +4681,7 @@ icss-utils@^2.1.0:
dependencies: dependencies:
postcss "^6.0.1" postcss "^6.0.1"
ieee754@1.1.8, ieee754@^1.1.4: ieee754@^1.1.4:
version "1.1.8" version "1.1.8"
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4"
...@@ -6267,7 +6274,7 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: ...@@ -6267,7 +6274,7 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1:
version "1.0.1" version "1.0.1"
resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4, minimatch@~3.0.2: minimatch@3.0.4, minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4, minimatch@~3.0.2:
version "3.0.4" version "3.0.4"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
dependencies: dependencies:
...@@ -7548,6 +7555,18 @@ progress@^2.0.0: ...@@ -7548,6 +7555,18 @@ progress@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f"
promise-ftp-common@^1.1.5:
version "1.1.5"
resolved "https://registry.yarnpkg.com/promise-ftp-common/-/promise-ftp-common-1.1.5.tgz#b4f8082a74035647703506763edb14230d9865da"
promise-ftp@^1.3.5:
version "1.3.5"
resolved "https://registry.yarnpkg.com/promise-ftp/-/promise-ftp-1.3.5.tgz#ecfa4a5e5b779a6bfdd4dd3096957b58286f5104"
dependencies:
"@icetee/ftp" "^0.3.15"
bluebird "2.x"
promise-ftp-common "^1.1.5"
promise-inflight@^1.0.1: promise-inflight@^1.0.1:
version "1.0.1" version "1.0.1"
resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
...@@ -8255,7 +8274,7 @@ read-pkg@^3.0.0: ...@@ -8255,7 +8274,7 @@ read-pkg@^3.0.0:
normalize-package-data "^2.3.2" normalize-package-data "^2.3.2"
path-type "^3.0.0" path-type "^3.0.0"
read@1.0.x: read@1.0.x, read@^1.0.7:
version "1.0.7" version "1.0.7"
resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4"
dependencies: dependencies:
...@@ -9890,6 +9909,10 @@ unzip-response@^2.0.1: ...@@ -9890,6 +9909,10 @@ unzip-response@^2.0.1:
version "2.0.1" version "2.0.1"
resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97"
upath@^1.0.5:
version "1.1.0"
resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.0.tgz#35256597e46a581db4793d0ce47fa9aebfc9fabd"
upper-case@^1.1.1: upper-case@^1.1.1:
version "1.1.3" version "1.1.3"
resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598"
...@@ -10323,23 +10346,12 @@ xml2js@0.4.17: ...@@ -10323,23 +10346,12 @@ xml2js@0.4.17:
sax ">=0.6.0" sax ">=0.6.0"
xmlbuilder "^4.1.0" xmlbuilder "^4.1.0"
xml2js@0.4.19:
version "0.4.19"
resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7"
dependencies:
sax ">=0.6.0"
xmlbuilder "~9.0.1"
xmlbuilder@4.2.1, xmlbuilder@^4.1.0: xmlbuilder@4.2.1, xmlbuilder@^4.1.0:
version "4.2.1" version "4.2.1"
resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-4.2.1.tgz#aa58a3041a066f90eaa16c2f5389ff19f3f461a5" resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-4.2.1.tgz#aa58a3041a066f90eaa16c2f5389ff19f3f461a5"
dependencies: dependencies:
lodash "^4.0.0" lodash "^4.0.0"
xmlbuilder@~9.0.1:
version "9.0.7"
resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d"
xpub-connect@^0.0.10: xpub-connect@^0.0.10:
version "0.0.10" version "0.0.10"
resolved "https://registry.yarnpkg.com/xpub-connect/-/xpub-connect-0.0.10.tgz#453fa33f6717c4b70afdd1248baee63c478facfc" resolved "https://registry.yarnpkg.com/xpub-connect/-/xpub-connect-0.0.10.tgz#453fa33f6717c4b70afdd1248baee63c478facfc"
...@@ -10439,6 +10451,10 @@ xpub-validators@^0.0.3: ...@@ -10439,6 +10451,10 @@ xpub-validators@^0.0.3:
dependencies: dependencies:
striptags "^3.1.0" striptags "^3.1.0"
xregexp@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943"
xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1:
version "4.0.1" version "4.0.1"
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment