diff --git a/lib/cli/package-lock.json b/lib/cli/package-lock.json index 03bafbe083..eaefaca066 100644 --- a/lib/cli/package-lock.json +++ b/lib/cli/package-lock.json @@ -5,9 +5,9 @@ "requires": true, "dependencies": { "@alfresco/js-api": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@alfresco/js-api/-/js-api-4.2.0.tgz", - "integrity": "sha512-gaKTfiTPbcFdtcBQJ2qWFXVegOSt3FgQpUtzS64uQK9BrFS74wYqIVgYc+00RmGGmpEumKlPxxoSF/xWhrzIEA==", + "version": "4.3.0-61350fee919fbeb2b6c949621161b6b076d44133", + "resolved": "https://registry.npmjs.org/@alfresco/js-api/-/js-api-4.3.0-61350fee919fbeb2b6c949621161b6b076d44133.tgz", + "integrity": "sha512-Q6oStMDxWU5psD4UnRBB1ri8Md5A+SgI8fNx3l7RkcEvSJvU3p1cfJe/2BfM4wJK1AU6NHFUdWAH6z2EAA8K/A==", "requires": { "event-emitter": "^0.3.5", "minimatch": "3.0.4", @@ -1021,9 +1021,9 @@ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" }, "mime": { - "version": "2.4.7", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.7.tgz", - "integrity": "sha512-dhNd1uA2u397uQk3Nv5LM4lm93WYDUXFn3Fu291FJerns4jyTudqhIWe4W04YLy7Uk1tm1Ore04NpjRvQp/NPA==" + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.0.tgz", + "integrity": "sha512-ft3WayFSFUVBuJj7BMLKAQcSlItKtfjsKDDsii3rqFDAZ7t11zRe8ASw/GlmivGwVUYtwkQrxiGGpL6gFvB0ag==" }, "mime-db": { "version": "1.45.0", @@ -1334,9 +1334,9 @@ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, "qs": { - "version": "6.9.4", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.4.tgz", - "integrity": "sha512-A1kFqHekCTM7cz0udomYUoYNWjBebHm/5wzU/XqrBRBNWectVH0QIiN+NEcZ0Dte5hvzHwbr8+XQmguPhJ6WdQ==" + "version": "6.9.6", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.6.tgz", + "integrity": "sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ==" }, "read-installed": { "version": "4.0.3", diff --git a/lib/cli/package.json b/lib/cli/package.json index 9e772c1d9e..bfab9128db 100644 --- a/lib/cli/package.json +++ b/lib/cli/package.json @@ -20,15 +20,15 @@ "dist": "rm -rf ./dist/ && npm run build && cp -R ./bin ./dist/ && cp -R ./resources ./dist && cp -R ./templates ./dist && cp ./package.json ./dist/" }, "dependencies": { - "@alfresco/js-api": "4.2.0", + "@alfresco/js-api": "4.3.0-61350fee919fbeb2b6c949621161b6b076d44133", "commander": "^4.0.0", + "ejs": "^2.6.1", "license-checker": "^25.0.1", "npm-registry-fetch": "^4.0.5", "request": "2.88.2", "rxjs": "^6.5.5", "shelljs": "^0.8.3", - "spdx-license-list": "^5.0.0", - "ejs": "^2.6.1" + "spdx-license-list": "^5.0.0" }, "keywords": [ "alfresco-component" diff --git a/lib/cli/scripts/init-acs-env.ts b/lib/cli/scripts/init-acs-env.ts new file mode 100755 index 0000000000..0f06935ab6 --- /dev/null +++ b/lib/cli/scripts/init-acs-env.ts @@ -0,0 +1,160 @@ +/* tslint:disable */ +let alfrescoApi = require('@alfresco/js-api'); +let program = require('commander'); +let fs = require ('fs'); +const path = require('path'); +import { logger } from './logger'; +const { SharedlinksApi, FavoritesApi } = require('@alfresco/js-api'); +let MAX_RETRY = 10; +let counter = 0; +let TIMEOUT = 6000; +const ACS_DEFAULT = require('./resources').ACS_DEFAULT; +/* tslint:enable */ + +let alfrescoJsApi; + +export default async function () { + await main(); +} + +async function main() { + + program + .version('0.1.0') + .option('--host [type]', 'Remote environment host') + .option('-p, --password [type]', 'password ') + .option('-u, --username [type]', 'username ') + .parse(process.argv); + + await checkEnv(); + + logger.info(`***** Step initialize ACS *****`); + await initializeDefaultFiles(); + +} + +async function initializeDefaultFiles() { + for (let j = 0; j < ACS_DEFAULT.files.length; j++) { + const fileInfo = ACS_DEFAULT.files[j]; + switch (fileInfo.action) { + case 'UPLOAD': + await uploadFile(fileInfo.name, fileInfo.destination); + break; + case 'LOCK': + const fileToLock = await uploadFile(fileInfo.name, fileInfo.destination); + await lockFile(fileToLock.entry.id); + break; + case 'SHARE': + const fileToShare = await uploadFile(fileInfo.name, fileInfo.destination); + await shareFile(fileToShare.entry.id); + break; + case 'FAVORITE': + const fileToFav = await uploadFile(fileInfo.name, fileInfo.destination); + await favoriteFile(fileToFav.entry.id); + break; + default: + logger.error('No action found for file ', fileInfo.name); + break; + } + } +} + +async function uploadFile(fileName, fileDestination) { + const filePath = `../resources/content/${fileName}`; + const file = fs.createReadStream(path.join(__dirname, filePath)); + let uploadedFile: any; + try { + uploadedFile = await alfrescoJsApi.upload.uploadFile( + file, + '', + fileDestination, + null, + { + name: fileName, + nodeType: 'cm:content', + renditions: 'doclib', + overwrite: true + } + ); + logger.info(`File ${fileName} was uploaded`); + } catch (err) { + logger.error(`Failed to upload file with error: `, err.stack); + } + return uploadedFile; +} + +async function lockFile(nodeId) { + const data = { + type: 'ALLOW_OWNER_CHANGES' + }; + try { + await alfrescoJsApi.nodes.lockNode(nodeId, data); + logger.info('File was locked'); + } catch (error) { + logger.error('Failed to lock file with error: ', error.stack); + } +} + +async function shareFile(nodeId) { + const data = { + nodeId: nodeId + }; + try { + await new SharedlinksApi(alfrescoJsApi).createSharedLink(data); + logger.info('File was shared'); + } catch (error) { + logger.error('Failed to share file with error: ', error.stack); + } +} + +async function favoriteFile(nodeId) { + const data = { + target: { + ['file']: { + guid: nodeId + } + } + }; + try { + await new FavoritesApi(alfrescoJsApi).createFavorite('-me-', data); + logger.info('File was add to favorites'); + } catch (error) { + logger.error('Failed to add the file to favorites with error: ', error.stack); + } +} + +async function checkEnv() { + try { + + alfrescoJsApi = new alfrescoApi.AlfrescoApiCompatibility({ + provider: 'ALL', + hostBpm: program.host, + hostEcm: program.host, + authType: 'OAUTH', + oauth2: { + host: `${program.host}/auth/realms/alfresco`, + clientId: 'alfresco', + scope: 'openid' + } + }); + await alfrescoJsApi.login(program.username, program.password); + } catch (e) { + logger.info('Login error environment down or inaccessible'); + counter++; + if (MAX_RETRY === counter) { + logger.info('Give up'); + process.exit(1); + } else { + logger.info(`Retry in 1 minute attempt N ${counter}`); + sleep(TIMEOUT); + checkEnv(); + } + } +} + +/* tslint:enable */ + +function sleep(delay) { + const start = new Date().getTime(); + while (new Date().getTime() < start + delay) { } +} diff --git a/lib/cli/scripts/resources.ts b/lib/cli/scripts/resources.ts index d2961b41b2..ae58d496e5 100644 --- a/lib/cli/scripts/resources.ts +++ b/lib/cli/scripts/resources.ts @@ -206,3 +206,37 @@ export const ACTIVITI_APPS: any = { } ] }; +export const ACS_DEFAULT: any = { + files : [ + { + name: 'share_profile_pic.png', + destination: '-my-', + action: 'UPLOAD' + }, + { + name: 'share_profile_pic.jpg', + destination: '-my-', + action: 'UPLOAD' + }, + { + name: 'lock.png', + destination: '-my-', + action: 'LOCK' + }, + { + name: 'second_lock.png', + destination: '-my-', + action: 'LOCK' + }, + { + name: 'share_file.jpg', + destination: '-my-', + action: 'SHARE' + }, + { + name: 'favorite_file.jpg', + destination: '-my-', + action: 'FAVORITE' + } + ] +}; diff --git a/package-lock.json b/package-lock.json index 4f14961422..cf942a0be9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,9 +5,9 @@ "requires": true, "dependencies": { "@alfresco/js-api": { - "version": "4.3.0-2dcc5f6dd1e2bc2e0e9ba28c1aa5bc8f6a8ddf61", - "resolved": "https://registry.npmjs.org/@alfresco/js-api/-/js-api-4.3.0-2dcc5f6dd1e2bc2e0e9ba28c1aa5bc8f6a8ddf61.tgz", - "integrity": "sha512-XwTX/sijTuIAFkQQ+5jaxSJyIW0/PvgIcOZUmbVFgiRGsEIOH08bI2RiZ4sr/2tqmbsDQV2w27hGUzbcUACC4g==", + "version": "4.3.0-61350fee919fbeb2b6c949621161b6b076d44133", + "resolved": "https://registry.npmjs.org/@alfresco/js-api/-/js-api-4.3.0-61350fee919fbeb2b6c949621161b6b076d44133.tgz", + "integrity": "sha512-Q6oStMDxWU5psD4UnRBB1ri8Md5A+SgI8fNx3l7RkcEvSJvU3p1cfJe/2BfM4wJK1AU6NHFUdWAH6z2EAA8K/A==", "requires": { "event-emitter": "^0.3.5", "minimatch": "3.0.4", @@ -8533,9 +8533,9 @@ } }, "commander": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.0.0.tgz", - "integrity": "sha512-ovx/7NkTrnPuIV8sqk/GjUIIM1+iUQeqA3ye2VNpq9sVoiZsooObWlQy+OPWGI17GDaEoybuAGJm6U8yC077BA==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", "dev": true }, "comment-json": { @@ -20713,9 +20713,9 @@ "dev": true }, "qs": { - "version": "6.9.4", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.4.tgz", - "integrity": "sha512-A1kFqHekCTM7cz0udomYUoYNWjBebHm/5wzU/XqrBRBNWectVH0QIiN+NEcZ0Dte5hvzHwbr8+XQmguPhJ6WdQ==" + "version": "6.9.6", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.6.tgz", + "integrity": "sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ==" }, "query-string": { "version": "4.3.4", diff --git a/package.json b/package.json index 8727db632e..2e37c3bc21 100644 --- a/package.json +++ b/package.json @@ -71,7 +71,7 @@ "process services-cloud" ], "dependencies": { - "@alfresco/js-api": "4.3.0-2dcc5f6dd1e2bc2e0e9ba28c1aa5bc8f6a8ddf61", + "@alfresco/js-api": "4.3.0-61350fee919fbeb2b6c949621161b6b076d44133", "@angular/animations": "^10.0.4", "@angular/cdk": "10.1.3", "@angular/common": "^10.0.4", @@ -121,7 +121,7 @@ "@types/selenium-webdriver": "^4.0.11", "ajv-cli": "^3.0.0", "codelyzer": "^6.0.1", - "commander": "7.0.0", + "commander": "6.2.1", "concurrently": "^5.3.0", "cspell": "^5.1.3", "css-loader": "^4.3.0",