diff --git a/packages/component-mts-package/config/default.js b/packages/component-mts-package/config/default.js index 7b41e3827b47698ee0affbd05ca07970578c0b32..bf1f239eb09ce13400de74acb78501622867fb33 100644 --- a/packages/component-mts-package/config/default.js +++ b/packages/component-mts-package/config/default.js @@ -23,8 +23,19 @@ const defaultS3Config = { 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 = { defaultConfig, defaultParseXmlOptions, defaultS3Config, + defaultFTPConfig, } diff --git a/packages/component-mts-package/package.json b/packages/component-mts-package/package.json index 53f5f6dbf1a523dafda8d5bb10ee93321edd4a72..20b9f9c86d65c196ad5da70e266fa8bbf45b9e28 100644 --- a/packages/component-mts-package/package.json +++ b/packages/component-mts-package/package.json @@ -3,7 +3,9 @@ "version": "1.0.0", "description": "Create package for MTS integration", "main": "index.js", - "files": ["src"], + "files": [ + "src" + ], "scripts": { "test": "jest", "convert": "xml-js xml.xml --spaces 4 --out test.json" @@ -33,6 +35,7 @@ "dependencies": { "archiver": "^2.1.1", "aws-sdk": "^2.185.0", + "ftp-deploy": "^2.1.2", "lodash": "^4.17.10", "xml-js": "^1.6.7" } diff --git a/packages/component-mts-package/src/AWS.js b/packages/component-mts-package/src/AWS.js index 7a64ffdcd2c9d1986bb586565118bd3717b4d450..2ea9b7f0aafc7212f0214f94deb12c7d50d49f64 100644 --- a/packages/component-mts-package/src/AWS.js +++ b/packages/component-mts-package/src/AWS.js @@ -4,11 +4,12 @@ const { get } = require('lodash') const { promisify } = require('util') const nodeArchiver = require('archiver') const logger = require('@pubsweet/logger') +const FtpDeploy = require('ftp-deploy') const filterByType = (fileTypes = []) => ({ Metadata: { filetype } }) => fileTypes.length > 0 ? fileTypes.includes(filetype) : true -const createFilesPackage = (s3Config, archiver = nodeArchiver) => { +const createFilesPackage = (s3Config, ftpConfig, archiver = nodeArchiver) => { AWS.config.update({ secretAccessKey: s3Config.secretAccessKey, accessKeyId: s3Config.accessKeyId, @@ -57,11 +58,13 @@ const createFilesPackage = (s3Config, archiver = nodeArchiver) => { throw err }) archive.on('end', err => { + const filename = `${manuscriptName}.zip` if (err) throw err - uploadToS3({ + uploadFiles({ s3, - filename: `${manuscriptName}.zip`, + filename, Bucket: s3Config.bucket, + config: ftpConfig, }) }) archive.finalize() @@ -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 params = { Bucket, Body: data, 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) + if (err) { throw err } else { - logger.info(`Successfully uploaded ${filename}`) + logger.info(`Successfully uploaded ${filename} to S3`) } }) } const deleteFile = filename => { fs.access(filename, fs.constants.F_OK, err => { - if (err) { - if (err) throw err - } else { + if (!err) { fs.unlink(filename, err => { if (err) throw err logger.info(`Deleted ${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 diff --git a/packages/component-mts-package/src/MTS.js b/packages/component-mts-package/src/MTS.js index 5a69b65989e93114a3524fe888828a7c0023d386..436b5b92e7557f778efa5aa3240416263bb81381 100644 --- a/packages/component-mts-package/src/MTS.js +++ b/packages/component-mts-package/src/MTS.js @@ -7,6 +7,7 @@ const { defaultConfig, defaultParseXmlOptions, defaultS3Config, + defaultFTPConfig, } = require('../config/default') class MTS { @@ -14,11 +15,13 @@ class MTS { config = defaultConfig, options = defaultParseXmlOptions, s3Config = defaultS3Config, + ftpConfig = defaultFTPConfig, ) { this.config = config this.options = options this.jsonTemplate = mts.getJsonTemplate(config) this.s3Config = s3Config + this.ftpConfig = ftpConfig } createFileName(id = Date.now()) { @@ -208,7 +211,10 @@ class MTS { async createMTSPackage(fragment = {}) { const xmlFile = this.convertFragmentToXML(fragment) - await createFilesPackage(this.s3Config)({ fragment, xmlFile }) + await createFilesPackage(this.s3Config, this.ftpConfig)({ + fragment, + xmlFile, + }) } } diff --git a/yarn.lock b/yarn.lock index 9c6cec2c5d3d979294320476e8e4331f050e7eda..965f00ccb37aa4b27d827dd63a31af4e9d7b5447 100644 --- a/yarn.lock +++ b/yarn.lock @@ -85,6 +85,13 @@ lodash "^4.2.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": version "1.1.2" 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: xml2js "0.4.17" 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: version "0.6.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" @@ -1647,6 +1640,10 @@ block-stream@*: dependencies: 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: version "3.5.1" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9" @@ -3658,7 +3655,7 @@ eventemitter2@0.4.14: version "0.4.14" 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" 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: mkdirp ">=0.5 0" 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: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" @@ -4674,7 +4681,7 @@ icss-utils@^2.1.0: dependencies: postcss "^6.0.1" -ieee754@1.1.8, ieee754@^1.1.4: +ieee754@^1.1.4: version "1.1.8" 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: version "1.0.1" 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" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" dependencies: @@ -7548,6 +7555,18 @@ progress@^2.0.0: version "2.0.0" 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: version "1.0.1" resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" @@ -8255,7 +8274,7 @@ read-pkg@^3.0.0: normalize-package-data "^2.3.2" path-type "^3.0.0" -read@1.0.x: +read@1.0.x, read@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" dependencies: @@ -9890,6 +9909,10 @@ unzip-response@^2.0.1: version "2.0.1" 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: version "1.1.3" resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" @@ -10323,23 +10346,12 @@ xml2js@0.4.17: sax ">=0.6.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: version "4.2.1" resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-4.2.1.tgz#aa58a3041a066f90eaa16c2f5389ff19f3f461a5" dependencies: 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: version "0.0.10" resolved "https://registry.yarnpkg.com/xpub-connect/-/xpub-connect-0.0.10.tgz#453fa33f6717c4b70afdd1248baee63c478facfc" @@ -10439,6 +10451,10 @@ xpub-validators@^0.0.3: dependencies: 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: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"