Skip to content

Commit

Permalink
Cleanup, further code hardening
Browse files Browse the repository at this point in the history
Signed-off-by: Ljupcho Palashevski <lpalashevski@gmail.com>
  • Loading branch information
lpalashevski committed Sep 8, 2023
1 parent 92cb917 commit 98f5963
Show file tree
Hide file tree
Showing 9 changed files with 52 additions and 87 deletions.
2 changes: 2 additions & 0 deletions bom/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,7 @@ ext {
reactivestreamsVersion = '1.0.4'
springdocStarterVersion = '2.1.0'
jacocoVersion = '0.8.8'
snakeYamlVersion = '2.2'
}

dependencies {
Expand Down Expand Up @@ -282,6 +283,7 @@ dependencies {
api("org.slf4j:slf4j-simple:${slf4jVersion}")
api("org.testng:testng:${testngVersion}")
api("org.hamcrest:hamcrest:${hamcrestVersion}")
api("org.yaml:snakeyaml:${snakeYamlVersion}")

// Explicitly enforced versions of transitive dependencies to mitigate potential CVEs reported by static security scans.
//TODO: Remove dependency line below in case the new parent library is updated and pulls good version.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,28 +26,25 @@ dependencies {
implementation 'com.fasterxml.jackson.core:jackson-annotations'
implementation 'jakarta.servlet:jakarta.servlet-api'
implementation 'org.projectlombok:lombok'
// implementation 'org.yaml:snakeyaml'
implementation 'org.yaml:snakeyaml'
implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-yaml'
implementation 'com.google.guava:guava'
annotationProcessor 'org.projectlombok:lombok'

runtimeOnly 'io.micrometer:micrometer-registry-prometheus'
runtimeOnly 'ch.qos.logback:logback-classic'
runtimeOnly 'org.hibernate:hibernate-validator'
compileOnly 'io.swagger.core.v3:swagger-annotations-jakarta'
// runtimeOnly 'com.fasterxml.jackson.dataformat:jackson-dataformat-yaml'
runtimeOnly 'com.fasterxml.jackson.core:jackson-core'

compileOnly project(':open-metadata-implementation:common-services:ffdc-services')
// implementation project(':open-metadata-implementation:frameworks:open-connector-framework')
implementation project(':open-metadata-implementation:adapters:authentication-plugins:http-helper')
implementation project(':open-metadata-implementation:admin-services:admin-services-api')
implementation project(':open-metadata-implementation:server-operations:server-operations-api')
implementation project(':open-metadata-implementation:server-operations:server-operations-server')

implementation project(path: ':open-metadata-implementation:adapters:open-connectors:connector-configuration-factory')
implementation project(path: ':open-metadata-implementation:repository-services:repository-services-implementation')

implementation 'com.google.guava:guava'
/* IN DEVELOPMENT */

/* Pulling dependencies for some fo the sub-systems enabling 'Metadata Access Store' services */
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,14 @@
import org.odpi.openmetadata.adapters.repositoryservices.ConnectorConfigurationFactory;
import org.odpi.openmetadata.adminservices.configuration.properties.OMAGServerConfig;
import org.odpi.openmetadata.repositoryservices.admin.OMRSConfigurationFactory;
import org.odpi.openmetadata.serverchassis.springboot.constants.Extensions;
import org.odpi.openmetadata.serverchassis.springboot.constants.SupportedConfigTypes;
import org.odpi.openmetadata.serverchassis.springboot.exception.OMAGServerActivationError;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.Resource;
import org.yaml.snakeyaml.Yaml;

import java.io.IOException;
import java.util.Objects;
Expand All @@ -25,8 +26,7 @@
@Configuration
@Slf4j
public class OMAGConfigHelper {
public static final String WRONG_EXTENSION_MESSAGE = "Unallowed config file extension, " +
"allowed config file extensions are: " + Extensions.stream();

@Getter
final OMAGServerProperties serverProperties;
private final ObjectMapper jsonObjectMapper;
Expand Down Expand Up @@ -61,26 +61,17 @@ public void loadConfig() throws OMAGServerActivationError {

Resource serverConfigFile = serverProperties.getServerConfigFile();

//TODO: This is POC implementation.
// Better way to identify content type may be required.

if (!isJsonConfigurationFile(serverConfigFile) && !isYamlConfigurationFile(serverConfigFile)) {
log.error(WRONG_EXTENSION_MESSAGE);
throw new OMAGServerActivationError(WRONG_EXTENSION_MESSAGE);
}

log.info("{} based configuration with server-config-file {}", getFileExtension(serverConfigFile), serverConfigFile);
log.info("Configuration {}", serverConfigFile);

if (isJsonConfigurationFile(serverConfigFile)) {
omagServerConfig = jsonObjectMapper.reader()
.readValue(serverConfigFile.getInputStream(), OMAGServerConfig.class);

omagServerConfig = jsonObjectMapper.reader().readValue(serverConfigFile.getInputStream(), OMAGServerConfig.class);
} else if (isYamlConfigurationFile(serverConfigFile)) {
//TODO: This is POC implementation. We need better code to deal with yaml i.e. one option is to use Jackson and Yaml data format.
// Yaml yaml = new Yaml();
// omagServerConfig = yaml.loadAs(serverConfigFile.getInputStream(), OMAGServerConfig.class);
omagServerConfig = yamlObjectMapper.reader()
.readValue(serverConfigFile.getInputStream(), OMAGServerConfig.class);
omagServerConfig = yamlObjectMapper.reader().readValue(serverConfigFile.getInputStream(), OMAGServerConfig.class);
} else if (isYmlConfigurationFile(serverConfigFile)) {
Yaml yaml = new Yaml();
omagServerConfig = yaml.loadAs(serverConfigFile.getInputStream(), OMAGServerConfig.class);
} else {
throw new OMAGServerActivationError("Configuration file is not supported");
}

} else if (isPropertiesConfiguration()) {
Expand All @@ -89,30 +80,29 @@ public void loadConfig() throws OMAGServerActivationError {
omagServerConfig = serverProperties.getServerConfig();
}

log.info("Configuration document for server: {} - loaded successfully", omagServerConfig.getLocalServerName());

} catch (IOException e) {
log.info("Configuration document cannot be loaded from the resource provided - check application configuration");
throw new OMAGServerActivationError(
String.format("Configuration document cannot be loaded from the resource provided - check application configuration"), e);
"Configuration document cannot be loaded from the resource provided - check application configuration", e);
}
}

private String getFileExtension(Resource serverConfigFile) {
return Files.getFileExtension(serverConfigFile.getFilename());
return Files.getFileExtension(Objects.requireNonNull(serverConfigFile.getFilename()));
}

private boolean isConfigurationFileProvided() {
return serverProperties.getServerConfigFile() != null;
}

private boolean isJsonConfigurationFile(Resource serverConfigFile) {
return Extensions.JSON.name().equalsIgnoreCase(Objects.requireNonNull(getFileExtension(serverConfigFile)));
return SupportedConfigTypes.JSON.name().equalsIgnoreCase(Objects.requireNonNull(getFileExtension(serverConfigFile)));
}

private boolean isYamlConfigurationFile(Resource serverConfigFile) {
return Extensions.YAML.name().equalsIgnoreCase(Objects.requireNonNull(getFileExtension(serverConfigFile)))
|| Extensions.YML.name().equalsIgnoreCase(Objects.requireNonNull(getFileExtension(serverConfigFile)));
return SupportedConfigTypes.YAML.name().equalsIgnoreCase(Objects.requireNonNull(getFileExtension(serverConfigFile)));
}
private boolean isYmlConfigurationFile(Resource serverConfigFile) {
return SupportedConfigTypes.YML.name().equalsIgnoreCase(Objects.requireNonNull(getFileExtension(serverConfigFile)));
}

private boolean isPropertiesConfiguration() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,10 @@
import com.fasterxml.jackson.dataformat.yaml.YAMLMapper;
import lombok.extern.slf4j.Slf4j;

import org.odpi.openmetadata.serverchassis.springboot.constants.Extensions;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
import org.springframework.util.StringUtils;

import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL;

Expand Down Expand Up @@ -53,9 +51,6 @@ private static ObjectMapper newObjectMapper(Jackson2ObjectMapperBuilder jackson2
@Bean
@Qualifier("jsonObjectMapper")
ObjectMapper objectMapper(Jackson2ObjectMapperBuilder jackson2ObjectMapperBuilder) {

log.info("{}{}", StringUtils.capitalize(Extensions.JSON.name()), START_LOG_SUFIX);

return newObjectMapper(jackson2ObjectMapperBuilder);
}

Expand All @@ -65,9 +60,6 @@ ObjectMapper objectMapper(Jackson2ObjectMapperBuilder jackson2ObjectMapperBuilde
@Bean
@Qualifier("yamlObjectMapper")
public ObjectMapper yamlMapper() {

log.info("{}{}", StringUtils.capitalize(Extensions.YAML.name()), START_LOG_SUFIX);

return YAMLMapper.builder()
.disable(YAMLGenerator.Feature.WRITE_DOC_START_MARKER)
.disable(YAMLGenerator.Feature.ALLOW_LONG_KEYS)
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
/* SPDX-License-Identifier: Apache-2.0 */
/* Copyright Contributors to the ODPi Egeria project. */
package org.odpi.openmetadata.serverchassis.springboot.constants;

import java.io.Serializable;

public enum SupportedConfigTypes implements Serializable {
YAML,
YML,
JSON;
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
---
omag:
# server-config-file: classpath:samples/metadata-repository-server.json
# server-config-file: classpath:samples/metadata-repository-server.yaml
# server-config-file: classpath:samples/metadata-repository-server.yml
server-config:
localServerName: cocoMDS1
localServerUserId: OMAGServer
Expand All @@ -22,10 +25,12 @@ omag:
connectorType:
connectorProviderClassName: >-
org.odpi.openmetadata.adapters.repositoryservices.rest.repositoryconnector.OMRSRESTRepositoryConnectorProvider
configurationProperties:
password: "${app-secrets.dummyPasswordDemo}"
endpoint:
address: https://localhost:9443/servers/cocoMDS1
eventsToSaveRule: ALL
eventsToSendRule: ALL
---
app-secrets:
dummyPassword: top-secret
dummyPasswordDemo: top-secret
Original file line number Diff line number Diff line change
@@ -1,26 +1,37 @@
---
class: OMAGServerConfig
localServerName: cocoMDS1
localServerType: Open Metadata and Governance Server
localServerUserId: OMAGServer
maxPageSize: 1000
repositoryServicesConfig:
class: RepositoryServicesConfig
auditLogConnections:
- connectorType:
- class: Connection
connectorType:
class: ConnectorType
connectorProviderClassName: >-
org.odpi.openmetadata.adapters.repositoryservices.auditlogstore.console.ConsoleAuditLogStoreProvider
configurationProperties:
supportedSeverities:
- Error
localRepositoryConfig:
class: LocalRepositoryConfig
metadataCollectionId: 838005fc-e09f-4688-af89-58254a155cc6
localRepositoryLocalConnection:
class: Connection
connectorType:
class: ConnectorType
connectorProviderClassName: >-
org.odpi.openmetadata.adapters.repositoryservices.inmemory.repositoryconnector.InMemoryOMRSRepositoryConnectorProvider
localRepositoryRemoteConnection:
class: Connection
connectorType:
class: ConnectorType
connectorProviderClassName: >-
org.odpi.openmetadata.adapters.repositoryservices.rest.repositoryconnector.OMRSRESTRepositoryConnectorProvider
endpoint:
class: Endpoint
address: https://localhost:9443/servers/cocoMDS1
eventsToSaveRule: ALL
eventsToSendRule: ALL
Original file line number Diff line number Diff line change
@@ -1,37 +1,26 @@
---
class: OMAGServerConfig
localServerName: cocoMDS1
localServerType: Open Metadata and Governance Server
localServerUserId: OMAGServer
maxPageSize: 1000
repositoryServicesConfig:
class: RepositoryServicesConfig
auditLogConnections:
- class: Connection
connectorType:
class: ConnectorType
- connectorType:
connectorProviderClassName: >-
org.odpi.openmetadata.adapters.repositoryservices.auditlogstore.console.ConsoleAuditLogStoreProvider
configurationProperties:
supportedSeverities:
- Error
localRepositoryConfig:
class: LocalRepositoryConfig
metadataCollectionId: 838005fc-e09f-4688-af89-58254a155cc6
localRepositoryLocalConnection:
class: Connection
connectorType:
class: ConnectorType
connectorProviderClassName: >-
org.odpi.openmetadata.adapters.repositoryservices.inmemory.repositoryconnector.InMemoryOMRSRepositoryConnectorProvider
localRepositoryRemoteConnection:
class: Connection
connectorType:
class: ConnectorType
connectorProviderClassName: >-
org.odpi.openmetadata.adapters.repositoryservices.rest.repositoryconnector.OMRSRESTRepositoryConnectorProvider
endpoint:
class: Endpoint
address: https://localhost:9443/servers/cocoMDS1
eventsToSaveRule: ALL
eventsToSendRule: ALL

0 comments on commit 98f5963

Please sign in to comment.