UNPKG

ui5flowdev

Version:

UI5FlowDev enables you to manage and run your UI5 applications on a local server with reverse-proxy support. It also provides you the option to build your applications and deploy them to SAP NetWeaver ABAP.

1,045 lines (848 loc) 66.9 kB
const logger = require('../utils/logger.js'); const utils = require('../utils/utils.js'); const serverConfig = require("../../conf/config.json"); const jsonfile = require('jsonfile'); const path = require('path'); const slash = require('slash'); const uuid = require('node-uuid'); const fs = require('fs-extra'); var Application = { applicationsList: function(req, res) { try { var file = serverConfig.appsData; jsonfile.readFile(file, function(err, data) { if (err) { logger.error('Error', err); return res.status(500).json({ status: 'Error', message: err }); } return res.status(200).json(data); }); } catch (ex) { logger.error('Exception', ex); return res.status(500).json({ status: 'Error', message: ex.toString() }); } }, deleteApplication: function(req, res) { try { var appName = req.body.appName; logger.debug('Deleting application:', appName); var file = serverConfig.appsData; jsonfile.readFile(file, function(err, data) { if (err) { logger.error('Error', err); return res.status(500).json({ status: 'Error', message: err }); } var editData = {}; if (!data.applications) { return res.status(500).json({ status: 'Error', message: 'No applications found.' }); } var isDelete = false; for (var i = 0, iLength = data.applications.length; i < iLength; i++) { if (data.applications[i].name == appName) { editData = data.applications[i]; var deleteIndex = i; isDelete = true; break; } } if (isDelete) { //var appDir = path.join(process.env.ROOT_DIR_REL, process.env.APPS_DIR, editData.app_directory); var appDir = path.join(process.env.APPS_DIR, editData.app_directory); logger.debug('Deleting application directory:', appDir); fs.remove(appDir, function(err) { if (err) { logger.error('Error', err); return res.status(500).json({ status: 'Error', message: err.toString() }); } logger.debug('Deleting application versions ... '); if (editData.versions) { var versionDir = ""; for (var j = 0, jLength = editData.versions.length; j < jLength; j++) { //versionDir = path.join(process.env.ROOT_DIR_REL, process.env.VERSIONS_DIR, editData.versions[j].version_directory); versionDir = path.join(process.env.VERSIONS_DIR, editData.versions[j].version_directory); logger.debug('Deleting application directory:', versionDir); fs.removeSync(versionDir); } } data.applications.splice(deleteIndex, 1); jsonfile.writeFile(file, data, { spaces: 2, EOL: '\r\n' }, function(err) { if (err) { logger.error('Error', err); return res.status(500).json({ status: 'Error', message: err }); } return res.status(200).json({ status: 'Success', message: 'Application deleted.' }); }); }); } }); } catch (ex) { logger.debug('Exception', ex); res.status(500).json(userMessages.msgJson('E0009', req.id)); } }, applicationNew: function(req, res) { try { var appName = req.body.name + '-' + uuid.v1().replace(/-/g, ''); var file = serverConfig.appsData; jsonfile.readFile(file, function(err, data) { if (err) { logger.error('Error', err); return res.status(500).json({ status: 'Error', message: err }); } var newData = {}; if (!data.applications) { newData = { "applications": [] }; } else { newData = data; } newData.applications.push({ "name": appName, "display_name": req.body.name, "description": req.body.description, "path": req.body.path, "app_directory": req.body.name, "app_url": process.env.DEFAULT_WEBAPP_PATH + req.body.name + '/index.html', "versions": [], "created_at": new Date().toISOString(), "updated_at": new Date().toISOString() }); var appPath = path.join(process.env.DEFAULT_APP_DIR, req.body.name); fs.stat(appPath, function(err, stats) { if (err) { logger.debug('Folder "%s" not found', appPath); logger.debug('Folder creation is possible.'); fs.mkdir(appPath, function(err) { if (err) { logger.error('App folder creation failed.', err); res.status(500).json({ status: 'Error', message: 'App folder creation failed.' }); } jsonfile.writeFile(file, newData, { spaces: 2, EOL: '\r\n' }, function(err) { if (err) { logger.error('Error', err); return res.status(500).json({ status: 'Error', message: err }); } return res.status(201).json({ status: 'Success', message: 'Application created.', 'name': appName }); }); }); } else { logger.debug('Folder "%s" already exists.', appPath); logger.error('Folder creation failed.'); return res.status(500).json({ status: 'Error', message: 'Folder already exists.' }); } }); }); } catch (ex) { logger.error('Exception', ex); return res.status(500).json({ status: 'Error', message: ex.toString() }); } }, applicationEdit: function(req, res) { try { var appName = req.body.name; var file = serverConfig.appsData; jsonfile.readFile(file, function(err, data) { if (err) { logger.error('Error', err); return res.status(500).json({ status: 'Error', message: err }); } var editData = {}; if (!data.applications) { return res.status(500).json({ status: 'Error', message: 'No applications found.' }); } for (var i = 0, iLength = data.applications.length; i < iLength; i++) { if (data.applications[i].name == appName) { editData = data.applications[i]; } } editData.display_name = req.body.displayName ? req.body.displayName : editData.display_name; editData.app_url = req.body.appUrl ? req.body.appUrl : editData.app_url; editData.description = req.body.description ? req.body.description : editData.description; editData.remote_git_url = req.body.remoteGitUrl ? req.body.remoteGitUrl : editData.remote_git_url; editData.tags = req.body.tags ? req.body.tags : editData.tags; editData.updated_at = new Date().toISOString(); jsonfile.writeFile(file, data, { spaces: 2, EOL: '\r\n' }, function(err) { if (err) { logger.error('Error', err); return res.status(500).json({ status: 'Error', message: err }); } return res.status(200).json({ status: 'Success', message: 'Application was updated.', 'name': appName }); }); }); } catch (ex) { logger.error('Exception', ex); return res.status(500).json({ status: 'Error', message: ex.toString() }); } }, applicationFolderStructure: function(req, res) { try { var dirName = req.params.dirname; var appFolderStructure = {}; var targetFolder = path.join(process.env.DEFAULT_APP_DIR, dirName); logger.debug('Folder path: ', targetFolder); appFolderStructure = Application.folderStructure(targetFolder); return res.status(200).json(appFolderStructure.subfolder); } catch (ex) { logger.error('Exception', ex); return res.status(500).json({ status: 'Error', message: ex.toString() }); } }, folderStructure: function(filename) { var stats = fs.lstatSync(filename); var info = {}; if (path.basename(filename) !== '.git') { // exclude .git folder if (stats.isDirectory()) { // return folder only info = { name: path.basename(filename) }; //info.type = "folder"; info.subfolder = fs.readdirSync(filename).map(function(child) { return Application.folderStructure(path.join(filename, child)); }); } } return info; }, getComponentPath: function(req, res) { var appFolder = req.body.appFolder; var srcPath = req.body.srcPath; if (!appFolder) { logger.error('Application name was not defined.'); return res.status(500).json({ status: 'Error', message: 'Application name was not defined.' }); } if (!srcPath) { logger.error('Version source path was not defined.'); return res.status(500).json({ status: 'Error', message: 'Version source path was not defined.' }); } try { if (srcPath.length == 1) { srcPath = '/'; } else { if (srcPath.slice(-1) !== '/') { srcPath = srcPath + '/'; } } var sourceAppDir = process.env.DEFAULT_APP_DIR + '/' + appFolder + srcPath; logger.debug('Version source repository path: ', sourceAppDir); var componentFile = 'Component.js'; var componentStartPattern = 'UIComponent.extend('; var componentEndPattern = 'Component'; var fileName = sourceAppDir + componentFile; // UI5 Application has to contain Component.js file if (!fs.existsSync(fileName)) { logger.error('File "' + fileName + '" was not found in the application directory.'); return res.status(500).json({ status: 'Error', message: 'File "' + fileName + '" was not found in the application directory.' }); } logger.debug('Parsing file %s .', fileName); var fileContent = fs.readFileSync(fileName, 'utf8'); var startPosition = fileContent.indexOf(componentStartPattern); if (startPosition === -1) { logger.error('UIComponent declaration was not found in the file "' + fileName + ' .'); return res.status(500).json({ status: 'Error', message: 'UIComponent declaration was not found in the file "' + fileName + ' .' }); } else { logger.debug('UIComponent found ...'); startPosition += componentStartPattern.toString().length; var endPosition = fileContent.indexOf(componentEndPattern, startPosition); if (endPosition === -1) { logger.error('UIComponent declaration was not found in the file "' + fileName + ' .'); return res.status(500).json({ status: 'Error', message: 'UIComponent declaration was not found in the file "' + fileName + ' .' }); } else { var path = fileContent.substring(startPosition, endPosition); var path = path.replace(/\"/g, '').replace(/\'/g, '').replace(/\./g, '/'); if (path.slice(-1) === '/') { path = path.replace(/.$/, ''); } logger.debug('Start: ' + startPosition + ' / End: ' + endPosition + ' / Path:' + path + ' .'); return res.status(200).json({ status: 'Success', message: 'Component path found.', path: path }); } } } catch (ex) { logger.error('Exception', ex); return res.status(500).json({ status: 'Error', message: ex.toString() }); } }, createApplicationVersion: function(req, res) { try { var appName = req.body.appName; var appFolder = req.body.appFolder; var versionName = req.body.versionName; var versionFolder = req.body.versionFolder; if (versionFolder.length <= 0) { logger.debug('Source repository path not defined.'); return res.status(500).json({ status: 'Error', message: 'Source repository path not defined.' }); } // Add last '/' and first '/' if (versionFolder.length == 1) { versionFolder = '/'; } else { if (versionFolder.slice(-1) !== '/') { versionFolder = versionFolder + '/'; } if (versionFolder.charAt(0) !== '/') { versionFolder = '/' + versionFolder; } } var versionPath = appFolder + '-' + versionName; //var versionDir = path.join(process.env.ROOT_DIR_REL, process.env.VERSIONS_DIR, versionPath); //var versionDirWebApp = path.join(process.env.ROOT_DIR_REL, process.env.VERSIONS_DIR, versionPath, process.env.DIST_VERSION_DIR); //var appDirWebApp = path.join(process.env.ROOT_DIR_REL, process.env.APPS_DIR, appFolder + versionFolder); var versionDir = path.join(process.env.VERSIONS_DIR, versionPath); var versionDirWebApp = path.join(process.env.VERSIONS_DIR, versionPath, process.env.DIST_VERSION_DIR); var appDirWebApp = path.join(process.env.APPS_DIR, appFolder + versionFolder); logger.debug('Version source repository path: ', appDirWebApp); var appVersionData = {}; var versionName = req.body.versionName; var versionDescription = req.body.versionDescription || ''; var isBuild = req.body.isBuild || false; var pathPrefix = req.body.pathPrefix || false; var dataProviders = req.body.dataProviders || []; var versionRootPath = versionFolder || ''; logger.debug('Version creation process started ...'); if (!fs.existsSync(appDirWebApp)) { logger.debug('Folder "' + appDirWebApp + '" was not found in the application directory.'); return res.status(500).json({ status: 'Error', message: 'Folder "' + appDirWebApp + '" was not found in the application directory.' }); } if (!fs.existsSync(versionDir)) { logger.debug('Creating folder "%s" ... ', versionDir); fs.mkdir(versionDir, function(err) { if (err) { logger.error('Application version folder creation failed.', err); return res.status(500).json({ status: 'Error', message: err.toString() }); } logger.debug('Copy process of application version started ...'); try { logger.debug('Creating folder "%s" ... ', versionDirWebApp); //fs.mkdirSync(versionDirWebApp); fs.mkdir(versionDirWebApp, function(err) { if (err) { logger.error('Folder %s creation failed.', versionDirWebApp); return res.status(500).json({ status: 'Error', message: err.toString() }); } if (isBuild) { if (pathPrefix) { utils.buildComponentPreload(appFolder, versionPath, pathPrefix, versionFolder) .then( function(result) { // Do nothing here //return res.status(200).json(result); fs.copy(appDirWebApp, versionDirWebApp, function(err) { if (err) { logger.error('Copy process of application version failed.', err); return res.status(500).json({ status: 'Error', message: err.toString() }); } else { logger.debug('Copy process finished.'); logger.debug('Updating application:', appName); var file = serverConfig.appsData; jsonfile.readFile(file, function(err, data) { if (err) { logger.error('Error', err); return res.status(500).json({ status: 'Error', message: err }); } var editData = {}; if (!data.applications) { return res.status(500).json({ status: 'Error', message: 'No applications found.' }); } for (var i = 0, iLength = data.applications.length; i < iLength; i++) { if (data.applications[i].name == appName) { editData = data.applications[i]; } } if (editData.versions) { editData.versions.push({ "name": versionName, "description": versionDescription, "version_directory": versionPath, "path": versionFolder, "build": isBuild, "created_at": new Date().toISOString(), "updated_at": new Date().toISOString() }); } jsonfile.writeFile(file, data, { spaces: 2, EOL: '\r\n' }, function(err) { if (err) { logger.error('Error', err); return res.status(500).json({ status: 'Error', message: err }); } return res.status(200).json({ status: 'Success', message: 'Application version created.' }); }); }); } }); }, function(result) { fs.remove(versionDir, function(err) { if (err) { logger.error('Error ', err); return res.status(500).json({ status: 'Error', message: err }); } }); return res.status(500).json({ status: 'Error', message: result }); } ) .catch( function(ex) { logger.error('Exception', ex); return res.status(500).json({ status: 'Error', message: ex.toString() }); } ); } } else { fs.copy(appDirWebApp, versionDirWebApp, function(err) { if (err) { logger.error('Copy process of application version failed.', err); return res.status(500).json({ status: 'Error', message: err.toString() }); } else { logger.debug('Copy process finished.'); logger.debug('Updating application:', appName); var file = serverConfig.appsData; jsonfile.readFile(file, function(err, data) { if (err) { logger.error('Error', err); return res.status(500).json({ status: 'Error', message: err }); } var editData = {}; if (!data.applications) { return res.status(500).json({ status: 'Error', message: 'No applications found.' }); } for (var i = 0, iLength = data.applications.length; i < iLength; i++) { if (data.applications[i].name == appName) { editData = data.applications[i]; } } if (editData.versions) { editData.versions.push({ "name": versionName, "description": versionDescription, "version_directory": versionPath, "path": versionFolder, "build": isBuild, "created_at": new Date().toISOString(), "updated_at": new Date().toISOString() }); } else { return res.status(500).json({ status: 'Error', message: 'No versions found.' }); } jsonfile.writeFile(file, data, { spaces: 2, EOL: '\r\n' }, function(err) { if (err) { logger.error('Error', err); return res.status(500).json({ status: 'Error', message: err }); } return res.status(200).json({ status: 'Success', message: 'Application version created.' }); }); }); } }); } }); } catch (ex) { logger.error('Application version folder creation failed.', ex); return res.status(500).json({ status: 'Error', message: ex.toString() }); } }); } else { logger.debug('Folder "%s" already exists', versionDir); return res.status(500).json({ status: 'Error', message: 'Folder ' + versionDir + ' already exists.' }); } } catch (ex) { logger.error('Exception', ex); return res.status(500).json({ status: 'Error', message: ex.toString() }); } }, updateApplicationVersion: function(req, res) { var appName = req.body.appName; var versionId = req.body.versionId; var versionFolder = req.body.versionFolder; var versionName = req.body.versionName; var versionDescription = req.body.versionDescription; try { logger.debug('Updating application version:', versionId); var file = serverConfig.appsData; jsonfile.readFile(file, function(err, data) { if (err) { logger.error('Error', err); return res.status(500).json({ status: 'Error', message: err }); } var editData = {}; if (!data.applications) { return res.status(500).json({ status: 'Error', message: 'No applications found.' }); } for (var i = 0, iLength = data.applications.length; i < iLength; i++) { if (data.applications[i].name == appName) { editData = data.applications[i]; break; } } if (editData.versions) { for (var j = 0, jLength = editData.versions.length; j < jLength; j++) { if (editData.versions[j].version_directory == versionId) { editData.versions[j].name = versionName ? versionName : editData.versions[j].name; editData.versions[j].description = versionDescription ? versionDescription : editData.versions[j].description; editData.versions[j].updated_at = new Date().toISOString(); break; } } jsonfile.writeFile(file, data, { spaces: 2, EOL: '\r\n' }, function(err) { if (err) { logger.error('Error', err); return res.status(500).json({ status: 'Error', message: err }); } return res.status(200).json({ status: 'Success', message: 'Application version changed.' }); }); } else { return res.status(500).json({ status: 'Error', message: 'No versions found.' }); } }); } catch (ex) { logger.error('Exception', ex); return res.status(500).json({ status: 'Error', message: ex.toString() }); } }, deleteApplicationVersion: function(req, res) { var appName = req.body.appName; var versionId = req.body.versionId; var versionDir; var deleteIndex; var isDelete = false; try { logger.debug('Deleting application version:', versionId); var file = serverConfig.appsData; jsonfile.readFile(file, function(err, data) { if (err) { logger.error('Error', err); return res.status(500).json({ status: 'Error', message: err }); } var editData = {}; if (!data.applications) { return res.status(500).json({ status: 'Error', message: 'No applications found.' }); } if (appName && versionId) { logger.debug('Content to be deleted found ...'); for (var i = 0, iLength = data.applications.length; i < iLength; i++) { if (data.applications[i].name == appName) { editData = data.applications[i]; break; } } if (editData.versions) { for (var j = 0, jLength = editData.versions.length; j < jLength; j++) { if (editData.versions[j].version_directory == versionId) { deleteIndex = j; isDelete = true; break; } } } if (isDelete) { //var versionDir = path.join(process.env.ROOT_DIR_REL, process.env.VERSIONS_DIR, versionId); var versionDir = path.join(process.env.VERSIONS_DIR, versionId); fs.remove(versionDir, function(err) { if (err) { logger.error('Error', err); return res.status(500).json({ status: 'Error', message: err.toString() }); } logger.debug('Deleting application version ... '); editData.versions.splice(deleteIndex, 1); jsonfile.writeFile(file, data, { spaces: 2, EOL: '\r\n' }, function(err) { if (err) { logger.error('Error', err); return res.status(500).json({ status: 'Error', message: err }); } return res.status(200).json({ status: 'Success', message: 'Application version deleted.' }); }); }); } else { logger.debug('Delete index not found.'); return res.status(200).json({ status: 'Success', message: 'No content deleted.' }); } } else { logger.debug('Application name or Version ID not found.'); return res.status(200).json({ status: 'Success', message: 'No content deleted.' }); } }); } catch (ex) { logger.error('Exception', ex); return res.status(500).json({ status: 'Error', message: ex.toString() }); } }, bspApplicationsList: function(req, res) { var adtConfigParams = req.body.deploymentConfig; adtConfigParams.requestHeaders["Accept"] = "*/*"; // Header extension for S4 HANA system try { var adtHost = adtConfigParams.systemUrl.replace(/\/+$/, ''); // trailing '/' var adtConfig = { host: adtHost, url: adtHost + process.env.FILESTORE_OBJECTS_PATH, headers: adtConfigParams.requestHeaders }; utils.getBspApplicationsList(adtConfig) .then( function(applications) { adtConfig.url = adtHost + process.env.PACKAGES_PATH; utils.getPackagesList(adtConfig).then( function(packages) { var result = { applications: applications, packages: packages } return res.status(200).json(result); }, function(error) { logger.error('Error', error); return res.status(500).json({ status: 'Error', message: error }); } ); }, function(error) { logger.error('Error', error); return res.status(500).json({ status: 'Error', message: error }); }).catch( function(ex) { logger.error('Exception', ex); return res.status(500).json({ status: 'Error', message: ex.toString() }); } ); } catch (ex) { logger.error('Exception', ex); return res.status(500).json({ status: 'Error', message: ex.toString() }); } }, getSapTransportsList: function(req, res) { var adtConfigParams = req.body.deploymentConfig; adtConfigParams.requestHeaders["Accept"] = "*/*"; // Header extension for S4 HANA system try { var adtHost = adtConfigParams.systemUrl.replace(/\/+$/, ''); // trailing '/' var adtConfig = { host: adtHost, url: adtHost + process.env.FILESTORE_OBJECTS_PATH, // For connection headers: adtConfigParams.requestHeaders, bspProperties: adtConfigParams.bspProperties }; utils.adtSetConnection(adtConfig) .then( function(response) { delete adtConfig.headers['X-CSRF-Token']; // Do not fetch token when post delete adtConfig.headers['x-csrf-token']; // Do not fetch token when post adtConfig.headers["x-csrf-token"] = response.headers['x-csrf-token']; adtConfig.headers["cookie"] = response.headers['set-cookie']; utils.getSapTransportsList(adtConfig) .then( function(result) { return res.status(200).json(result); }, function(error) { logger.error('Error', error); return res.status(500).json({ status: 'Error', message: error }); }).catch( function(ex) { logger.error('Exception', ex); return res.status(500).json({ status: 'Error', message: ex.toString() }); } ).catch( function(ex) { logger.error('Exception', ex); return res.status(500).json({ status: 'Error', message: ex.toString() }); } ); }, function(error) { logger.error('Application resources read failed.', error); return res.status(500).json({ status: 'Error', message: error }); }) .catch( function(ex) { logger.error('Exception', ex); return res.status(500).json({ status: 'Error', message: ex.toString() }); } ); } catch (ex) { logger.error('Exception', ex); return res.status(500).json({ status: 'Error', message: ex.toString() }); } }, deployBspApplicationNew: function(req, res) { var adtConfigParams = req.body.adtConfig; try { var adtHost = adtConfigParams.systemUrl.replace(/\/+$/, ''); // trailing '/' var adtConfig = { host: adtHost, url: adtHost + process.env.FILESTORE_OBJECTS_PATH + '/' + encodeURIComponent(adtConfigParams.bspProperties.bspApplication) + '/content', headers: adtConfigParams.requestHeaders, appPath: path.join(process.env.VERSIONS_DIR, adtConfigParams.bspProperties.versionDirectory, process.env.DIST_VERSION_DIR) + path.sep }; /* var adtConfig = { host: adtHost, url: adtHost + process.env.FILESTORE_OBJECTS_PATH + '/' + encodeURIComponent(adtConfigParams.bspProperties.bspApplication) + '/content', headers: adtConfigParams.requestHeaders, appPath: process.env.ROOT_DIR_REL + '/' + process.env.VERSIONS_DIR + '/' + adtConfigParams.bspProperties.versionDirectory + '/' + process.env.DIST_VERSION_DIR + '/', }; */ if (!adtConfigParams.bspProperties.bspApplication.length) { return res.status(500).json({ status: 'Error', message: 'Invalid name of BSP application.' }); } utils.adtSetConnection(adtConfig) .then( function(result) { logger.error('Error', 'Creating an application which already exists.'); return res.status(500).json({ status: 'Error', message: 'Application already exists.' }); }, function(error) { utils.readSourceDir(adtConfigParams.bspProperties.bspApplication, adtConfig.appPath) .then( function(resourcesLocal) { var resourcesServer = []; var resourcesSync = utils.getresourcesSync(resourcesServer, resourcesLocal) if (!resourcesSync.length) { return res.status(500).json({ status: 'Error', message: 'Nothing to upload.' }); } var resourcesProps = { bspApplication: adtConfigParams.bspProperties.bspApplication, bspAppExists: false }; return res.status(200).json({ resourcesSync: resourcesSync, resourcesProps: resourcesProps }); }, function(error) { logger.error('Error', error); return res.status(500).json({ status: 'Error', message: error }); } ).catch( function(ex) { logger.error('Exception', ex); return res.status(500).json({ status: 'Error', message: ex.toString() }); }); }).catch( function(ex) { logger.error('Exception', ex); return res.status(500).json({ status: 'Error', message: ex.toString() }); } ); } catch (ex) { logger.error('Exception', ex); return res.status(500).json({ status: 'Error', message: ex.toString() }); } }, deployBspApplicationChange: function(req, res) { var adtConfigParams = req.body.adtConfig; try { var adtHost = adtConfigParams.systemUrl.replace(/\/+$/, ''); // trailing '/' var adtConfig = { host: adtHost, url: adtHost + process.env.FILESTORE_OBJECTS_PATH + '/' + encodeURIComponent(adtConfigParams.bspProperties.bspApplication) + '/content', headers: adtConfigParams.requestHeaders, appPath: path.join(process.env.VERSIONS_DIR, adtConfigParams.bspProperties.versionDirectory, process.env.DIST_VERSION_DIR) + path.sep }; /* var adtConfig = { host: adtHost, url: adtHost + process.env.FILESTORE_OBJECTS_PATH + '/' + encodeURIComponent(adtConfigParams.bspProperties.bspApplication) + '/content', headers: adtConfigParams.requestHeaders, appPath: process.env.ROOT_DIR_REL + '/' + process.env.VERSIONS_DIR + '/' + adtConfigParams.bspProperties.versionDirectory + '/' + process.env.DIST_VERSION_DIR + '/', }; */ if (!adtConfigParams.bspProperties.bspApplication.length) { return res.status(500).json({ status: 'Error', message: 'Invalid name of BSP application.' }); } utils.readSourceDir(adtConfigParams.bspProperties.bspApplication, adtConfig.appPath) .then( function(resourcesLocal) { logger.debug('Collect files from %s', adtConfig.url); utils.collectResourcesServer(adtConfig).then(function(resourcesServer) { var resourcesSync = utils.getresourcesSync(resourcesServer, resourcesLocal) if (!resourcesSync.length) { return res.status(500).json({ status: 'Error', message: 'Nothing to upload.' }); } var resourcesProps = { bspApplication: adtConfigParams.bspProperties.bspApplication, bspAppExists: true }; if (!resourcesServer.length) { resourcesProps.bspAppExists = false; } return res.status(200).json({ resourcesSync: resourcesSync, resourcesProps: resourcesProps }); }, function(error) { logger.error('Error', error); return res.status(500).json({ status: 'Error', message: error }); }); }, function(error) { logger.error('Error', error); return res.status(500).json({ status: 'Error', message: error }); } ).catch( function(ex) { logger.error('Exception', ex); return res.status(500).json({ status: 'Error', message: ex.toString() }); } ); } catch (ex) { logger.error('Exception', ex); return res.status(500).json({ status: 'Error', message: ex.toString() }); } }, deployBspApplicationSubmit: function(req, res) { var adtConfigParams = req.body.deploymentConfig; var deploymentSync = req.body.deploymentSync; var appName = req.body.appName; var versionId = req.body.versionId; try { var adtHost = adtConfigParams.systemUrl.replace(/\/+$/, ''); // trailing '/' var adtConfig = { host: adtHost, url: adtHost + process.env.FILESTORE_OBJECTS_PATH, headers: adtConfigParams.requestHeaders, bspProperties: adtConfigParams.bspProperties, systemDescription: adtConfigParams.systemDescription, systemUrl: adtConfigParams.systemUrl, bspUrlPattern: adtConfigParams.bspUrlPattern, appName: appName, versionId: versionId }; if (!adtConfigParams.bspProperties.bspApplication.length) { return res.status(500).json({ status: 'Error', message: 'Invalid name of BSP application.' }); } // Create new app if (adtConfigParams.bspProperties.isNewApp) { utils.adtSetConnection(adtConfig) .then( function(response) { delete adtConfig.headers['X-CSRF-Token']; // Do not fetch token when post delete adtConfig.headers['x-csrf-token']; // Do not fetch token when post adtConfig.headers["x-csrf-token"] = response.headers['x-csrf-token']; adtConfig.headers["cookie"] = response.headers['set-cookie']; utils.createBspApplication(adtConfig).then( function(result) { logger.debug('Application created.'); logger.debug('Application resources deployment started.'); utils.bspApplicationDeployResources(adtConfig, deploymentSync.resourcesSync).then( function(result) { utils.bspApplicationIndexCalculation(adtConfig, serverConfig).then( function(result) { return res.status(200).json({ status: 'Success', message: 'Application was deployed.' }); }, function(error) { logger.error('Error', error); return res.status(500).json({ status: 'Error', message: error }); } ); }, function(error) { logger.error('Error', error); return res.status(500).json({ status: 'Error', message: error }); } ); }, function(error) { logger.error('Error', error); return res.status(500).json({ status: 'Error', message: error }); } ); }, function(error)