This is an automated email from the ASF dual-hosted git repository.
dahn pushed a commit to branch 4.19
in repository https://gitbox.apache.org/repos/asf/cloudstack.git
The following commit(s) were added to refs/heads/4.19 by this push:
new 60af31c9c0b Decrypt zone, cluster, storage details for configuration
values (#10237)
60af31c9c0b is described below
commit 60af31c9c0ba9919b518ae0a18d622cef876ab4d
Author: Harikrishna <[email protected]>
AuthorDate: Mon Feb 3 18:00:57 2025 +0530
Decrypt zone, cluster, storage details for configuration values (#10237)
Co-authored-by: dahn <[email protected]>
Co-authored-by: Bryan Lima <[email protected]>
---
.../main/java/com/cloud/dc/ClusterDetailsDao.java | 3 ++-
.../java/com/cloud/dc/ClusterDetailsDaoImpl.java | 16 ++++++++-----
.../main/java/com/cloud/dc/ClusterDetailsVO.java | 18 ++++++++++-----
.../com/cloud/dc/dao/DataCenterDetailsDaoImpl.java | 5 ++---
.../main/java/com/cloud/domain/DomainDetailVO.java | 18 ++++++++++-----
.../com/cloud/domain/dao/DomainDetailsDao.java | 5 ++---
.../com/cloud/domain/dao/DomainDetailsDaoImpl.java | 26 +++++++++-------------
.../storage/dao/StoragePoolDetailsDaoImpl.java | 2 +-
.../main/java/com/cloud/user/AccountDetailVO.java | 18 ++++++++++-----
.../java/com/cloud/user/AccountDetailsDao.java | 5 ++---
.../java/com/cloud/user/AccountDetailsDaoImpl.java | 26 +++++++++-------------
.../resourcedetail/ResourceDetailsDao.java | 2 ++
.../resourcedetail/ResourceDetailsDaoBase.java | 18 +++++++++++++++
.../datastore/db/ImageStoreDetailsDaoImpl.java | 4 +---
14 files changed, 97 insertions(+), 69 deletions(-)
diff --git a/engine/schema/src/main/java/com/cloud/dc/ClusterDetailsDao.java
b/engine/schema/src/main/java/com/cloud/dc/ClusterDetailsDao.java
index 06c9c525504..b54cc8b3c21 100644
--- a/engine/schema/src/main/java/com/cloud/dc/ClusterDetailsDao.java
+++ b/engine/schema/src/main/java/com/cloud/dc/ClusterDetailsDao.java
@@ -19,8 +19,9 @@ package com.cloud.dc;
import java.util.Map;
import com.cloud.utils.db.GenericDao;
+import org.apache.cloudstack.resourcedetail.ResourceDetailsDao;
-public interface ClusterDetailsDao extends GenericDao<ClusterDetailsVO, Long> {
+public interface ClusterDetailsDao extends GenericDao<ClusterDetailsVO, Long>,
ResourceDetailsDao<ClusterDetailsVO> {
Map<String, String> findDetails(long clusterId);
void persist(long clusterId, Map<String, String> details);
diff --git
a/engine/schema/src/main/java/com/cloud/dc/ClusterDetailsDaoImpl.java
b/engine/schema/src/main/java/com/cloud/dc/ClusterDetailsDaoImpl.java
index c2058ad5644..37e10910978 100644
--- a/engine/schema/src/main/java/com/cloud/dc/ClusterDetailsDaoImpl.java
+++ b/engine/schema/src/main/java/com/cloud/dc/ClusterDetailsDaoImpl.java
@@ -26,12 +26,13 @@ import
org.apache.cloudstack.framework.config.ConfigKey.Scope;
import org.apache.cloudstack.framework.config.ScopedConfigStorage;
import com.cloud.utils.crypt.DBEncryptionUtil;
-import com.cloud.utils.db.GenericDaoBase;
import com.cloud.utils.db.SearchBuilder;
import com.cloud.utils.db.SearchCriteria;
import com.cloud.utils.db.TransactionLegacy;
+import org.apache.cloudstack.resourcedetail.ResourceDetailsDaoBase;
+
+public class ClusterDetailsDaoImpl extends
ResourceDetailsDaoBase<ClusterDetailsVO> implements ClusterDetailsDao,
ScopedConfigStorage {
-public class ClusterDetailsDaoImpl extends GenericDaoBase<ClusterDetailsVO,
Long> implements ClusterDetailsDao, ScopedConfigStorage {
protected final SearchBuilder<ClusterDetailsVO> ClusterSearch;
protected final SearchBuilder<ClusterDetailsVO> DetailSearch;
@@ -42,11 +43,11 @@ public class ClusterDetailsDaoImpl extends
GenericDaoBase<ClusterDetailsVO, Long
protected ClusterDetailsDaoImpl() {
ClusterSearch = createSearchBuilder();
- ClusterSearch.and("clusterId", ClusterSearch.entity().getClusterId(),
SearchCriteria.Op.EQ);
+ ClusterSearch.and("clusterId", ClusterSearch.entity().getResourceId(),
SearchCriteria.Op.EQ);
ClusterSearch.done();
DetailSearch = createSearchBuilder();
- DetailSearch.and("clusterId", DetailSearch.entity().getClusterId(),
SearchCriteria.Op.EQ);
+ DetailSearch.and("clusterId", DetailSearch.entity().getResourceId(),
SearchCriteria.Op.EQ);
DetailSearch.and("name", DetailSearch.entity().getName(),
SearchCriteria.Op.EQ);
DetailSearch.done();
}
@@ -66,6 +67,11 @@ public class ClusterDetailsDaoImpl extends
GenericDaoBase<ClusterDetailsVO, Long
return detail;
}
+ @Override
+ public void addDetail(long resourceId, String key, String value, boolean
display) {
+ super.addDetail(new ClusterDetailsVO(resourceId, key, value));
+ }
+
@Override
public Map<String, String> findDetails(long clusterId) {
SearchCriteria<ClusterDetailsVO> sc = ClusterSearch.create();
@@ -138,7 +144,7 @@ public class ClusterDetailsDaoImpl extends
GenericDaoBase<ClusterDetailsVO, Long
@Override
public String getConfigValue(long id, ConfigKey<?> key) {
ClusterDetailsVO vo = findDetail(id, key.key());
- return vo == null ? null : vo.getValue();
+ return vo == null ? null : getActualValue(vo);
}
@Override
diff --git a/engine/schema/src/main/java/com/cloud/dc/ClusterDetailsVO.java
b/engine/schema/src/main/java/com/cloud/dc/ClusterDetailsVO.java
index 6eb9e7466a7..b213f8f2594 100644
--- a/engine/schema/src/main/java/com/cloud/dc/ClusterDetailsVO.java
+++ b/engine/schema/src/main/java/com/cloud/dc/ClusterDetailsVO.java
@@ -23,11 +23,11 @@ import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
-import org.apache.cloudstack.api.InternalIdentity;
+import org.apache.cloudstack.api.ResourceDetail;
@Entity
@Table(name = "cluster_details")
-public class ClusterDetailsVO implements InternalIdentity {
+public class ClusterDetailsVO implements ResourceDetail {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@@ -35,7 +35,7 @@ public class ClusterDetailsVO implements InternalIdentity {
private long id;
@Column(name = "cluster_id")
- private long clusterId;
+ private long resourceId;
@Column(name = "name")
private String name;
@@ -47,13 +47,14 @@ public class ClusterDetailsVO implements InternalIdentity {
}
public ClusterDetailsVO(long clusterId, String name, String value) {
- this.clusterId = clusterId;
+ this.resourceId = clusterId;
this.name = name;
this.value = value;
}
- public long getClusterId() {
- return clusterId;
+ @Override
+ public long getResourceId() {
+ return resourceId;
}
public String getName() {
@@ -64,6 +65,11 @@ public class ClusterDetailsVO implements InternalIdentity {
return value;
}
+ @Override
+ public boolean isDisplay() {
+ return true;
+ }
+
public void setValue(String value) {
this.value = value;
}
diff --git
a/engine/schema/src/main/java/com/cloud/dc/dao/DataCenterDetailsDaoImpl.java
b/engine/schema/src/main/java/com/cloud/dc/dao/DataCenterDetailsDaoImpl.java
index e36c8ebd6c7..27210dfcf0d 100644
--- a/engine/schema/src/main/java/com/cloud/dc/dao/DataCenterDetailsDaoImpl.java
+++ b/engine/schema/src/main/java/com/cloud/dc/dao/DataCenterDetailsDaoImpl.java
@@ -16,7 +16,6 @@
// under the License.
package com.cloud.dc.dao;
-import org.apache.cloudstack.api.ResourceDetail;
import org.apache.cloudstack.framework.config.ConfigKey;
import org.apache.cloudstack.framework.config.ConfigKey.Scope;
import org.apache.cloudstack.framework.config.ScopedConfigStorage;
@@ -45,8 +44,8 @@ public class DataCenterDetailsDaoImpl extends
ResourceDetailsDaoBase<DataCenterD
@Override
public String getConfigValue(long id, ConfigKey<?> key) {
- ResourceDetail vo = findDetail(id, key.key());
- return vo == null ? null : vo.getValue();
+ DataCenterDetailVO vo = findDetail(id, key.key());
+ return vo == null ? null : getActualValue(vo);
}
@Override
diff --git a/engine/schema/src/main/java/com/cloud/domain/DomainDetailVO.java
b/engine/schema/src/main/java/com/cloud/domain/DomainDetailVO.java
index df5a2283baa..6f803cc9f2f 100644
--- a/engine/schema/src/main/java/com/cloud/domain/DomainDetailVO.java
+++ b/engine/schema/src/main/java/com/cloud/domain/DomainDetailVO.java
@@ -23,18 +23,18 @@ import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
-import org.apache.cloudstack.api.InternalIdentity;
+import org.apache.cloudstack.api.ResourceDetail;
@Entity
@Table(name = "domain_details")
-public class DomainDetailVO implements InternalIdentity {
+public class DomainDetailVO implements ResourceDetail {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private long id;
@Column(name = "domain_id")
- private long domainId;
+ private long resourceId;
@Column(name = "name")
private String name;
@@ -46,13 +46,14 @@ public class DomainDetailVO implements InternalIdentity {
}
public DomainDetailVO(long domainId, String name, String value) {
- this.domainId = domainId;
+ this.resourceId = domainId;
this.name = name;
this.value = value;
}
- public long getDomainId() {
- return domainId;
+ @Override
+ public long getResourceId() {
+ return resourceId;
}
public String getName() {
@@ -63,6 +64,11 @@ public class DomainDetailVO implements InternalIdentity {
return value;
}
+ @Override
+ public boolean isDisplay() {
+ return true;
+ }
+
public void setValue(String value) {
this.value = value;
}
diff --git
a/engine/schema/src/main/java/com/cloud/domain/dao/DomainDetailsDao.java
b/engine/schema/src/main/java/com/cloud/domain/dao/DomainDetailsDao.java
index 6b53e49764e..ae149ff4381 100644
--- a/engine/schema/src/main/java/com/cloud/domain/dao/DomainDetailsDao.java
+++ b/engine/schema/src/main/java/com/cloud/domain/dao/DomainDetailsDao.java
@@ -20,8 +20,9 @@ import java.util.Map;
import com.cloud.domain.DomainDetailVO;
import com.cloud.utils.db.GenericDao;
+import org.apache.cloudstack.resourcedetail.ResourceDetailsDao;
-public interface DomainDetailsDao extends GenericDao<DomainDetailVO, Long> {
+public interface DomainDetailsDao extends GenericDao<DomainDetailVO, Long>,
ResourceDetailsDao<DomainDetailVO> {
Map<String, String> findDetails(long domainId);
void persist(long domainId, Map<String, String> details);
@@ -31,6 +32,4 @@ public interface DomainDetailsDao extends
GenericDao<DomainDetailVO, Long> {
void deleteDetails(long domainId);
void update(long domainId, Map<String, String> details);
-
- String getActualValue(DomainDetailVO domainDetailVO);
}
diff --git
a/engine/schema/src/main/java/com/cloud/domain/dao/DomainDetailsDaoImpl.java
b/engine/schema/src/main/java/com/cloud/domain/dao/DomainDetailsDaoImpl.java
index 50097d154f5..72532f4ea26 100644
--- a/engine/schema/src/main/java/com/cloud/domain/dao/DomainDetailsDaoImpl.java
+++ b/engine/schema/src/main/java/com/cloud/domain/dao/DomainDetailsDaoImpl.java
@@ -24,8 +24,6 @@ import javax.inject.Inject;
import com.cloud.domain.DomainDetailVO;
import com.cloud.domain.DomainVO;
-import com.cloud.utils.crypt.DBEncryptionUtil;
-import com.cloud.utils.db.GenericDaoBase;
import com.cloud.utils.db.QueryBuilder;
import com.cloud.utils.db.SearchBuilder;
import com.cloud.utils.db.SearchCriteria;
@@ -35,9 +33,9 @@ import org.apache.cloudstack.framework.config.ConfigKey;
import org.apache.cloudstack.framework.config.ConfigKey.Scope;
import org.apache.cloudstack.framework.config.ScopedConfigStorage;
import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
-import org.apache.cloudstack.framework.config.impl.ConfigurationVO;
+import org.apache.cloudstack.resourcedetail.ResourceDetailsDaoBase;
-public class DomainDetailsDaoImpl extends GenericDaoBase<DomainDetailVO, Long>
implements DomainDetailsDao, ScopedConfigStorage {
+public class DomainDetailsDaoImpl extends
ResourceDetailsDaoBase<DomainDetailVO> implements DomainDetailsDao,
ScopedConfigStorage {
protected final SearchBuilder<DomainDetailVO> domainSearch;
@Inject
@@ -47,14 +45,14 @@ public class DomainDetailsDaoImpl extends
GenericDaoBase<DomainDetailVO, Long> i
protected DomainDetailsDaoImpl() {
domainSearch = createSearchBuilder();
- domainSearch.and("domainId", domainSearch.entity().getDomainId(),
Op.EQ);
+ domainSearch.and("domainId", domainSearch.entity().getResourceId(),
Op.EQ);
domainSearch.done();
}
@Override
public Map<String, String> findDetails(long domainId) {
QueryBuilder<DomainDetailVO> sc =
QueryBuilder.create(DomainDetailVO.class);
- sc.and(sc.entity().getDomainId(), Op.EQ, domainId);
+ sc.and(sc.entity().getResourceId(), Op.EQ, domainId);
List<DomainDetailVO> results = sc.list();
Map<String, String> details = new HashMap<String,
String>(results.size());
for (DomainDetailVO r : results) {
@@ -80,11 +78,16 @@ public class DomainDetailsDaoImpl extends
GenericDaoBase<DomainDetailVO, Long> i
@Override
public DomainDetailVO findDetail(long domainId, String name) {
QueryBuilder<DomainDetailVO> sc =
QueryBuilder.create(DomainDetailVO.class);
- sc.and(sc.entity().getDomainId(), Op.EQ, domainId);
+ sc.and(sc.entity().getResourceId(), Op.EQ, domainId);
sc.and(sc.entity().getName(), Op.EQ, name);
return sc.find();
}
+ @Override
+ public void addDetail(long resourceId, String key, String value, boolean
display) {
+ super.addDetail(new DomainDetailVO(resourceId, key, value));
+ }
+
@Override
public void deleteDetails(long domainId) {
SearchCriteria<DomainDetailVO> sc = domainSearch.create();
@@ -129,13 +132,4 @@ public class DomainDetailsDaoImpl extends
GenericDaoBase<DomainDetailVO, Long> i
}
return vo == null ? null : getActualValue(vo);
}
-
- @Override
- public String getActualValue(DomainDetailVO domainDetailVO) {
- ConfigurationVO configurationVO =
_configDao.findByName(domainDetailVO.getName());
- if (configurationVO != null && configurationVO.isEncrypted()) {
- return DBEncryptionUtil.decrypt(domainDetailVO.getValue());
- }
- return domainDetailVO.getValue();
- }
}
diff --git
a/engine/schema/src/main/java/com/cloud/storage/dao/StoragePoolDetailsDaoImpl.java
b/engine/schema/src/main/java/com/cloud/storage/dao/StoragePoolDetailsDaoImpl.java
index 0c39a8c581a..559978ef284 100644
---
a/engine/schema/src/main/java/com/cloud/storage/dao/StoragePoolDetailsDaoImpl.java
+++
b/engine/schema/src/main/java/com/cloud/storage/dao/StoragePoolDetailsDaoImpl.java
@@ -45,7 +45,7 @@ public class StoragePoolDetailsDaoImpl extends
ResourceDetailsDaoBase<StoragePoo
@Override
public String getConfigValue(long id, ConfigKey<?> key) {
StoragePoolDetailVO vo = findDetail(id, key.key());
- return vo == null ? null : vo.getValue();
+ return vo == null ? null : getActualValue(vo);
}
@Override
diff --git a/engine/schema/src/main/java/com/cloud/user/AccountDetailVO.java
b/engine/schema/src/main/java/com/cloud/user/AccountDetailVO.java
index 863f6c96008..aa6e49666dd 100644
--- a/engine/schema/src/main/java/com/cloud/user/AccountDetailVO.java
+++ b/engine/schema/src/main/java/com/cloud/user/AccountDetailVO.java
@@ -23,18 +23,18 @@ import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
-import org.apache.cloudstack.api.InternalIdentity;
+import org.apache.cloudstack.api.ResourceDetail;
@Entity
@Table(name = "account_details")
-public class AccountDetailVO implements InternalIdentity {
+public class AccountDetailVO implements ResourceDetail {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private long id;
@Column(name = "account_id")
- private long accountId;
+ private long resourceId;
@Column(name = "name")
private String name;
@@ -46,13 +46,14 @@ public class AccountDetailVO implements InternalIdentity {
}
public AccountDetailVO(long accountId, String name, String value) {
- this.accountId = accountId;
+ this.resourceId = accountId;
this.name = name;
this.value = value;
}
- public long getAccountId() {
- return accountId;
+ @Override
+ public long getResourceId() {
+ return resourceId;
}
public String getName() {
@@ -63,6 +64,11 @@ public class AccountDetailVO implements InternalIdentity {
return value;
}
+ @Override
+ public boolean isDisplay() {
+ return true;
+ }
+
public void setValue(String value) {
this.value = value;
}
diff --git a/engine/schema/src/main/java/com/cloud/user/AccountDetailsDao.java
b/engine/schema/src/main/java/com/cloud/user/AccountDetailsDao.java
index 514433e8068..65bbe1670a8 100644
--- a/engine/schema/src/main/java/com/cloud/user/AccountDetailsDao.java
+++ b/engine/schema/src/main/java/com/cloud/user/AccountDetailsDao.java
@@ -19,8 +19,9 @@ package com.cloud.user;
import java.util.Map;
import com.cloud.utils.db.GenericDao;
+import org.apache.cloudstack.resourcedetail.ResourceDetailsDao;
-public interface AccountDetailsDao extends GenericDao<AccountDetailVO, Long> {
+public interface AccountDetailsDao extends GenericDao<AccountDetailVO, Long>,
ResourceDetailsDao<AccountDetailVO> {
Map<String, String> findDetails(long accountId);
void persist(long accountId, Map<String, String> details);
@@ -34,6 +35,4 @@ public interface AccountDetailsDao extends
GenericDao<AccountDetailVO, Long> {
* they will get created
*/
void update(long accountId, Map<String, String> details);
-
- String getActualValue(AccountDetailVO accountDetailVO);
}
diff --git
a/engine/schema/src/main/java/com/cloud/user/AccountDetailsDaoImpl.java
b/engine/schema/src/main/java/com/cloud/user/AccountDetailsDaoImpl.java
index de562e27f9e..8cea616b97d 100644
--- a/engine/schema/src/main/java/com/cloud/user/AccountDetailsDaoImpl.java
+++ b/engine/schema/src/main/java/com/cloud/user/AccountDetailsDaoImpl.java
@@ -23,7 +23,6 @@ import java.util.Optional;
import javax.inject.Inject;
-import com.cloud.utils.crypt.DBEncryptionUtil;
import org.apache.cloudstack.framework.config.ConfigKey;
import org.apache.cloudstack.framework.config.ConfigKey.Scope;
import org.apache.cloudstack.framework.config.ScopedConfigStorage;
@@ -34,16 +33,15 @@ import com.cloud.domain.dao.DomainDetailsDao;
import com.cloud.domain.dao.DomainDao;
import com.cloud.user.dao.AccountDao;
-import com.cloud.utils.db.GenericDaoBase;
import com.cloud.utils.db.QueryBuilder;
import com.cloud.utils.db.SearchBuilder;
import com.cloud.utils.db.SearchCriteria;
import com.cloud.utils.db.SearchCriteria.Op;
import com.cloud.utils.db.TransactionLegacy;
import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
-import org.apache.cloudstack.framework.config.impl.ConfigurationVO;
+import org.apache.cloudstack.resourcedetail.ResourceDetailsDaoBase;
-public class AccountDetailsDaoImpl extends GenericDaoBase<AccountDetailVO,
Long> implements AccountDetailsDao, ScopedConfigStorage {
+public class AccountDetailsDaoImpl extends
ResourceDetailsDaoBase<AccountDetailVO> implements AccountDetailsDao,
ScopedConfigStorage {
protected final SearchBuilder<AccountDetailVO> accountSearch;
@Inject
@@ -57,14 +55,14 @@ public class AccountDetailsDaoImpl extends
GenericDaoBase<AccountDetailVO, Long>
protected AccountDetailsDaoImpl() {
accountSearch = createSearchBuilder();
- accountSearch.and("accountId", accountSearch.entity().getAccountId(),
Op.EQ);
+ accountSearch.and("accountId", accountSearch.entity().getResourceId(),
Op.EQ);
accountSearch.done();
}
@Override
public Map<String, String> findDetails(long accountId) {
QueryBuilder<AccountDetailVO> sc =
QueryBuilder.create(AccountDetailVO.class);
- sc.and(sc.entity().getAccountId(), Op.EQ, accountId);
+ sc.and(sc.entity().getResourceId(), Op.EQ, accountId);
List<AccountDetailVO> results = sc.list();
Map<String, String> details = new HashMap<String,
String>(results.size());
for (AccountDetailVO r : results) {
@@ -90,11 +88,16 @@ public class AccountDetailsDaoImpl extends
GenericDaoBase<AccountDetailVO, Long>
@Override
public AccountDetailVO findDetail(long accountId, String name) {
QueryBuilder<AccountDetailVO> sc =
QueryBuilder.create(AccountDetailVO.class);
- sc.and(sc.entity().getAccountId(), Op.EQ, accountId);
+ sc.and(sc.entity().getResourceId(), Op.EQ, accountId);
sc.and(sc.entity().getName(), Op.EQ, name);
return sc.find();
}
+ @Override
+ public void addDetail(long resourceId, String key, String value, boolean
display) {
+ super.addDetail(new AccountDetailVO(resourceId, key, value));
+ }
+
@Override
public void deleteDetails(long accountId) {
SearchCriteria<AccountDetailVO> sc = accountSearch.create();
@@ -154,13 +157,4 @@ public class AccountDetailsDaoImpl extends
GenericDaoBase<AccountDetailVO, Long>
}
return value;
}
-
- @Override
- public String getActualValue(AccountDetailVO accountDetailVO) {
- ConfigurationVO configurationVO =
_configDao.findByName(accountDetailVO.getName());
- if (configurationVO != null && configurationVO.isEncrypted()) {
- return DBEncryptionUtil.decrypt(accountDetailVO.getValue());
- }
- return accountDetailVO.getValue();
- }
}
diff --git
a/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/ResourceDetailsDao.java
b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/ResourceDetailsDao.java
index 5a173191be1..6daf8f02231 100644
---
a/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/ResourceDetailsDao.java
+++
b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/ResourceDetailsDao.java
@@ -97,4 +97,6 @@ public interface ResourceDetailsDao<R extends ResourceDetail>
extends GenericDao
public void addDetail(long resourceId, String key, String value, boolean
display);
public List<Long> findResourceIdsByNameAndValueIn(String name, Object[]
values);
+
+ String getActualValue(ResourceDetail resourceDetail);
}
diff --git
a/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/ResourceDetailsDaoBase.java
b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/ResourceDetailsDaoBase.java
index 37ebfebf5dd..556c832e991 100644
---
a/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/ResourceDetailsDaoBase.java
+++
b/engine/schema/src/main/java/org/apache/cloudstack/resourcedetail/ResourceDetailsDaoBase.java
@@ -20,6 +20,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import com.cloud.utils.crypt.DBEncryptionUtil;
import org.apache.cloudstack.api.ResourceDetail;
import com.cloud.utils.db.GenericDaoBase;
@@ -28,8 +29,16 @@ import com.cloud.utils.db.SearchBuilder;
import com.cloud.utils.db.SearchCriteria;
import com.cloud.utils.db.TransactionLegacy;
import com.cloud.utils.db.SearchCriteria.Op;
+import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
+import org.apache.cloudstack.framework.config.impl.ConfigurationVO;
+
+import javax.inject.Inject;
public abstract class ResourceDetailsDaoBase<R extends ResourceDetail> extends
GenericDaoBase<R, Long> implements ResourceDetailsDao<R> {
+
+ @Inject
+ private ConfigurationDao configDao;
+
private SearchBuilder<R> AllFieldsSearch;
public ResourceDetailsDaoBase() {
@@ -201,4 +210,13 @@ public abstract class ResourceDetailsDaoBase<R extends
ResourceDetail> extends G
return customSearch(sc, null);
}
+
+ @Override
+ public String getActualValue(ResourceDetail resourceDetail) {
+ ConfigurationVO configurationVO =
configDao.findByName(resourceDetail.getName());
+ if (configurationVO != null && configurationVO.isEncrypted()) {
+ return DBEncryptionUtil.decrypt(resourceDetail.getValue());
+ }
+ return resourceDetail.getValue();
+ }
}
diff --git
a/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/ImageStoreDetailsDaoImpl.java
b/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/ImageStoreDetailsDaoImpl.java
index 8e5ce770f45..1b0644820c5 100644
---
a/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/ImageStoreDetailsDaoImpl.java
+++
b/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/ImageStoreDetailsDaoImpl.java
@@ -37,7 +37,6 @@ import
org.apache.cloudstack.resourcedetail.ResourceDetailsDaoBase;
@Component
public class ImageStoreDetailsDaoImpl extends
ResourceDetailsDaoBase<ImageStoreDetailVO> implements ImageStoreDetailsDao,
ScopedConfigStorage {
-
protected final SearchBuilder<ImageStoreDetailVO> storeSearch;
public ImageStoreDetailsDaoImpl() {
@@ -108,12 +107,11 @@ public class ImageStoreDetailsDaoImpl extends
ResourceDetailsDaoBase<ImageStoreD
@Override
public String getConfigValue(long id, ConfigKey<?> key) {
ImageStoreDetailVO vo = findDetail(id, key.key());
- return vo == null ? null : vo.getValue();
+ return vo == null ? null : getActualValue(vo);
}
@Override
public void addDetail(long resourceId, String key, String value, boolean
display) {
super.addDetail(new ImageStoreDetailVO(resourceId, key, value,
display));
}
-
}