diff --git a/app/v1/app.js b/app/v1/app.js index 4d857ff5..65884252 100644 --- a/app/v1/app.js +++ b/app/v1/app.js @@ -82,6 +82,7 @@ function exposeRoutes () { app.put('/applications/groups', auth.validateAuth, applications.putFunctionalGroup); // webengine app store app.get('/applications/store', cors(), applications.getAppStore); + app.get('/applications/store/staging', cors(), applications.getStagingAppStore); app.post('/webhook', applications.webhook); //webhook route //begin policy table routes app.options('/staging/policy', cors()) @@ -105,6 +106,7 @@ function exposeRoutes () { app.get('/module', auth.validateAuth, moduleConfig.get); app.post('/module', auth.validateAuth, moduleConfig.post); app.post('/module/promote', auth.validateAuth, moduleConfig.promote); + app.post('/module/promoteNoId', auth.validateAuth, moduleConfig.promoteNoId); app.get('/about', auth.validateAuth, about.getInfo); app.post('/security/certificate', certificates.createCertificate); app.post('/security/private', certificates.createPrivateKey); diff --git a/app/v1/applications/controller.js b/app/v1/applications/controller.js index 3edc23ae..e3ca1a60 100644 --- a/app/v1/applications/controller.js +++ b/app/v1/applications/controller.js @@ -616,6 +616,41 @@ function queryAndStoreCategories(callback) { }); } +function getStagingAppStore (req, res, next) { + let filterObj = { + approval_status: 'STAGING', + platform: 'EMBEDDED', + }; + + if (req.query.uuid) { + filterObj.app_uuid = req.query.uuid; + } + if (req.query.transport_type) { + filterObj.transport_type = req.query.transport_type; + } + + let chosenFlow = helper.createAppInfoFlow('multiFilter', filterObj); + + const finalFlow = flow([ + chosenFlow, + helper.appStoreTransformation.bind(null, req.query.min_rpc_version, req.query.min_protocol_version), + ], { method: 'waterfall' }); + + finalFlow(function (err, apps) { + if (err) { + app.locals.log.error(err); + return res.parcel.setStatus(500) + .setMessage("Internal Server Error") + .deliver(); + } + return res.parcel.setStatus(200) + .setData({ + applications: apps, + }) + .deliver(); + }) +} + function getAppStore (req, res, next) { // only let embedded apps through let filterObj = { @@ -670,4 +705,5 @@ module.exports = { updateAppCertificate: updateAppCertificate, checkAndUpdateCertificates: checkAndUpdateCertificates, getAppStore: getAppStore, + getStagingAppStore: getStagingAppStore, }; diff --git a/app/v1/messages/sql.js b/app/v1/messages/sql.js index b08c1924..0828826d 100644 --- a/app/v1/messages/sql.js +++ b/app/v1/messages/sql.js @@ -22,7 +22,8 @@ module.exports = { categoryByLanguage: getMessageCategoriesByLanguage, categoryByMaxId: getMessageCategoriesByMaxId, byIds: getMessagesByIdsStagingFilter, - groupsByIds: getMessageGroupsByIdsStagingFilter + groupsByIds: getMessageGroupsByIdsStagingFilter, + highestGroupId: getHighestMessageGroupId, }, getMessageNamesStaging: getMessageNamesStaging, getLanguages: getLanguages, @@ -44,6 +45,16 @@ function getMessagesStatus (isProduction) { } } +//retrieve the highest id message group found +function getHighestMessageGroupId (isProduction) { + let viewName = isProduction ? 'view_message_group_production' : 'view_message_group_staging'; + + let sqlString = sql.select('MAX(id) AS id') + .from(viewName); + + return sqlString.toString(); +} + //retrieve message group information such as categories function getMessageGroups (isProduction, category, hideDeleted = false) { let viewName = isProduction ? 'view_message_group_production' : 'view_message_group_staging'; diff --git a/app/v1/module-config/controller.js b/app/v1/module-config/controller.js index 1f3ac357..0317757c 100644 --- a/app/v1/module-config/controller.js +++ b/app/v1/module-config/controller.js @@ -110,6 +110,34 @@ function post(isProduction, req, res, next) { } } +function promoteNoId (req, res, next) { + if (res.parcel.message) { + return res.parcel.deliver(); + } + + // retrieve the staging config + const flow = helper.getModuleConfigFlow('status', false); + + flow(function(err, data) { + if (err) { + app.locals.log.error(err); + return res.parcel + .setStatus(500) + .setMessage('Internal server error') + .deliver(); + } + if (!certController.openSSLEnabled) { // cert gen not enabled + data.forEach(obj => { + delete obj.certificate; + delete obj.private_key + }) + } + // modify the body and pass the express parameters along as if we are posting to production + req.body = data[0]; + post(true, req, res, next); + }); +} + function checkAndUpdateCertificate (cb) { if (!certController.openSSLEnabled) { if (cb) { @@ -183,5 +211,6 @@ module.exports = { get: get, post: post.bind(null, false), promote: post.bind(null, true), + promoteNoId: promoteNoId, checkAndUpdateCertificate: checkAndUpdateCertificate }; diff --git a/app/v1/module-config/helper.js b/app/v1/module-config/helper.js index 755dd1b5..d18c3411 100644 --- a/app/v1/module-config/helper.js +++ b/app/v1/module-config/helper.js @@ -15,17 +15,20 @@ function validatePost (req, res) { req.body.exchange_after_x_days -= 0; req.body.timeout_after_x_seconds -= 0; - if (!check.number(req.body.exchange_after_x_ignition_cycles)) { - return setError("exchange_after_x_ignition_cycles required"); + if (!check.number(req.body.exchange_after_x_ignition_cycles) || + (check.number(req.body.exchange_after_x_ignition_cycles) && req.body.exchange_after_x_ignition_cycles > 255)) { + return setError("exchange_after_x_ignition_cycles required and should not exceed 255"); } if (!check.number(req.body.exchange_after_x_kilometers)) { return setError("exchange_after_x_kilometers required"); } - if (!check.number(req.body.exchange_after_x_days)) { - return setError("exchange_after_x_days required"); + if (!check.number(req.body.exchange_after_x_days) || + (check.number(req.body.exchange_after_x_days) && req.body.exchange_after_x_days > 255)) { + return setError("exchange_after_x_days required and should not exceed 255"); } - if (!check.number(req.body.timeout_after_x_seconds)) { - return setError("timeout_after_x_seconds required"); + if (!check.number(req.body.timeout_after_x_seconds) || + (check.number(req.body.timeout_after_x_seconds) && req.body.timeout_after_x_seconds > 65535)) { + return setError("timeout_after_x_seconds required and should not exceed 65535"); } if (!check.array(req.body.seconds_between_retries)) { return setError("seconds_between_retries required"); @@ -58,26 +61,33 @@ function validatePost (req, res) { req.body.notifications_per_minute_by_priority.COMMUNICATION -= 0; req.body.notifications_per_minute_by_priority.NORMAL -= 0; req.body.notifications_per_minute_by_priority.NONE -= 0; - if (!check.number(req.body.notifications_per_minute_by_priority.EMERGENCY)) { - return setError("EMERGENCY notification count required"); + if (!check.number(req.body.notifications_per_minute_by_priority.EMERGENCY) || + (check.number(req.body.notifications_per_minute_by_priority.EMERGENCY) && req.body.notifications_per_minute_by_priority.EMERGENCY > 255)) { + return setError("EMERGENCY notification count required and should not exceed 255"); } - if (!check.number(req.body.notifications_per_minute_by_priority.NAVIGATION)) { - return setError("NAVIGATION notification count required"); + if (!check.number(req.body.notifications_per_minute_by_priority.NAVIGATION) || + (check.number(req.body.notifications_per_minute_by_priority.NAVIGATION) && req.body.notifications_per_minute_by_priority.NAVIGATION > 255)) { + return setError("NAVIGATION notification count required and should not exceed 255"); } - if (!check.number(req.body.notifications_per_minute_by_priority.PROJECTION)) { - return setError("PROJECTION notification count required"); + if (!check.number(req.body.notifications_per_minute_by_priority.PROJECTION) || + (check.number(req.body.notifications_per_minute_by_priority.PROJECTION) && req.body.notifications_per_minute_by_priority.PROJECTION > 255)) { + return setError("PROJECTION notification count required and should not exceed 255"); } - if (!check.number(req.body.notifications_per_minute_by_priority.VOICECOM)) { - return setError("VOICECOM notification count required"); + if (!check.number(req.body.notifications_per_minute_by_priority.VOICECOM) || + (check.number(req.body.notifications_per_minute_by_priority.VOICECOM) && req.body.notifications_per_minute_by_priority.VOICECOM > 255)) { + return setError("VOICECOM notification count required and should not exceed 255"); } - if (!check.number(req.body.notifications_per_minute_by_priority.COMMUNICATION)) { - return setError("COMMUNICATION notification count required"); + if (!check.number(req.body.notifications_per_minute_by_priority.COMMUNICATION) || + (check.number(req.body.notifications_per_minute_by_priority.COMMUNICATION) && req.body.notifications_per_minute_by_priority.COMMUNICATION > 255)) { + return setError("COMMUNICATION notification count required and should not exceed 255"); } - if (!check.number(req.body.notifications_per_minute_by_priority.NORMAL)) { - return setError("NORMAL notification count required"); + if (!check.number(req.body.notifications_per_minute_by_priority.NORMAL) || + (check.number(req.body.notifications_per_minute_by_priority.NORMAL) && req.body.notifications_per_minute_by_priority.NORMAL > 255)) { + return setError("NORMAL notification count required and should not exceed 255"); } - if (!check.number(req.body.notifications_per_minute_by_priority.NONE)) { - return setError("NONE notification count required"); + if (!check.number(req.body.notifications_per_minute_by_priority.NONE) || + (check.number(req.body.notifications_per_minute_by_priority.NONE) && req.body.notifications_per_minute_by_priority.NONE > 255)) { + return setError("NONE notification count required and should not exceed 255"); } req.body.subtle_notifications_per_minute_by_priority.EMERGENCY -= 0; @@ -87,26 +97,33 @@ function validatePost (req, res) { req.body.subtle_notifications_per_minute_by_priority.COMMUNICATION -= 0; req.body.subtle_notifications_per_minute_by_priority.NORMAL -= 0; req.body.subtle_notifications_per_minute_by_priority.NONE -= 0; - if (!check.number(req.body.subtle_notifications_per_minute_by_priority.EMERGENCY)) { - return setError("Subtle EMERGENCY notification count required"); + if (!check.number(req.body.subtle_notifications_per_minute_by_priority.EMERGENCY) || + (check.number(req.body.subtle_notifications_per_minute_by_priority.EMERGENCY) && req.body.subtle_notifications_per_minute_by_priority.EMERGENCY > 255)) { + return setError("Subtle EMERGENCY notification count required and should not exceed 255"); } - if (!check.number(req.body.subtle_notifications_per_minute_by_priority.NAVIGATION)) { - return setError("Subtle NAVIGATION notification count required"); + if (!check.number(req.body.subtle_notifications_per_minute_by_priority.NAVIGATION) || + (check.number(req.body.subtle_notifications_per_minute_by_priority.NAVIGATION) && req.body.subtle_notifications_per_minute_by_priority.NAVIGATION > 255)) { + return setError("Subtle NAVIGATION notification count required and should not exceed 255"); } - if (!check.number(req.body.subtle_notifications_per_minute_by_priority.PROJECTION)) { - return setError("Subtle PROJECTION notification count required"); + if (!check.number(req.body.subtle_notifications_per_minute_by_priority.PROJECTION) || + (check.number(req.body.subtle_notifications_per_minute_by_priority.PROJECTION) && req.body.subtle_notifications_per_minute_by_priority.PROJECTION > 255)) { + return setError("Subtle PROJECTION notification count required and should not exceed 255"); } - if (!check.number(req.body.subtle_notifications_per_minute_by_priority.VOICECOM)) { - return setError("Subtle VOICECOM notification count required"); + if (!check.number(req.body.subtle_notifications_per_minute_by_priority.VOICECOM) || + (check.number(req.body.subtle_notifications_per_minute_by_priority.VOICECOM) && req.body.subtle_notifications_per_minute_by_priority.VOICECOM > 255)) { + return setError("Subtle VOICECOM notification count required and should not exceed 255"); } - if (!check.number(req.body.subtle_notifications_per_minute_by_priority.COMMUNICATION)) { - return setError("Subtle COMMUNICATION notification count required"); + if (!check.number(req.body.subtle_notifications_per_minute_by_priority.COMMUNICATION) || + (check.number(req.body.subtle_notifications_per_minute_by_priority.COMMUNICATION) && req.body.subtle_notifications_per_minute_by_priority.COMMUNICATION > 255)) { + return setError("Subtle COMMUNICATION notification count required and should not exceed 255"); } - if (!check.number(req.body.subtle_notifications_per_minute_by_priority.NORMAL)) { - return setError("Subtle NORMAL notification count required"); + if (!check.number(req.body.subtle_notifications_per_minute_by_priority.NORMAL) || + (check.number(req.body.subtle_notifications_per_minute_by_priority.NORMAL) && req.body.subtle_notifications_per_minute_by_priority.NORMAL > 255)) { + return setError("Subtle NORMAL notification count required and should not exceed 255"); } - if (!check.number(req.body.subtle_notifications_per_minute_by_priority.NONE)) { - return setError("Subtle NONE notification count required"); + if (!check.number(req.body.subtle_notifications_per_minute_by_priority.NONE) || + (check.number(req.body.subtle_notifications_per_minute_by_priority.NONE) && req.body.subtle_notifications_per_minute_by_priority.NONE > 255)) { + return setError("Subtle NONE notification count required and should not exceed 255"); } return; diff --git a/app/v1/policy/helper.js b/app/v1/policy/helper.js index 0ca015c6..8d4115e3 100644 --- a/app/v1/policy/helper.js +++ b/app/v1/policy/helper.js @@ -119,7 +119,8 @@ function setupModuleConfig (isProduction, useLongUuids = false) { function setupConsumerFriendlyMessages (isProduction) { const getMessages = flame.flow({ messageStatuses: setupSqlCommand.bind(null, messagesSql.getMessages.status(isProduction)), - messageGroups: setupSqlCommand.bind(null, messagesSql.getMessages.group(isProduction, false, true)) + messageGroups: setupSqlCommand.bind(null, messagesSql.getMessages.group(isProduction, false, true)), + highestMessageGroupId: setupSqlCommand.bind(null, messagesSql.getMessages.highestGroupId(isProduction, false)) }, {method: 'parallel'}); const makeMessages = [ diff --git a/app/v1/policy/model.js b/app/v1/policy/model.js index 5f167e26..8d40c7e7 100644 --- a/app/v1/policy/model.js +++ b/app/v1/policy/model.js @@ -5,6 +5,7 @@ const sqlApp = require('../applications/sql.js'); const _ = require('lodash'); const vehicleDataHelper = require('../vehicle-data/helper.js'); const certController = require('../certificates/controller'); +const certUtil = require('../helpers/certificates'); //module config @@ -28,78 +29,97 @@ function transformModuleConfig (isProduction, useLongUuids = false, info, next) concatPort = ":" + settings.policyServerPort; } + // asynchronous and synchronous if branches need to be controlled + let certificateResolution; + if(certController.openSSLEnabled && base.certificate && base.private_key){ - base.certificate += '\n' + base.private_key; + if (settings.securityOptions.moduleConfigEncryptCertBundle) { + certificateResolution = certUtil.createKeyCertBundle(base.private_key, base.certificate); + } else { + certificateResolution = Promise.resolve(base.certificate + '\n' + base.private_key); + } } else { - delete base.certificate; + certificateResolution = Promise.resolve(undefined); } - var moduleConfig = { - "full_app_id_supported": useLongUuids, - "exchange_after_x_ignition_cycles": base.exchange_after_x_ignition_cycles, - "exchange_after_x_kilometers": base.exchange_after_x_kilometers, - "exchange_after_x_days": base.exchange_after_x_days, - "timeout_after_x_seconds": base.timeout_after_x_seconds, - "seconds_between_retries": retrySeconds, - "lock_screen_dismissal_enabled": base.lock_screen_dismissal_enabled, - "endpoints": { - "0x07": { - default: [ protocol + settings.policyServerHost + concatPort + "/api/v1/" + (isProduction ? "production" : "staging") + "/policy"] + certificateResolution.then(result => { + if (settings.securityOptions.moduleConfigEncryptCertBundle) { + base.certificate = result.pkcs12.toString('base64'); + } else { + base.certificate = result; + } + }).catch(err => { + // something went wrong with bundling the cert + key. fallback to default + console.error(err); + base.certificate += '\n' + base.private_key; + }).finally(() => { + var moduleConfig = { + "full_app_id_supported": useLongUuids, + "exchange_after_x_ignition_cycles": base.exchange_after_x_ignition_cycles, + "exchange_after_x_kilometers": base.exchange_after_x_kilometers, + "exchange_after_x_days": base.exchange_after_x_days, + "timeout_after_x_seconds": base.timeout_after_x_seconds, + "seconds_between_retries": retrySeconds, + "lock_screen_dismissal_enabled": base.lock_screen_dismissal_enabled, + "endpoints": { + "0x07": { + default: [ protocol + settings.policyServerHost + concatPort + "/api/v1/" + (isProduction ? "production" : "staging") + "/policy"] + }, + "0x04": { + default: [base.endpoint_0x04] + }, + "queryAppsUrl": { + default: [base.query_apps_url] + }, + "lock_screen_icon_url": { + default: [base.lock_screen_default_url] + }, }, - "0x04": { - default: [base.endpoint_0x04] + "endpoint_properties": { + // to be populated }, - "queryAppsUrl": { - default: [base.query_apps_url] + "notifications_per_minute_by_priority": { + "EMERGENCY": base.emergency_notifications, + "NAVIGATION": base.navigation_notifications, + "PROJECTION": base.projection_notifications, + "VOICECOM": base.voicecom_notifications, + "COMMUNICATION": base.communication_notifications, + "NORMAL": base.normal_notifications, + "NONE": base.none_notifications }, - "lock_screen_icon_url": { - default: [base.lock_screen_default_url] + "subtle_notifications_per_minute_by_priority": { + "EMERGENCY": base.subtle_emergency_notifications, + "NAVIGATION": base.subtle_navigation_notifications, + "PROJECTION": base.subtle_projection_notifications, + "VOICECOM": base.subtle_voicecom_notifications, + "COMMUNICATION": base.subtle_communication_notifications, + "NORMAL": base.subtle_normal_notifications, + "NONE": base.subtle_none_notifications }, - }, - "endpoint_properties": { - // to be populated - }, - "notifications_per_minute_by_priority": { - "EMERGENCY": base.emergency_notifications, - "NAVIGATION": base.navigation_notifications, - "PROJECTION": base.projection_notifications, - "VOICECOM": base.voicecom_notifications, - "COMMUNICATION": base.communication_notifications, - "NORMAL": base.normal_notifications, - "NONE": base.none_notifications - }, - "subtle_notifications_per_minute_by_priority": { - "EMERGENCY": base.subtle_emergency_notifications, - "NAVIGATION": base.subtle_navigation_notifications, - "PROJECTION": base.subtle_projection_notifications, - "VOICECOM": base.subtle_voicecom_notifications, - "COMMUNICATION": base.subtle_communication_notifications, - "NORMAL": base.subtle_normal_notifications, - "NONE": base.subtle_none_notifications - }, - "certificate": base.certificate, - }; - - // only have custom_vehicle_data_mapping_url present if set by OEM, - // according to evolution proposal - if(base.custom_vehicle_data_mapping_url){ - moduleConfig.endpoints.custom_vehicle_data_mapping_url = { - default: [base.custom_vehicle_data_mapping_url] + "certificate": base.certificate, }; - } - // inject endpoint properties we have from the database - _.forEach(endpointProperties, function (endProp, index) { - if (!moduleConfig.endpoint_properties[endProp.endpoint_name] && moduleConfig.endpoints[endProp.endpoint_name]) { - moduleConfig.endpoint_properties[endProp.endpoint_name] = {}; - } - if (moduleConfig.endpoint_properties[endProp.endpoint_name] && endProp.property_value) { - moduleConfig.endpoint_properties[endProp.endpoint_name][endProp.property_name] = endProp.property_value; + // only have custom_vehicle_data_mapping_url present if set by OEM, + // according to evolution proposal + if(base.custom_vehicle_data_mapping_url){ + moduleConfig.endpoints.custom_vehicle_data_mapping_url = { + default: [base.custom_vehicle_data_mapping_url] + }; } - }); - next(null, moduleConfig); + // inject endpoint properties we have from the database + _.forEach(endpointProperties, function (endProp, index) { + if (!moduleConfig.endpoint_properties[endProp.endpoint_name] && moduleConfig.endpoints[endProp.endpoint_name]) { + moduleConfig.endpoint_properties[endProp.endpoint_name] = {}; + } + if (moduleConfig.endpoint_properties[endProp.endpoint_name] && endProp.property_value) { + moduleConfig.endpoint_properties[endProp.endpoint_name][endProp.property_name] = endProp.property_value; + } + }); + + next(null, moduleConfig); + }); } //consumer messages @@ -107,6 +127,8 @@ function transformModuleConfig (isProduction, useLongUuids = false, info, next) function transformMessages (info, cb) { const allMessages = info.messageStatuses; const groups = info.messageGroups; + const highestMessageGroupId = info.highestMessageGroupId[0] ? info.highestMessageGroupId[0].id : 0; // used to help generate a version number + const versionString = Number(highestMessageGroupId).toLocaleString().replace(/,/g,'.').padStart(11, "000."); // ###.###.### format up to the id of 999,999,999 const transformFlow = flame.flow([ //hash the message groups by message_category @@ -139,7 +161,7 @@ function transformMessages (info, cb) { next(); }, function () { next(null, { - "version": "000.000.001", //TODO: what to do with the versioning? + "version": versionString, "messages": messageObj }); }); diff --git a/package-lock.json b/package-lock.json index 085f0664..1fc92c09 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "sdl_policy_server", - "version": "2.11.0", + "version": "2.12.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -1966,9 +1966,9 @@ "dev": true }, "ssri": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-7.1.0.tgz", - "integrity": "sha512-77/WrDZUWocK0mvA5NTRQyveUf+wsrIc6vyrxpS8tVvYBcX215QbafrJR3KtkpskIzoFLqqNuuYQvxaMjXJ/0g==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-7.1.1.tgz", + "integrity": "sha512-w+daCzXN89PseTL99MkA+fxJEcU3wfaE/ah0i0lnOlpG1CYLJ2ZjzEry68YBKfLs4JfoTShrTEsJkAZuNZ/stw==", "dev": true, "requires": { "figgy-pudding": "^3.5.1", @@ -3093,15 +3093,48 @@ } }, "browserslist": { - "version": "4.14.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.4.tgz", - "integrity": "sha512-7FOuawafVdEwa5Jv4nzeik/PepAjVte6HmVGHsjt2bC237jeL9QlcTBDF3PnHEvcC6uHwLGYPwZHNZMB7wWAnw==", + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001135", - "electron-to-chromium": "^1.3.570", - "escalade": "^3.1.0", - "node-releases": "^1.1.61" + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" + }, + "dependencies": { + "caniuse-lite": { + "version": "1.0.30001233", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001233.tgz", + "integrity": "sha512-BmkbxLfStqiPA7IEzQpIk0UFZFf3A4E6fzjPJ6OR+bFC2L8ES9J8zGA/asoi47p8XDVkev+WJo2I2Nc8c/34Yg==", + "dev": true + }, + "colorette": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.743", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.743.tgz", + "integrity": "sha512-K2wXfo9iZQzNJNx67+Pld0DRF+9bYinj62gXCdgPhcu1vidwVuLPHQPPFnCdO55njWigXXpfBiT90jGUPbw8Zg==", + "dev": true + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "node-releases": { + "version": "1.1.72", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.72.tgz", + "integrity": "sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==", + "dev": true + } } }, "buffer": { @@ -4465,45 +4498,69 @@ } }, "db-migrate-base": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/db-migrate-base/-/db-migrate-base-1.6.3.tgz", - "integrity": "sha512-O6Kh72Yh0DfvRAKg9QKzu1KkMwI5iI0dFHO6RmDLvbiYvtRW3faFXJNFwJYeioVBx22QA3AkVFbDIcw4j4QxGw==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/db-migrate-base/-/db-migrate-base-2.3.1.tgz", + "integrity": "sha512-HewYQ3HPmy7NOWmhhMLg9TzN1StEtSqGL3w8IbBRCxEsJ+oM3bDUQ/z5fqpYKfIUK07mMXieCmZYwFpwWkSHDw==", "requires": { "bluebird": "^3.1.1" } }, "db-migrate-pg": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/db-migrate-pg/-/db-migrate-pg-0.2.4.tgz", - "integrity": "sha512-5cx/j+7t9rJJHPJUOnLBebaBGcrgVpzyKL2PJPWwVJB/ZLcC1V+GYuWiUTsACkaZ3mu/UUVn/C/Cq1qIGa+SPg==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/db-migrate-pg/-/db-migrate-pg-1.2.2.tgz", + "integrity": "sha512-+rgrhGNWC2SzcfweopyZqOQ1Igz1RVFMUZwUs6SviHpOUzFwb0NZWkG0pw1GaO+JxTxS7VJjckUWkOwZbVYVag==", "requires": { "bluebird": "^3.1.1", - "db-migrate-base": "^1.5.2", - "pg": "^4.5.5", + "db-migrate-base": "^2.3.0", + "pg": "^8.0.3", "semver": "^5.0.3" }, "dependencies": { + "buffer-writer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz", + "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==" + }, "pg": { - "version": "4.5.7", - "resolved": "https://registry.npmjs.org/pg/-/pg-4.5.7.tgz", - "integrity": "sha1-Ra4WsjcGpjRaAyed7MaveVwW0ps=", - "requires": { - "buffer-writer": "1.0.1", - "generic-pool": "2.4.2", - "js-string-escape": "1.0.1", - "packet-reader": "0.2.0", - "pg-connection-string": "0.1.3", - "pg-types": "1.*", - "pgpass": "0.0.3", - "semver": "^4.1.0" - }, - "dependencies": { - "semver": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", - "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=" - } + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.5.1.tgz", + "integrity": "sha512-9wm3yX9lCfjvA98ybCyw2pADUivyNWT/yIP4ZcDVpMN0og70BUWYEGXPCTAQdGTAqnytfRADb7NERrY1qxhIqw==", + "requires": { + "buffer-writer": "2.0.0", + "packet-reader": "1.0.0", + "pg-connection-string": "^2.4.0", + "pg-pool": "^3.2.2", + "pg-protocol": "^1.4.0", + "pg-types": "^2.1.0", + "pgpass": "1.x" } + }, + "pg-connection-string": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.4.0.tgz", + "integrity": "sha512-3iBXuv7XKvxeMrIgym7njT+HlZkwZqqGX4Bu9cci8xHZNT+Um1gWKqCsAzcC0d95rcKMU5WBg6YRUcHyV0HZKQ==" + }, + "pg-pool": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.2.2.tgz", + "integrity": "sha512-ORJoFxAlmmros8igi608iVEbQNNZlp89diFVx6yV5v+ehmpMY9sK6QgpmgoXbmkNaBAx8cOOZh9g80kJv1ooyA==" + }, + "pg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "requires": { + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" + } + }, + "postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==" } } }, @@ -4818,6 +4875,11 @@ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" }, + "denque": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.0.tgz", + "integrity": "sha512-CYiCSgIF1p6EUByQPlGkKnP1M9g0ZV3qMIrqMqZqdwazygIA/YP2vrbcyl1h/WppKJTdl1F85cXIle+394iDAQ==" + }, "depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", @@ -4885,9 +4947,9 @@ "dev": true }, "dns-packet": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", - "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", + "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", "dev": true, "requires": { "ip": "^1.1.0", @@ -4995,11 +5057,6 @@ "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", "dev": true }, - "double-ended-queue": { - "version": "2.1.0-0", - "resolved": "https://registry.npmjs.org/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz", - "integrity": "sha1-ED01J/0xUo9AGIEwyEHv3XgmTlw=" - }, "duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", @@ -5049,12 +5106,6 @@ "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==", "dev": true }, - "electron-to-chromium": { - "version": "1.3.571", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.571.tgz", - "integrity": "sha512-UYEQ2Gtc50kqmyOmOVtj6Oqi38lm5yRJY3pLuWt6UIot0No1L09uu6Ja6/1XKwmz/p0eJFZTUZi+khd1PV1hHA==", - "dev": true - }, "elliptic": { "version": "6.5.4", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", @@ -5243,12 +5294,6 @@ "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-6.1.1.tgz", "integrity": "sha512-HBL8I3mIki5C1Cc9QjKUenHtnG0A5/xA8Q/AllRcfiwl2CZFXGK7ddBiCoRwAix4i2KxcQfjtIVcrVbB3vbmwg==" }, - "escalade": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.0.tgz", - "integrity": "sha512-mAk+hPSO8fLDkhV7V0dXazH5pDc6MrjBTPyD3VeKzxnVFjH1MIxbCdqGZB9O8+EwWakZs3ZCbDS4IpRt79V1ig==", - "dev": true - }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -6189,11 +6234,6 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, - "generic-pool": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-2.4.2.tgz", - "integrity": "sha1-iGvFvwvrfblugby7oHiBjeWmJoM=" - }, "gensync": { "version": "1.0.0-beta.1", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", @@ -6564,9 +6604,9 @@ "dev": true }, "hosted-git-info": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", - "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, "hpack.js": { @@ -7815,9 +7855,9 @@ } }, "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "lodash.defaults": { "version": "4.2.0", @@ -8796,16 +8836,10 @@ } } }, - "node-releases": { - "version": "1.1.61", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.61.tgz", - "integrity": "sha512-DD5vebQLg8jLCOzwupn954fbIiZht05DAZs0k2u8NStSe6h9XdsuIQL8hSRKYiU8WUQRznmSDrKGbv3ObOmC7g==", - "dev": true - }, "nodemailer": { - "version": "6.4.11", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.4.11.tgz", - "integrity": "sha512-BVZBDi+aJV4O38rxsUh164Dk1NCqgh6Cm0rQSb9SK/DHGll/DrCMnycVDD7msJgZCnmVa8ASo8EZzR7jsgTukQ==" + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.6.1.tgz", + "integrity": "sha512-1xzFN3gqv+/qJ6YRyxBxfTYstLNt0FCtZaFRvf4Sg9wxNGWbwFmGXVpfSi6ThGK6aRxAo+KjHtYSW8NvCsNSAg==" }, "normalize-package-data": { "version": "2.5.0", @@ -9268,9 +9302,9 @@ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" }, "packet-reader": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-0.2.0.tgz", - "integrity": "sha1-gZ300BC4LV6lZx+KGjrPA5vNdwA=" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", + "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==" }, "pako": { "version": "1.0.11", @@ -9555,6 +9589,11 @@ } } }, + "pg-protocol": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.4.0.tgz", + "integrity": "sha512-El+aXWcwG/8wuFICMQjM5ZSAm6OWiJicFdNYo+VY3QP+8vI4SvLIWVe51PppTzMhikUJR+PsyIFKqfdXPz/yxA==" + }, "pg-types": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-1.13.0.tgz", @@ -9568,11 +9607,11 @@ } }, "pgpass": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-0.0.3.tgz", - "integrity": "sha1-EuZ+NDsxicLzEgbrycwL7//PkUA=", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.4.tgz", + "integrity": "sha512-YmuA56alyBq7M59vxVBfPJrGSozru8QAdoNlWuW3cz8l+UX3cWge0vTvjKhsSHSJpo3Bom8/Mm6hf0TR5GY0+w==", "requires": { - "split": "~0.3" + "split2": "^3.1.1" } }, "picomatch": { @@ -10698,24 +10737,33 @@ } }, "redis": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/redis/-/redis-2.8.0.tgz", - "integrity": "sha512-M1OkonEQwtRmZv4tEWF2VgpG0JWJ8Fv1PhlgT5+B+uNq2cA3Rt1Yt/ryoR+vQNOQcIEgdCdfH0jr3bDpihAw1A==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/redis/-/redis-3.1.2.tgz", + "integrity": "sha512-grn5KoZLr/qrRQVwoSkmzdbw6pwF+/rwODtrOr6vuBRiR/f3rjSTGupbF90Zpqm2oenix8Do6RV7pYEkGwlKkw==", "requires": { - "double-ended-queue": "^2.1.0-0", - "redis-commands": "^1.2.0", - "redis-parser": "^2.6.0" + "denque": "^1.5.0", + "redis-commands": "^1.7.0", + "redis-errors": "^1.2.0", + "redis-parser": "^3.0.0" } }, "redis-commands": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/redis-commands/-/redis-commands-1.6.0.tgz", - "integrity": "sha512-2jnZ0IkjZxvguITjFTrGiLyzQZcTvaw8DAaCXxZq/dsHXz7KfMQ3OUJy7Tz9vnRtZRVz6VRCPDvruvU8Ts44wQ==" + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/redis-commands/-/redis-commands-1.7.0.tgz", + "integrity": "sha512-nJWqw3bTFy21hX/CPKHth6sfhZbdiHP6bTawSgQBlKOVRG7EZkfHbbHwQJnrE4vsQf0CMNE+3gJ4Fmm16vdVlQ==" + }, + "redis-errors": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz", + "integrity": "sha1-62LSrbFeTq9GEMBK/hUpOEJQq60=" }, "redis-parser": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-2.6.0.tgz", - "integrity": "sha1-Uu0J2srBCPGmMcB+m2mUHnoZUEs=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz", + "integrity": "sha1-tm2CjNyv5rS4pCin3vTGvKwxyLQ=", + "requires": { + "redis-errors": "^1.0.0" + } }, "referrer-policy": { "version": "1.2.0", @@ -11702,14 +11750,6 @@ "resolved": "https://registry.npmjs.org/spin.js/-/spin.js-2.3.2.tgz", "integrity": "sha1-bKpW1SBnNFD9XPvGlx5tB3LDeho=" }, - "split": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", - "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", - "requires": { - "through": "2" - } - }, "split-string": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", @@ -11719,6 +11759,26 @@ "extend-shallow": "^3.0.0" } }, + "split2": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", + "requires": { + "readable-stream": "^3.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -11961,7 +12021,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, "requires": { "safe-buffer": "~5.1.0" } @@ -12535,9 +12594,9 @@ } }, "underscore": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.11.0.tgz", - "integrity": "sha512-xY96SsN3NA461qIRKZ/+qox37YXPtSBswMGfiNptr+wrt6ds4HaMw23TP612fEyGekRE6LNRiLYr/aqbHXNedw==" + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.1.tgz", + "integrity": "sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g==" }, "unicode-canonical-property-names-ecmascript": { "version": "1.0.4", @@ -12722,9 +12781,9 @@ } }, "url-parse": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", - "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.1.tgz", + "integrity": "sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q==", "dev": true, "requires": { "querystringify": "^2.1.1", @@ -12770,8 +12829,7 @@ "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "util.promisify": { "version": "1.0.1", diff --git a/package.json b/package.json index 9d7b4bee..702d406d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "sdl_policy_server", - "version": "2.11.0", + "version": "2.12.0", "license": "BSD-3-Clause", "description": "Integrates with SHAID to allow managing app permissions through policy tables", "author": "Livio", @@ -46,15 +46,15 @@ "express": "4.16.0", "helmet": "^3.15.1", "jquery": "^3.4.1", - "lodash": "^4.17.20", + "lodash": "^4.17.21", "moment": "^2.24.0", "mustache": "^3.0.1", - "nodemailer": "^6.1.1", + "nodemailer": "^6.6.1", "pem": "^1.14.2", "pg": "6.4.2", "portal-vue": "^2.1.7", "portfinder": "1.0.13", - "redis": "^2.8.0", + "redis": "^3.1.2", "request": "^2.88.0", "shaidkit": "^1.3.1", "sql-bricks-postgres": "0.5.0", diff --git a/settings.js b/settings.js index f9d3598f..86a30c20 100644 --- a/settings.js +++ b/settings.js @@ -65,7 +65,10 @@ module.exports = { emailAddress: process.env.CERTIFICATE_EMAIL_ADDRESS || null, hash: process.env.CERTIFICATE_HASH || null, days: process.env.CERTIFICATE_DAYS || 7, - } + }, + //whether to package the module config's cert and private key into a pkcs12 bundle string using the passphrase + //if false, it will just be a concatenation of the certificate and the private key + moduleConfigEncryptCertBundle: process.env.MODULE_CONFIG_ENCRYPT_CERT_BUNDLE == "true" ? true : false }, //what kind of auth to enforce? "basic" or null (no authentication) authType: process.env.AUTH_TYPE || null, diff --git a/src/assets/css/style.css b/src/assets/css/style.css index ba4fccc6..5f0038e8 100644 --- a/src/assets/css/style.css +++ b/src/assets/css/style.css @@ -158,7 +158,10 @@ div.horizontal-divider .text { - +.collapse { + display: flex; + min-width: 300px; +} .container-fluid { min-height: 100%; @@ -248,6 +251,14 @@ div.horizontal-divider .text { font-weight: lighter; } +.navbar a { + color: #FFFFFF; +} + +.navbar .router-link { + width: 30px +} + /* * User Settings sidebar @@ -288,6 +299,9 @@ div.horizontal-divider .text { overflow: hidden; text-overflow: ellipsis; } +.navbar .btn { + margin-left: auto +} diff --git a/src/components/About.vue b/src/components/About.vue index f83f2058..60c4d4ad 100644 --- a/src/components/About.vue +++ b/src/components/About.vue @@ -6,7 +6,7 @@ -
+

About this Policy Server

diff --git a/src/components/ApplicationDetails.vue b/src/components/ApplicationDetails.vue index d0c767e3..90e0e01f 100644 --- a/src/components/ApplicationDetails.vue +++ b/src/components/ApplicationDetails.vue @@ -5,7 +5,7 @@ -
+
diff --git a/src/components/Applications.vue b/src/components/Applications.vue index 1f6a2239..0fe34d3d 100644 --- a/src/components/Applications.vue +++ b/src/components/Applications.vue @@ -5,7 +5,7 @@ -
+
diff --git a/src/components/ConsumerMessageDetails.vue b/src/components/ConsumerMessageDetails.vue index 9a22fcfc..30882d24 100644 --- a/src/components/ConsumerMessageDetails.vue +++ b/src/components/ConsumerMessageDetails.vue @@ -5,7 +5,7 @@ -
+