Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/cli/iofog.js
Original file line number Diff line number Diff line change
Expand Up @@ -394,7 +394,7 @@ function _createFogObject(cliData) {
logFileCount: cliData.logFileCount,
statusFrequency: cliData.statusFrequency,
changeFrequency: cliData.changeFrequency,
deviceScanFrequency: cliData.deviceScanFrequency,
deviceScanFrequency: cliData.deviceFrequency,
bluetoothEnabled: AppHelper.validateBooleanCliOptions(cliData.bluetoothEnable, cliData.bluetoothDisable),
watchdogEnabled: AppHelper.validateBooleanCliOptions(cliData.watchdogEnable, cliData.watchdogDisable),
abstractedHardwareEnabled: AppHelper.validateBooleanCliOptions(cliData.absHwEnable, cliData.absHwDisable),
Expand Down
4 changes: 0 additions & 4 deletions src/decorators/cli-decorator.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,8 @@ function prepareUserById(f) {
const obj = fArgs[0]
const userId = obj.userId

logger.info('getting user by id: ' + userId)

const user = await UserManager.findById(userId)

if (!user) {
logger.error('userId ' + userId + ' incorrect')
throw new Errors.AuthenticationError('user id does not exist')
}

Expand Down
9 changes: 9 additions & 0 deletions src/helpers/app-helper.js
Original file line number Diff line number Diff line change
Expand Up @@ -259,6 +259,14 @@ function isTest() {
return process.env.NODE_ENV === 'test'
}

function isEmpty(obj) {
for(let key in obj) {
if(obj.hasOwnProperty(key))
return false;
}
return true;
}


module.exports = {
encryptText,
Expand All @@ -280,4 +288,5 @@ module.exports = {
trimCertificate,
validateParameters,
isTest,
isEmpty
};
3 changes: 2 additions & 1 deletion src/helpers/error-messages.js
Original file line number Diff line number Diff line change
Expand Up @@ -69,5 +69,6 @@ module.exports = {
INVALID_VOLUME_MAPPING: 'Volume mapping parsing error. Please provide valid volume mapping.',
INVALID_INTERNAL_PORT: 'Internal parsing error. Please provide valid internal port.',
INVALID_ROUTE: 'Route parsing error. Please provide valid route.'
}
},
CONNECTOR_IS_IN_USE: 'You can\'t delete connector, because it is used for routing now.'
};
27 changes: 19 additions & 8 deletions src/services/catalog-service.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ const CatalogItemInputTypeManager = require('../sequelize/managers/catalog-item-
const CatalogItemOutputTypeManager = require('../sequelize/managers/catalog-item-output-type-manager');
const Op = require('sequelize').Op;
const validator = require('../schemas/index');
const RegistryManager = require('../sequelize/managers/registry-manager');

const createCatalogItem = async function (data, user, transaction) {
await validator.validate(data, validator.schemas.catalogItemCreate);
Expand All @@ -43,6 +44,7 @@ const updateCatalogItem = async function (id, data, user, isCLI, transaction) {
? {id: id}
: {id: id, userId: user.id};

data.id = id;
await _updateCatalogItem(data, where, transaction);
await _updateCatalogItemImages(data, transaction);
await _updateCatalogItemIOTypes(data, where, transaction);
Expand All @@ -63,6 +65,13 @@ const _updateCatalogItem = async function (data, where, transaction) {
};

catalogItem = AppHelper.deleteUndefinedFields(catalogItem);
if (!catalogItem || AppHelper.isEmpty(catalogItem)) {
return
}
const registry = await RegistryManager.findOne({id: data.registryId}, transaction);
if (!registry) {
throw new Errors.NotFoundError(AppHelper.formatMessage(ErrorMessages.INVALID_REGISTRY_ID, data.registryId));
}

const item = await _checkIfItemExists(where, transaction);
await _checkForDuplicateName(data.name, item, transaction);
Expand All @@ -74,13 +83,13 @@ const _updateCatalogItemImages = async function (data, transaction) {
for (let image of data.images) {
switch (image.fogTypeId) {
case 1:
await CatalogItemImageManager.update({
await CatalogItemImageManager.updateOrCreate({
catalogItemId: data.id,
fogTypeId: 1
}, image, transaction);
break;
case 2:
await CatalogItemImageManager.update({
await CatalogItemImageManager.updateOrCreate({
catalogItemId: data.id,
fogTypeId: 2
}, image, transaction);
Expand All @@ -93,26 +102,28 @@ const _updateCatalogItemImages = async function (data, transaction) {
const _updateCatalogItemIOTypes = async function (data, where, transaction) {
if (data.inputType && data.inputType.length != 0) {
let inputType = {
catalogItemId: data.id,
infoType: data.inputType.infoType,
infoFormat: data.inputType.infoFormat
};
inputType = AppHelper.deleteUndefinedFields(inputType);
await CatalogItemInputTypeManager.update({catalogItemId: data.id}, inputType, transaction);
await CatalogItemInputTypeManager.updateOrCreate({catalogItemId: data.id}, inputType, transaction);
}
if (data.outputType && data.outputType.length !== 0) {
let outputType = {
catalogItemId: data.id,
infoType: data.outputType.infoType,
infoFormat: data.outputType.infoFormat
};
outputType = AppHelper.deleteUndefinedFields(outputType);
await CatalogItemOutputTypeManager.update({catalogItemId: data.id}, outputType, transaction);
await CatalogItemOutputTypeManager.updateOrCreate({catalogItemId: data.id}, outputType, transaction);
}
};

const listCatalogItems = async function (user, isCLI, transaction) {
const where = isCLI
? {}
: {[Op.or]: [{userId: user.id}, {userId: null}]};
? {category: {[Op.ne]: 'SYSTEM'}}
: {[Op.or]: [{userId: user.id}, {userId: null}], category: {[Op.ne]: 'SYSTEM'}};

const attributes = isCLI
? {}
Expand All @@ -126,8 +137,8 @@ const listCatalogItems = async function (user, isCLI, transaction) {

const getCatalogItem = async function (id, user, isCLI, transaction) {
const where = isCLI
? {id: id}
: {[Op.or]: [{userId: user.id}, {userId: null}], id: id};
? {id: id, category: {[Op.ne]: 'SYSTEM'}}
: {[Op.or]: [{userId: user.id}, {userId: null}], id: id, category: {[Op.ne]: 'SYSTEM'}};

const attributes = isCLI
? {}
Expand Down
14 changes: 12 additions & 2 deletions src/services/connector-service.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ const qs = require('qs');
const Op = require('sequelize').Op;
const Sequelize = require('sequelize');
const fs = require('fs');
const ConnectorPortManager = require('../sequelize/managers/connector-port-manager');

async function _createConnector(connectorData, transaction) {
await Validator.validate(connectorData, Validator.schemas.connectorCreate);
Expand Down Expand Up @@ -69,10 +70,15 @@ async function _deleteConnector(connectorData, transaction) {
const queryConnectorData = {
publicIp: connectorData.publicIp
};
const affectedRows = await ConnectorManager.delete(queryConnectorData, transaction);
if (affectedRows === 0) {
const connector = await ConnectorManager.findOne(queryConnectorData, transaction);
if (!connector) {
throw new Errors.NotFoundError(AppHelper.formatMessage(ErrorMessages.INVALID_CONNECTOR_IP, connectorData.publicIp))
}
const ports = await ConnectorPortManager.findAll({connectorId: connector.id}, transaction);
if (ports) {
throw new Errors.ValidationError(ErrorMessages.CONNECTOR_IS_IN_USE)
}
await ConnectorManager.delete(queryConnectorData, transaction);
}

async function _getConnectorList(transaction) {
Expand Down Expand Up @@ -197,6 +203,10 @@ async function closePortOnConnector(connector, ports, transaction) {
'Content-Length': Buffer.byteLength(data)
}
};
if (!connector.devMode && connector.cert && connector.isSelfSignedCert === true) {
const ca = fs.readFileSync(connector.cert);
options.ca = new Buffer(ca);
}


await _makeRequest(connector, options, data)
Expand Down
27 changes: 15 additions & 12 deletions src/services/microservices-service.js
Original file line number Diff line number Diff line change
Expand Up @@ -718,24 +718,27 @@ async function _deleteSimplePortMapping(microservice, msPorts, user, transaction
}

async function _deletePortMappingOverConnector(microservice, msPorts, user, transaction) {
const pubModeData = await MicroservicePublicModeManager.findOne({microservicePortId: msPorts.id}, transaction)
const pubModeData = await MicroservicePublicModeManager.findOne({microservicePortId: msPorts.id}, transaction);

const ports = await ConnectorPortManager.findOne({id: pubModeData.connectorPortId}, transaction)
const connector = await ConnectorManager.findOne({id: ports.connectorId}, transaction)

await ConnectorService.closePortOnConnector(connector, ports, transaction)
const ports = await ConnectorPortManager.findOne({id: pubModeData.connectorPortId}, transaction);
const connector = await ConnectorManager.findOne({id: ports.connectorId}, transaction);

await MicroservicePublicModeManager.delete({id: pubModeData.id}, transaction)
await MicroservicePortManager.delete({id: msPorts.id}, transaction)
await ConnectorPortManager.delete({id: ports.id}, transaction)
await MicroserviceManager.delete({uuid: pubModeData.networkMicroserviceUuid}, transaction)
try {
await ConnectorService.closePortOnConnector(connector, ports, transaction);
} catch (e) {
logger.warn(`Can't close ports pair ${ports.mappingId} on connector ${connector.publicIp}. Delete manually if necessary`);
}
await MicroservicePublicModeManager.delete({id: pubModeData.id}, transaction);
await MicroservicePortManager.delete({id: msPorts.id}, transaction);
await ConnectorPortManager.delete({id: ports.id}, transaction);
await MicroserviceManager.delete({uuid: pubModeData.networkMicroserviceUuid}, transaction);

const updateRebuildMs = {
rebuild: true
}
await MicroserviceManager.update({uuid: microservice.uuid}, updateRebuildMs, transaction)
};
await MicroserviceManager.update({uuid: microservice.uuid}, updateRebuildMs, transaction);

await ChangeTrackingService.update(pubModeData.iofogUuid, ChangeTrackingService.events.microserviceFull, transaction)
await ChangeTrackingService.update(pubModeData.iofogUuid, ChangeTrackingService.events.microserviceFull, transaction);
}

async function _validatePorts(internal, external) {
Expand Down