Add docUrl into metadata

status
Lasantha Dharmakeerthi 2 months ago
commit c5fd475d17

@ -24,6 +24,7 @@ public class WhiteLabelTheme {
private WhiteLabelImage logoIconImage; private WhiteLabelImage logoIconImage;
private String footerText; private String footerText;
private String appTitle; private String appTitle;
private String docUrl;
public String getFooterText() { public String getFooterText() {
return footerText; return footerText;
@ -64,4 +65,12 @@ public class WhiteLabelTheme {
public void setLogoIconImage(WhiteLabelImage logoIconImage) { public void setLogoIconImage(WhiteLabelImage logoIconImage) {
this.logoIconImage = logoIconImage; this.logoIconImage = logoIconImage;
} }
public String getDocUrl() {
return docUrl;
}
public void setDocUrl(String docUrl) {
this.docUrl = docUrl;
}
} }

@ -24,6 +24,7 @@ public class WhiteLabelThemeCreateRequest {
private WhiteLabelImageRequestPayload logoIcon; private WhiteLabelImageRequestPayload logoIcon;
private String footerText; private String footerText;
private String appTitle; private String appTitle;
private String docUrl;
public WhiteLabelImageRequestPayload getFavicon() { public WhiteLabelImageRequestPayload getFavicon() {
return favicon; return favicon;
@ -64,4 +65,12 @@ public class WhiteLabelThemeCreateRequest {
public void setLogoIcon(WhiteLabelImageRequestPayload logoIcon) { public void setLogoIcon(WhiteLabelImageRequestPayload logoIcon) {
this.logoIcon = logoIcon; this.logoIcon = logoIcon;
} }
public String getDocUrl() {
return docUrl;
}
public void setDocUrl(String docUrl) {
this.docUrl = docUrl;
}
} }

@ -18,7 +18,6 @@
package io.entgra.device.mgt.core.device.mgt.core.config.metadata.mgt; package io.entgra.device.mgt.core.device.mgt.core.config.metadata.mgt;
import io.entgra.device.mgt.core.device.mgt.core.config.metadata.mgt.documentation.DocConfiguration;
import io.entgra.device.mgt.core.device.mgt.core.config.metadata.mgt.whitelabel.WhiteLabelConfiguration; import io.entgra.device.mgt.core.device.mgt.core.config.metadata.mgt.whitelabel.WhiteLabelConfiguration;
import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlElement;
@ -27,7 +26,6 @@ import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "MetaDataConfiguration") @XmlRootElement(name = "MetaDataConfiguration")
public class MetaDataConfiguration { public class MetaDataConfiguration {
private WhiteLabelConfiguration whiteLabelConfiguration; private WhiteLabelConfiguration whiteLabelConfiguration;
private DocConfiguration docConfiguration;
@XmlElement(name = "WhiteLabelConfiguration", required = true) @XmlElement(name = "WhiteLabelConfiguration", required = true)
public WhiteLabelConfiguration getWhiteLabelConfiguration() { public WhiteLabelConfiguration getWhiteLabelConfiguration() {
@ -37,13 +35,4 @@ public class MetaDataConfiguration {
public void setWhiteLabelConfiguration(WhiteLabelConfiguration whiteLabelConfiguration) { public void setWhiteLabelConfiguration(WhiteLabelConfiguration whiteLabelConfiguration) {
this.whiteLabelConfiguration = whiteLabelConfiguration; this.whiteLabelConfiguration = whiteLabelConfiguration;
} }
@XmlElement(name = "DocConfiguration", required = true)
public DocConfiguration getDocConfiguration() {
return docConfiguration;
}
public void setDocConfiguration(DocConfiguration docConfiguration) {
this.docConfiguration = docConfiguration;
}
} }

@ -1,36 +0,0 @@
/*
* Copyright (c) 2018 - 2024, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
*
* Entgra (Pvt) Ltd. licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file except
* in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package io.entgra.device.mgt.core.device.mgt.core.config.metadata.mgt.documentation;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "DocConfiguration")
public class DocConfiguration {
private String docUrl;
@XmlElement(name = "DocUrl", required = true)
public String getDocUrl() {
return docUrl;
}
public void setDocUrl(String docUrl) {
this.docUrl = docUrl;
}
}

@ -26,6 +26,16 @@ public class WhiteLabelConfiguration {
private String footerText; private String footerText;
private String appTitle; private String appTitle;
private WhiteLabelImages whiteLabelImages; private WhiteLabelImages whiteLabelImages;
private String docUrl;
@XmlElement(name = "DocUrl", required = true)
public String getDocUrl() {
return docUrl;
}
public void setDocUrl(String docUrl) {
this.docUrl = docUrl;
}
@XmlElement(name = "FooterText", required = true) @XmlElement(name = "FooterText", required = true)
public String getFooterText() { public String getFooterText() {

@ -18,6 +18,7 @@
package io.entgra.device.mgt.core.device.mgt.core.internal; package io.entgra.device.mgt.core.device.mgt.core.internal;
import io.entgra.device.mgt.core.device.mgt.common.authorization.GroupAccessAuthorizationService; import io.entgra.device.mgt.core.device.mgt.common.authorization.GroupAccessAuthorizationService;
import io.entgra.device.mgt.core.device.mgt.common.exceptions.MetadataManagementException;
import io.entgra.device.mgt.core.device.mgt.common.metadata.mgt.DeviceStatusManagementService; import io.entgra.device.mgt.core.device.mgt.common.metadata.mgt.DeviceStatusManagementService;
import io.entgra.device.mgt.core.device.mgt.core.authorization.GroupAccessAuthorizationServiceImpl; import io.entgra.device.mgt.core.device.mgt.core.authorization.GroupAccessAuthorizationServiceImpl;
import io.entgra.device.mgt.core.device.mgt.core.metadata.mgt.DeviceStatusManagementServiceImpl; import io.entgra.device.mgt.core.device.mgt.core.metadata.mgt.DeviceStatusManagementServiceImpl;
@ -335,15 +336,14 @@ public class DeviceManagementServiceComponent {
bundleContext.registerService(MetadataManagementService.class.getName(), metadataManagementService, null); bundleContext.registerService(MetadataManagementService.class.getName(), metadataManagementService, null);
/* Registering Whitelabel Service */ /* Registering Whitelabel Service */
WhiteLabelManagementService whiteLabelManagementService = new WhiteLabelManagementServiceImpl();
DeviceManagementDataHolder.getInstance().setWhiteLabelManagementService(whiteLabelManagementService);
try { try {
WhiteLabelManagementService whiteLabelManagementService = new WhiteLabelManagementServiceImpl();
DeviceManagementDataHolder.getInstance().setWhiteLabelManagementService(whiteLabelManagementService);
whiteLabelManagementService.addDefaultWhiteLabelThemeIfNotExist(tenantId); whiteLabelManagementService.addDefaultWhiteLabelThemeIfNotExist(tenantId);
} catch (Throwable e) { bundleContext.registerService(WhiteLabelManagementService.class.getName(), whiteLabelManagementService, null);
log.error("Error occurred while adding default tenant white label theme", e); } catch (MetadataManagementException e) {
log.error("Error occurred while initializing the white label management service", e);
} }
bundleContext.registerService(WhiteLabelManagementService.class.getName(), whiteLabelManagementService, null);
/* Registering DeviceState Filter Service */ /* Registering DeviceState Filter Service */
DeviceStatusManagementService deviceStatusManagementService = new DeviceStatusManagementServiceImpl(); DeviceStatusManagementService deviceStatusManagementService = new DeviceStatusManagementServiceImpl();

@ -60,8 +60,53 @@ public class WhiteLabelManagementServiceImpl implements WhiteLabelManagementServ
private final MetadataDAO metadataDAO; private final MetadataDAO metadataDAO;
public WhiteLabelManagementServiceImpl() { public WhiteLabelManagementServiceImpl() throws MetadataManagementException {
this.metadataDAO = MetadataManagementDAOFactory.getMetadataDAO(); this.metadataDAO = MetadataManagementDAOFactory.getMetadataDAO();
initializeWhiteLabelThemes();
}
/**
* Initializes white label theme for a tenant by retrieving white label metadata and updating it if necessary.
* If the white label metadata is found and the DocUrl is missing,it updates the metadata with the default value
* for DocUrl.
*
* @throws MetadataManagementException if an error occurs while managing metadata or transactions.
*/
private void initializeWhiteLabelThemes() throws MetadataManagementException {
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true);
WhiteLabelTheme defaultTheme = getDefaultWhiteLabelTheme();
Metadata whiteLabelMetadata = getWhiteLabelMetaData(tenantId);
if (whiteLabelMetadata != null) {
WhiteLabelTheme whiteLabelTheme = new Gson().fromJson(whiteLabelMetadata.getMetaValue(),
WhiteLabelTheme.class);
if (whiteLabelTheme.getDocUrl() == null) {
whiteLabelTheme.setDocUrl(defaultTheme.getDocUrl());
Metadata updatedMetadata = constructWhiteLabelThemeMetadata(whiteLabelTheme);
try {
MetadataManagementDAOFactory.beginTransaction();
metadataDAO.updateMetadata(tenantId, updatedMetadata);
MetadataManagementDAOFactory.commitTransaction();
if (log.isDebugEnabled()) {
log.debug("WhiteLabel theme's DocUrl was missing and has been updated to the default value " +
"for tenant: " + tenantId);
}
} catch (MetadataManagementDAOException e) {
MetadataManagementDAOFactory.rollbackTransaction();
String msg = "Error occurred while fetching white label metadata for tenant: " + tenantId;
log.error(msg, e);
throw new MetadataManagementException(msg, e);
} catch (TransactionManagementException e) {
String msg = "Transaction failed while updating white label theme for tenant: "
+ tenantId;
log.error(msg, e);
throw new MetadataManagementException(msg, e);
} finally {
MetadataManagementDAOFactory.closeConnection();
}
}
} else {
addDefaultWhiteLabelThemeIfNotExist(tenantId);
}
} }
@Override @Override
@ -126,9 +171,9 @@ public class WhiteLabelManagementServiceImpl implements WhiteLabelManagementServ
/** /**
* Useful to get white label image file response from provided url * Useful to get white label image file response from provided url
*/ */
private FileResponse getImageFileResponseFromUrl(String url) throws IOException, NotFoundException { private FileResponse getImageFileResponseFromUrl(String url) throws IOException, NotFoundException {
FileResponse fileResponse = new FileResponse(); FileResponse fileResponse = new FileResponse();
try(CloseableHttpClient client = HttpClients.createDefault()) { try (CloseableHttpClient client = HttpClients.createDefault()) {
HttpGet imageGetRequest = new HttpGet(url); HttpGet imageGetRequest = new HttpGet(url);
HttpResponse response = client.execute(imageGetRequest); HttpResponse response = client.execute(imageGetRequest);
InputStream imageStream = response.getEntity().getContent(); InputStream imageStream = response.getEntity().getContent();
@ -183,6 +228,16 @@ public class WhiteLabelManagementServiceImpl implements WhiteLabelManagementServ
WhiteLabelStorageUtil.deleteWhiteLabelImageForTenantIfExists(tenantId); WhiteLabelStorageUtil.deleteWhiteLabelImageForTenantIfExists(tenantId);
} }
/**
* Get default metaDataConfiguration DocUrl from config
*/
private String getDefaultDocUrl() {
MetaDataConfiguration metaDataConfiguration = DeviceConfigurationManager.getInstance().
getDeviceManagementConfig().getMetaDataConfiguration();
WhiteLabelConfiguration whiteLabelConfiguration = metaDataConfiguration.getWhiteLabelConfiguration();
return whiteLabelConfiguration.getDocUrl();
}
/** /**
* Construct and return default whitelabel detail bean {@link WhiteLabelImage} * Construct and return default whitelabel detail bean {@link WhiteLabelImage}
*/ */
@ -193,11 +248,13 @@ public class WhiteLabelManagementServiceImpl implements WhiteLabelManagementServ
WhiteLabelImage logo = constructDefaultLogoImage(); WhiteLabelImage logo = constructDefaultLogoImage();
WhiteLabelImage logoIcon = constructDefaultLogoIconImage(); WhiteLabelImage logoIcon = constructDefaultLogoIconImage();
WhiteLabelTheme defaultTheme = new WhiteLabelTheme(); WhiteLabelTheme defaultTheme = new WhiteLabelTheme();
String docUrl = getDefaultDocUrl();
defaultTheme.setFooterText(footerText); defaultTheme.setFooterText(footerText);
defaultTheme.setAppTitle(appTitle); defaultTheme.setAppTitle(appTitle);
defaultTheme.setLogoImage(logo); defaultTheme.setLogoImage(logo);
defaultTheme.setLogoIconImage(logoIcon); defaultTheme.setLogoIconImage(logoIcon);
defaultTheme.setFaviconImage(favicon); defaultTheme.setFaviconImage(favicon);
defaultTheme.setDocUrl(docUrl);
return defaultTheme; return defaultTheme;
} }
@ -338,9 +395,9 @@ public class WhiteLabelManagementServiceImpl implements WhiteLabelManagementServ
* those can be passed to this method in order to restore. * those can be passed to this method in order to restore.
* *
* @param existingFavicon existing favicon image file * @param existingFavicon existing favicon image file
* @param existingLogo existing logo image file * @param existingLogo existing logo image file
*/ */
private void restoreWhiteLabelImages(File existingFavicon, File existingLogo, File existingLogoIcon, int tenantId) private void restoreWhiteLabelImages(File existingFavicon, File existingLogo, File existingLogoIcon, int tenantId)
throws MetadataManagementException { throws MetadataManagementException {
WhiteLabelStorageUtil.deleteWhiteLabelImageForTenantIfExists(tenantId); WhiteLabelStorageUtil.deleteWhiteLabelImageForTenantIfExists(tenantId);
if (existingFavicon != null) { if (existingFavicon != null) {
@ -359,7 +416,7 @@ public class WhiteLabelManagementServiceImpl implements WhiteLabelManagementServ
* For example if the provided white label image is of URL type it doesn't need to be stored * For example if the provided white label image is of URL type it doesn't need to be stored
* *
* @param whiteLabelImage image to be stored * @param whiteLabelImage image to be stored
* @param imageName (i.e: FAVICON) * @param imageName (i.e: FAVICON)
*/ */
private void storeWhiteLabelImageIfRequired(WhiteLabelImageRequestPayload whiteLabelImage, private void storeWhiteLabelImageIfRequired(WhiteLabelImageRequestPayload whiteLabelImage,
WhiteLabelImage.ImageName imageName, int tenantId) WhiteLabelImage.ImageName imageName, int tenantId)
@ -386,6 +443,7 @@ public class WhiteLabelManagementServiceImpl implements WhiteLabelManagementServ
whiteLabelTheme.setLogoIconImage(logoIconImage); whiteLabelTheme.setLogoIconImage(logoIconImage);
whiteLabelTheme.setFooterText(whiteLabelThemeCreateRequest.getFooterText()); whiteLabelTheme.setFooterText(whiteLabelThemeCreateRequest.getFooterText());
whiteLabelTheme.setAppTitle(whiteLabelThemeCreateRequest.getAppTitle()); whiteLabelTheme.setAppTitle(whiteLabelThemeCreateRequest.getAppTitle());
whiteLabelTheme.setDocUrl(whiteLabelThemeCreateRequest.getDocUrl());
return whiteLabelTheme; return whiteLabelTheme;
} }
@ -418,6 +476,38 @@ public class WhiteLabelManagementServiceImpl implements WhiteLabelManagementServ
return metadata; return metadata;
} }
/**
* updates the given WhiteLabelTheme with default value for docUrl
*
* @param whiteLabelTheme the WhiteLabelTheme to be updated with defaults if necessary.
* @param tenantId the ID of the tenant whose metadata is being updated.
* @throws MetadataManagementException exception for an error occurs during the update or transaction commit.
*/
private void updateWhiteLabelThemeWithDefaults(WhiteLabelTheme whiteLabelTheme, int tenantId)
throws MetadataManagementException {
WhiteLabelTheme defaultTheme = getDefaultWhiteLabelTheme();
if (whiteLabelTheme.getDocUrl() == null) {
whiteLabelTheme.setDocUrl(defaultTheme.getDocUrl());
}
Metadata updatedMetadata = constructWhiteLabelThemeMetadata(whiteLabelTheme);
try {
MetadataManagementDAOFactory.beginTransaction();
metadataDAO.updateMetadata(tenantId, updatedMetadata);
MetadataManagementDAOFactory.commitTransaction();
} catch (MetadataManagementDAOException e) {
MetadataManagementDAOFactory.rollbackTransaction();
String msg = "Error occurred while updating metadata for tenant: " + tenantId;
log.error(msg, e);
throw new MetadataManagementException(msg, e);
} catch (TransactionManagementException e) {
String msg = "Error occurred while committing the transaction for tenant: " + tenantId;
log.error(msg, e);
throw new MetadataManagementException(msg, e);
} finally {
MetadataManagementDAOFactory.closeConnection();
}
}
@Override @Override
public WhiteLabelTheme getWhiteLabelTheme(String tenantDomain) throws MetadataManagementException, DeviceManagementException { public WhiteLabelTheme getWhiteLabelTheme(String tenantDomain) throws MetadataManagementException, DeviceManagementException {
int tenantId = DeviceManagerUtil.getTenantId(tenantDomain); int tenantId = DeviceManagerUtil.getTenantId(tenantDomain);
@ -435,17 +525,22 @@ public class WhiteLabelManagementServiceImpl implements WhiteLabelManagementServ
throw new MetadataManagementException(msg); throw new MetadataManagementException(msg);
} }
} }
return new Gson().fromJson(metadata.getMetaValue(), WhiteLabelTheme.class); WhiteLabelTheme whiteLabelTheme = new Gson().fromJson(metadata.getMetaValue(), WhiteLabelTheme.class);
if (whiteLabelTheme.getDocUrl() == null) {
updateWhiteLabelThemeWithDefaults(whiteLabelTheme, tenantId);
}
return whiteLabelTheme;
} }
/** /**
* Load White label Meta Data for given tenant Id. * Load White label Meta Data for given tenant Id.
*
* @param tenantId Id of the tenant * @param tenantId Id of the tenant
* @return {@link Metadata} * @return {@link Metadata}
* @throws MetadataManagementException if an error occurred while getting Meta-Data info from Database for a * @throws MetadataManagementException if an error occurred while getting Meta-Data info from Database for a
* given tenant ID. * given tenant ID.
*/ */
private Metadata getWhiteLabelMetaData (int tenantId) throws MetadataManagementException { private Metadata getWhiteLabelMetaData(int tenantId) throws MetadataManagementException {
try { try {
MetadataManagementDAOFactory.openConnection(); MetadataManagementDAOFactory.openConnection();
return metadataDAO.getMetadata(tenantId, MetadataConstants.WHITELABEL_META_KEY); return metadataDAO.getMetadata(tenantId, MetadataConstants.WHITELABEL_META_KEY);

@ -20,7 +20,7 @@ package io.entgra.device.mgt.core.device.mgt.core.util;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.gson.Gson; import com.google.gson.Gson;
import io.entgra.device.mgt.core.device.mgt.core.config.metadata.mgt.MetaDataConfiguration; import io.entgra.device.mgt.core.device.mgt.core.config.metadata.mgt.MetaDataConfiguration;
import io.entgra.device.mgt.core.device.mgt.core.config.metadata.mgt.documentation.DocConfiguration; import io.entgra.device.mgt.core.device.mgt.core.config.metadata.mgt.whitelabel.WhiteLabelConfiguration;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import org.apache.http.HttpResponse; import org.apache.http.HttpResponse;
@ -1289,7 +1289,7 @@ public final class DeviceManagerUtil {
*/ */
public static String getDocUrl() { public static String getDocUrl() {
DeviceManagementConfig deviceManagementConfig = DeviceConfigurationManager.getInstance().getDeviceManagementConfig(); DeviceManagementConfig deviceManagementConfig = DeviceConfigurationManager.getInstance().getDeviceManagementConfig();
DocConfiguration docConfiguration = deviceManagementConfig.getMetaDataConfiguration().getDocConfiguration(); WhiteLabelConfiguration whiteLabelConfig = deviceManagementConfig.getMetaDataConfiguration().getWhiteLabelConfiguration();
return docConfiguration.getDocUrl(); return whiteLabelConfig.getDocUrl();
} }
} }

@ -160,9 +160,9 @@
</RemoteSessionConfiguration> </RemoteSessionConfiguration>
<DefaultGroupsConfiguration>BYOD,COPE</DefaultGroupsConfiguration> <DefaultGroupsConfiguration>BYOD,COPE</DefaultGroupsConfiguration>
<MetaDataConfiguration> <MetaDataConfiguration>
<DocConfiguration> <WhiteLabelConfiguration>
<DocUrl>https://docs.entgra.io/uem/6.0.0</DocUrl> <DocUrl>https://docs.entgra.io/uem/6.0.0</DocUrl>
</DocConfiguration> </WhiteLabelConfiguration>
</MetaDataConfiguration> </MetaDataConfiguration>
</DeviceMgtConfiguration> </DeviceMgtConfiguration>

@ -200,10 +200,8 @@
<DefaultLogoIconName>icon.png</DefaultLogoIconName> <DefaultLogoIconName>icon.png</DefaultLogoIconName>
<DefaultImagesLocation>default</DefaultImagesLocation> <DefaultImagesLocation>default</DefaultImagesLocation>
</WhiteLabelImages> </WhiteLabelImages>
</WhiteLabelConfiguration>
<DocConfiguration>
<DocUrl>https://docs.entgra.io/uem/6.0.0</DocUrl> <DocUrl>https://docs.entgra.io/uem/6.0.0</DocUrl>
</DocConfiguration> </WhiteLabelConfiguration>
</MetaDataConfiguration> </MetaDataConfiguration>
<OperationTimeoutConfigurations> <OperationTimeoutConfigurations>

@ -348,12 +348,10 @@
<DefaultLogoIconName>icon.png</DefaultLogoIconName> <DefaultLogoIconName>icon.png</DefaultLogoIconName>
<DefaultImagesLocation>default</DefaultImagesLocation> <DefaultImagesLocation>default</DefaultImagesLocation>
</WhiteLabelImages> </WhiteLabelImages>
</WhiteLabelConfiguration>
<DocConfiguration>
{% if product_conf is defined %} {% if product_conf is defined %}
<DocUrl>https://docs.entgra.io/uem/{{product_conf.server_version}}</DocUrl> <DocUrl>https://docs.entgra.io/uem/{{product_conf.server_version}}</DocUrl>
{% endif %} {% endif %}
</DocConfiguration> </WhiteLabelConfiguration>
</MetaDataConfiguration> </MetaDataConfiguration>
<OperationTimeoutConfigurations> <OperationTimeoutConfigurations>
<OperationTimeouts> <OperationTimeouts>

Loading…
Cancel
Save