http://git-wip-us.apache.org/repos/asf/logging-log4j-audit/blob/f0884aeb/log4j-audit/log4j-audit-maven-plugin/src/main/java/org/apache/logging/log4j/audit/plugin/AuditMojo.java ---------------------------------------------------------------------- diff --git a/log4j-audit/log4j-audit-maven-plugin/src/main/java/org/apache/logging/log4j/audit/plugin/AuditMojo.java b/log4j-audit/log4j-audit-maven-plugin/src/main/java/org/apache/logging/log4j/audit/plugin/AuditMojo.java new file mode 100644 index 0000000..8879de5 --- /dev/null +++ b/log4j-audit/log4j-audit-maven-plugin/src/main/java/org/apache/logging/log4j/audit/plugin/AuditMojo.java @@ -0,0 +1,121 @@ +/* + * Copyright 2001-2005 The Apache Software Foundation. + * + * Licensed 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 org.apache.logging.log4j.audit.plugin; + +import java.io.File; +import java.lang.reflect.Constructor; +import java.util.HashMap; +import java.util.Map; + +import org.apache.logging.log4j.audit.generator.InterfacesGenerator; +import org.apache.logging.log4j.catalog.api.CatalogReader; +import org.apache.logging.log4j.catalog.api.dao.JsonCatalogReader; +import org.apache.logging.log4j.util.LoaderUtil; +import org.apache.maven.plugin.AbstractMojo; +import org.apache.maven.plugin.MojoExecutionException; +import org.apache.maven.plugins.annotations.LifecyclePhase; +import org.apache.maven.plugins.annotations.Mojo; +import org.apache.maven.plugins.annotations.Parameter; +import org.apache.maven.project.MavenProject; + +/** + * Goal which generates the audit interfaces. + */ +@Mojo(name = "generate", defaultPhase = LifecyclePhase.GENERATE_SOURCES) +public class AuditMojo extends AbstractMojo { + + private static final String BASEDIR = "baseDir"; + private static final String BUILDDIR = "buildDir"; + private static final int MAX_KEY_LENGTH = 32; + private static final int DEFAULT_ENTERPRISE_ID = 18060; + + @Parameter(defaultValue = "${project}") + private MavenProject project; + + @Parameter(property = "catalogReaderClassName", defaultValue = "org.apache.logging.log4j.catalog.api.dao.FileCatalogReader") + private String catalogReaderClassName; + + @Parameter(property = "catalogReaderAttributes", required = false) + private Map<String, String> catalogReaderAttributes; + + @Parameter(property = "packageName", required = true) + private String packageName; + /** + * Location of the file. + */ + @Parameter(defaultValue = "${project.build.directory}/generated-sources/log4j-audit", property = "outputDir") + private File outputDirectory; + + @Parameter(required = false) + private int maxKeyLength; + + @Parameter(required = false) + private int enterpriseId; + + @SuppressWarnings("unchecked") + public void execute() throws MojoExecutionException { + if (maxKeyLength <= 0) { + maxKeyLength = MAX_KEY_LENGTH; + } + if (enterpriseId <= 0) { + enterpriseId = DEFAULT_ENTERPRISE_ID; + } + CatalogReader catalogReader = null; + try { + File basedir = project.getBasedir(); + Class<?> clazz = LoaderUtil.loadClass(catalogReaderClassName); + Constructor<CatalogReader>[] constructors = (Constructor<CatalogReader>[]) clazz.getConstructors(); + + for (Constructor<CatalogReader> constructor : constructors) { + if (constructor.getParameterCount() == 1 && constructor.getParameterTypes()[0].isAssignableFrom(Map.class)) { + if (catalogReaderAttributes == null) { + catalogReaderAttributes = new HashMap<>(); + } + if (!catalogReaderAttributes.containsKey(BASEDIR)) { + catalogReaderAttributes.put(BASEDIR, project.getBasedir().getAbsolutePath()); + } + if (!catalogReaderAttributes.containsKey(BUILDDIR)) { + catalogReaderAttributes.put(BUILDDIR, project.getBuild().getDirectory()); + } + catalogReader = constructor.newInstance(catalogReaderAttributes); + break; + } + } + if (catalogReader == null) { + catalogReader = LoaderUtil.newInstanceOf(catalogReaderClassName); + } + + } catch (Exception ex) { + getLog().error("Unable to load catalog reader " + catalogReaderClassName, ex); + return; + } + InterfacesGenerator generator = new InterfacesGenerator(); + JsonCatalogReader jsonCatalogReader = new JsonCatalogReader(); + jsonCatalogReader.setCatalogReader(catalogReader); + jsonCatalogReader.init(); + generator.setCatalogReader(jsonCatalogReader); + generator.setOutputDirectory(outputDirectory.getAbsolutePath()); + generator.setPackageName(packageName); + generator.setMaxKeyLength(maxKeyLength); + generator.setEnterpriseId(enterpriseId); + try { + generator.generateSource(); + project.addCompileSourceRoot(outputDirectory.getAbsolutePath()); + } catch (Exception ex) { + throw new MojoExecutionException("Error generating Audit interfaces", ex); + } + } +}
http://git-wip-us.apache.org/repos/asf/logging-log4j-audit/blob/f0884aeb/log4j-audit/log4j-audit-maven-plugin/src/main/resources/log4j2.xml ---------------------------------------------------------------------- diff --git a/log4j-audit/log4j-audit-maven-plugin/src/main/resources/log4j2.xml b/log4j-audit/log4j-audit-maven-plugin/src/main/resources/log4j2.xml new file mode 100644 index 0000000..89c2c66 --- /dev/null +++ b/log4j-audit/log4j-audit-maven-plugin/src/main/resources/log4j2.xml @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Licensed to the Apache Software Foundation (ASF) under one or more + ~ contributor license agreements. See the NOTICE file distributed with + ~ this work for additional information regarding copyright ownership. + ~ The ASF 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. + --> +<Configuration status="ERROR"> + <Appenders> + <Console name="Console" target="SYSTEM_OUT"> + <PatternLayout pattern="%d{ABSOLUTE} %-5level # %class.%method %m%n" /> + </Console> + </Appenders> + <Loggers> + <Root level="INFO"> + <AppenderRef ref="Console" /> + </Root> + </Loggers> +</Configuration> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/logging-log4j-audit/blob/f0884aeb/log4j-audit/log4j-audit-war/pom.xml ---------------------------------------------------------------------- diff --git a/log4j-audit/log4j-audit-war/pom.xml b/log4j-audit/log4j-audit-war/pom.xml new file mode 100644 index 0000000..efab88b --- /dev/null +++ b/log4j-audit/log4j-audit-war/pom.xml @@ -0,0 +1,187 @@ +<?xml version="1.0"?> +<!-- + ~ Licensed to the Apache Software Foundation (ASF) under one or more + ~ contributor license agreements. See the NOTICE file distributed with + ~ this work for additional information regarding copyright ownership. + ~ The ASF 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. + --> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>org.apache.logging.log4j</groupId> + <artifactId>log4j-audit</artifactId> + <version>1.0.0-SNAPSHOT</version> + </parent> + <artifactId>log4j-audit-war</artifactId> + <packaging>war</packaging> + <name>Log4j Audit Service</name> + <url>http://maven.apache.org</url> + <properties> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + </properties> + <dependencies> + <dependency> + <groupId>io.springfox</groupId> + <artifactId>springfox-swagger2</artifactId> + <exclusions> + <exclusion> + <groupId>org.aspectj</groupId> + <artifactId>aspectjrt</artifactId> + </exclusion> + </exclusions> + </dependency> + <dependency> + <groupId>io.springfox</groupId> + <artifactId>springfox-swagger-ui</artifactId> + </dependency> + <dependency> + <groupId>org.apache.logging.log4j</groupId> + <artifactId>log4j-audit-api</artifactId> + </dependency> + <dependency> + <groupId>org.apache.logging.log4j</groupId> + <artifactId>log4j-catalog-api</artifactId> + </dependency> + <dependency> + <groupId>commons-logging</groupId> + <artifactId>commons-logging</artifactId> + </dependency> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-context</artifactId> + </dependency> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-context-support</artifactId> + </dependency> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-web</artifactId> + </dependency> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-webmvc</artifactId> + </dependency> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-beans</artifactId> + </dependency> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-core</artifactId> + </dependency> + <dependency> + <groupId>org.springframework.data</groupId> + <artifactId>spring-data-rest-webmvc</artifactId> + </dependency> + <dependency> + <groupId>javax.servlet</groupId> + <artifactId>javax.servlet-api</artifactId> + <version>3.0.1</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>javax</groupId> + <artifactId>javaee-api</artifactId> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.apache.logging.log4j</groupId> + <artifactId>log4j-api</artifactId> + </dependency> + <dependency> + <groupId>org.apache.logging.log4j</groupId> + <artifactId>log4j-core</artifactId> + </dependency> + <dependency> + <groupId>org.apache.logging.log4j</groupId> + <artifactId>log4j-slf4j-impl</artifactId> + </dependency> + <dependency> + <groupId>org.apache.logging.log4j</groupId> + <artifactId>log4j-web</artifactId> + </dependency> + <dependency> + <groupId>com.fasterxml.jackson.core</groupId> + <artifactId>jackson-core</artifactId> + </dependency> + <dependency> + <groupId>com.fasterxml.jackson.core</groupId> + <artifactId>jackson-databind</artifactId> + </dependency> + <dependency> + <groupId>com.fasterxml.jackson.datatype</groupId> + <artifactId>jackson-datatype-jsr310</artifactId> + </dependency> + <dependency> + <groupId>org.mockito</groupId> + <artifactId>mockito-core</artifactId> + </dependency> + <dependency> + <groupId>org.springframework.data</groupId> + <artifactId>spring-data-jpa</artifactId> + </dependency> + <dependency> + <groupId>org.hibernate</groupId> + <artifactId>hibernate-core</artifactId> + </dependency> + <dependency> + <groupId>org.hibernate</groupId> + <artifactId>hibernate-entitymanager</artifactId> + </dependency> + <dependency> + <groupId>org.modelmapper</groupId> + <artifactId>modelmapper</artifactId> + </dependency> + <dependency> + <groupId>org.modelmapper.extensions</groupId> + <artifactId>modelmapper-spring</artifactId> + </dependency> + <dependency> + <groupId>org.modelmapper.extensions</groupId> + <artifactId>modelmapper-jackson</artifactId> + </dependency> + <dependency> + <groupId>org.apache.logging.log4j</groupId> + <artifactId>log4j-catalog-git</artifactId> + <version>1.0.0-SNAPSHOT</version> + </dependency> + + </dependencies> + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-war-plugin</artifactId> + <version>2.6</version> + <configuration> + <failOnMissingWebXml>false</failOnMissingWebXml> + </configuration> + <executions> + <execution> + <id>default-war</id> + <goals> + <goal>war</goal> + </goals> + <phase>prepare-package</phase> + </execution> + </executions> + </plugin> + </plugins> + </build> +</project> http://git-wip-us.apache.org/repos/asf/logging-log4j-audit/blob/f0884aeb/log4j-audit/log4j-audit-war/src/main/java/org/apache/logging/log4j/audit/service/Versions.java ---------------------------------------------------------------------- diff --git a/log4j-audit/log4j-audit-war/src/main/java/org/apache/logging/log4j/audit/service/Versions.java b/log4j-audit/log4j-audit-war/src/main/java/org/apache/logging/log4j/audit/service/Versions.java new file mode 100644 index 0000000..cdb4527 --- /dev/null +++ b/log4j-audit/log4j-audit-war/src/main/java/org/apache/logging/log4j/audit/service/Versions.java @@ -0,0 +1,26 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF 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 org.apache.logging.log4j.audit.service; + +import org.springframework.http.MediaType; + +public final class Versions { + public static final MediaType V1_0 = new MediaType("application", "vnd.apache.logging.log4j.audit-v1.0+json"); + public static final String V1_0_VALUE = "application/vnd.apache.logging.log4j.audit-v1.0+json"; + + private Versions() { } +} http://git-wip-us.apache.org/repos/asf/logging-log4j-audit/blob/f0884aeb/log4j-audit/log4j-audit-war/src/main/java/org/apache/logging/log4j/audit/service/config/ApplicationConfiguration.java ---------------------------------------------------------------------- diff --git a/log4j-audit/log4j-audit-war/src/main/java/org/apache/logging/log4j/audit/service/config/ApplicationConfiguration.java b/log4j-audit/log4j-audit-war/src/main/java/org/apache/logging/log4j/audit/service/config/ApplicationConfiguration.java new file mode 100644 index 0000000..5c8925b --- /dev/null +++ b/log4j-audit/log4j-audit-war/src/main/java/org/apache/logging/log4j/audit/service/config/ApplicationConfiguration.java @@ -0,0 +1,23 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF 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 org.apache.logging.log4j.audit.service.config; + +import org.springframework.context.annotation.Configuration; + +@Configuration +public class ApplicationConfiguration { +} http://git-wip-us.apache.org/repos/asf/logging-log4j-audit/blob/f0884aeb/log4j-audit/log4j-audit-war/src/main/java/org/apache/logging/log4j/audit/service/config/ConfigurationService.java ---------------------------------------------------------------------- diff --git a/log4j-audit/log4j-audit-war/src/main/java/org/apache/logging/log4j/audit/service/config/ConfigurationService.java b/log4j-audit/log4j-audit-war/src/main/java/org/apache/logging/log4j/audit/service/config/ConfigurationService.java new file mode 100644 index 0000000..b3ba06f --- /dev/null +++ b/log4j-audit/log4j-audit-war/src/main/java/org/apache/logging/log4j/audit/service/config/ConfigurationService.java @@ -0,0 +1,33 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF 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 org.apache.logging.log4j.audit.service.config; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +/** + * + */ +@Service +public class ConfigurationService { + @Value("${auditServiceAuthToken:LabAuditService}") + private String auditServiceAuthToken; + + public String getAuditServiceAuthToken() { + return auditServiceAuthToken; + } +} http://git-wip-us.apache.org/repos/asf/logging-log4j-audit/blob/f0884aeb/log4j-audit/log4j-audit-war/src/main/java/org/apache/logging/log4j/audit/service/config/SwaggerConfig.java ---------------------------------------------------------------------- diff --git a/log4j-audit/log4j-audit-war/src/main/java/org/apache/logging/log4j/audit/service/config/SwaggerConfig.java b/log4j-audit/log4j-audit-war/src/main/java/org/apache/logging/log4j/audit/service/config/SwaggerConfig.java new file mode 100644 index 0000000..3a64883 --- /dev/null +++ b/log4j-audit/log4j-audit-war/src/main/java/org/apache/logging/log4j/audit/service/config/SwaggerConfig.java @@ -0,0 +1,63 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF 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 org.apache.logging.log4j.audit.service.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; +import springfox.documentation.builders.ApiInfoBuilder; +import springfox.documentation.builders.PathSelectors; +import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.service.ApiInfo; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spring.web.plugins.Docket; +import springfox.documentation.swagger2.annotations.EnableSwagger2; + +import java.time.LocalDate; +import java.time.LocalDateTime; + +/** + * This will configure Swagger to produce an API for all of our REST endpoints. + */ +@Configuration +@EnableSwagger2 +@EnableWebMvc +public class SwaggerConfig { + @Bean + public Docket api() { + return new Docket(DocumentationType.SWAGGER_2) + .apiInfo(apiInfo()) + .select() + .apis(RequestHandlerSelectors.any()) + .paths(PathSelectors.any()) + .build() + .directModelSubstitute(LocalDate.class, java.sql.Date.class) + .directModelSubstitute(LocalDateTime.class, java.util.Date.class); + } + + private ApiInfo apiInfo() { + return new ApiInfoBuilder() + .title("Audit Service") + .description("Audits events") + .termsOfServiceUrl("http://logging.apache.org") + .contact("Apache Logging") + .license("1.0") + .licenseUrl("http://www.apache.org/licenses/") + .version("1.0") + .build(); + } +} http://git-wip-us.apache.org/repos/asf/logging-log4j-audit/blob/f0884aeb/log4j-audit/log4j-audit-war/src/main/java/org/apache/logging/log4j/audit/service/config/WebAppInitializer.java ---------------------------------------------------------------------- diff --git a/log4j-audit/log4j-audit-war/src/main/java/org/apache/logging/log4j/audit/service/config/WebAppInitializer.java b/log4j-audit/log4j-audit-war/src/main/java/org/apache/logging/log4j/audit/service/config/WebAppInitializer.java new file mode 100644 index 0000000..d7a5388 --- /dev/null +++ b/log4j-audit/log4j-audit-war/src/main/java/org/apache/logging/log4j/audit/service/config/WebAppInitializer.java @@ -0,0 +1,48 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF 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 org.apache.logging.log4j.audit.service.config; + +import org.springframework.web.WebApplicationInitializer; +import org.springframework.web.context.ContextLoaderListener; +import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; +import org.springframework.web.servlet.DispatcherServlet; + +import javax.servlet.ServletContext; +import javax.servlet.ServletException; +import javax.servlet.ServletRegistration; + +public class WebAppInitializer implements WebApplicationInitializer { + private static final String APPLICATION_NAME = "AuditService"; + + @Override + public void onStartup(ServletContext servletContext) throws ServletException { + servletContext.setInitParameter("applicationName", APPLICATION_NAME); + System.setProperty("applicationName", APPLICATION_NAME); + AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext(); + rootContext.setDisplayName(APPLICATION_NAME); + rootContext.register(ApplicationConfiguration.class); + servletContext.addListener(new ContextLoaderListener(rootContext)); + + // MVC Context + AnnotationConfigWebApplicationContext mvcContext = new AnnotationConfigWebApplicationContext(); + mvcContext.register(WebMvcAppContext.class); + + ServletRegistration.Dynamic restServlet = servletContext.addServlet("restServlet", new DispatcherServlet(mvcContext)); + restServlet.setLoadOnStartup(1); + restServlet.addMapping("/*"); + } +} http://git-wip-us.apache.org/repos/asf/logging-log4j-audit/blob/f0884aeb/log4j-audit/log4j-audit-war/src/main/java/org/apache/logging/log4j/audit/service/config/WebMvcAppContext.java ---------------------------------------------------------------------- diff --git a/log4j-audit/log4j-audit-war/src/main/java/org/apache/logging/log4j/audit/service/config/WebMvcAppContext.java b/log4j-audit/log4j-audit-war/src/main/java/org/apache/logging/log4j/audit/service/config/WebMvcAppContext.java new file mode 100644 index 0000000..a5c9e1c --- /dev/null +++ b/log4j-audit/log4j-audit-war/src/main/java/org/apache/logging/log4j/audit/service/config/WebMvcAppContext.java @@ -0,0 +1,176 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF 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 org.apache.logging.log4j.audit.service.config; + +import java.io.IOException; +import java.util.Arrays; +import java.util.List; + +import com.fasterxml.jackson.databind.ObjectMapper; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.audit.AuditLogger; +import org.apache.logging.log4j.audit.catalog.CatalogManager; +import org.apache.logging.log4j.audit.catalog.CatalogManagerImpl; +import org.apache.logging.log4j.audit.service.security.LocalAuthorizationInterceptor; +import org.apache.logging.log4j.audit.util.JsonObjectMapperFactory; +import org.apache.logging.log4j.catalog.api.dao.CatalogDao; +import org.apache.logging.log4j.catalog.api.CatalogReader; +import org.apache.logging.log4j.catalog.api.dao.ClassPathCatalogReader; +import org.apache.logging.log4j.catalog.git.dao.GitCatalogDao; +import org.eclipse.jgit.transport.CredentialsProvider; +import org.eclipse.jgit.transport.UsernamePasswordCredentialsProvider; +import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.MessageSource; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.support.ResourceBundleMessageSource; +import org.springframework.http.client.ClientHttpRequestInterceptor; +import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.web.servlet.ViewResolver; +import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; +import org.springframework.web.servlet.view.InternalResourceViewResolver; +import org.springframework.web.servlet.view.JstlView; + + +@Configuration +@EnableWebMvc +@EnableScheduling +@ComponentScan(basePackages = {"org.apache.logging.log4j.audit.service"}) +//@ImportResource("classpath*:propertySources.xml") +public class WebMvcAppContext extends WebMvcConfigurerAdapter { + + private static final Logger LOGGER = LogManager.getLogger(WebMvcAppContext.class); + + @Autowired + ConfigurationService configurationService; + + @Override + public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { + configurer.enable(); + } + + @Override + public void addResourceHandlers(final ResourceHandlerRegistry registry) { + registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/"); + registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/"); + } + + @Override + public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { + converters.add(jsonMessageConverter()); + } + + + @Override + public void addInterceptors(InterceptorRegistry registry) { + registry.addInterceptor(localAuthorizationInterceptor()) + .addPathPatterns("/api/**") + .excludePathPatterns("/swagger**") + .excludePathPatterns("/v2/api-docs**") + .excludePathPatterns("/configuration/security**") + .excludePathPatterns("/configuration/ui**") + .excludePathPatterns("/webjars/**"); + } + + @Bean + public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator() { + DefaultAdvisorAutoProxyCreator proxyCreator = new DefaultAdvisorAutoProxyCreator(); + proxyCreator.setProxyTargetClass(true); + return proxyCreator; + } + + @Bean + public ViewResolver viewResolver() { + InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); + viewResolver.setViewClass(JstlView.class); + viewResolver.setPrefix("/WEB-INF/views/"); + viewResolver.setSuffix(".jsp"); + return viewResolver; + } + + @Bean + public MessageSource messageSource() { + ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource(); + messageSource.setBasename("messages"); + return messageSource; + } + + @Bean + public LocalAuthorizationInterceptor localAuthorizationInterceptor() { + + return new LocalAuthorizationInterceptor(configurationService.getAuditServiceAuthToken()); + } + + @Bean + public ObjectMapper objectMapper() { + return JsonObjectMapperFactory.createMapper(); + } + + @Bean + public MappingJackson2HttpMessageConverter jsonMessageConverter() { + return new MappingJackson2HttpMessageConverter(objectMapper()); + } + + @Bean + public List<ClientHttpRequestInterceptor> restInterceptors() { + return Arrays.asList(new ClientHttpRequestInterceptor[] {}); + } + + @Bean + public CatalogDao catalogDao(@Value("${gitLocalRepoPath}") String gitLocalRepoPath, @Value("${gitRemoteRepoUri}") String gitRemoteRepoUri) { + GitCatalogDao catalogDao = new GitCatalogDao(); + catalogDao.setLocalRepoPath(gitLocalRepoPath); + catalogDao.setRemoteRepoUri(gitRemoteRepoUri); + CredentialsProvider credentialsProvider = new UsernamePasswordCredentialsProvider("waymirec", "w4ym1r3c"); + catalogDao.setCredentialsProvider(credentialsProvider); + return catalogDao; + } + + @Bean + public CatalogReader catalogReader() { + try { + return new ClassPathCatalogReader(); + } catch (IOException ioe) { + LOGGER.error("Unable to create ClassPathCatalogReader", ioe); + return null; + } + } + + @Bean + public CatalogManager catalogManager() { + return new CatalogManagerImpl(catalogReader()); + } + + @Bean + AuditLogger auditLogger() { + AuditLogger auditLogger = new AuditLogger(); + auditLogger.setCatalogManager(catalogManager()); + return auditLogger; + } + +} http://git-wip-us.apache.org/repos/asf/logging-log4j-audit/blob/f0884aeb/log4j-audit/log4j-audit-war/src/main/java/org/apache/logging/log4j/audit/service/controller/AuditController.java ---------------------------------------------------------------------- diff --git a/log4j-audit/log4j-audit-war/src/main/java/org/apache/logging/log4j/audit/service/controller/AuditController.java b/log4j-audit/log4j-audit-war/src/main/java/org/apache/logging/log4j/audit/service/controller/AuditController.java new file mode 100644 index 0000000..b005956 --- /dev/null +++ b/log4j-audit/log4j-audit-war/src/main/java/org/apache/logging/log4j/audit/service/controller/AuditController.java @@ -0,0 +1,61 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF 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 org.apache.logging.log4j.audit.service.controller; + +import java.util.Map; + +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.ThreadContext; +import org.apache.logging.log4j.audit.AuditLogger; +import org.apache.logging.log4j.audit.service.Versions; +import org.apache.logging.log4j.audit.dto.AuditDto; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.bind.annotation.RestController; + +import io.swagger.annotations.ApiOperation; + +@RestController +public class AuditController { + + private static final Logger LOGGER = LogManager.getLogger(); + + @Autowired + private AuditLogger auditLogger; + + @ApiImplicitParams( {@ApiImplicitParam(dataType = "String", name = "Authorization", paramType = "header")}) + @ApiOperation(value = "Generate an Audit event", notes = "Causes an Audit event to be logged", tags = {"Audit"}) + @PostMapping(value = "/event/log", produces = Versions.V1_0_VALUE) + @ResponseStatus(value = HttpStatus.OK) + public void logEvent(@RequestBody AuditDto auditDto) { + ThreadContext.clearMap(); + try { + for (Map.Entry<String, String> entry : auditDto.getRequestContextMap().entrySet()) { + ThreadContext.put(entry.getKey(), entry.getValue()); + } + auditLogger.logEvent(auditDto.getEventName(), auditDto.getProperties()); + } finally { + ThreadContext.clearMap(); + } + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/logging-log4j-audit/blob/f0884aeb/log4j-audit/log4j-audit-war/src/main/java/org/apache/logging/log4j/audit/service/controller/RestResponseEntityExceptionHandler.java ---------------------------------------------------------------------- diff --git a/log4j-audit/log4j-audit-war/src/main/java/org/apache/logging/log4j/audit/service/controller/RestResponseEntityExceptionHandler.java b/log4j-audit/log4j-audit-war/src/main/java/org/apache/logging/log4j/audit/service/controller/RestResponseEntityExceptionHandler.java new file mode 100644 index 0000000..83eae7e --- /dev/null +++ b/log4j-audit/log4j-audit-war/src/main/java/org/apache/logging/log4j/audit/service/controller/RestResponseEntityExceptionHandler.java @@ -0,0 +1,55 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF 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 org.apache.logging.log4j.audit.service.controller; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.springframework.data.rest.webmvc.support.ExceptionMessage; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; + +@ControllerAdvice +public class RestResponseEntityExceptionHandler extends ResponseEntityExceptionHandler { + private static final Logger LOGGER = LogManager.getLogger(); + + @ExceptionHandler({ Exception.class }) + @ResponseBody + public ResponseEntity<?> handleAnyException(Exception e) { + return errorResponse(e, HttpStatus.INTERNAL_SERVER_ERROR); + } + + protected ResponseEntity<ExceptionMessage> errorResponse(Throwable throwable, + HttpStatus status) { + if (null != throwable) { + LOGGER.error("error caught: " + throwable.getMessage(), throwable); + return response(new ExceptionMessage(throwable), status); + } else { + LOGGER.error("unknown error caught in RESTController, {}", status); + return response(null, status); + } + } + + protected <T> ResponseEntity<T> response(T body, HttpStatus status) { + LOGGER.debug("Responding with a status of {}", status); + return new ResponseEntity<>(body, new HttpHeaders(), status); + } +} http://git-wip-us.apache.org/repos/asf/logging-log4j-audit/blob/f0884aeb/log4j-audit/log4j-audit-war/src/main/java/org/apache/logging/log4j/audit/service/security/LocalAuthorizationInterceptor.java ---------------------------------------------------------------------- diff --git a/log4j-audit/log4j-audit-war/src/main/java/org/apache/logging/log4j/audit/service/security/LocalAuthorizationInterceptor.java b/log4j-audit/log4j-audit-war/src/main/java/org/apache/logging/log4j/audit/service/security/LocalAuthorizationInterceptor.java new file mode 100644 index 0000000..06b5714 --- /dev/null +++ b/log4j-audit/log4j-audit-war/src/main/java/org/apache/logging/log4j/audit/service/security/LocalAuthorizationInterceptor.java @@ -0,0 +1,57 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF 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 org.apache.logging.log4j.audit.service.security; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.springframework.http.HttpStatus; +import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; + +public class LocalAuthorizationInterceptor extends HandlerInterceptorAdapter { + private static final Logger LOGGER = LogManager.getLogger(); + private final String token; + + public LocalAuthorizationInterceptor(String token) { + this.token = token; + } + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) + throws Exception { + LOGGER.traceEntry(); + try { + if (request.getServletPath().startsWith("/swagger")) { + return true; + } + + String authHeader = request.getHeader("Authorization"); + if (authHeader == null || !authHeader.equals(token)) { + LOGGER.error("Authorization value of " + authHeader + " does not match expected value of " + token); + response.sendError(HttpStatus.UNAUTHORIZED.value()); + return false; + } + + return true; + } finally { + LOGGER.traceExit(); + } + + } +} http://git-wip-us.apache.org/repos/asf/logging-log4j-audit/blob/f0884aeb/log4j-audit/log4j-audit-war/src/main/resources/log4j2.xml ---------------------------------------------------------------------- diff --git a/log4j-audit/log4j-audit-war/src/main/resources/log4j2.xml b/log4j-audit/log4j-audit-war/src/main/resources/log4j2.xml new file mode 100644 index 0000000..5abe300 --- /dev/null +++ b/log4j-audit/log4j-audit-war/src/main/resources/log4j2.xml @@ -0,0 +1,80 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ Licensed to the Apache Software Foundation (ASF) under one or more + ~ contributor license agreements. See the NOTICE file distributed with + ~ this work for additional information regarding copyright ownership. + ~ The ASF 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. + --> +<Configuration status="ERROR"> + <properties> + <property name="LOG_DIR">${sys:catalina.home}/logs/AuditService</property> + </properties> + <MarkerFilter marker="FLOW" onMatch="ACCEPT" onMismatch="NEUTRAL"/> + <MarkerFilter marker="Audit" omMatch="ACCEPT" onMisMatch="NEUTRAL"/> + <Appenders> + <Console name="Console" target="SYSTEM_OUT"> + <PatternLayout pattern="%d{ABSOLUTE} %-5level # %class.%method %m%n" /> + </Console> + + <RollingFile name="log4j" fileName="${LOG_DIR}/log4j.txt" filePattern="${LOG_DIR}/archive/log4j.txt.%d{yyyyMMdd_HHmmss}-%i"> + <PatternLayout> + <MarkerPatternSelector defaultPattern="%d [%t] %-5p %X{loginId, userId, ipAddress, corpAcctNumber} %C{1.}.%M:%L - %m%n"> + <PatternMatch key="FLOW" pattern="%d [%t] %-5p %X{loginId, userId, ipAddress, corpAcctNumber} -------- %C{1.}.%M:%L %msg --------%n"/> + </MarkerPatternSelector> + </PatternLayout> + <Policies> + <SizeBasedTriggeringPolicy size="30 MB"/> + </Policies> + <!-- A max of 20 will allow 20 files per second with the date pattern specified on the RollingFile declaration. + Hopefully that is a ridiculous value --> + <DefaultRolloverStrategy min="1" max="20"> + <Delete basePath="${LOG_DIR}/archive"> + <!-- Nested conditions: the inner condition is only evaluated on files for which the outer conditions are true. --> + <IfFileName glob="log4j.txt.*"> + <!-- Only allow 1 GB of files to accumulate --> + <IfAccumulatedFileSize exceeds="1 GB"/> + </IfFileName> + </Delete> + </DefaultRolloverStrategy> + </RollingFile> + <RollingFile name="audit" fileName="${LOG_DIR}/audit.log" filePattern="${LOG_DIR}/archive/audit.log.%d{yyyyMMdd_HHmmss}-%i"> + <RFC5424Layout enterpriseNumber="18060" includeMDC="true" mdcId="RequestContext" appName="Platform" + mdcPrefix="ReqCtx_"/> + <Policies> + <SizeBasedTriggeringPolicy size="30 MB"/> + </Policies> + <!-- A max of 20 will allow 20 files per second with the date pattern specified on the RollingFile declaration. + Hopefully that is a ridiculous value --> + <DefaultRolloverStrategy min="1" max="20"> + <Delete basePath="${LOG_DIR}/archive"> + <!-- Nested conditions: the inner condition is only evaluated on files for which the outer conditions are true. --> + <IfFileName glob="audit.log.*"> + <!-- Only allow 1 GB of files to accumulate --> + <IfAccumulatedFileSize exceeds="1 GB"/> + </IfFileName> + </Delete> + </DefaultRolloverStrategy> + </RollingFile> + </Appenders> + <Loggers> + <Logger name="org.apache.logging.log4j.audit" level="info" additivity="false"> + <AppenderRef ref="log4j"/> + </Logger> + <Logger name="AuditLogger" level="trace" additivty="false"> + <AppenderRef ref="audit"/> + </Logger> + <Root level="warn"> + <AppenderRef ref="log4j" /> + </Root> + </Loggers> +</Configuration> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/logging-log4j-audit/blob/f0884aeb/log4j-audit/pom.xml ---------------------------------------------------------------------- diff --git a/log4j-audit/pom.xml b/log4j-audit/pom.xml new file mode 100644 index 0000000..61d8438 --- /dev/null +++ b/log4j-audit/pom.xml @@ -0,0 +1,33 @@ +<?xml version="1.0"?> +<!-- + ~ Licensed to the Apache Software Foundation (ASF) under one or more + ~ contributor license agreements. See the NOTICE file distributed with + ~ this work for additional information regarding copyright ownership. + ~ The ASF 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. + --> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>org.apache.logging.log4j</groupId> + <artifactId>log4j-audit-parent</artifactId> + <version>1.0.0-SNAPSHOT</version> + </parent> + <artifactId>log4j-audit</artifactId> + <packaging>pom</packaging> + <name>Log4j Audit</name> + <modules> + <module>log4j-audit-api</module> + <module>log4j-audit-war</module> + <module>log4j-audit-maven-plugin</module> + </modules> +</project> http://git-wip-us.apache.org/repos/asf/logging-log4j-audit/blob/f0884aeb/log4j-catalog/log4j-catalog-api/pom.xml ---------------------------------------------------------------------- diff --git a/log4j-catalog/log4j-catalog-api/pom.xml b/log4j-catalog/log4j-catalog-api/pom.xml new file mode 100644 index 0000000..9660bca --- /dev/null +++ b/log4j-catalog/log4j-catalog-api/pom.xml @@ -0,0 +1,105 @@ +<?xml version="1.0"?> +<!-- + ~ Licensed to the Apache Software Foundation (ASF) under one or more + ~ contributor license agreements. See the NOTICE file distributed with + ~ this work for additional information regarding copyright ownership. + ~ The ASF 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. + --> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>org.apache.logging.log4j</groupId> + <artifactId>log4j-catalog</artifactId> + <version>1.0.0-SNAPSHOT</version> + </parent> + <artifactId>log4j-catalog-api</artifactId> + <name>Log4j Catalog API</name> + <url>http://maven.apache.org</url> + <properties> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + </properties> + <dependencies> + <dependency> + <groupId>io.springfox</groupId> + <artifactId>springfox-swagger2</artifactId> + <exclusions> + <exclusion> + <groupId>org.aspectj</groupId> + <artifactId>aspectjrt</artifactId> + </exclusion> + </exclusions> + </dependency> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>com.fasterxml.jackson.core</groupId> + <artifactId>jackson-core</artifactId> + </dependency> + <dependency> + <groupId>com.fasterxml.jackson.core</groupId> + <artifactId>jackson-databind</artifactId> + </dependency> + <dependency> + <groupId>com.fasterxml.jackson.core</groupId> + <artifactId>jackson-annotations</artifactId> + </dependency> + <dependency> + <groupId>com.fasterxml.jackson.datatype</groupId> + <artifactId>jackson-datatype-jsr310</artifactId> + </dependency> + <dependency> + <groupId>com.fasterxml</groupId> + <artifactId>classmate</artifactId> + </dependency> + <dependency> + <groupId>org.apache.commons</groupId> + <artifactId>commons-lang3</artifactId> + </dependency> + <dependency> + <groupId>org.apache.logging.log4j</groupId> + <artifactId>log4j-api</artifactId> + </dependency> + <dependency> + <groupId>org.apache.logging.log4j</groupId> + <artifactId>log4j-core</artifactId> + <optional>true</optional> + </dependency> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-context</artifactId> + </dependency> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-context-support</artifactId> + </dependency> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-beans</artifactId> + </dependency> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-core</artifactId> + </dependency> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-aop</artifactId> + </dependency> + <dependency> + <groupId>javax</groupId> + <artifactId>javaee-api</artifactId> + </dependency> + </dependencies> +</project> http://git-wip-us.apache.org/repos/asf/logging-log4j-audit/blob/f0884aeb/log4j-catalog/log4j-catalog-api/src/main/java/org/apache/logging/log4j/catalog/api/Attribute.java ---------------------------------------------------------------------- diff --git a/log4j-catalog/log4j-catalog-api/src/main/java/org/apache/logging/log4j/catalog/api/Attribute.java b/log4j-catalog/log4j-catalog-api/src/main/java/org/apache/logging/log4j/catalog/api/Attribute.java new file mode 100644 index 0000000..cc5fddf --- /dev/null +++ b/log4j-catalog/log4j-catalog-api/src/main/java/org/apache/logging/log4j/catalog/api/Attribute.java @@ -0,0 +1,315 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF 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 org.apache.logging.log4j.catalog.api; + +import java.io.Serializable; +import java.util.Set; + +import com.fasterxml.jackson.annotation.JsonIgnore; + +/** + * A Catalog AttributeDto. + */ +public class Attribute implements Serializable { + + private static final long serialVersionUID = -756109102178482698L; + private Long id; + private String name; + private String displayName; + private String description; + private DataType dataType; + private boolean indexed; + private boolean sortable; + private boolean required; + private boolean requestContext; + private Set<String> examples; + private Set<String> aliases; + private Set<Constraint> constraints; + @JsonIgnore + private String catalogId; + + /** + * Set default values. + */ + public Attribute() { + catalogId = "DEFAULT"; + } + + /** + * Return the attribute's id. + * @return the Attribute's id. + */ + public Long getId() { + return id; + } + + /** + * Set the Attribute's id. + * @param id the Attribute's id. + */ + public void setId(Long id) { + this.id = id; + } + + /** + * Returns the name of the AttributeDto. + */ + public String getName() { + return name; + } + + /** + * Set the name of the AttributeDto. + * @param name the name of the attribute. + * @return this Attribute. + */ + public Attribute setName(String name) { + this.name = name; + return this; + } + + /** + * Returns the name used when displaying the attribute. + * @return the display name of the attribute. + */ + public String getDisplayName() { + return displayName; + } + + /** + * Set the name to be displayed for this attribute. + * @param name the display name for the attribute. + * @return this Attribute. + */ + public Attribute setDisplayName(String name) { + this.displayName = name; + return this; + } + + /** + * Returns the description of the attribute. + * @return the description of the attribute. + */ + public String getDescription() { + return description; + } + + /** + * Set the description of the attribute. + * @param description the description of the attribute. + * @return this Attribute. + */ + public Attribute setDescription(String description) { + this.description = description; + return this; + } + + /** + * Returns the data type of this attribute. + * @return the data type of the attribute. + */ + public DataType getDataType() { + return dataType; + } + + /** + * Set the data type of the attribute. + * @param dataType the data type of the attribute. + * @return this Attribute. + */ + public Attribute setDataType(DataType dataType) { + this.dataType = dataType; + return this; + } + + /** + * Identifies whether this attribute is an index. + * @return true if this attribute is an index, false otherwise. + */ + public boolean isIndexed() { + return indexed; + } + + /** + * Set whether this attribute is an index. + * @param indexed true if this attribute is an index, false otherwise. + * @return this Attribute. + */ + public Attribute setIndexed(boolean indexed) { + this.indexed = indexed; + return this; + } + + /** + * Returns whether a sort may be performed on this attribute. + * @return true if a sort can be performed on this attribute, false otherwise. + */ + public boolean isSortable() { + return sortable; + } + + /** + * Set whether a sort may be performed on this attribute. + * @param sortable true if a sort may be performed on this attribute, false otherwise. + * @return this Attribute. + */ + public Attribute setSortable(boolean sortable) { + this.sortable = sortable; + return this; + } + + /** + * Returns whether this attribute is required. + * @return true if this attribute is required, false otherwise. + */ + public boolean isRequired() { + return required; + } + + /** + * Set whether this attribute is required. + * @param required true if this attribute is required, false otherwise. + * @return this Attribute. + */ + public Attribute setRequired(boolean required) { + this.required = required; + return this; + } + + /** + * Returns whether this attribute is part of the RequestContext. + * @return true if this attribute is part of the RequestContext, false otherwise. + */ + public boolean isRequestContext() { + return requestContext; + } + + /** + * Set whether this attribute is part of the RequestContext. + * @param isRequestContext true if this attribute is part of the RequestContext, false otherwise. + * @return this Attribute. + */ + public Attribute setRequestContext(boolean isRequestContext) { + this.requestContext = isRequestContext; + return this; + } + + /** + * Returns the List of example Strings. + * @return the List of example Strings. + */ + public Set<String> getExamples() { + return examples; + } + + /** + * Sets the List of example Strings. + * @param examples the List of example Strings. + * @return this Attribute. + */ + public Attribute setExamples(Set<String> examples) { + this.examples = examples; + return this; + } + + /** + * Returns the List of alias Strings. + * @return the List of alias Strings. + */ + public Set<String> getAliases() { + return aliases; + } + + /** + * Sets List of alias Strings. + * @param aliases The List of alias Strings. + * @return this Attribute. + */ + public Attribute setAliases(Set<String> aliases) { + this.aliases = aliases; + return this; + } + + /** + * Returns the constraints on this attribute. + * @return The list of constraints. + */ + public Set<Constraint> getConstraints() { + return constraints; + } + + /** + * Sets the Constraints onf the attribute. + * @param constraints The List of constraints. + * @return This Attribute. + */ + public Attribute setConstraints(Set<Constraint> constraints) { + this.constraints = constraints; + return this; + } + + /** + * Get the Catalog Id this attribute is associated with. + * @return the catalog id or null. + */ + public String getCatalogId() { + return catalogId; + } + + /** + * Set the catalog id this attribute is associated with. + * @param catalogId The catalog id or null. + */ + public void setCatalogId(String catalogId) { + this.catalogId = catalogId; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder("{"); + sb.append("id=\"").append(id).append("\" "); + sb.append("catalog id=\"").append(catalogId).append("\" "); + sb.append("name=\"").append(name).append("\" "); + sb.append("displayName=\"").append(displayName).append("\" "); + sb.append("description=\"").append(description).append("\" "); + sb.append("dataType=\""); + if (dataType == null) { + sb.append("null"); + } else { + sb.append(dataType.getTypeName()); + } + sb.append("\" "); + sb.append("indexed=\"").append(indexed).append("\" "); + sb.append("sortable=\"").append(sortable).append("\" "); + sb.append("required=\"").append(required).append("\" "); + sb.append("requestContext=\"").append(requestContext).append("\" "); + if (constraints != null) { + sb.append("constraints["); + boolean first = true; + for (Constraint constraint : constraints) { + if (!first) { + sb.append(" "); + } + sb.append("name=\"").append(constraint.getConstraintType().getName()).append("\""); + sb.append("value=\"").append(constraint.getValue()).append("\""); + } + sb.append("]"); + } + sb.append("}"); + return sb.toString(); + } +} http://git-wip-us.apache.org/repos/asf/logging-log4j-audit/blob/f0884aeb/log4j-catalog/log4j-catalog-api/src/main/java/org/apache/logging/log4j/catalog/api/CatalogData.java ---------------------------------------------------------------------- diff --git a/log4j-catalog/log4j-catalog-api/src/main/java/org/apache/logging/log4j/catalog/api/CatalogData.java b/log4j-catalog/log4j-catalog-api/src/main/java/org/apache/logging/log4j/catalog/api/CatalogData.java new file mode 100644 index 0000000..76ce076 --- /dev/null +++ b/log4j-catalog/log4j-catalog-api/src/main/java/org/apache/logging/log4j/catalog/api/CatalogData.java @@ -0,0 +1,115 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF 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 org.apache.logging.log4j.catalog.api; + +import java.io.Serializable; +import java.util.List; + +/** + * Container for the data in the catalog. + */ +public class CatalogData implements Serializable { + + private static final long serialVersionUID = -6772374346223539136L; + private List<Product> products; + private List<Category> categories; + private List<Event> events; + private List<Attribute> attributes; + + /** + * Returns the Products associated with the Catalog. + * @return the List of Products. + */ + public List<Product> getProducts() { + return products; + } + + /** + * Sets the Products represented in the Catalog. + * + * @param products The List of Products. + */ + public void setProducts(List<Product> products) { + this.products = products; + } + + /** + * Returns the List of Categories. + * @return the List of CategoryDto objects or null. + */ + public List<Category> getCategories() { + return categories; + } + + /** + * Sets List of CategoryDto objects. + * @param categories the List of Categories or null. + */ + public void setCategories(List<Category> categories) { + this.categories = categories; + } + + /** + * Returns the List of EventDto objects. + * @return the List of Events. + */ + public List<Event> getEvents() { + return events; + } + + /** + * Sets the List of EventDto objects. + * @param events the List of Events or null. + */ + public void setEvents(List<Event> events) { + this.events = events; + } + + /** + * Returns the List of AttributeDto objects. + * + * @return the List of AttributeDto objects or null. + */ + public List<Attribute> getAttributes() { + return attributes; + } + + /** + * Sets the List of AttributeDto objects. + * + * @param attributes the List of Attributes. + */ + public void setAttributes(List<Attribute> attributes) { + this.attributes = attributes; + } + + /** + * The supported EventLogger types. + * @return the List of EventLogger type names. + */ + /* public List<String> getEventLoggerTypes() { + return eventLoggerTypes; + } */ + + /** + * Set the List of EventLogger types. + * @param eventTypes the EventLogger types. + */ + /* public void setEventLoggerTypes(List<String> eventTypes) { + this.eventLoggerTypes = eventTypes; + } */ +} http://git-wip-us.apache.org/repos/asf/logging-log4j-audit/blob/f0884aeb/log4j-catalog/log4j-catalog-api/src/main/java/org/apache/logging/log4j/catalog/api/CatalogReader.java ---------------------------------------------------------------------- diff --git a/log4j-catalog/log4j-catalog-api/src/main/java/org/apache/logging/log4j/catalog/api/CatalogReader.java b/log4j-catalog/log4j-catalog-api/src/main/java/org/apache/logging/log4j/catalog/api/CatalogReader.java new file mode 100644 index 0000000..91c75ed --- /dev/null +++ b/log4j-catalog/log4j-catalog-api/src/main/java/org/apache/logging/log4j/catalog/api/CatalogReader.java @@ -0,0 +1,72 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF 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 org.apache.logging.log4j.catalog.api; + +import java.util.Map; + +/** + * + */ +public interface CatalogReader { + + /** + * Returns the Catalog object. + * @return the Catalog. + */ + CatalogData read(); + + /** + * Returns a String representation of the Catalog. The representation format is implementation specific. + * @return a String containing the Catalog data. + */ + String readCatalog(); + + /** + * Return all the Attributes as a Map. + * @return A map of the attributes where the key is the Attribute's name. + */ + Map<String, Attribute> getAttributes(); + + /** + * Retrieves an Attribute. + * @param name The attribute name. + * @return The Attribute or null if no attribute with the specified name exists. + */ + Attribute getAttribute(String name); + + /** + * Retrieves a Category. + * not called. + * @param name The category name. + * @return The Category. + */ + Category getCategory(String name); + + /** + * + * @param name + * @return + */ + Event getEvent(String name); + + /** + * + * @param name + * @return + */ + Product getProduct(String name); +} http://git-wip-us.apache.org/repos/asf/logging-log4j-audit/blob/f0884aeb/log4j-catalog/log4j-catalog-api/src/main/java/org/apache/logging/log4j/catalog/api/CatalogWriter.java ---------------------------------------------------------------------- diff --git a/log4j-catalog/log4j-catalog-api/src/main/java/org/apache/logging/log4j/catalog/api/CatalogWriter.java b/log4j-catalog/log4j-catalog-api/src/main/java/org/apache/logging/log4j/catalog/api/CatalogWriter.java new file mode 100644 index 0000000..79a206f --- /dev/null +++ b/log4j-catalog/log4j-catalog-api/src/main/java/org/apache/logging/log4j/catalog/api/CatalogWriter.java @@ -0,0 +1,20 @@ +/* + * Copyright 2001-2005 The Apache Software Foundation. + * + * Licensed 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 org.apache.logging.log4j.catalog.api; + +public interface CatalogWriter { + void write(CatalogData catalogData); +} http://git-wip-us.apache.org/repos/asf/logging-log4j-audit/blob/f0884aeb/log4j-catalog/log4j-catalog-api/src/main/java/org/apache/logging/log4j/catalog/api/Category.java ---------------------------------------------------------------------- diff --git a/log4j-catalog/log4j-catalog-api/src/main/java/org/apache/logging/log4j/catalog/api/Category.java b/log4j-catalog/log4j-catalog-api/src/main/java/org/apache/logging/log4j/catalog/api/Category.java new file mode 100644 index 0000000..5f26af9 --- /dev/null +++ b/log4j-catalog/log4j-catalog-api/src/main/java/org/apache/logging/log4j/catalog/api/Category.java @@ -0,0 +1,154 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF 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 org.apache.logging.log4j.catalog.api; + +import java.io.Serializable; +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonIgnore; + +/** + * A Catalog Category. + */ +public class Category implements Serializable { + + private static final long serialVersionUID = 5776108323599073407L; + private Long id; + private String name; + private String displayName; + private String description; + @JsonIgnore + private String catalogId; + private List<String> events; + + /** + * Set default values; + */ + public Category() { + catalogId = "DEFAULT"; + } + + /** + * Return the id of the Category. + * @return the Category's id. + */ + public Long getId() { + return id; + } + + /** + * Set the id of the Category. + * @param id the id of the Category. + */ + public void setId(Long id) { + this.id = id; + } + + /** + * Gets the value of the name property. + * + * @return possible object is + * {@link String } + */ + public String getName() { + return name; + } + + /** + * Sets the value of the name property. + * + * @param value allowed object is + * {@link String } + * @return this Category. + */ + public Category setName(String value) { + this.name = value; + return this; + } + + /** + * Returns the name used when displaying the category. + * @return the display name of the category. + */ + public String getDisplayName() { + return displayName; + } + + /** + * Set the name to be displayed for this category. + * @param name the display name for the category. + * @return this Category. + */ + public Category setDisplayName(String name) { + this.displayName = name; + return this; + } + + /** + * Gets the value of the description property. + * + * @return possible object is + * {@link String } + */ + public String getDescription() { + return description; + } + + /** + * Sets the value of the description property. + * + * @param value The description of the category. + * @return this Category. + */ + public Category setDescription(String value) { + this.description = value; + return this; + } + + /** + * Get the Catalog Id this Category is associated with. + * @return the catalog id or null. + */ + public String getCatalogId() { + return catalogId; + } + + /** + * Set the catalog id this Category is associated with. + * @param catalogId The catalog id or null. + */ + public void setCatalogId(String catalogId) { + this.catalogId = catalogId; + } + + /** + * Return the List of Event names. + * @return the List of Event names or null. + */ + public List<String> getEvents() { + return events; + } + + /** + * Sets the List of Event names. + * @param events the List of Events. + */ + public Category setEvents(List<String> events) { + this.events = events; + return this; + } +} http://git-wip-us.apache.org/repos/asf/logging-log4j-audit/blob/f0884aeb/log4j-catalog/log4j-catalog-api/src/main/java/org/apache/logging/log4j/catalog/api/Constraint.java ---------------------------------------------------------------------- diff --git a/log4j-catalog/log4j-catalog-api/src/main/java/org/apache/logging/log4j/catalog/api/Constraint.java b/log4j-catalog/log4j-catalog-api/src/main/java/org/apache/logging/log4j/catalog/api/Constraint.java new file mode 100644 index 0000000..775dcae --- /dev/null +++ b/log4j-catalog/log4j-catalog-api/src/main/java/org/apache/logging/log4j/catalog/api/Constraint.java @@ -0,0 +1,69 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF 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 org.apache.logging.log4j.catalog.api; + +import java.io.Serializable; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import org.apache.logging.log4j.catalog.api.ConstraintType; + +/** + * + */ +public class Constraint implements Serializable { + + private static final long serialVersionUID = -6880181600556259104L; + + @JsonIgnore + private Long id; + + /** + * The type of constraint to be applied. + */ + private ConstraintType constraintType; + + /** + * The data value to be used to apply this constraint. + */ + private String value; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public ConstraintType getConstraintType() { + return constraintType; + } + + public Constraint setConstraintType(ConstraintType constraintType) { + this.constraintType = constraintType; + return this; + } + + public String getValue() { + return value; + } + + public Constraint setValue(String value) { + this.value = value; + return this; + } +} http://git-wip-us.apache.org/repos/asf/logging-log4j-audit/blob/f0884aeb/log4j-catalog/log4j-catalog-api/src/main/java/org/apache/logging/log4j/catalog/api/ConstraintType.java ---------------------------------------------------------------------- diff --git a/log4j-catalog/log4j-catalog-api/src/main/java/org/apache/logging/log4j/catalog/api/ConstraintType.java b/log4j-catalog/log4j-catalog-api/src/main/java/org/apache/logging/log4j/catalog/api/ConstraintType.java new file mode 100644 index 0000000..962afd1 --- /dev/null +++ b/log4j-catalog/log4j-catalog-api/src/main/java/org/apache/logging/log4j/catalog/api/ConstraintType.java @@ -0,0 +1,45 @@ +/* + * Copyright 2001-2005 The Apache Software Foundation. + * + * Licensed 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 org.apache.logging.log4j.catalog.api; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import org.apache.logging.log4j.catalog.api.exception.NameNotFoundException; +import org.apache.logging.log4j.catalog.api.plugins.ConstraintTypeDeserializer; +import org.apache.logging.log4j.catalog.api.plugins.ConstraintTypeSerializer; +import org.apache.logging.log4j.core.config.plugins.Plugin; + +/** + * + */ +@JsonDeserialize(using = ConstraintTypeDeserializer.class) +@JsonSerialize(using = ConstraintTypeSerializer.class) +public interface ConstraintType { + + public static final String CATEGORY = "Constraint"; + + default String getName() { + Plugin annotation = this.getClass().getAnnotation(Plugin.class); + if (annotation == null || annotation.name().length() == 0) { + throw new NameNotFoundException("No name could be found for plugin class " + this.getClass().getName()); + } + + return annotation.name(); + } + + void validate(boolean isRequestContext, String name, String value, String constraintValue, StringBuilder error); + +} http://git-wip-us.apache.org/repos/asf/logging-log4j-audit/blob/f0884aeb/log4j-catalog/log4j-catalog-api/src/main/java/org/apache/logging/log4j/catalog/api/DataType.java ---------------------------------------------------------------------- diff --git a/log4j-catalog/log4j-catalog-api/src/main/java/org/apache/logging/log4j/catalog/api/DataType.java b/log4j-catalog/log4j-catalog-api/src/main/java/org/apache/logging/log4j/catalog/api/DataType.java new file mode 100644 index 0000000..b37ec94 --- /dev/null +++ b/log4j-catalog/log4j-catalog-api/src/main/java/org/apache/logging/log4j/catalog/api/DataType.java @@ -0,0 +1,60 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF 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 org.apache.logging.log4j.catalog.api; + +/** + * Mapping of attribute data types. + */ +public enum DataType { + + STRING("String", null), + BIG_DECIMAL("BigDecimal", "java.math.BigDecimal"), + DOUBLE("double", null), + FLOAT("float", null), + INT("int", null), + LONG("long", null), + BOOLEAN("boolean", null), + LIST("List<String>", "java.util.List"), + MAP("Map<String, String>", "java.util.Map"); + + private final String typeName; + + public final String importClass; + + DataType(String typeName, String importClass) { + this.typeName = typeName; + this.importClass = importClass; + } + + public String getTypeName() { + return typeName; + } + + public String getImportClass() { + return importClass; + } + + public static DataType fromName(String typeName) { + for (DataType dataType: DataType.values()) { + if (dataType.typeName.equalsIgnoreCase(typeName)) { + return dataType; + } + } + throw new IllegalArgumentException("Unknown data type: " + typeName); + } + +}
