Skip to content

Commit

Permalink
Introduce DB based Admin Banner DAO implementation
Browse files Browse the repository at this point in the history
  • Loading branch information
UdeshAthukorala committed Jan 26, 2025
1 parent bb7a6ec commit 601d90b
Show file tree
Hide file tree
Showing 4 changed files with 145 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,10 @@
<groupId>org.wso2.carbon.identity.framework</groupId>
<artifactId>org.wso2.carbon.identity.application.authentication.framework</artifactId>
</dependency>
<dependency>
<groupId>org.wso2.carbon</groupId>
<artifactId>org.wso2.carbon.admin.advisory.mgt</artifactId>
</dependency>
</dependencies>

<build>
Expand All @@ -109,16 +113,22 @@
org.wso2.carbon.identity.core.util;version="${carbon.identity.package.import.version.range}",
org.wso2.carbon.database.utils.*;version="${org.wso2.carbon.database.utils.version.range}",
org.wso2.carbon.identity.configuration.mgt.core.*; version="${carbon.identity.package.import.version.range}",
o
org.wso2.carbon.identity.application.*;version="${carbon.identity.package.import.version.range}",
org.osgi.framework; version="${osgi.framework.imp.pkg.version.range}",
org.osgi.service.component; version="${osgi.service.component.imp.pkg.version.range}",
org.apache.commons.logging; version="${import.package.version.commons.logging}",
org.wso2.carbon.identity.core.cache; version="${carbon.identity.package.import.version.range}"
org.wso2.carbon.identity.core.cache; version="${carbon.identity.package.import.version.range}",
org.wso2.carbon.admin.advisory.mgt.dao; version="${carbon.kernel.package.import.version.range}",
org.wso2.carbon.admin.advisory.mgt.dto; version="${carbon.kernel.package.import.version.range}",
org.wso2.carbon.admin.advisory.mgt.service; version="${carbon.kernel.package.import.version.range}",
org.wso2.carbon.admin.advisory.mgt.exception; version="${carbon.kernel.package.import.version.range}",
</Import-Package>
<Export-Package>
!org.wso2.carbon.identity.cors.mgt.core.internal,
org.wso2.carbon.identity.cors.mgt.core.*; version="${project.version}",
</Export-Package>
<DynamicImport-Package>*</DynamicImport-Package>
</instructions>
</configuration>
</plugin>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
package org.wso2.carbon.identity.cors.mgt.core.advisorybanner;

import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.wso2.carbon.admin.advisory.mgt.dao.AdminAdvisoryBannerDAO;
import org.wso2.carbon.admin.advisory.mgt.dto.AdminAdvisoryBannerDTO;
import org.wso2.carbon.admin.advisory.mgt.exception.AdminAdvisoryMgtException;
import org.wso2.carbon.identity.configuration.mgt.core.ConfigurationManager;
import org.wso2.carbon.identity.configuration.mgt.core.exception.ConfigurationManagementException;
import org.wso2.carbon.identity.configuration.mgt.core.model.Attribute;
import org.wso2.carbon.identity.configuration.mgt.core.model.Resource;
import org.wso2.carbon.identity.configuration.mgt.core.model.ResourceFile;
import org.wso2.carbon.identity.cors.mgt.core.internal.CORSManagementServiceHolder;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;

/**
* This class is used to manage storage of the Admin Advisory Banner configurations in the configuration-mgt store.
*/
public class DBBasedAdminBannerDAO implements AdminAdvisoryBannerDAO {

public static final String ADVISORY_BANNER_RESOURCE_TYPE = "ADMIN_ADVISORY_BANNER";
public static final String ADVISORY_BANNER_RESOURCE_NAME = "ADMIN_ADVISORY_BANNER_RESOURCE";
public static final String ENABLE_BANNER = "enableBanner";
public static final String BANNER_CONTENT = "bannerContent";

private static final Log LOG = LogFactory.getLog(DBBasedAdminBannerDAO.class);

@Override
public void saveAdminAdvisoryConfig(AdminAdvisoryBannerDTO adminAdvisoryBannerDTO, String tenantDomain)
throws AdminAdvisoryMgtException {

Resource resource = buildResourceFromAdvisoryBannerDTO(adminAdvisoryBannerDTO);
try {
getConfigurationManager().addResource(ADVISORY_BANNER_RESOURCE_TYPE, resource);
} catch (ConfigurationManagementException e) {
throw new AdminAdvisoryMgtException("Error occurred while saving advisory banner configuration.", e);
}
if (LOG.isDebugEnabled()) {
LOG.debug("Admin advisory banner configuration saved successfully in configuration-store for tenant: "
+ tenantDomain);
}
}

@Override
public AdminAdvisoryBannerDTO loadAdminAdvisoryConfig(String tenantDomain) throws AdminAdvisoryMgtException {

try {
Resource resource = getConfigurationManager().getResource(ADVISORY_BANNER_RESOURCE_TYPE,
ADVISORY_BANNER_RESOURCE_TYPE);
if (resource == null) {
return null;
}

List<ResourceFile> resourceFiles = getConfigurationManager().getFiles(ADVISORY_BANNER_RESOURCE_TYPE,
ADVISORY_BANNER_RESOURCE_NAME);

if (resourceFiles.isEmpty() || StringUtils.isBlank(resourceFiles.get(0).getId())) {
return null;
}
InputStream inputStream = getConfigurationManager().getFileById
(ADVISORY_BANNER_RESOURCE_TYPE, ADVISORY_BANNER_RESOURCE_NAME, resourceFiles.get(0).getId());
AdminAdvisoryBannerDTO adminAdvisoryBannerDTO = buildAdvisoryBannerDTOFromResource(resource, inputStream);

if (LOG.isDebugEnabled()) {
LOG.debug("Admin advisory banner configuration loaded successfully from configuration-store for" +
" tenant: " + tenantDomain);
}
return adminAdvisoryBannerDTO;
} catch (ConfigurationManagementException e) {
throw new AdminAdvisoryMgtException("Error occurred while loading advisory banner configuration.", e);
}
}

private AdminAdvisoryBannerDTO buildAdvisoryBannerDTOFromResource(Resource resource, InputStream inputStream)
throws AdminAdvisoryMgtException {

AdminAdvisoryBannerDTO adminAdvisoryBannerDTO = new AdminAdvisoryBannerDTO();
adminAdvisoryBannerDTO.setEnableBanner(Boolean.parseBoolean(resource.getAttributes().get(0).getValue()));
String bannerContent;

try {
bannerContent = IOUtils.toString(inputStream, StandardCharsets.UTF_8);
} catch (IOException e) {
throw new AdminAdvisoryMgtException("Error occurred while converting banner content to string.", e);
}
adminAdvisoryBannerDTO.setBannerContent(bannerContent);
return adminAdvisoryBannerDTO;
}

private Resource buildResourceFromAdvisoryBannerDTO(AdminAdvisoryBannerDTO adminAdvisoryBannerDTO)
throws AdminAdvisoryMgtException {

Resource resource = new Resource(ADVISORY_BANNER_RESOURCE_NAME, ADVISORY_BANNER_RESOURCE_TYPE);
List<Attribute> attributes = new ArrayList<>();
attributes.add(new Attribute(ENABLE_BANNER, String.valueOf(adminAdvisoryBannerDTO.getEnableBanner())));
resource.setAttributes(attributes);

ResourceFile file = new ResourceFile();
file.setName(BANNER_CONTENT);
try (InputStream inputStream = new ByteArrayInputStream(adminAdvisoryBannerDTO.getBannerContent().
getBytes(StandardCharsets.UTF_8))) {
file.setInputStream(inputStream);
} catch (IOException e) {
throw new AdminAdvisoryMgtException("Error occurred while converting banner content to input stream.", e);
}
List<ResourceFile> resourceFiles = new ArrayList<>();
resourceFiles.add(file);
resource.setFiles(resourceFiles);
return resource;
}

private ConfigurationManager getConfigurationManager() {

return CORSManagementServiceHolder.getInstance().getConfigurationManager();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,10 @@
import org.osgi.service.component.annotations.Reference;
import org.osgi.service.component.annotations.ReferenceCardinality;
import org.osgi.service.component.annotations.ReferencePolicy;
import org.wso2.carbon.admin.advisory.mgt.dao.AdminAdvisoryBannerDAO;
import org.wso2.carbon.identity.configuration.mgt.core.ConfigurationManager;
import org.wso2.carbon.identity.cors.mgt.core.CORSManagementService;
import org.wso2.carbon.identity.cors.mgt.core.advisorybanner.DBBasedAdminBannerDAO;
import org.wso2.carbon.identity.cors.mgt.core.internal.impl.CORSManagementServiceImpl;

/**
Expand All @@ -54,6 +56,8 @@ protected void activate(ComponentContext context) {
try {
BundleContext bundleContext = context.getBundleContext();
bundleContext.registerService(CORSManagementService.class, new CORSManagementServiceImpl(), null);
// Register the Database based Admin Advisory Banner DAO.
bundleContext.registerService(AdminAdvisoryBannerDAO.class, new DBBasedAdminBannerDAO(), null);

if (log.isDebugEnabled()) {
log.debug("CORSManagementServiceComponent is activated.");
Expand Down
7 changes: 6 additions & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -501,6 +501,11 @@
<artifactId>org.wso2.securevault</artifactId>
<version>${org.wso2.securevault.version}</version>
</dependency>
<dependency>
<groupId>org.wso2.carbon</groupId>
<artifactId>org.wso2.carbon.admin.advisory.mgt</artifactId>
<version>${carbon.kernel.version}</version>
</dependency>
<dependency>
<groupId>org.wso2.carbon</groupId>
<artifactId>org.wso2.carbon.securevault</artifactId>
Expand Down Expand Up @@ -1853,7 +1858,7 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

<!-- Carbon kernel version -->
<carbon.kernel.version>4.10.33</carbon.kernel.version>
<carbon.kernel.version>4.10.34-SNAPSHOT</carbon.kernel.version>
<carbon.kernel.feature.version>4.7.0</carbon.kernel.feature.version>
<carbon.kernel.package.import.version.range>[4.5.0, 5.0.0)</carbon.kernel.package.import.version.range>
<carbon.kernel.registry.imp.pkg.version>[1.0.1, 2.0.0)</carbon.kernel.registry.imp.pkg.version>
Expand Down

0 comments on commit 601d90b

Please sign in to comment.