diff --git a/application/Espo/Resources/i18n/en_US/Settings.json b/application/Espo/Resources/i18n/en_US/Settings.json index d8bc1ada0d..118ea9f86c 100644 --- a/application/Espo/Resources/i18n/en_US/Settings.json +++ b/application/Espo/Resources/i18n/en_US/Settings.json @@ -119,7 +119,10 @@ "daemonProcessTimeout": "Daemon Process Timeout", "cronDisabled": "Disable Cron", "maintenanceMode": "Maintenance Mode", - "useWebSocket": "Use WebSocket" + "useWebSocket": "Use WebSocket", + "webSocketSslAllowSelfSigned": "Allow self-signed SSL certificate", + "webSocketSslCertificateFile": "SSL certificate file path", + "webSocketSslCertificateKeyFile": "SSL certificate file path key file path" }, "options": { "weekStart": { diff --git a/application/Espo/Resources/layouts/Settings/settings.json b/application/Espo/Resources/layouts/Settings/settings.json index edaf79c16f..d595e25398 100644 --- a/application/Espo/Resources/layouts/Settings/settings.json +++ b/application/Espo/Resources/layouts/Settings/settings.json @@ -4,8 +4,7 @@ "rows": [ [{"name": "useCache"}, {"name": "siteUrl"}], [{"name": "b2cMode"}, {"name": "aclStrictMode"}], - [{"name": "maintenanceMode"}, {"name": "cronDisabled"}], - [{"name": "useWebSocket"}, false] + [{"name": "maintenanceMode"}, {"name": "cronDisabled"}] ] }, { @@ -40,5 +39,13 @@ [{"name": "calendarEntityList"}, {"name": "activitiesEntityList"}], [false, {"name": "historyEntityList"}] ] + }, + { + "label": "WebSocket", + "rows": [ + [{"name": "useWebSocket"}, false], + [{"name": "webSocketSslCertificateFile"}, {"name": "webSocketSslCertificateKeyFile"}], + [{"name": "webSocketSslAllowSelfSigned"}, false] + ] } ] diff --git a/application/Espo/Resources/metadata/entityDefs/Settings.json b/application/Espo/Resources/metadata/entityDefs/Settings.json index ff79024115..4e41d2d543 100644 --- a/application/Espo/Resources/metadata/entityDefs/Settings.json +++ b/application/Espo/Resources/metadata/entityDefs/Settings.json @@ -555,6 +555,15 @@ }, "useWebSocket": { "type": "bool" + }, + "webSocketSslCertificateFile": { + "type": "varchar" + }, + "webSocketSslCertificateKeyFile": { + "type": "varchar" + }, + "webSocketSslAllowSelfSigned": { + "type": "bool" } } } diff --git a/client/src/views/admin/settings.js b/client/src/views/admin/settings.js index e7a2931f1c..8d24a52511 100644 --- a/client/src/views/admin/settings.js +++ b/client/src/views/admin/settings.js @@ -38,10 +38,28 @@ Espo.define('views/admin/settings', 'views/settings/record/edit', function (Dep) if (this.getHelper().getAppParam('isRestrictedMode') && !this.getUser().isSuperAdmin()) { this.hideField('cronDisabled'); this.hideField('maintenanceMode'); - this.hideField('useWebSocket'); + this.setFieldReadOnly('useWebSocket'); this.setFieldReadOnly('siteUrl'); - } + this.hideField('webSocketSslCertificateFile'); + this.hideField('webSocketSslCertificateKeyFile'); + this.hideField('webSocketSslAllowSelfSigned'); + } else { + this.controlWebSocketFieldsVisibility(); + this.listenTo(this.model, 'change:useWebSocket', this.controlWebSocketFieldsVisibility); + } + }, + + controlWebSocketFieldsVisibility: function () { + if (this.model.get('useWebSocket')) { + this.showField('webSocketSslCertificateFile'); + this.showField('webSocketSslCertificateKeyFile'); + this.showField('webSocketSslAllowSelfSigned'); + } else { + this.hideField('webSocketSslCertificateFile'); + this.hideField('webSocketSslCertificateKeyFile'); + this.hideField('webSocketSslAllowSelfSigned'); + } } }); }); diff --git a/websocket.php b/websocket.php index 797d20f194..086c4543f0 100644 --- a/websocket.php +++ b/websocket.php @@ -75,9 +75,9 @@ if ($useSsl) { $webSocket, $loop, [ - 'local_cert' => $config->get('webSocketSslCertificateFile', 'cert.pem'), - 'local_pk' => $config->get('webSocketSslCertificateKeyFile', 'key.pem'), - 'allow_self_signed' => $config->get('webSocketSslAllowSelfSigned', true), + 'local_cert' => $config->get('webSocketSslCertificateFile'), + 'local_pk' => $config->get('webSocketSslCertificateKeyFile'), + 'allow_self_signed' => $config->get('webSocketSslAllowSelfSigned', false), 'verify_peer' => false, ] );