diff --git a/specs/swagger.yml b/specs/swagger.yml index 06ba3f0b9..0f89affed 100644 --- a/specs/swagger.yml +++ b/specs/swagger.yml @@ -2715,6 +2715,10 @@ definitions: type: string email: type: string + requiresCert: + type: boolean + certificate: + type: string ActionBody: type: object properties: @@ -3035,4 +3039,4 @@ schemes: - http - https host: 'localhost:54421' -basePath: /api/v3 +basePath: /api/v3 \ No newline at end of file diff --git a/src/helpers/error-messages.js b/src/helpers/error-messages.js index 61c1c1f0f..2a7c9c0ec 100644 --- a/src/helpers/error-messages.js +++ b/src/helpers/error-messages.js @@ -16,6 +16,7 @@ module.exports = { ALREADY_EXISTS: 'Model already exists', INVALID_CATALOG_ITEM_ID: 'Invalid catalog item id {}', INVALID_FLOW_ID: 'Invalid flow id {}', + INVALID_REGISTRY_ID: 'Invalid registry id {}', INVALID_CONNECTOR_IP: 'Invalid connector IP {}', UNABLE_TO_CREATE_ACTIVATION_CODE: 'Unable to create activation code', UNABLE_TO_GET_ACTIVATION_CODE: 'Unable to create activation code', @@ -50,11 +51,12 @@ module.exports = { FILE_DOES_NOT_EXIST: 'File does not exist.', RESTRICTED_PUBLISHER: "You are not allowed to add catalog item as 'Eclipse ioFog' publisher", REQUIRED_FOG_NODE: 'ioFog node is required.', + INVALID_CONNECTOR_DOMAIN: 'Invalid connector domain {}', + CERT_PROPERTY_REQUIRED: 'Property "certificate" is required if property "requiresCert" is set to true', CLI: { INVALID_PORT_MAPPING: 'Port mapping parsing error. Please provide valid port mapping.', 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.' - }, - INVALID_CONNECTOR_DOMAIN: 'Invalid connector domain {}' + } }; diff --git a/src/schemas/registry.js b/src/schemas/registry.js index 69a2838ca..a69a2e982 100644 --- a/src/schemas/registry.js +++ b/src/schemas/registry.js @@ -19,7 +19,9 @@ const registryCreate = { "isPublic": {"type": "boolean"}, "username": {"type": "string", "minLength": 1}, "password": {"type": "string"}, - "email": {"type": "string"} + "email": {"type": "string"}, + "requiresCert": {"type": "boolean"}, + "certificate": {"type": "string"} }, "required": ["url", "isPublic", "username", "password", "email"], "additionalProperties": false diff --git a/src/services/registry-service.js b/src/services/registry-service.js index a66a10398..eb0d12a84 100644 --- a/src/services/registry-service.js +++ b/src/services/registry-service.js @@ -12,24 +12,36 @@ */ const RegistryManager = require('../sequelize/managers/registry-manager'); -const Validator = require('../schemas') -const Errors = require('../helpers/errors') -const ChangeTrackingManager = require('../sequelize/managers/change-tracking-manager') +const Validator = require('../schemas'); +const Errors = require('../helpers/errors'); +const ErrorMessages = require('../helpers/error-messages'); +const ChangeTrackingManager = require('../sequelize/managers/change-tracking-manager'); const TransactionDecorator = require('../decorators/transaction-decorator'); -const FogManager = require('../sequelize/managers/iofog-manager') +const FogManager = require('../sequelize/managers/iofog-manager'); const Sequelize = require('sequelize'); const Op = Sequelize.Op; +const AppHelper = require('../helpers/app-helper'); + const createRegistry = async function (registry, user, transaction) { await Validator.validate(registry, Validator.schemas.registryCreate); + if (registry.requiresCert && registry.certificate === undefined) { + throw new Errors.ValidationError(ErrorMessages.CERT_PROPERTY_REQUIRED); + } + let registryCreate = { url: registry.url, username: registry.username, password: registry.password, isPublic: registry.isPublic, userEmail: registry.email, + requiresCert: registry.requiresCert, + certificate: registry.certificate, userId: user.id }; + + registryCreate = AppHelper.deleteUndefinedFields(registryCreate); + await RegistryManager.create(registryCreate, transaction) await updateChangeTracking(user, transaction); }; @@ -73,7 +85,7 @@ const deleteRegistry = async function (registryData, user, isCli, transaction) { : {id: registryData.id, userId: user.id}; const registry = await RegistryManager.findOne(queryData, transaction); if (!registry) { - throw new Errors.NotFoundError('Invalid Registry Id'); + throw new Errors.NotFoundError(AppHelper.formatMessage(ErrorMessages.INVALID_REGISTRY_ID, registryData.id)); } if (isCli) { user = {id: registry.userId};