This is an automated email from the ASF dual-hosted git repository.
bstoyanov pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudstack.git
The following commit(s) were added to refs/heads/main by this push:
new 1383625c93e Fix `*.smtp.useAuth`, `quota.usage.smtp.useStartTLS` and
`*.smtp.enabledSecurityProtocols` settings definitions (#9031)
1383625c93e is described below
commit 1383625c93e300c6b8d62b52ddfd090d3291fc74
Author: Bernardo De Marco Gonçalves <[email protected]>
AuthorDate: Tue Jun 11 04:54:03 2024 -0300
Fix `*.smtp.useAuth`, `quota.usage.smtp.useStartTLS` and
`*.smtp.enabledSecurityProtocols` settings definitions (#9031)
* change configs definitions
* add normalization query
* add ui support
* add labels
* add end of line to SQL script
---
.../src/main/java/com/cloud/alert/AlertManager.java | 6 ++++--
.../resources/META-INF/db/schema-41910to42000.sql | 17 +++++++++++++++++
.../apache/cloudstack/framework/config/ConfigKey.java | 6 +++++-
.../apache/cloudstack/quota/constant/QuotaConfig.java | 6 +++---
.../main/java/com/cloud/alert/AlertManagerImpl.java | 2 +-
.../src/main/java/com/cloud/configuration/Config.java | 9 ---------
.../main/java/com/cloud/projects/ProjectManager.java | 9 ++++++---
.../java/com/cloud/projects/ProjectManagerImpl.java | 2 +-
ui/public/locales/en.json | 1 +
ui/public/locales/pt_BR.json | 1 +
ui/src/views/setting/ConfigurationValue.vue | 19 +++++++++++++++++--
11 files changed, 56 insertions(+), 22 deletions(-)
diff --git
a/engine/components-api/src/main/java/com/cloud/alert/AlertManager.java
b/engine/components-api/src/main/java/com/cloud/alert/AlertManager.java
index ecdb59667c9..3d4e6579f7c 100644
--- a/engine/components-api/src/main/java/com/cloud/alert/AlertManager.java
+++ b/engine/components-api/src/main/java/com/cloud/alert/AlertManager.java
@@ -38,8 +38,10 @@ public interface AlertManager extends Manager, AlertService {
public static final ConfigKey<Boolean> AlertSmtpUseStartTLS = new
ConfigKey<Boolean>("Advanced", Boolean.class, "alert.smtp.useStartTLS", "false",
"If set to true and if we enable security via alert.smtp.useAuth,
this will enable StartTLS to secure the connection.", true);
- public static final ConfigKey<String> AlertSmtpEnabledSecurityProtocols =
new ConfigKey<String>("Advanced", String.class,
"alert.smtp.enabledSecurityProtocols", "",
- "White-space separated security protocols; ex: \"TLSv1 TLSv1.1\".
Supported protocols: SSLv2Hello, SSLv3, TLSv1, TLSv1.1 and TLSv1.2", true);
+ public static final ConfigKey<Boolean> AlertSmtpUseAuth = new
ConfigKey<>(ConfigKey.CATEGORY_ALERT, Boolean.class, "alert.smtp.useAuth",
"false", "If true, use SMTP authentication when sending emails.", false,
ConfigKey.Scope.ManagementServer);
+
+ public static final ConfigKey<String> AlertSmtpEnabledSecurityProtocols =
new ConfigKey<String>(ConfigKey.CATEGORY_ADVANCED, String.class,
"alert.smtp.enabledSecurityProtocols", "",
+ "White-space separated security protocols; ex: \"TLSv1 TLSv1.1\".
Supported protocols: SSLv2Hello, SSLv3, TLSv1, TLSv1.1 and TLSv1.2", true,
ConfigKey.Kind.WhitespaceSeparatedListWithOptions,
"SSLv2Hello,SSLv3,TLSv1,TLSv1.1,TLSv1.2");
public static final ConfigKey<Double> Ipv6SubnetCapacityThreshold = new
ConfigKey<Double>("Advanced", Double.class,
"zone.virtualnetwork.ipv6subnet.capacity.notificationthreshold",
diff --git
a/engine/schema/src/main/resources/META-INF/db/schema-41910to42000.sql
b/engine/schema/src/main/resources/META-INF/db/schema-41910to42000.sql
index 3c2288ed077..295ad147a99 100644
--- a/engine/schema/src/main/resources/META-INF/db/schema-41910to42000.sql
+++ b/engine/schema/src/main/resources/META-INF/db/schema-41910to42000.sql
@@ -133,3 +133,20 @@ CREATE TABLE `cloud`.`webhook_delivery` (
CONSTRAINT `fk_webhook__event_id` FOREIGN KEY (`event_id`) REFERENCES
`event`(`id`) ON DELETE CASCADE,
CONSTRAINT `fk_webhook__webhook_id` FOREIGN KEY (`webhook_id`) REFERENCES
`webhook`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+-- Normalize quota.usage.smtp.useStartTLS, quota.usage.smtp.useAuth,
alert.smtp.useAuth and project.smtp.useAuth values
+UPDATE
+ `cloud`.`configuration`
+SET
+ value = "true"
+WHERE
+ name IN ("quota.usage.smtp.useStartTLS", "quota.usage.smtp.useAuth",
"alert.smtp.useAuth", "project.smtp.useAuth")
+ AND value IN ("true", "y", "t", "1", "on", "yes");
+
+UPDATE
+ `cloud`.`configuration`
+SET
+ value = "false"
+WHERE
+ name IN ("quota.usage.smtp.useStartTLS", "quota.usage.smtp.useAuth",
"alert.smtp.useAuth", "project.smtp.useAuth")
+ AND value NOT IN ("true", "y", "t", "1", "on", "yes");
diff --git
a/framework/config/src/main/java/org/apache/cloudstack/framework/config/ConfigKey.java
b/framework/config/src/main/java/org/apache/cloudstack/framework/config/ConfigKey.java
index 46923de3c7c..fa570e0e8fb 100644
---
a/framework/config/src/main/java/org/apache/cloudstack/framework/config/ConfigKey.java
+++
b/framework/config/src/main/java/org/apache/cloudstack/framework/config/ConfigKey.java
@@ -41,7 +41,7 @@ public class ConfigKey<T> {
}
public enum Kind {
- CSV, Order, Select
+ CSV, Order, Select, WhitespaceSeparatedListWithOptions
}
private final String _category;
@@ -136,6 +136,10 @@ public class ConfigKey<T> {
this(type, name, category, defaultValue, description, isDynamic,
Scope.Global, null);
}
+ public ConfigKey(String category, Class<T> type, String name, String
defaultValue, String description, boolean isDynamic, Kind kind, String options)
{
+ this(type, name, category, defaultValue, description, isDynamic,
Scope.Global, null, null, null, null, null, kind, options);
+ }
+
public ConfigKey(String category, Class<T> type, String name, String
defaultValue, String description, boolean isDynamic, String parent) {
this(type, name, category, defaultValue, description, isDynamic,
Scope.Global, null, null, parent, null, null, null, null);
}
diff --git
a/framework/quota/src/main/java/org/apache/cloudstack/quota/constant/QuotaConfig.java
b/framework/quota/src/main/java/org/apache/cloudstack/quota/constant/QuotaConfig.java
index df7ffa5c3cd..81b4643eb45 100644
---
a/framework/quota/src/main/java/org/apache/cloudstack/quota/constant/QuotaConfig.java
+++
b/framework/quota/src/main/java/org/apache/cloudstack/quota/constant/QuotaConfig.java
@@ -48,16 +48,16 @@ public interface QuotaConfig {
public static final ConfigKey<String> QuotaSmtpPort = new
ConfigKey<String>("Advanced", String.class, "quota.usage.smtp.port", "", "Quota
SMTP port.", true);
- public static final ConfigKey<String> QuotaSmtpAuthType = new
ConfigKey<String>("Advanced", String.class, "quota.usage.smtp.useAuth", "",
+ public static final ConfigKey<Boolean> QuotaSmtpAuthType = new
ConfigKey<Boolean>("Advanced", Boolean.class, "quota.usage.smtp.useAuth",
"false",
"If true, use secure SMTP authentication when sending emails.",
true);
public static final ConfigKey<String> QuotaSmtpSender = new
ConfigKey<String>("Advanced", String.class, "quota.usage.smtp.sender", "",
"Sender of quota alert email (will be in the From header of the
email).", true);
public static final ConfigKey<String> QuotaSmtpEnabledSecurityProtocols =
new ConfigKey<String>("Advanced", String.class,
"quota.usage.smtp.enabledSecurityProtocols", "",
- "White-space separated security protocols; ex: \"TLSv1 TLSv1.1\".
Supported protocols: SSLv2Hello, SSLv3, TLSv1, TLSv1.1 and TLSv1.2.", true);
+ "White-space separated security protocols; ex: \"TLSv1 TLSv1.1\".
Supported protocols: SSLv2Hello, SSLv3, TLSv1, TLSv1.1 and TLSv1.2.", true,
ConfigKey.Kind.WhitespaceSeparatedListWithOptions,
"SSLv2Hello,SSLv3,TLSv1,TLSv1.1,TLSv1.2");
- public static final ConfigKey<String> QuotaSmtpUseStartTLS = new
ConfigKey<String>("Advanced", String.class, "quota.usage.smtp.useStartTLS",
"false",
+ public static final ConfigKey<Boolean> QuotaSmtpUseStartTLS = new
ConfigKey<Boolean>("Advanced", Boolean.class, "quota.usage.smtp.useStartTLS",
"false",
"If set to true and if we enable security via
quota.usage.smtp.useAuth, this will enable StartTLS to secure the connection.",
true);
public static final ConfigKey<Long> QuotaActivationRuleTimeout = new
ConfigKey<>("Advanced", Long.class, "quota.activationrule.timeout", "2000",
"The maximum runtime,"
diff --git a/server/src/main/java/com/cloud/alert/AlertManagerImpl.java
b/server/src/main/java/com/cloud/alert/AlertManagerImpl.java
index 8460ac0d33f..4c4f08f12bd 100644
--- a/server/src/main/java/com/cloud/alert/AlertManagerImpl.java
+++ b/server/src/main/java/com/cloud/alert/AlertManagerImpl.java
@@ -800,7 +800,7 @@ public class AlertManagerImpl extends ManagerBase
implements AlertManager, Confi
@Override
public ConfigKey<?>[] getConfigKeys() {
return new ConfigKey<?>[] {CPUCapacityThreshold,
MemoryCapacityThreshold, StorageAllocatedCapacityThreshold,
StorageCapacityThreshold, AlertSmtpEnabledSecurityProtocols,
- AlertSmtpUseStartTLS, Ipv6SubnetCapacityThreshold};
+ AlertSmtpUseStartTLS, Ipv6SubnetCapacityThreshold,
AlertSmtpUseAuth};
}
@Override
diff --git a/server/src/main/java/com/cloud/configuration/Config.java
b/server/src/main/java/com/cloud/configuration/Config.java
index 1fb36b65ecf..675e0ee5644 100644
--- a/server/src/main/java/com/cloud/configuration/Config.java
+++ b/server/src/main/java/com/cloud/configuration/Config.java
@@ -78,7 +78,6 @@ public enum Config {
"30000",
"Socket I/O timeout value in milliseconds. -1 for infinite
timeout.",
null),
- AlertSMTPUseAuth("Alert", ManagementServer.class, String.class,
"alert.smtp.useAuth", null, "If true, use SMTP authentication when sending
emails.", null),
AlertSMTPUsername(
"Alert",
ManagementServer.class,
@@ -1547,14 +1546,6 @@ public enum Config {
"Password for SMTP authentication (applies only if
project.smtp.useAuth is true)",
null),
ProjectSMTPPort("Project Defaults", ManagementServer.class, Integer.class,
"project.smtp.port", "465", "Port the SMTP server is listening on", null),
- ProjectSMTPUseAuth(
- "Project Defaults",
- ManagementServer.class,
- String.class,
- "project.smtp.useAuth",
- null,
- "If true, use SMTP authentication when sending emails",
- null),
ProjectSMTPUsername(
"Project Defaults",
ManagementServer.class,
diff --git a/server/src/main/java/com/cloud/projects/ProjectManager.java
b/server/src/main/java/com/cloud/projects/ProjectManager.java
index 8615894990d..123284955fa 100644
--- a/server/src/main/java/com/cloud/projects/ProjectManager.java
+++ b/server/src/main/java/com/cloud/projects/ProjectManager.java
@@ -22,11 +22,14 @@ import com.cloud.user.Account;
import org.apache.cloudstack.framework.config.ConfigKey;
public interface ProjectManager extends ProjectService {
- public static final ConfigKey<Boolean> ProjectSmtpUseStartTLS = new
ConfigKey<Boolean>("Advanced", Boolean.class, "project.smtp.useStartTLS",
"false",
+ public static final ConfigKey<Boolean> ProjectSmtpUseStartTLS = new
ConfigKey<Boolean>(ConfigKey.CATEGORY_ADVANCED, Boolean.class,
"project.smtp.useStartTLS", "false",
"If set to true and if we enable security via
project.smtp.useAuth, this will enable StartTLS to secure the connection.",
true);
- public static final ConfigKey<String> ProjectSmtpEnabledSecurityProtocols
= new ConfigKey<String>("Advanced", String.class,
"project.smtp.enabledSecurityProtocols", "",
- "White-space separated security protocols; ex: \"TLSv1 TLSv1.1\".
Supported protocols: SSLv2Hello, SSLv3, TLSv1, TLSv1.1 and TLSv1.2", true);
+ public static final ConfigKey<String> ProjectSmtpEnabledSecurityProtocols
= new ConfigKey<String>(ConfigKey.CATEGORY_ADVANCED, String.class,
"project.smtp.enabledSecurityProtocols", "",
+ "White-space separated security protocols; ex: \"TLSv1 TLSv1.1\".
Supported protocols: SSLv2Hello, SSLv3, TLSv1, TLSv1.1 and TLSv1.2", true,
ConfigKey.Kind.WhitespaceSeparatedListWithOptions,
"SSLv2Hello,SSLv3,TLSv1,TLSv1.1,TLSv1.2");
+
+ public static final ConfigKey<Boolean> ProjectSmtpUseAuth = new
ConfigKey<>(ConfigKey.CATEGORY_ADVANCED, Boolean.class, "project.smtp.useAuth",
"false",
+ "If true, use SMTP authentication when sending emails", false,
ConfigKey.Scope.ManagementServer);
boolean canAccessProjectAccount(Account caller, long accountId);
diff --git a/server/src/main/java/com/cloud/projects/ProjectManagerImpl.java
b/server/src/main/java/com/cloud/projects/ProjectManagerImpl.java
index 803e8600c08..fb0adda9baf 100644
--- a/server/src/main/java/com/cloud/projects/ProjectManagerImpl.java
+++ b/server/src/main/java/com/cloud/projects/ProjectManagerImpl.java
@@ -1451,7 +1451,7 @@ public class ProjectManagerImpl extends ManagerBase
implements ProjectManager, C
@Override
public ConfigKey<?>[] getConfigKeys() {
- return new ConfigKey<?>[] {ProjectSmtpEnabledSecurityProtocols,
ProjectSmtpUseStartTLS};
+ return new ConfigKey<?>[] {ProjectSmtpEnabledSecurityProtocols,
ProjectSmtpUseStartTLS, ProjectSmtpUseAuth};
}
protected void updateProjectNameAndDisplayText(final ProjectVO project,
String name, String displayText) {
diff --git a/ui/public/locales/en.json b/ui/public/locales/en.json
index 4dc56c50a90..cb279c7a149 100644
--- a/ui/public/locales/en.json
+++ b/ui/public/locales/en.json
@@ -3185,6 +3185,7 @@
"message.scaleup.policy.name.continue": "Please input a name to ScaleUp policy
to continue",
"message.select.a.zone": "A zone typically corresponds to a single datacenter.
Multiple zones help make the cloud more reliable by providing physical
isolation and redundancy.",
"message.select.affinity.groups": "Please select any affinity groups you want
this Instance to belong to:",
+"message.select.deselect.desired.options": "Please select / deselect the
desired options",
"message.select.deselect.to.sort": "Please select / deselect to sort the
values",
"message.select.destination.image.stores": "Please select Image Store(s) to
which data is to be migrated to",
"message.select.disk.offering": "Please select a disk offering for disk",
diff --git a/ui/public/locales/pt_BR.json b/ui/public/locales/pt_BR.json
index a3aec03bf26..cc8e22d5e47 100644
--- a/ui/public/locales/pt_BR.json
+++ b/ui/public/locales/pt_BR.json
@@ -2317,6 +2317,7 @@
"message.scale.processing": "Escalonamento em progresso",
"message.select.a.zone": "A zona tipicamente corresponde a um \u00fanico
datacenter. M\u00faltiplas zonas auxiliam a nuvem a ser mais confi\u00e1vel
provendo isolamento f\u00edsico e redund\u00e2ncia.",
"message.select.affinity.groups": "Por favor, selecione quaisquer grupos de
afinidade que voc\u00ea deseja que esta VM perten\u00e7a:",
+"message.select.deselect.desired.options": "Por favor, selecione /
desselecione as op\u00e7\u00f5es desejadas",
"message.select.destination.image.stores": "Por favor, selecione o(s)
armazenamento(s) de imagem(ns) para os quais os dados devem ser migrados",
"message.select.disk.offering": "Por favor, selecione uma oferta de disco para
o disco",
"message.select.end.date.and.time": "Selecione uma data e hor\u00e1rio final.",
diff --git a/ui/src/views/setting/ConfigurationValue.vue
b/ui/src/views/setting/ConfigurationValue.vue
index 0069896f7a5..e6129f1a1d7 100644
--- a/ui/src/views/setting/ConfigurationValue.vue
+++ b/ui/src/views/setting/ConfigurationValue.vue
@@ -110,9 +110,14 @@
</a-select>
</a-tooltip>
</span>
- <span v-else-if="configrecord.type === 'Order'">
+ <span v-else-if="configrecord.type === 'Order' || configrecord.type ===
'WhitespaceSeparatedListWithOptions'">
<a-tooltip :title="editableValue.join(', ')">
- <b>{{ $t('message.select.deselect.to.sort') }}</b>
+ <b v-if="configrecord.type === 'Order'">
+ {{ $t('message.select.deselect.to.sort') }}
+ </b>
+ <b v-else>
+ {{ $t('message.select.deselect.desired.options') }}
+ </b>
<br />
<a-select
style="width: 20vw"
@@ -241,6 +246,9 @@ export default {
if (['Order', 'CSV'].includes(configrecord.type)) {
newValue = newValue.join(',')
}
+ if (configrecord.type === 'WhitespaceSeparatedListWithOptions') {
+ newValue = newValue.join(' ')
+ }
const params = {
name: configrecord.name,
value: newValue
@@ -332,6 +340,13 @@ export default {
return []
}
}
+ if (configrecord.type === 'WhitespaceSeparatedListWithOptions') {
+ if (configrecord.value && configrecord.value.length > 0) {
+ return String(configrecord.value).split(' ')
+ }
+
+ return []
+ }
if (configrecord.value) {
return String(configrecord.value)
}