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 <harikrishna.patn...@gmail.com>
AuthorDate: Mon Feb 3 18:00:57 2025 +0530

    Decrypt zone, cluster, storage details for configuration values (#10237)
    
    Co-authored-by: dahn <daan.hoogl...@gmail.com>
    Co-authored-by: Bryan Lima <42067040+bryanml...@users.noreply.github.com>
---
 .../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));
     }
-
 }

Reply via email to