diff --git a/.fossa.yml b/.fossa.yml index 954498fc123efa63377e1e1c2dadb6aadb71362d..697328e85ae794e8bd77db1a7b51214dd5949913 100644 --- a/.fossa.yml +++ b/.fossa.yml @@ -32,3 +32,7 @@ analyze: type: mvn target: provider/notification-aws/pom.xml path: . + - name: notification-reference + type: mvn + target: provider/notification-reference/pom.xml + path: . diff --git a/NOTICE b/NOTICE index 27fecebdc51df0ce9c094a95e362c230474322e6..01538693baf586da48b5248f4ac3cb213dad33da 100644 --- a/NOTICE +++ b/NOTICE @@ -2,390 +2,770 @@ Generated by fossa-cli (https://github.com/fossas/fossa-cli). This software includes the following software and licenses: +======================================================================== +Android-Sdk +======================================================================== +The following software have components provided under the terms of this license: + +- Android SDK (from https://www.android.com/) + ======================================================================== Apache-2.0 ======================================================================== The following software have components provided under the terms of this license: -- aiobotocore (from https://github.com/aio-libs/aiobotocore) -- aiohttp (from https://github.com/aio-libs/aiohttp/) -- async-timeout (from https://github.com/aio-libs/async_timeout/) -- boto3 (from https://github.com/boto/boto3) -- botocore (from https://github.com/boto/botocore) -- coverage (from https://github.com/nedbat/coveragepy) -- cryptography (from https://github.com/pyca/cryptography) -- google-api-core (from https://github.com/GoogleCloudPlatform/google-cloud-python) -- google-auth (from https://github.com/googleapis/google-auth-library-python) -- google-auth-oauthlib (from https://github.com/GoogleCloudPlatform/google-auth-library-python-oauthlib) -- google-cloud-core (from https://github.com/GoogleCloudPlatform/google-cloud-python) -- google-cloud-monitoring (from https://github.com/GoogleCloudPlatform/google-cloud-python) -- google-cloud-trace (from https://github.com/googleapis/googleapis) -- googleapis-common-protos (from https://github.com/googleapis/googleapis) -- grpcio (from https://grpc.io) -- importlib-metadata (from http://importlib-metadata.readthedocs.io/) -- jsonpath-ng (from https://github.com/h2non/jsonpath-ng) -- msgpack (from http://msgpack.org/) -- multidict (from https://github.com/aio-libs/multidict/) -- numpy (from http://www.numpy.org) -- openapi-spec-validator (from https://github.com/p1c2u/openapi-spec-validator) -- opencensus (from https://github.com/census-instrumentation/opencensus-python) -- opencensus-context (from https://github.com/census-instrumentation/opencensus-python/tree/master/context/opencensus-context) -- opencensus-ext-azure (from https://github.com/census-instrumentation/opencensus-python/tree/master/contrib/opencensus-ext-azure) -- opencensus-ext-logging (from https://github.com/census-instrumentation/opencensus-python/tree/master/contrib/opencensus-ext-logging) -- opencensus-ext-ocagent (from https://github.com/census-instrumentation/opencensus-python/tree/master/contrib/opencensus-ext-ocagent) -- opencensus-ext-stackdriver (from https://github.com/census-instrumentation/opencensus-python/tree/master/contrib/opencensus-ext-stackdriver) -- opencensus-proto (from https://github.com/census-instrumentation/opencensus-proto/tree/master/gen-python) -- packaging (from https://github.com/pypa/packaging) -- pandas (from http://pandas.pydata.org) -- pep517 (from https://github.com/takluyver/pep517) -- pyarrow (from https://arrow.apache.org/) -- pytest-asyncio (from https://github.com/pytest-dev/pytest-asyncio) -- pytest-dependency (from https://github.com/RKrahl/pytest-dependency) -- python-dateutil (from https://dateutil.readthedocs.org) -- python-multipart (from http://github.com/andrew-d/python-multipart) -- requests (from https://requests.readthedocs.io) -- rfc3986 (from https://rfc3986.readthedocs.org) -- rsa (from https://stuvel.eu/rsa) -- s3transfer (from https://github.com/boto/s3transfer) -- sniffio (from https://github.com/python-trio/sniffio) -- sortedcontainers (from http://www.grantjenks.com/docs/sortedcontainers/) -- structlog (from http://www.structlog.org/) -- tblib (from https://github.com/ionelmc/python-tblib) -- toposort (from https://bitbucket.org/ericvsmith/toposort) -- tornado (from http://www.tornadoweb.org/) -- yarl (from https://github.com/aio-libs/yarl/) +- ASM based accessors helper used by json-smart (from ) +- AWS Java SDK for AWS Elemental MediaLive (from https://aws.amazon.com/sdkforjava) +- AWS Java SDK for AWS KMS (from https://aws.amazon.com/sdkforjava) +- AWS Java SDK for AWS Lambda (from https://aws.amazon.com/sdkforjava) +- AWS Java SDK for AWS STS (from https://aws.amazon.com/sdkforjava) +- AWS Java SDK for AWS Secrets Manager (from https://aws.amazon.com/sdkforjava) +- AWS Java SDK for Amazon CloudWatch Logs (from https://aws.amazon.com/sdkforjava) +- AWS Java SDK for Amazon Cognito Identity Provider Service (from https://aws.amazon.com/sdkforjava) +- AWS Java SDK for Amazon DynamoDB (from https://aws.amazon.com/sdkforjava) +- AWS Java SDK for Amazon S3 (from https://aws.amazon.com/sdkforjava) +- AWS Java SDK for Amazon SNS (from https://aws.amazon.com/sdkforjava) +- AWS Java SDK for Amazon SQS (from https://aws.amazon.com/sdkforjava) +- AWS Java SDK for the AWS Simple Systems Management (SSM) Service (from https://aws.amazon.com/sdkforjava) +- AWS SDK for Java - Core (from https://aws.amazon.com/sdkforjava) +- Adapter: RxJava (from https://repo1.maven.org/maven2/com/squareup/retrofit2/adapter-rxjava) +- Apache Commons Codec (from https://commons.apache.org/proper/commons-codec/) +- Apache Commons Collections (from http://commons.apache.org/proper/commons-collections/) +- Apache Commons Lang (from http://commons.apache.org/proper/commons-lang/) +- Apache HttpAsyncClient (from http://hc.apache.org/httpcomponents-asyncclient) +- Apache HttpClient Cache (from http://hc.apache.org/httpcomponents-client) +- Apache HttpCore (from http://hc.apache.org/httpcomponents-core-ga) +- Apache HttpCore NIO (from http://hc.apache.org/httpcomponents-core-ga) +- Apache Log4j API (from https://repo1.maven.org/maven2/org/apache/logging/log4j/log4j-api) +- Apache Log4j Core (from https://repo1.maven.org/maven2/org/apache/logging/log4j/log4j-core) +- Apache Log4j JUL Adapter (from https://repo1.maven.org/maven2/org/apache/logging/log4j/log4j-jul) +- Apache Log4j SLF4J Binding (from https://repo1.maven.org/maven2/org/apache/logging/log4j/log4j-slf4j-impl) +- Apache Log4j to SLF4J Adapter (from https://repo1.maven.org/maven2/org/apache/logging/log4j/log4j-to-slf4j) +- Apache Lucene (module: backward-codecs) (from https://lucene.apache.org/) +- AssertJ fluent assertions (from https://repo1.maven.org/maven2/org/assertj/assertj-core) +- Asynchronous Http Client (from https://repo1.maven.org/maven2/org/asynchttpclient/async-http-client) +- Asynchronous Http Client Netty Utils (from https://repo1.maven.org/maven2/org/asynchttpclient/async-http-client-netty-utils) +- AutoValue Annotations (from https://repo1.maven.org/maven2/com/google/auto/value/auto-value-annotations) +- Azure Spring Boot Starter for Azure AD Spring Security Integration (from https://github.com/Azure/azure-sdk-for-java) +- Bean Validation API (from http://beanvalidation.org) +- Brave Instrumentation: Http Adapters (from https://repo1.maven.org/maven2/io/zipkin/brave/brave-instrumentation-http) +- Brave instrumentation for Reactor Netty HTTP (from https://github.com/reactor/reactor-netty) +- Byte Buddy (without dependencies) (from ) +- Byte Buddy agent (from https://repo1.maven.org/maven2/net/bytebuddy/byte-buddy-agent) +- ClassMate (from http://github.com/cowtowncoder/java-classmate) +- Cloud Key Management Service (KMS) API v1-rev88-1.25.0 (from https://repo1.maven.org/maven2/com/google/apis/google-api-services-cloudkms) +- Cloud Storage JSON API v1-rev20181109-1.28.0 (from https://repo1.maven.org/maven2/com/google/apis/google-api-services-storage) +- Commons Logging (from http://commons.apache.org/logging/) +- Commons Logging (from http://commons.apache.org/logging/) +- Converter: Jackson (from https://github.com/square/retrofit) +- Core Reactor components (from https://github.com/reactor/reactor) +- Core functionality for the Reactor Netty library (from https://github.com/reactor/reactor-netty) +- Elastic JNA Distribution (from https://github.com/java-native-access/jna) +- Expression Language 3.0 (from http://uel.java.net) +- FindBugs-jsr305 (from http://findbugs.sourceforge.net/) +- GSON extensions to the Google HTTP Client Library for Java. (from https://repo1.maven.org/maven2/com/google/http-client/google-http-client-gson) +- Google APIs Client Library for Java (from https://repo1.maven.org/maven2/com/google/api-client/google-api-client) +- Google App Engine extensions to the Google HTTP Client Library for Java. (from https://repo1.maven.org/maven2/com/google/http-client/google-http-client-appengine) +- Google Cloud Core (from https://github.com/googleapis/java-core) +- Google Cloud Core HTTP (from https://github.com/googleapis/java-core) +- Google Cloud Core gRPC (from https://github.com/googleapis/java-core) +- Google Cloud Datastore (from https://github.com/googleapis/java-datastore) +- Google Cloud IAM Service Account Credentials (from https://github.com/googleapis/java-iamcredentials) +- Google Cloud Logging (from https://github.com/googleapis/java-logging) +- Google Cloud Pub/Sub (from https://github.com/googleapis/java-pubsub) +- Google Cloud Storage (from https://github.com/googleapis/google-cloud-java/tree/master/google-cloud-clients/google-cloud-storage) +- Google HTTP Client Library for Java (from https://repo1.maven.org/maven2/com/google/http-client/google-http-client) +- Google HTTP Client Library for Java (from https://repo1.maven.org/maven2/com/google/http-client/google-http-client) +- Google Identity and Access Management (IAM) API v1-rev206-1.22.0 (from https://repo1.maven.org/maven2/com/google/apis/google-api-services-iam) +- Google Identity and Access Management (IAM) API v1-rev206-1.22.0 (from https://repo1.maven.org/maven2/com/google/apis/google-api-services-iam) +- Google OAuth Client Library for Java (from https://repo1.maven.org/maven2/com/google/oauth-client/google-oauth-client) +- Gson (from http://code.google.com/p/google-gson/) +- Gson (from http://code.google.com/p/google-gson/) +- Guava InternalFutureFailureAccess and InternalFutures (from https://repo1.maven.org/maven2/com/google/guava/failureaccess) +- Guava InternalFutureFailureAccess and InternalFutures (from https://repo1.maven.org/maven2/com/google/guava/failureaccess) +- Guava: Google Core Libraries for Java (from https://github.com/google/guava) +- Guava: Google Core Libraries for Java (from https://github.com/google/guava) +- Guava: Google Core Libraries for Java (from https://github.com/google/guava) +- HPPC Collections (from https://repo1.maven.org/maven2/com/carrotsearch/hppc) +- HTTP functionality for the Reactor Netty library (from https://github.com/reactor/reactor-netty) +- Hibernate Validator Engine (from https://repo1.maven.org/maven2/org/hibernate/validator/hibernate-validator) +- Hibernate Validator Engine (from https://repo1.maven.org/maven2/org/hibernate/validator/hibernate-validator) +- HttpClient (from http://hc.apache.org/httpcomponents-client) +- J2ObjC Annotations (from https://github.com/google/j2objc/) +- J2ObjC Annotations (from https://github.com/google/j2objc/) +- JBoss Logging 3 (from http://www.jboss.org) +- JBoss Threads (from https://repo1.maven.org/maven2/org/jboss/threads/jboss-threads) +- JCIP Annotations under Apache License (from http://stephenc.github.com/jcip-annotations) +- JMES Path Query library (from https://aws.amazon.com/sdkforjava) +- JSON Small and Fast Parser (from https://urielch.github.io/) +- JSON Web Token support for the JVM (from https://repo1.maven.org/maven2/io/jsonwebtoken/jjwt) +- JSON library from Android SDK (from http://developer.android.com/sdk) +- JSONassert (from http://github.com/skyscreamer/yoga) +- JSR107 API and SPI (from https://github.com/jsr107/jsr107spec) +- Jackson (from http://jackson.codehaus.org) +- Jackson 2 extensions to the Google HTTP Client Library for Java. (from https://repo1.maven.org/maven2/com/google/http-client/google-http-client-jackson2) +- Jackson dataformat: CBOR (from http://github.com/FasterXML/jackson-dataformats-binary) +- Jackson extensions to the Google HTTP Client Library for Java. (from https://repo1.maven.org/maven2/com/google/http-client/google-http-client-jackson) +- Jackson module: Afterburner (from https://github.com/FasterXML/jackson-modules-base) +- Jackson-Datatype-JSR310 (from http://wiki.fasterxml.com/JacksonModuleJSR310) +- Jackson-annotations (from http://github.com/FasterXML/jackson) +- Jackson-core (from https://github.com/FasterXML/jackson-core) +- Jackson-core (from https://github.com/FasterXML/jackson-core) +- Jackson-dataformat-Smile (from ) +- Jackson-dataformat-XML (from http://wiki.fasterxml.com/JacksonExtensionXmlDataBinding) +- Jackson-dataformat-YAML (from https://github.com/FasterXML/jackson) +- Jackson-datatype-Joda (from http://wiki.fasterxml.com/JacksonModuleJoda) +- Jackson-datatype-jdk8 (from ) +- Jackson-module-JAXB-annotations (from http://github.com/FasterXML/jackson-module-jaxb-annotations) +- Jackson-module-parameter-names (from ) +- Jakarta Bean Validation API (from https://beanvalidation.org) +- Jakarta Expression Language 4.0 (from https://projects.eclipse.org/projects/ee4j.el) +- Jakarta Servlet (from https://projects.eclipse.org/projects/ee4j.servlet) +- Java Native Access (from https://github.com/java-native-access/jna) +- Java Native Access Platform (from https://github.com/java-native-access/jna) +- Java Servlet 4.0 API (from ) +- Java Servlet 4.0 API (from ) +- Java Servlet API (from http://servlet-spec.java.net) +- Java UUID Generator (from http://wiki.fasterxml.com/JugHome) +- Javassist (from http://www.javassist.org/) +- Javassist (from http://www.javassist.org/) +- JetBrains Java Annotations (from https://github.com/JetBrains/java-annotations) +- Joda-Time (from http://www.joda.org/joda-time/) +- KeePassJava2 :: All (from https://repo1.maven.org/maven2/org/linguafranca/pwdb/KeePassJava2) +- KeePassJava2 :: DOM (from https://repo1.maven.org/maven2/org/linguafranca/pwdb/KeePassJava2-dom) +- KeePassJava2 :: JAXB (from https://repo1.maven.org/maven2/org/linguafranca/pwdb/KeePassJava2-jaxb) +- KeePassJava2 :: KDB (from https://repo1.maven.org/maven2/org/linguafranca/pwdb/KeePassJava2-kdb) +- KeePassJava2 :: KDBX (from https://repo1.maven.org/maven2/org/linguafranca/pwdb/KeePassJava2-kdbx) +- KeePassJava2 :: Simple (from https://repo1.maven.org/maven2/org/linguafranca/pwdb/KeePassJava2-simple) +- Logback Contrib :: JSON :: Classic (from https://repo1.maven.org/maven2/ch/qos/logback/contrib/logback-json-classic) +- Logback Contrib :: JSON :: Core (from https://repo1.maven.org/maven2/ch/qos/logback/contrib/logback-json-core) +- Logback Contrib :: Jackson (from https://repo1.maven.org/maven2/ch/qos/logback/contrib/logback-jackson) +- Lucene Common Analyzers (from https://repo1.maven.org/maven2/org/apache/lucene/lucene-analyzers-common) +- Lucene Core (from ) +- Lucene Grouping (from https://repo1.maven.org/maven2/org/apache/lucene/lucene-grouping) +- Lucene Highlighter (from https://repo1.maven.org/maven2/org/apache/lucene/lucene-highlighter) +- Lucene Join (from https://repo1.maven.org/maven2/org/apache/lucene/lucene-join) +- Lucene Memory (from https://repo1.maven.org/maven2/org/apache/lucene/lucene-memory) +- Lucene Miscellaneous (from https://repo1.maven.org/maven2/org/apache/lucene/lucene-misc) +- Lucene Queries (from https://repo1.maven.org/maven2/org/apache/lucene/lucene-queries) +- Lucene QueryParsers (from https://repo1.maven.org/maven2/org/apache/lucene/lucene-queryparser) +- Lucene Sandbox (from https://repo1.maven.org/maven2/org/apache/lucene/lucene-sandbox) +- Lucene Spatial (from https://repo1.maven.org/maven2/org/apache/lucene/lucene-spatial) +- Lucene Spatial 3D (from https://repo1.maven.org/maven2/org/apache/lucene/lucene-spatial3d) +- Lucene Spatial Extras (from https://repo1.maven.org/maven2/org/apache/lucene/lucene-spatial-extras) +- Lucene Suggest (from https://repo1.maven.org/maven2/org/apache/lucene/lucene-suggest) +- MapStruct Core (from http://mapstruct.org/mapstruct/) +- Metrics Core (from ) +- Microsoft Application Insights Java SDK Spring Boot starter (from https://github.com/Microsoft/ApplicationInsights-Java) +- Microsoft Application Insights Java SDK Web Module (from https://github.com/Microsoft/ApplicationInsights-Java) +- Microsoft Application Insights Log4j 2 Appender (from https://github.com/Microsoft/ApplicationInsights-Java) +- Microsoft Azure Java Core Library (from https://github.com/Azure/azure-sdk-for-java) +- Microsoft Azure Netty HTTP Client Library (from https://github.com/Azure/azure-sdk-for-java) +- Microsoft Azure SDK for SQL API of Azure Cosmos DB Service (from https://github.com/Azure/azure-sdk-for-java) +- Mockito (from http://www.mockito.org) +- Mockito (from http://mockito.org) +- Netty/Buffer (from https://repo1.maven.org/maven2/io/netty/netty-buffer) +- Netty/Buffer (from https://repo1.maven.org/maven2/io/netty/netty-buffer) +- Netty/Codec (from https://repo1.maven.org/maven2/io/netty/netty-codec) +- Netty/Codec (from https://repo1.maven.org/maven2/io/netty/netty-codec) +- Netty/Codec/DNS (from https://repo1.maven.org/maven2/io/netty/netty-codec-dns) +- Netty/Codec/HTTP (from https://repo1.maven.org/maven2/io/netty/netty-codec-http) +- Netty/Codec/HTTP (from https://repo1.maven.org/maven2/io/netty/netty-codec-http) +- Netty/Codec/HTTP2 (from https://repo1.maven.org/maven2/io/netty/netty-codec-http2) +- Netty/Codec/HTTP2 (from https://repo1.maven.org/maven2/io/netty/netty-codec-http2) +- Netty/Codec/Socks (from https://repo1.maven.org/maven2/io/netty/netty-codec-socks) +- Netty/Common (from https://repo1.maven.org/maven2/io/netty/netty-common) +- Netty/Common (from https://repo1.maven.org/maven2/io/netty/netty-common) +- Netty/Handler (from https://repo1.maven.org/maven2/io/netty/netty-handler) +- Netty/Handler (from https://repo1.maven.org/maven2/io/netty/netty-handler) +- Netty/Handler/Proxy (from https://repo1.maven.org/maven2/io/netty/netty-handler-proxy) +- Netty/Resolver (from https://repo1.maven.org/maven2/io/netty/netty-resolver) +- Netty/Resolver (from https://repo1.maven.org/maven2/io/netty/netty-resolver) +- Netty/Resolver/DNS (from https://repo1.maven.org/maven2/io/netty/netty-resolver-dns) +- Netty/TomcatNative [BoringSSL - Static] (from https://repo1.maven.org/maven2/io/netty/netty-tcnative-boringssl-static) +- Netty/Transport (from https://repo1.maven.org/maven2/io/netty/netty-transport) +- Netty/Transport (from https://repo1.maven.org/maven2/io/netty/netty-transport) +- Netty/Transport/Native/Unix/Common (from https://repo1.maven.org/maven2/io/netty/netty-transport-native-unix-common) +- Netty/Transport/Native/Unix/Common (from https://repo1.maven.org/maven2/io/netty/netty-transport-native-unix-common) +- Nimbus Content Type (from https://bitbucket.org/connect2id/nimbus-content-type) +- Nimbus JOSE+JWT (from https://bitbucket.org/connect2id/nimbus-jose-jwt) +- Nimbus JOSE+JWT (from https://bitbucket.org/connect2id/nimbus-jose-jwt) +- Nimbus LangTag (from https://bitbucket.org/connect2id/nimbus-language-tags) +- Nimbus LangTag (from https://bitbucket.org/connect2id/nimbus-language-tags) +- OAuth 2.0 SDK with OpenID Connect extensions (from https://bitbucket.org/connect2id/oauth-2.0-sdk-with-openid-connect-extensions) +- OAuth 2.0 SDK with OpenID Connect extensions (from https://bitbucket.org/connect2id/oauth-2.0-sdk-with-openid-connect-extensions) +- Objenesis (from http://objenesis.org) +- OkHttp Logging Interceptor (from https://repo1.maven.org/maven2/com/squareup/okhttp3/logging-interceptor) +- Okio (from https://github.com/square/okio/) +- OpenCensus (from https://github.com/census-instrumentation/opencensus-java) +- OpenCensus (from https://github.com/census-instrumentation/opencensus-java) +- OpenCensus (from https://github.com/census-instrumentation/opencensus-java) +- OpenCensus (from https://github.com/census-instrumentation/opencensus-java) +- OpenCensus (from https://github.com/census-instrumentation/opencensus-java) +- OpenCensus (from https://github.com/census-instrumentation/opencensus-java) +- PWDB :: Database (from https://repo1.maven.org/maven2/org/linguafranca/pwdb/database) +- PowerMock (from http://www.powermock.org) +- PowerMock (from http://www.powermock.org) +- Protocol Buffer extensions to the Google HTTP Client Library for Java. (from https://repo1.maven.org/maven2/com/google/http-client/google-http-client-protobuf) +- Proton-J (from https://repo1.maven.org/maven2/org/apache/qpid/proton-j) +- RabbitMQ Java Client (from http://www.rabbitmq.com) +- Reactor Netty with all modules (from https://github.com/reactor/reactor-netty) +- Retrofit (from https://repo1.maven.org/maven2/com/squareup/retrofit2/retrofit) +- SnakeYAML (from http://code.google.com/p/snakeyaml/) +- Spring AMQP Core (from https://projects.spring.io/spring-amqp) +- Spring AOP (from https://github.com/spring-projects/spring-framework) +- Spring Beans (from https://github.com/spring-projects/spring-framework) +- Spring Boot Actuator (from http://projects.spring.io/spring-boot/) +- Spring Boot Actuator AutoConfigure (from https://projects.spring.io/spring-boot/#/spring-boot-parent/spring-boot-actuator-autoconfigure) +- Spring Boot Actuator Starter (from https://projects.spring.io/spring-boot/#/spring-boot-parent/spring-boot-starters/spring-boot-starter-actuator) +- Spring Boot Dependencies (from http://projects.spring.io/spring-boot/) +- Spring Boot Reactor Netty Starter (from https://projects.spring.io/spring-boot/#/spring-boot-parent/spring-boot-starters/spring-boot-starter-reactor-netty) +- Spring Boot Security Starter (from http://projects.spring.io/spring-boot/) +- Spring Boot Undertow Starter (from http://projects.spring.io/spring-boot/) +- Spring Boot Undertow Starter (from http://projects.spring.io/spring-boot/) +- Spring Boot Validation Starter (from http://projects.spring.io/spring-boot/) +- Spring Boot Validation Starter (from http://projects.spring.io/spring-boot/) +- Spring Boot Web Starter (from http://projects.spring.io/spring-boot/) +- Spring Boot Web Starter (from http://projects.spring.io/spring-boot/) +- Spring Boot WebFlux Starter (from https://projects.spring.io/spring-boot/#/spring-boot-parent/spring-boot-starters/spring-boot-starter-webflux) +- Spring Commons Logging Bridge (from https://github.com/spring-projects/spring-framework) +- Spring Context (from https://github.com/spring-projects/spring-framework) +- Spring Core (from https://github.com/spring-projects/spring-framework) +- Spring Data Core (from https://repo1.maven.org/maven2/org/springframework/data/spring-data-commons) +- Spring Expression Language (SpEL) (from https://github.com/spring-projects/spring-framework) +- Spring Messaging (from https://github.com/spring-projects/spring-framework) +- Spring Plugin - Metadata Extension (from https://repo1.maven.org/maven2/org/springframework/plugin/spring-plugin-metadata) +- Spring Plugin Core (from https://repo1.maven.org/maven2/org/springframework/plugin/spring-plugin-core) +- Spring RabbitMQ Support (from https://projects.spring.io/spring-amqp) +- Spring Retry (from http://www.springsource.org) +- Spring Security - Namespace Configuration Module (from https://repo1.maven.org/maven2/org/springframework/security/spring-security-config) +- Spring Security - Namespace Configuration Module (from https://repo1.maven.org/maven2/org/springframework/security/spring-security-config) +- Spring TestContext Framework (from https://github.com/spring-projects/spring-framework) +- Spring Transaction (from https://github.com/spring-projects/spring-framework) +- Spring Web (from https://github.com/spring-projects/spring-framework) +- Spring Web MVC (from https://github.com/spring-projects/spring-framework) +- Spring WebFlux (from https://github.com/spring-projects/spring-framework) +- T-Digest (from https://github.com/tdunning/t-digest) +- Undertow Core (from https://repo1.maven.org/maven2/io/undertow/undertow-core) +- Undertow Core (from https://repo1.maven.org/maven2/io/undertow/undertow-core) +- Undertow Servlet (from https://repo1.maven.org/maven2/io/undertow/undertow-servlet) +- Undertow Servlet (from https://repo1.maven.org/maven2/io/undertow/undertow-servlet) +- Undertow WebSockets JSR356 implementations (from https://repo1.maven.org/maven2/io/undertow/undertow-websockets-jsr) +- Undertow WebSockets JSR356 implementations (from https://repo1.maven.org/maven2/io/undertow/undertow-websockets-jsr) +- Vavr (from http://vavr.io) +- Vavr Match (from http://vavr.io) +- WildFly Client Configuration (from https://repo1.maven.org/maven2/org/wildfly/client/wildfly-client-config) +- Woodstox (from ) +- XNIO API (from http://www.jboss.org/xnio) +- XNIO API (from http://www.jboss.org/xnio) +- XNIO NIO Implementation (from https://repo1.maven.org/maven2/org/jboss/xnio/xnio-nio) +- XNIO NIO Implementation (from https://repo1.maven.org/maven2/org/jboss/xnio/xnio-nio) +- Zipkin Core Library (from https://repo1.maven.org/maven2/io/zipkin/zipkin2/zipkin) +- Zipkin Reporter Brave (from https://repo1.maven.org/maven2/io/zipkin/reporter2/zipkin-reporter-brave) +- Zipkin Reporter: Core (from https://repo1.maven.org/maven2/io/zipkin/reporter2/zipkin-reporter) +- aalto-xml (from https://repo1.maven.org/maven2/com/fasterxml/aalto-xml) +- aggs-matrix-stats (from https://github.com/elastic/elasticsearch) +- brave (from https://repo1.maven.org/maven2/io/zipkin/brave/brave) +- compiler (from http://github.com/spullara/mustache.java) +- datastore-v1-proto-client (from https://repo1.maven.org/maven2/com/google/cloud/datastore/datastore-v1-proto-client) +- elasticsearch-cli (from https://github.com/elastic/elasticsearch) +- elasticsearch-core (from https://github.com/elastic/elasticsearch) +- elasticsearch-secure-sm (from https://github.com/elastic/elasticsearch) +- elasticsearch-x-content (from https://github.com/elastic/elasticsearch) +- error-prone annotations (from https://repo1.maven.org/maven2/com/google/errorprone/error_prone_annotations) +- error-prone annotations (from https://repo1.maven.org/maven2/com/google/errorprone/error_prone_annotations) +- grpc-google-cloud-pubsub-v1 (from https://repo1.maven.org/maven2/com/google/api/grpc/grpc-google-cloud-pubsub-v1) +- io.grpc:grpc-alts (from https://github.com/grpc/grpc-java) +- io.grpc:grpc-api (from https://github.com/grpc/grpc-java) +- io.grpc:grpc-auth (from https://github.com/grpc/grpc-java) +- io.grpc:grpc-context (from https://github.com/grpc/grpc-java) +- io.grpc:grpc-context (from https://github.com/grpc/grpc-java) +- io.grpc:grpc-core (from https://github.com/grpc/grpc-java) +- io.grpc:grpc-core (from https://github.com/grpc/grpc-java) +- io.grpc:grpc-grpclb (from https://github.com/grpc/grpc-java) +- io.grpc:grpc-netty-shaded (from https://github.com/grpc/grpc-java) +- io.grpc:grpc-netty-shaded (from https://github.com/grpc/grpc-java) +- io.grpc:grpc-protobuf (from https://github.com/grpc/grpc-java) +- io.grpc:grpc-protobuf (from https://github.com/grpc/grpc-java) +- io.grpc:grpc-protobuf-lite (from https://github.com/grpc/grpc-java) +- io.grpc:grpc-protobuf-lite (from https://github.com/grpc/grpc-java) +- io.grpc:grpc-stub (from https://github.com/grpc/grpc-java) +- io.grpc:grpc-stub (from https://github.com/grpc/grpc-java) +- ion-java (from https://github.com/amznlabs/ion-java/) +- jackson-databind (from http://github.com/FasterXML/jackson) +- jackson-databind (from http://github.com/FasterXML/jackson) +- javatuples (from http://www.javatuples.org) +- javax.inject (from http://code.google.com/p/atinject/) +- jose4j (from https://bitbucket.org/b_c/jose4j/) +- lang-mustache (from https://github.com/elastic/elasticsearch) +- lettuce (from http://github.com/lettuce-io/lettuce-core) +- micrometer-core (from https://github.com/micrometer-metrics/micrometer) +- micrometer-registry-azure-monitor (from https://github.com/micrometer-metrics/micrometer) +- nio-multipart-parser (from ) +- nio-stream-storage (from https://github.com/synchronoss/nio-stream-storage) +- okhttp (from https://square.github.io/okhttp/) +- okhttp-urlconnection (from https://square.github.io/okhttp/) +- org.apiguardian:apiguardian-api (from https://github.com/apiguardian-team/apiguardian) +- org.conscrypt:conscrypt-openjdk-uber (from https://conscrypt.org/) +- org.opentest4j:opentest4j (from https://github.com/ota4j-team/opentest4j) +- org.xmlunit:xmlunit-core (from https://www.xmlunit.org/) +- parent-join (from https://github.com/elastic/elasticsearch) +- perfmark:perfmark-api (from https://github.com/perfmark/perfmark) +- powermock-api-mockito2 (from https://repo1.maven.org/maven2/org/powermock/powermock-api-mockito2) +- powermock-api-support (from https://repo1.maven.org/maven2/org/powermock/powermock-api-support) +- powermock-core (from http://www.powermock.org) +- powermock-reflect (from https://repo1.maven.org/maven2/org/powermock/powermock-reflect) +- project ':json-path' (from https://github.com/jayway/JsonPath) +- proto-google-cloud-datastore-v1 (from https://github.com/googleapis/java-datastore/proto-google-cloud-datastore-v1) +- proto-google-cloud-iamcredentials-v1 (from https://github.com/googleapis/java-iamcredentials/proto-google-cloud-iamcredentials-v1) +- proto-google-cloud-logging-v2 (from https://github.com/googleapis/java-logging/proto-google-cloud-logging-v2) +- proto-google-cloud-pubsub-v1 (from https://repo1.maven.org/maven2/com/google/api/grpc/proto-google-cloud-pubsub-v1) +- proto-google-common-protos (from https://github.com/googleapis/java-iam/proto-google-common-protos) +- proto-google-common-protos (from https://github.com/googleapis/java-iam/proto-google-common-protos) +- proto-google-iam-v1 (from https://github.com/googleapis/java-iam/proto-google-iam-v1) +- rank-eval (from https://github.com/elastic/elasticsearch) +- resilience4j (from https://github.com/resilience4j/resilience4j) +- resilience4j (from https://resilience4j.readme.io) +- resilience4j (from https://github.com/resilience4j/resilience4j) +- resilience4j (from https://resilience4j.readme.io) +- resilience4j (from https://resilience4j.readme.io) +- resilience4j (from https://resilience4j.readme.io) +- resilience4j (from https://github.com/resilience4j/resilience4j) +- resilience4j (from https://github.com/resilience4j/resilience4j) +- rest (from https://github.com/elastic/elasticsearch) +- rest-high-level (from https://github.com/elastic/elasticsearch) +- rxjava (from https://github.com/ReactiveX/RxJava) +- server (from https://github.com/elastic/elasticsearch) +- spring-boot (from https://spring.io/projects/spring-boot) +- spring-boot-autoconfigure (from https://spring.io/projects/spring-boot) +- spring-boot-starter (from https://spring.io/projects/spring-boot) +- spring-boot-starter-amqp (from https://spring.io/projects/spring-boot) +- spring-boot-starter-aop (from https://spring.io/projects/spring-boot) +- spring-boot-starter-json (from https://spring.io/projects/spring-boot) +- spring-boot-starter-log4j2 (from https://spring.io/projects/spring-boot) +- spring-boot-starter-logging (from https://spring.io/projects/spring-boot) +- spring-boot-starter-test (from https://spring.io/projects/spring-boot) +- spring-boot-starter-tomcat (from https://spring.io/projects/spring-boot) +- spring-boot-test (from https://spring.io/projects/spring-boot) +- spring-boot-test-autoconfigure (from https://spring.io/projects/spring-boot) +- spring-security-core (from http://spring.io/spring-security) +- spring-security-web (from http://spring.io/spring-security) +- spring-security-web (from http://spring.io/spring-security) +- springfox-core (from https://github.com/springfox/springfox) +- springfox-schema (from https://github.com/springfox/springfox) +- springfox-spi (from https://github.com/springfox/springfox) +- springfox-spring-web (from https://github.com/springfox/springfox) +- springfox-swagger-common (from https://github.com/springfox/springfox) +- springfox-swagger-ui (from https://github.com/springfox/springfox) +- springfox-swagger2 (from https://github.com/springfox/springfox) +- swagger-annotations (from https://repo1.maven.org/maven2/io/swagger/swagger-annotations) +- swagger-jaxrs (from https://repo1.maven.org/maven2/io/swagger/swagger-jaxrs) +- swagger-models (from https://repo1.maven.org/maven2/io/swagger/swagger-models) +- tomcat-embed-core (from http://tomcat.apache.org/) +- tomcat-embed-el (from https://tomcat.apache.org/) +- tomcat-embed-websocket (from https://tomcat.apache.org/) +- wildfly-common (from https://repo1.maven.org/maven2/org/wildfly/common/wildfly-common) ======================================================================== BSD-2-Clause ======================================================================== The following software have components provided under the terms of this license: -- grpcio (from https://grpc.io) -- locket (from http://github.com/mwilliamson/locket.py) -- mock (from https://github.com/testing-cabal/mock) -- numpy (from http://www.numpy.org) -- packaging (from https://github.com/pypa/packaging) -- ply (from http://www.dabeaz.com/ply/) -- pyasn1 (from http://sourceforge.net/projects/pyasn1/) -- pyasn1-modules (from http://sourceforge.net/projects/pyasn1/) -- pycparser (from https://github.com/eliben/pycparser) -- tblib (from https://github.com/ionelmc/python-tblib) -- wrapt (from https://github.com/GrahamDumpleton/wrapt) +- API Common (from https://github.com/googleapis/api-common-java) +- GAX (Google Api eXtensions) for Java (from https://github.com/googleapis/gax-java) +- GAX (Google Api eXtensions) for Java (from https://github.com/googleapis/gax-java) +- GAX (Google Api eXtensions) for Java (from https://github.com/googleapis/gax-java) +- Lucene Common Analyzers (from https://repo1.maven.org/maven2/org/apache/lucene/lucene-analyzers-common) +- Reflections (from http://code.google.com/p/reflections/) +- Stax2 API (from ) +- ThreeTen backport (from https://www.threeten.org/threetenbp) ======================================================================== BSD-3-Clause ======================================================================== The following software have components provided under the terms of this license: -- HeapDict (from http://stutzbachenterprises.com/) -- adlfs (from https://github.com/hayesgb/adlfs/) -- asgiref (from http://github.com/django/asgiref/) -- click (from http://github.com/mitsuhiko/click) -- cloudpickle (from https://github.com/cloudpipe/cloudpickle) -- cryptography (from https://github.com/pyca/cryptography) -- dask (from http://github.com/dask/dask/) -- decorator (from https://github.com/micheles/decorator) -- distributed (from https://distributed.readthedocs.io/en/latest/) -- fsspec (from http://github.com/intake/filesystem_spec) -- gcsfs (from https://github.com/dask/gcsfs) -- grpcio (from https://grpc.io) -- hiredis (from https://github.com/redis/hiredis-py) -- httpcore (from https://github.com/encode/httpcore) -- httpx (from https://github.com/encode/httpx) -- idna (from https://github.com/kjd/idna) -- isodate (from http://cheeseshop.python.org/pypi/isodate) -- locket (from http://github.com/mwilliamson/locket.py) -- mock (from https://github.com/testing-cabal/mock) -- numpy (from http://www.numpy.org) -- oauthlib (from https://github.com/idan/oauthlib) -- openapi-schema-validator (from https://github.com/p1c2u/openapi-schema-validator) -- packaging (from https://github.com/pypa/packaging) -- pandas (from http://pandas.pydata.org) -- partd (from http://github.com/dask/partd/) -- pip-tools (from https://github.com/jazzband/pip-tools/) -- ply (from http://www.dabeaz.com/ply/) -- protobuf (from https://developers.google.com/protocol-buffers/) -- psutil (from https://github.com/giampaolo/psutil) -- pyarrow (from https://arrow.apache.org/) -- pyasn1 (from http://sourceforge.net/projects/pyasn1/) -- pyasn1-modules (from http://sourceforge.net/projects/pyasn1/) -- pycparser (from https://github.com/eliben/pycparser) -- pyrsistent (from http://github.com/tobgu/pyrsistent/) -- python-dateutil (from https://dateutil.readthedocs.org) -- python-rapidjson (from https://github.com/python-rapidjson/python-rapidjson) -- requests-oauthlib (from https://github.com/requests/requests-oauthlib) -- s3fs (from http://github.com/dask/s3fs/) -- starlette (from https://github.com/encode/starlette) -- tblib (from https://github.com/ionelmc/python-tblib) -- toolz (from http://github.com/pytoolz/toolz/) -- uvicorn (from https://github.com/tomchristie/uvicorn) -- wrapt (from https://github.com/GrahamDumpleton/wrapt) -- zict (from http://github.com/dask/zict/) - -======================================================================== -CC-BY-4.0 +- API Common (from https://github.com/googleapis/api-common-java) +- Apache Commons Codec (from https://commons.apache.org/proper/commons-codec/) +- GAX (Google Api eXtensions) for Java (from https://github.com/googleapis/gax-java) +- GAX (Google Api eXtensions) for Java (from https://github.com/googleapis/gax-java) +- GAX (Google Api eXtensions) for Java (from https://github.com/googleapis/gax-java) +- Google APIs Client Library for Java (from https://repo1.maven.org/maven2/com/google/api-client/google-api-client) +- Google Auth Library for Java - Credentials (from https://repo1.maven.org/maven2/com/google/auth/google-auth-library-credentials) +- Google Auth Library for Java - OAuth2 HTTP (from https://repo1.maven.org/maven2/com/google/auth/google-auth-library-oauth2-http) +- Lucene Common Analyzers (from https://repo1.maven.org/maven2/org/apache/lucene/lucene-analyzers-common) +- Lucene Core (from ) +- Lucene Suggest (from https://repo1.maven.org/maven2/org/apache/lucene/lucene-suggest) +- Microsoft Application Insights Java SDK Spring Boot starter (from https://github.com/Microsoft/ApplicationInsights-Java) +- Microsoft Application Insights Java SDK Web Module (from https://github.com/Microsoft/ApplicationInsights-Java) +- Microsoft Application Insights Log4j 2 Appender (from https://github.com/Microsoft/ApplicationInsights-Java) +- Mockito (from http://www.mockito.org) +- Netty/Codec/HTTP (from https://repo1.maven.org/maven2/io/netty/netty-codec-http) +- Netty/Codec/HTTP (from https://repo1.maven.org/maven2/io/netty/netty-codec-http) +- Protocol Buffer Java API (from http://code.google.com/p/protobuf) +- Protocol Buffer Java API (from http://code.google.com/p/protobuf) +- Protocol Buffers [Util] (from https://repo1.maven.org/maven2/com/google/protobuf/protobuf-java-util) +- Reflections (from http://code.google.com/p/reflections/) +- SnakeYAML (from http://code.google.com/p/snakeyaml/) +- Spring Core (from https://github.com/spring-projects/spring-framework) +- ThreeTen backport (from https://www.threeten.org/threetenbp) +- asm (from ) + +======================================================================== +CC-BY-2.5 ======================================================================== The following software have components provided under the terms of this license: -- adlfs (from https://github.com/hayesgb/adlfs/) -- dask (from http://github.com/dask/dask/) -- distributed (from https://distributed.readthedocs.io/en/latest/) -- fsspec (from http://github.com/intake/filesystem_spec) -- gcsfs (from https://github.com/dask/gcsfs) -- numpy (from http://www.numpy.org) -- pandas (from http://pandas.pydata.org) -- partd (from http://github.com/dask/partd/) -- s3fs (from http://github.com/dask/s3fs/) -- toolz (from http://github.com/pytoolz/toolz/) +- FindBugs-jsr305 (from http://findbugs.sourceforge.net/) ======================================================================== -CC-BY-SA-3.0 +CC-BY-4.0 ======================================================================== The following software have components provided under the terms of this license: -- numpy (from http://www.numpy.org) +- Microsoft Application Insights Java SDK Spring Boot starter (from https://github.com/Microsoft/ApplicationInsights-Java) +- Microsoft Application Insights Java SDK Web Module (from https://github.com/Microsoft/ApplicationInsights-Java) +- Microsoft Application Insights Log4j 2 Appender (from https://github.com/Microsoft/ApplicationInsights-Java) ======================================================================== -GPL-2.0-only +CC0-1.0 ======================================================================== The following software have components provided under the terms of this license: -- coverage (from https://github.com/nedbat/coveragepy) -- grpcio (from https://grpc.io) +- reactive-streams (from http://www.reactive-streams.org/) ======================================================================== -GPL-2.0-or-later +CDDL-1.0 ======================================================================== The following software have components provided under the terms of this license: -- grpcio (from https://grpc.io) +- JavaBeans Activation Framework API jar (from ) +- Old JAXB Core (from https://repo1.maven.org/maven2/com/sun/xml/bind/jaxb-core) +- Old JAXB Runtime (from https://repo1.maven.org/maven2/com/sun/xml/bind/jaxb-impl) ======================================================================== -GPL-3.0-only +CDDL-1.1 ======================================================================== The following software have components provided under the terms of this license: -- coverage (from https://github.com/nedbat/coveragepy) -- grpcio (from https://grpc.io) -- pyparsing (from http://pyparsing.wikispaces.com/) -- rfc3986 (from https://rfc3986.readthedocs.org) -- strict-rfc3339 (from http://www.danielrichman.co.uk/libraries/strict-rfc3339.html) +- Common Annotations 1.2 API (from ) +- Expression Language 3.0 (from http://uel.java.net) +- Java Servlet 4.0 API (from ) +- Java Servlet API (from http://servlet-spec.java.net) +- Java(TM) API for WebSocket (from https://repo1.maven.org/maven2/org/jboss/spec/javax/websocket/jboss-websocket-api_1.1_spec) +- JavaBeans Activation Framework (from ) +- JavaBeans(TM) Activation Framework (from http://java.sun.com/javase/technologies/desktop/javabeans/jaf/index.jsp) +- JavaMail API (from ) +- javax.annotation-api (from http://jcp.org/en/jsr/detail?id=250) +- jaxb-api (from https://repo1.maven.org/maven2/javax/xml/bind/jaxb-api) +- jaxb-api (from https://repo1.maven.org/maven2/javax/xml/bind/jaxb-api) +- tomcat-embed-core (from http://tomcat.apache.org/) ======================================================================== -GPL-3.0-or-later +CPL-1.0 ======================================================================== The following software have components provided under the terms of this license: -- strict-rfc3339 (from http://www.danielrichman.co.uk/libraries/strict-rfc3339.html) +- JUnit (from ) ======================================================================== -ISC +EPL-1.0 ======================================================================== The following software have components provided under the terms of this license: -- grpcio (from https://grpc.io) -- requests-oauthlib (from https://github.com/requests/requests-oauthlib) - -======================================================================== -Info-ZIP +- AspectJ Weaver (from https://www.eclipse.org/aspectj/) +- JBoss Jakarta Annotations API (from https://github.com/jboss/jboss-jakarta-annotations-api_spec) +- JUnit Jupiter (Aggregator) (from https://junit.org/junit5/) +- JUnit Jupiter API (from https://junit.org/junit5/) +- JUnit Jupiter Engine (from https://junit.org/junit5/) +- JUnit Platform Commons (from https://junit.org/junit5/) +- JUnit Platform Engine API (from https://junit.org/junit5/) +- Jakarta Expression Language 4.0 (from https://projects.eclipse.org/projects/ee4j.el) +- Jakarta Servlet (from https://projects.eclipse.org/projects/ee4j.servlet) +- Java Servlet 4.0 API (from ) +- Java(TM) API for WebSocket (from https://repo1.maven.org/maven2/org/jboss/spec/javax/websocket/jboss-websocket-api_1.1_spec) +- Logback Classic Module (from https://repo1.maven.org/maven2/ch/qos/logback/logback-classic) +- Logback Contrib :: JSON :: Classic (from https://repo1.maven.org/maven2/ch/qos/logback/contrib/logback-json-classic) +- Logback Contrib :: JSON :: Core (from https://repo1.maven.org/maven2/ch/qos/logback/contrib/logback-json-core) +- Logback Contrib :: Jackson (from https://repo1.maven.org/maven2/ch/qos/logback/contrib/logback-jackson) +- Logback Core Module (from https://repo1.maven.org/maven2/ch/qos/logback/logback-core) +- Microsoft Application Insights Java SDK Spring Boot starter (from https://github.com/Microsoft/ApplicationInsights-Java) +- Microsoft Application Insights Java SDK Web Module (from https://github.com/Microsoft/ApplicationInsights-Java) +- Microsoft Application Insights Log4j 2 Appender (from https://github.com/Microsoft/ApplicationInsights-Java) +- SnakeYAML (from http://code.google.com/p/snakeyaml/) +- org.junit.jupiter:junit-jupiter-params (from http://junit.org/junit5/) + +======================================================================== +EPL-2.0 ======================================================================== The following software have components provided under the terms of this license: -- grpcio (from https://grpc.io) +- JBoss Jakarta Annotations API (from https://github.com/jboss/jboss-jakarta-annotations-api_spec) +- JUnit Jupiter (Aggregator) (from https://junit.org/junit5/) +- JUnit Jupiter API (from https://junit.org/junit5/) +- JUnit Jupiter Engine (from https://junit.org/junit5/) +- JUnit Platform Commons (from https://junit.org/junit5/) +- JUnit Platform Engine API (from https://junit.org/junit5/) +- Jakarta Expression Language 4.0 (from https://projects.eclipse.org/projects/ee4j.el) +- Jakarta Servlet (from https://projects.eclipse.org/projects/ee4j.servlet) +- Java Servlet 4.0 API (from ) +- Java(TM) API for WebSocket (from https://repo1.maven.org/maven2/org/jboss/spec/javax/websocket/jboss-websocket-api_1.1_spec) +- org.junit.jupiter:junit-jupiter-params (from http://junit.org/junit5/) ======================================================================== -JSON +GPL-2.0-only ======================================================================== The following software have components provided under the terms of this license: -- python-rapidjson (from https://github.com/python-rapidjson/python-rapidjson) +- Expression Language 3.0 (from http://uel.java.net) +- Java Servlet 4.0 API (from ) +- Java Servlet API (from http://servlet-spec.java.net) +- Java(TM) API for WebSocket (from https://repo1.maven.org/maven2/org/jboss/spec/javax/websocket/jboss-websocket-api_1.1_spec) +- JavaBeans Activation Framework (from ) +- Old JAXB Core (from https://repo1.maven.org/maven2/com/sun/xml/bind/jaxb-core) +- Old JAXB Runtime (from https://repo1.maven.org/maven2/com/sun/xml/bind/jaxb-impl) +- RabbitMQ Java Client (from http://www.rabbitmq.com) +- javax.annotation-api (from http://jcp.org/en/jsr/detail?id=250) +- jaxb-api (from https://repo1.maven.org/maven2/javax/xml/bind/jaxb-api) +- jaxb-api (from https://repo1.maven.org/maven2/javax/xml/bind/jaxb-api) +- tomcat-embed-core (from http://tomcat.apache.org/) ======================================================================== -LGPL-2.1-only +GPL-2.0-or-later ======================================================================== The following software have components provided under the terms of this license: -- chardet (from https://github.com/chardet/chardet) -- charset-normalizer (from https://github.com/ousret/charset_normalizer) +- SnakeYAML (from http://code.google.com/p/snakeyaml/) ======================================================================== -LGPL-2.1-or-later +GPL-2.0-with-classpath-exception ======================================================================== The following software have components provided under the terms of this license: -- chardet (from https://github.com/chardet/chardet) +- Checker Qual (from https://checkerframework.org) +- Expression Language 3.0 (from http://uel.java.net) +- JBoss Jakarta Annotations API (from https://github.com/jboss/jboss-jakarta-annotations-api_spec) +- Jakarta Expression Language 4.0 (from https://projects.eclipse.org/projects/ee4j.el) +- Jakarta Servlet (from https://projects.eclipse.org/projects/ee4j.servlet) +- Java Servlet 4.0 API (from ) +- Java Servlet 4.0 API (from ) +- Java Servlet API (from http://servlet-spec.java.net) +- Java(TM) API for WebSocket (from https://repo1.maven.org/maven2/org/jboss/spec/javax/websocket/jboss-websocket-api_1.1_spec) +- Java(TM) API for WebSocket (from https://repo1.maven.org/maven2/org/jboss/spec/javax/websocket/jboss-websocket-api_1.1_spec) +- JavaBeans Activation Framework (from ) +- Old JAXB Core (from https://repo1.maven.org/maven2/com/sun/xml/bind/jaxb-core) +- Old JAXB Runtime (from https://repo1.maven.org/maven2/com/sun/xml/bind/jaxb-impl) +- RabbitMQ Java Client (from http://www.rabbitmq.com) +- javax.annotation-api (from http://jcp.org/en/jsr/detail?id=250) +- jaxb-api (from https://repo1.maven.org/maven2/javax/xml/bind/jaxb-api) +- jaxb-api (from https://repo1.maven.org/maven2/javax/xml/bind/jaxb-api) +- tomcat-embed-core (from http://tomcat.apache.org/) ======================================================================== -LGPL-3.0-only +GPL-3.0-only ======================================================================== The following software have components provided under the terms of this license: -- chardet (from https://github.com/chardet/chardet) -- pycparser (from https://github.com/eliben/pycparser) +- JBoss Jakarta Annotations API (from https://github.com/jboss/jboss-jakarta-annotations-api_spec) +- Jakarta Expression Language 4.0 (from https://projects.eclipse.org/projects/ee4j.el) +- Jakarta Servlet (from https://projects.eclipse.org/projects/ee4j.servlet) +- Java Servlet 4.0 API (from ) +- Java Servlet 4.0 API (from ) +- Java(TM) API for WebSocket (from https://repo1.maven.org/maven2/org/jboss/spec/javax/websocket/jboss-websocket-api_1.1_spec) +- Old JAXB Core (from https://repo1.maven.org/maven2/com/sun/xml/bind/jaxb-core) +- Old JAXB Runtime (from https://repo1.maven.org/maven2/com/sun/xml/bind/jaxb-impl) +- Project Lombok (from https://projectlombok.org) ======================================================================== -MIT +JSON ======================================================================== The following software have components provided under the terms of this license: -- PyJWT (from http://github.com/jpadilla/pyjwt) -- PyYAML (from http://pyyaml.org/wiki/PyYAML) -- adal (from https://github.com/AzureAD/azure-activedirectory-library-for-python) -- aiohttp (from https://github.com/aio-libs/aiohttp/) -- aioitertools (from https://github.com/jreese/aioitertools) -- aioredis (from https://github.com/aio-libs/aioredis) -- anyio (from https://pypi.org/project/anyio/3.3.4/) -- asgiref (from http://github.com/django/asgiref/) -- attrs (from https://attrs.readthedocs.io/) -- azure-common (from https://github.com/Azure/azure-sdk-for-python) -- azure-core (from https://github.com/Azure/azure-sdk-for-python/tree/main/sdk/core/azure-core) -- azure-datalake-store (from https://github.com/Azure/azure-data-lake-store-python) -- azure-identity (from https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/identity/azure-identity) -- azure-keyvault (from https://github.com/Azure/azure-sdk-for-python) -- azure-keyvault-certificates (from https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/keyvault/azure-keyvault-certificates) -- azure-keyvault-keys (from https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/keyvault/azure-keyvault-keys) -- azure-keyvault-secrets (from https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/keyvault/azure-keyvault-secrets) -- azure-storage-blob (from https://github.com/Azure/azure-storage-python) -- backoff (from https://github.com/litl/backoff) -- botocore (from https://github.com/boto/botocore) -- cachetools (from https://github.com/tkem/cachetools) -- cffi (from http://cffi.readthedocs.org) -- charset-normalizer (from https://github.com/ousret/charset_normalizer) -- coverage (from https://github.com/nedbat/coveragepy) -- fastapi (from https://github.com/tiangolo/fastapi) -- grpcio (from https://grpc.io) -- h11 (from https://github.com/python-hyper/h11) -- iniconfig (from http://github.com/RonnyPfannschmidt/iniconfig) -- jmespath (from https://github.com/jmespath/jmespath.py) -- jsonschema (from http://github.com/Julian/jsonschema) -- mockito (from https://github.com/kaste/mockito-python) -- msal (from https://github.com/AzureAD/microsoft-authentication-library-for-python) -- msal-extensions (from https://pypi.org/project/msal-extensions/0.1.3/) -- msrest (from https://github.com/Azure/msrest-for-python) -- munch (from http://github.com/Infinidat/munch) -- natsort (from https://github.com/SethMMorton/natsort) -- numpy (from http://www.numpy.org) -- pandas (from http://pandas.pydata.org) -- pep517 (from https://github.com/takluyver/pep517) -- pluggy (from https://github.com/pytest-dev/pluggy) -- py (from http://pylib.readthedocs.org/) -- pyarrow (from https://arrow.apache.org/) -- pydantic (from https://github.com/samuelcolvin/pydantic) -- pyparsing (from http://pyparsing.wikispaces.com/) -- pyrsistent (from http://github.com/tobgu/pyrsistent/) -- pytest (from http://pytest.org) -- pytest-cov (from https://github.com/pytest-dev/pytest-cov) -- pytest-httpx (from https://colin-b.github.io/pytest_httpx/) -- pytest-mock (from https://github.com/pytest-dev/pytest-mock/) -- python-rapidjson (from https://github.com/python-rapidjson/python-rapidjson) -- python-ulid (from https://github.com/mdomke/python-ulid) -- pytz (from http://pythonhosted.org/pytz) -- requests-oauthlib (from https://github.com/requests/requests-oauthlib) -- six (from http://pypi.python.org/pypi/six/) -- sniffio (from https://github.com/python-trio/sniffio) -- structlog (from http://www.structlog.org/) -- toml (from https://github.com/uiri/toml) -- tomli (from https://pypi.org/project/tomli/1.2.1/) -- urllib3 (from https://urllib3.readthedocs.io/) -- xmltodict (from https://github.com/martinblech/xmltodict) -- zipp (from https://github.com/jaraco/zipp) +- JSON in Java (from https://github.com/douglascrockford/JSON-java) ======================================================================== -MPL-2.0 +LGPL-2.1-only ======================================================================== The following software have components provided under the terms of this license: -- certifi (from http://certifi.io/) -- charset-normalizer (from https://github.com/ousret/charset_normalizer) +- Elastic JNA Distribution (from https://github.com/java-native-access/jna) +- Java Native Access (from https://github.com/java-native-access/jna) +- Java Native Access Platform (from https://github.com/java-native-access/jna) +- Javassist (from http://www.javassist.org/) +- Javassist (from http://www.javassist.org/) +- Logback Classic Module (from https://repo1.maven.org/maven2/ch/qos/logback/logback-classic) +- Logback Contrib :: JSON :: Classic (from https://repo1.maven.org/maven2/ch/qos/logback/contrib/logback-json-classic) +- Logback Contrib :: JSON :: Core (from https://repo1.maven.org/maven2/ch/qos/logback/contrib/logback-json-core) +- Logback Contrib :: Jackson (from https://repo1.maven.org/maven2/ch/qos/logback/contrib/logback-jackson) +- Logback Core Module (from https://repo1.maven.org/maven2/ch/qos/logback/logback-core) +- Microsoft Application Insights Java SDK Spring Boot starter (from https://github.com/Microsoft/ApplicationInsights-Java) +- Microsoft Application Insights Java SDK Web Module (from https://github.com/Microsoft/ApplicationInsights-Java) +- Microsoft Application Insights Log4j 2 Appender (from https://github.com/Microsoft/ApplicationInsights-Java) ======================================================================== -NCSA +LGPL-2.1-or-later ======================================================================== The following software have components provided under the terms of this license: -- numpy (from http://www.numpy.org) +- JBoss Threads (from https://repo1.maven.org/maven2/org/jboss/threads/jboss-threads) +- Javassist (from http://www.javassist.org/) +- Javassist (from http://www.javassist.org/) +- SnakeYAML (from http://code.google.com/p/snakeyaml/) ======================================================================== -OPL-1.0 +LGPL-3.0-only ======================================================================== The following software have components provided under the terms of this license: -- numpy (from http://www.numpy.org) +- Apache Log4j API (from https://repo1.maven.org/maven2/org/apache/logging/log4j/log4j-api) +- Apache Log4j Core (from https://repo1.maven.org/maven2/org/apache/logging/log4j/log4j-core) +- RabbitMQ Java Client (from http://www.rabbitmq.com) ======================================================================== -OpenSSL +MIT ======================================================================== The following software have components provided under the terms of this license: -- grpcio (from https://grpc.io) - -======================================================================== -Python-2.0 +- AWS Java SDK for AWS Lambda (from https://aws.amazon.com/sdkforjava) +- Animal Sniffer Annotations (from https://repo1.maven.org/maven2/org/codehaus/mojo/animal-sniffer-annotations) +- Animal Sniffer Annotations (from https://repo1.maven.org/maven2/org/codehaus/mojo/animal-sniffer-annotations) +- Azure Java Client Authentication Library for AutoRest (from https://github.com/Azure/autorest-clientruntime-for-java) +- Azure Java Client Runtime for ARM (from https://github.com/Azure/autorest-clientruntime-for-java) +- Azure Java Client Runtime for AutoRest (from https://github.com/Azure/autorest-clientruntime-for-java) +- Azure Spring Boot AutoConfigure (from https://github.com/Azure/azure-sdk-for-java) +- Checker Qual (from ) +- Checker Qual (from https://checkerframework.org) +- Checker Qual (from ) +- Extensions on Apache Proton-J library (from https://github.com/Azure/qpid-proton-j-extensions) +- JOpt Simple (from http://jopt-simple.github.io/jopt-simple) +- JUL to SLF4J bridge (from http://www.slf4j.org) +- Java Client Runtime for AutoRest (from https://github.com/Azure/autorest-clientruntime-for-java) +- Lucene Core (from ) +- Microsoft Application Insights Java SDK Core (from https://github.com/Microsoft/ApplicationInsights-Java) +- Microsoft Application Insights Java SDK Spring Boot starter (from https://github.com/Microsoft/ApplicationInsights-Java) +- Microsoft Application Insights Java SDK Web Module (from https://github.com/Microsoft/ApplicationInsights-Java) +- Microsoft Application Insights Log4j 2 Appender (from https://github.com/Microsoft/ApplicationInsights-Java) +- Microsoft Azure Java Core Library (from https://github.com/Azure/azure-sdk-for-java) +- Microsoft Azure Netty HTTP Client Library (from https://github.com/Azure/azure-sdk-for-java) +- Microsoft Azure SDK annotations (from https://github.com/Microsoft/java-api-annotations) +- Microsoft Azure SDK for EventGrid Management (from https://github.com/Azure/azure-sdk-for-java) +- Microsoft Azure SDK for SQL API of Azure Cosmos DB Service (from https://github.com/Azure/azure-sdk-for-java) +- Microsoft Azure SDK for Service Bus (from https://github.com/Azure/azure-sdk-for-java) +- Microsoft Azure SDK for eventgrid (from https://github.com/Azure/azure-sdk-for-java) +- Microsoft Azure client library for Blob Storage (from https://github.com/Azure/azure-sdk-for-java) +- Microsoft Azure client library for Identity (from https://github.com/Azure/azure-sdk-for-java) +- Microsoft Azure client library for KeyVault Keys (from https://github.com/Azure/azure-sdk-for-java) +- Microsoft Azure client library for KeyVault Secrets (from https://github.com/Azure/azure-sdk-for-java) +- Microsoft Azure common module for Storage (from https://github.com/Azure/azure-sdk-for-java) +- Microsoft Azure internal Avro module for Storage (from https://github.com/Azure/azure-sdk-for-java) +- Mockito (from http://mockito.org) +- Mockito (from http://www.mockito.org) +- Netty/Codec/HTTP (from https://repo1.maven.org/maven2/io/netty/netty-codec-http) +- Netty/Codec/HTTP (from https://repo1.maven.org/maven2/io/netty/netty-codec-http) +- Netty/Common (from https://repo1.maven.org/maven2/io/netty/netty-common) +- Netty/Common (from https://repo1.maven.org/maven2/io/netty/netty-common) +- Project Lombok (from https://projectlombok.org) +- SLF4J API Module (from http://www.slf4j.org) +- Spongy Castle (from http://rtyley.github.io/spongycastle/) +- Spring Data for Azure Cosmos DB SQL API (from https://github.com/Azure/azure-sdk-for-java/tree/master/sdk/cosmos/azure-spring-data-cosmos) +- adal4j (from https://github.com/AzureAD/azure-activedirectory-library-for-java) +- azure-documentdb (from http://azure.microsoft.com/en-us/services/documentdb/) +- documentdb-bulkexecutor (from http://azure.microsoft.com/en-us/services/documentdb/) +- java jwt (from https://github.com/auth0/java-jwt) +- java jwt (from https://github.com/auth0/java-jwt) +- micrometer-core (from https://github.com/micrometer-metrics/micrometer) +- mockito-junit-jupiter (from https://github.com/mockito/mockito) +- msal4j (from https://github.com/AzureAD/microsoft-authentication-library-for-java) +- msal4j-persistence-extension (from https://github.com/AzureAD/microsoft-authentication-extensions-for-java) +- spring-security-core (from http://spring.io/spring-security) + +======================================================================== +MPL-1.1 ======================================================================== The following software have components provided under the terms of this license: -- async-timeout (from https://github.com/aio-libs/async_timeout/) -- coverage (from https://github.com/nedbat/coveragepy) -- distributed (from https://distributed.readthedocs.io/en/latest/) -- google-auth (from https://github.com/googleapis/google-auth-library-python) -- google-auth-oauthlib (from https://github.com/GoogleCloudPlatform/google-auth-library-python-oauthlib) -- numpy (from http://www.numpy.org) -- pandas (from http://pandas.pydata.org) -- ply (from http://www.dabeaz.com/ply/) -- portalocker (from https://github.com/WoLpH/portalocker) -- python-dateutil (from https://dateutil.readthedocs.org) -- pytz (from http://pythonhosted.org/pytz) -- rsa (from https://stuvel.eu/rsa) -- sniffio (from https://github.com/python-trio/sniffio) -- typing-extensions (from https://github.com/python/typing) -- urllib3 (from https://urllib3.readthedocs.io/) +- Javassist (from http://www.javassist.org/) +- Javassist (from http://www.javassist.org/) +- RabbitMQ Java Client (from http://www.rabbitmq.com) ======================================================================== -SunPro +MPL-2.0 ======================================================================== The following software have components provided under the terms of this license: -- numpy (from http://www.numpy.org) +- Javassist (from http://www.javassist.org/) +- Javassist (from http://www.javassist.org/) +- RabbitMQ Java Client (from http://www.rabbitmq.com) +- okhttp (from https://square.github.io/okhttp/) ======================================================================== -Unlicense +MS-RL ======================================================================== The following software have components provided under the terms of this license: -- grpcio (from https://grpc.io) +- Microsoft Application Insights Java SDK Core (from https://github.com/Microsoft/ApplicationInsights-Java) ======================================================================== -WTFPL +Public-Domain ======================================================================== The following software have components provided under the terms of this license: -- jsonpath-ng (from https://github.com/h2non/jsonpath-ng) +- Old JAXB Core (from https://repo1.maven.org/maven2/com/sun/xml/bind/jaxb-core) +- Old JAXB Runtime (from https://repo1.maven.org/maven2/com/sun/xml/bind/jaxb-impl) +- Spongy Castle (from http://rtyley.github.io/spongycastle/) ======================================================================== -ZPL-2.1 +SunPro ======================================================================== The following software have components provided under the terms of this license: -- pytz (from http://pythonhosted.org/pytz) +- Lucene Core (from ) ======================================================================== -Zlib +WTFPL ======================================================================== The following software have components provided under the terms of this license: -- grpcio (from https://grpc.io) -- numpy (from http://www.numpy.org) +- Reflections (from http://code.google.com/p/reflections/) ======================================================================== public-domain ======================================================================== The following software have components provided under the terms of this license: -- botocore (from https://github.com/boto/botocore) -- grpcio (from https://grpc.io) -- numpy (from http://www.numpy.org) -- pandas (from http://pandas.pydata.org) -- py (from http://pylib.readthedocs.org/) -- pytz (from http://pythonhosted.org/pytz) +- Asynchronous Http Client (from https://repo1.maven.org/maven2/org/asynchttpclient/async-http-client) +- Guava: Google Core Libraries for Java (from https://github.com/google/guava) +- Guava: Google Core Libraries for Java (from https://github.com/google/guava) +- Guava: Google Core Libraries for Java (from https://github.com/google/guava) +- HdrHistogram (from http://hdrhistogram.github.io/HdrHistogram/) +- Joda-Time (from http://www.joda.org/joda-time/) +- LatencyUtils (from http://latencyutils.github.io/LatencyUtils/) +- Microsoft Application Insights Java SDK Core (from https://github.com/Microsoft/ApplicationInsights-Java) +- Microsoft Azure SDK for EventGrid Management (from https://github.com/Azure/azure-sdk-for-java) +- Microsoft Azure SDK for SQL API of Azure Cosmos DB Service (from https://github.com/Azure/azure-sdk-for-java) +- Microsoft Azure client library for Blob Storage (from https://github.com/Azure/azure-sdk-for-java) +- Project Lombok (from https://projectlombok.org) +- RabbitMQ Java Client (from http://www.rabbitmq.com) +- Spring Web (from https://github.com/spring-projects/spring-framework) +- azure-documentdb (from http://azure.microsoft.com/en-us/services/documentdb/) +- msal4j (from https://github.com/AzureAD/microsoft-authentication-library-for-java) +- reactive-streams (from http://www.reactive-streams.org/) + +======================================================================== +unknown +======================================================================== +The following software have components provided under the terms of this license: + +- Byte Buddy (without dependencies) (from ) +- Checker Qual (from ) +- Checker Qual (from ) +- JSON in Java (from https://github.com/douglascrockford/JSON-java) +- JUnit Jupiter (Aggregator) (from https://junit.org/junit5/) +- JUnit Jupiter API (from https://junit.org/junit5/) +- JUnit Jupiter Engine (from https://junit.org/junit5/) +- JUnit Platform Commons (from https://junit.org/junit5/) +- JUnit Platform Engine API (from https://junit.org/junit5/) +- Spongy Castle (from http://rtyley.github.io/spongycastle/) +- org.junit.jupiter:junit-jupiter-params (from http://junit.org/junit5/) diff --git a/devops/azure/chart/values.yaml b/devops/azure/chart/values.yaml index 04027457beffc4da0c986211f30c669a348a291a..dbdddb55097c54d21a72a8e8b2ac34a1a294c106 100644 --- a/devops/azure/chart/values.yaml +++ b/devops/azure/chart/values.yaml @@ -22,4 +22,4 @@ image: branch: master tag: latest -istioDnsHost: "" \ No newline at end of file +istioDnsHost: "contoso.com" \ No newline at end of file diff --git a/notification-core/pom.xml b/notification-core/pom.xml index 3fa0c0daddc81a8a322473bf09b53ec65bacb943..d6efad7d0fd4422eea49bb45fa9a9832ae456db8 100644 --- a/notification-core/pom.xml +++ b/notification-core/pom.xml @@ -19,7 +19,7 @@ <modelVersion>4.0.0</modelVersion> <groupId>org.opengroup.osdu</groupId> <artifactId>notification-core</artifactId> - <version>0.12.0-SNAPSHOT</version> + <version>0.13.0-SNAPSHOT</version> <name>notification-core</name> <description>Core module for the notification service</description> <packaging>jar</packaging> @@ -27,7 +27,7 @@ <parent> <groupId>org.opengroup.osdu</groupId> <artifactId>os-notification</artifactId> - <version>0.12.0-SNAPSHOT</version> + <version>0.13.0-SNAPSHOT</version> <relativePath>../pom.xml</relativePath> </parent> diff --git a/pom.xml b/pom.xml index 1eb35720a06ca87c80e95c1b2ae660022cf5531f..2e28d8022c637fdebca0272d240c413860405669 100644 --- a/pom.xml +++ b/pom.xml @@ -18,7 +18,7 @@ <modelVersion>4.0.0</modelVersion> <groupId>org.opengroup.osdu</groupId> <artifactId>os-notification</artifactId> - <version>0.12.0-SNAPSHOT</version> + <version>0.13.0-SNAPSHOT</version> <description>Root Notification Service project</description> <properties> @@ -26,6 +26,7 @@ <maven.compiler.target>${java.version}</maven.compiler.target> <maven.compiler.source>${java.version}</maven.compiler.source> <os-core-common.version>0.13.0-rc3</os-core-common.version> + <log4j2.version>2.16.0</log4j2.version> </properties> <licenses> @@ -71,6 +72,17 @@ <artifactId>jackson-annotations</artifactId> <version>2.12.3</version> </dependency> + + <dependency> + <groupId>org.apache.logging.log4j</groupId> + <artifactId>log4j-to-slf4j</artifactId> + <version>${log4j2.version}</version> + </dependency> + <dependency> + <groupId>org.apache.logging.log4j</groupId> + <artifactId>log4j-api</artifactId> + <version>${log4j2.version}</version> + </dependency> </dependencies> </dependencyManagement> diff --git a/provider/notification-aws/pom.xml b/provider/notification-aws/pom.xml index c17e31005944a67da2b3efa23c266c99cb96c83b..772d0fd24edc1bbf618558c9527845a2bbc50868 100644 --- a/provider/notification-aws/pom.xml +++ b/provider/notification-aws/pom.xml @@ -19,7 +19,7 @@ <modelVersion>4.0.0</modelVersion> <groupId>org.opengroup.osdu</groupId> <artifactId>notification-aws</artifactId> - <version>0.12.0-SNAPSHOT</version> + <version>0.13.0-SNAPSHOT</version> <name>notification-aws</name> <description>AWS implementation for Notification service</description> <packaging>jar</packaging> @@ -27,7 +27,7 @@ <parent> <groupId>org.opengroup.osdu</groupId> <artifactId>os-notification</artifactId> - <version>0.12.0-SNAPSHOT</version> + <version>0.13.0-SNAPSHOT</version> <relativePath>../../pom.xml</relativePath> </parent> @@ -70,7 +70,7 @@ <dependency> <groupId>org.opengroup.osdu.core.aws</groupId> <artifactId>os-core-lib-aws</artifactId> - <version>0.13.0-SNAPSHOT</version> + <version>0.13.0-rc2</version> </dependency> <!-- https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk-secretsmanager --> @@ -83,7 +83,7 @@ <dependency> <groupId>org.opengroup.osdu</groupId> <artifactId>notification-core</artifactId> - <version>0.12.0-SNAPSHOT</version> + <version>0.13.0-SNAPSHOT</version> </dependency> <dependency> diff --git a/provider/notification-azure/pom.xml b/provider/notification-azure/pom.xml index 47238f754f4feb534b4874a1936ee713781c4317..6241ad3652f2dc7f41dc6fedf3018a5252b267f4 100644 --- a/provider/notification-azure/pom.xml +++ b/provider/notification-azure/pom.xml @@ -18,7 +18,7 @@ <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> <artifactId>notification-azure</artifactId> - <version>0.12.0-SNAPSHOT</version> + <version>0.13.0-SNAPSHOT</version> <name>notification-azure</name> <description>Azure implementation for Notification service</description> <packaging>jar</packaging> @@ -26,7 +26,7 @@ <parent> <groupId>org.opengroup.osdu</groupId> <artifactId>os-notification</artifactId> - <version>0.12.0-SNAPSHOT</version> + <version>0.13.0-SNAPSHOT</version> <relativePath>../../pom.xml</relativePath> </parent> @@ -35,12 +35,12 @@ <maven.compiler.target>${java.version}</maven.compiler.target> <maven.compiler.source>${java.version}</maven.compiler.source> <jacoco-maven-plugin.version>0.8.2</jacoco-maven-plugin.version> - <osdu.notification-core.version>0.12.0-SNAPSHOT</osdu.notification-core.version> + <osdu.notification-core.version>0.13.0-SNAPSHOT</osdu.notification-core.version> <springframework.version>4.3.0.RELEASE</springframework.version> <reactor.netty.version>0.11.0.RELEASE</reactor.netty.version> <reactor.core.version>3.3.0.RELEASE</reactor.core.version> - <osdu.corelibazure.version>0.12.0-rc10</osdu.corelibazure.version> - <osdu.oscorecommon.version>0.12.0-rc3</osdu.oscorecommon.version> + <osdu.corelibazure.version>0.13.0-rc5</osdu.corelibazure.version> + <osdu.oscorecommon.version>0.13.0-rc3</osdu.oscorecommon.version> <junit.version>5.6.0</junit.version> <jjwt.version>3.8.1</jjwt.version> <mockito.version>2.23.0</mockito.version> @@ -68,6 +68,21 @@ <type>pom</type> <scope>import</scope> </dependency> + <dependency> + <groupId>org.apache.logging.log4j</groupId> + <artifactId>log4j-core</artifactId> + <version>${log4j2.version}</version> + </dependency> + <dependency> + <groupId>org.apache.logging.log4j</groupId> + <artifactId>log4j-slf4j-impl</artifactId> + <version>${log4j2.version}</version> + </dependency> + <dependency> + <groupId>org.apache.logging.log4j</groupId> + <artifactId>log4j-jul</artifactId> + <version>${log4j2.version}</version> + </dependency> </dependencies> </dependencyManagement> @@ -239,4 +254,4 @@ </plugin> </plugins> </reporting> -</project> \ No newline at end of file +</project> diff --git a/provider/notification-gcp/README.md b/provider/notification-gcp/README.md index 80a59b3287f04ee392f40d1e1d83fd8b0dc23384..3f73c6807b45196421132241c087fd9690ae5d82 100644 --- a/provider/notification-gcp/README.md +++ b/provider/notification-gcp/README.md @@ -4,13 +4,39 @@ notification-gcp is a [Spring Boot](https://spring.io/projects/spring-boot) serv ## Getting Started These instructions will get you a copy of the project up and running on your local machine for development and testing purposes. See deployment for notes on how to deploy the project on a live system. -### Requirements +# Features of implementation +This is a universal solution created using EPAM OQM mapper technology. +It allows you to work with various implementations of message brokers. + +## Limitations of the current version + +In the current version, the OQM mapper is equipped with 2 drivers to the message brokers: + +- Google PubSub; +- RabbitMQ + +## Extensibility + +To use any other message broker, implement a driver for it. With an extensible set of drivers, the solution is unrestrictedly universal and portable without modification to the main code. + +Mapper support "multitenancy" with flexibility in how it is implemented. +It switches between datasources of different tenants due to the work of a bunch of classes that implement the following interfaces: + +- Destination - takes a description of the current context, e.g., "data-partition-id = opendes" +- DestinationResolver – accepts Destination, finds the resource, connects, and returns Resolution +- DestinationResolution – contains a ready-made connection, the mapper uses it to get to data + +# Settings and Configuration +## Requirements +### Mandatory * Java 8 * [Maven 3.6.0+](https://maven.apache.org/download.cgi) + +### for Google Cloud only * GCloud command line tool * GCloud access to opendes project -### General Tips +## General Tips **Environment Variable Management** The following tools make environment variable configuration simpler @@ -22,16 +48,62 @@ This project uses [Lombok](https://projectlombok.org/) for code generation. You - [Intellij configuration](https://projectlombok.org/setup/intellij) - [VSCode configuration](https://projectlombok.org/setup/vscode) -### Installation -In order to run the service locally or remotely, you will need to have the following environment variables defined. +## Mapper tuning mechanisms + +This service uses specific implementation of DestinationResolver based on the tenant information provided by the OSDU Partition service. +A total of 2 resolvers are implemented, which are divided into two groups: +### for universal technologies: +- for RabbitMQ: mappers/oqm/MqTenantOqmDestinationResolver.java + +#### Their algorithms are as follows: +- incoming Destination carries data-partition-id +- resolver accesses the Partition service and gets PartitionInfo +- from PartitionInfo resolver retrieves properties for the connection: URL, username, password etc. +- resolver creates a data source, connects to the resource, remembers the datasource +- resolver gives the datasource to the mapper in the Resolution object + +### for native Google Cloud technologies: +- for PubSub: mappers/oqm/PsTenantOqmDestinationResolver.java + +#### Their algorithms are similar, +Except that they do not receive special properties from the Partition service for connection, because the location of the resources is unambiguously known - they are in the GCP project. And credentials are also not needed - access to data is made on behalf of the Google Identity SA under which the service itself is launched. Therefore, resolver takes only the value of the **projectId** property from PartitionInfo and uses it to connect to a resource in the corresponding GCP project. + +# Configuration + +## Service Configuration +In order to run the service locally or remotely, define the following environment variables. +Most of them are common to all hosting environments, but there are properties that are only necessary when running in Google Cloud. + +#### Common properties for all environments | name | value | description | sensitive? | source | | --- | --- | --- | --- | --- | | `APP_ENTITLEMENTS` | ex `https://entitlements.com/entitlements/v1` | Entitlements API endpoint | no | output of infrastructure deployment | | `APP_REGISTER` | ex `https://register.com/api/register/v1` | Storage API endpoint | no | output of infrastructure deployment | +| `PARTITION_API` | ex `http://localhost:8081/api/partition/v1` | Partition service endpoint | no | - | + +#### For Mappers, to activate drivers + +| name | value | description | +|-----------|-----------|-----------------------------------------------------| +| OQMDRIVER | pubsub | to activate **OQM** driver for **Google PubSub** | +| OQMDRIVER | rabbitmq | to activate **OQM** driver for **Rabbit MQ** | + +#### For Google Cloud only +| name | value | description | sensitive? | source | +|------------------------------|---------------------------------------|--------------------------------------------------------------------|------------|---------------------------------------------------| | `APP_PROJECT` | ex `opendes` | Google Cloud Project Id | no | output of infrastructure deployment | | `APP_AUDIENCES` | ex `*****.apps.googleusercontent.com` | Client ID for getting access to cloud resources | yes | https://console.cloud.google.com/apis/credentials | -| `PARTITION_API` | ex `http://localhost:8081/api/partition/v1` | Partition service endpoint | no | - | + +##### service account IAM roles +Also, the following IAM roles should be assigned to the service's Google service account (SA) + +| IAM role | The purpose | +|----------|-------------------------------------------------------------------------------| +| Service Account Token Creator | To write yourself JWT for requesting neighbor microservices | +| Pub/Sub Editor | To fetch available PubSub topics and subscriptions and be able to create them | + + **System Environment required to run service** @@ -39,7 +111,115 @@ In order to run the service locally or remotely, you will need to have the follo | --- | --- | --- | --- | --- | | `SPRING_PROFILES_ACTIVE` | `local` | spring active profile | no | -### Run Locally +## Configuring mappers Datasources +When using non-Google-Cloud-native technologies, property sets must be defined on the Partition service as part of PartitionInfo for each Tenant. + +#### for OQM - RabbitMQ: +**prefix:** `oqm.rabbitmq` +It can be overridden by: + +- through the Spring Boot property `oqm.rabbitmq.partitionPropertiesPrefix` +- environment variable `OQM_RABBITMQ_PARTITIONPROPERTIESPREFIX` + +**Propertyset** (for two types of connection: messaging and admin operations): + +| Property | Description | +| --- | --- | +| oqm.rabbitmq.amqp.host | messaging hostnameorIP | +| oqm.rabbitmq.amqp.port | - port | +| oqm.rabbitmq.amqp.path | - path | +| oqm.rabbitmq.amqp.username | - username | +| oqm.rabbitmq.amqp.password | - password | +| oqm.rabbitmq.admin.schema | admin host schema | +| oqm.rabbitmq.admin.host | - host name | +| oqm.rabbitmq.admin.port | - port | +| oqm.rabbitmq.admin.path | - path | +| oqm.rabbitmq.admin.username | - username | +| oqm.rabbitmq.admin.password | - password | + +<details><summary>Example of a single tenant definition</summary> + +``` + +curl -L -X PATCH 'https://dev.osdu.club/api/partition/v1/partitions/opendes' -H 'data-partition-id: opendes' -H 'Authorization: Bearer ...' -H 'Content-Type: application/json' --data-raw '{ + "properties": { + "oqm.rabbitmq.amqp.host": { + "sensitive": false, + "value": "localhost" + }, + "oqm.rabbitmq.amqp.port": { + "sensitive": false, + "value": "5672" + }, + "oqm.rabbitmq.amqp.path": { + "sensitive": false, + "value": "" + }, + "oqm.rabbitmq.amqp.username": { + "sensitive": false, + "value": "guest" + }, + "oqm.rabbitmq.amqp.password": { + "sensitive": true, + "value": "guest" + }, + + "oqm.rabbitmq.admin.schema": { + "sensitive": false, + "value": "http" + }, + "oqm.rabbitmq.admin.host": { + "sensitive": false, + "value": "localhost" + }, + "oqm.rabbitmq.admin.port": { + "sensitive": false, + "value": "9002" + }, + "oqm.rabbitmq.admin.path": { + "sensitive": false, + "value": "/api" + }, + "oqm.rabbitmq.admin.username": { + "sensitive": false, + "value": "guest" + }, + "oqm.rabbitmq.admin.password": { + "sensitive": true, + "value": "guest" + } + } +}' + +``` + +</details> + +## Interaction with message brokers + +### Specifics of work through PULL subscription + +To receive messages from brokers, this solution uses the PULL-subscriber mechanism in the Notification service. +This is its cardinal difference from other implementations that use PUSH-subscribers (webhooks). +This opens a wide choice when choosing brokers. + +When using PULL-subscribers, there is a need to restore Notification service subscribers for each Subscription +at the start of Notification service, as well as in the runtime, +upon registration of a new Subscription by the Register service. + +To do this, a special "command" topic is involved: + +- the default topic name is `register-subscriber-control`. + +If necessary, the name of the topic can be overridden through: + +- Spring Boot property `oqm.registerSubscriberControlTopicName` +- environment variable `OQM_REGISTERSUBSCRIBERCONTROLTOPICNAME` + +A topic is created, in its absence, when any of Register or Notification services starts. + +# Run and test the service +## Running Locally Check that maven is installed: ```bash $ mvn --version @@ -145,9 +325,9 @@ After the service has started it should be accessible via a web browser by visit **Entitlements configuration for integration accounts** - | DE_OPS_TESTER | DE_ADMIN_TESTER | DE_EDITOR_TESTER | DE_NO_ACCESS_TESTER | - | --- | --- | --- | --- | - |notification.pubsub<br/>service.entitlements.user<br/>users<br/>users.datalake.ops</br>| service.entitlements.user<br/>users<br/>users.datalake.admins</br> | service.entitlements.user<br/>users<br/>users.datalake.editors</br> | service.entitlements.user<br/>users<br/>| +| DE_OPS_TESTER | DE_ADMIN_TESTER | DE_EDITOR_TESTER | DE_NO_ACCESS_TESTER | +| --- | --- | --- | --- | +|notification.pubsub<br/>service.entitlements.user<br/>users<br/>users.datalake.ops</br>| service.entitlements.user<br/>users<br/>users.datalake.admins</br> | service.entitlements.user<br/>users<br/>users.datalake.editors</br> | service.entitlements.user<br/>users<br/>| Above variables should be configured in the release pipeline to run integration tests. You should also replace them with proper values if you wish to run tests locally. diff --git a/provider/notification-gcp/cloudbuild/Dockerfile.cloudbuild b/provider/notification-gcp/cloudbuild/Dockerfile.cloudbuild index add6982053a6b2d7caa76087c44e74fb0f73ce3f..341b2989699270e43ebe643d5ee4f41a192b1d05 100644 --- a/provider/notification-gcp/cloudbuild/Dockerfile.cloudbuild +++ b/provider/notification-gcp/cloudbuild/Dockerfile.cloudbuild @@ -9,4 +9,4 @@ ENV PORT $PORT # Copy the jar to the production image from the builder stage. COPY provider/notification-${PROVIDER_NAME}/target/notification-${PROVIDER_NAME}-*-spring-boot.jar notification-${PROVIDER_NAME}.jar # Run the web service on container startup. -CMD java -Djava.security.egd=file:/dev/./urandom -Dserver.port=${PORT} -jar /app/notification-${PROVIDER_NAME}.jar +CMD java -Djava.security.egd=file:/dev/./urandom -Dserver.port=${PORT} -Dlog4j.formatMsgNoLookups=true -jar /app/notification-${PROVIDER_NAME}.jar diff --git a/provider/notification-gcp/pom.xml b/provider/notification-gcp/pom.xml index a86b437ba4371a20cf5b1e3e9d70b00773d9f8bf..bb696884975c7c356d6b3105aad2068c0cc1b29c 100644 --- a/provider/notification-gcp/pom.xml +++ b/provider/notification-gcp/pom.xml @@ -18,7 +18,7 @@ <modelVersion>4.0.0</modelVersion> <groupId>org.opengroup.osdu</groupId> <artifactId>notification-gcp</artifactId> - <version>0.12.0-SNAPSHOT</version> + <version>0.13.0-SNAPSHOT</version> <name>notification-gcp</name> <description>GCP implementation for Notification service</description> <packaging>jar</packaging> @@ -26,7 +26,7 @@ <parent> <groupId>org.opengroup.osdu</groupId> <artifactId>os-notification</artifactId> - <version>0.12.0-SNAPSHOT</version> + <version>0.13.0-SNAPSHOT</version> <relativePath>../../pom.xml</relativePath> </parent> @@ -37,6 +37,12 @@ </properties> <dependencies> + <dependency> + <groupId>org.opengroup.osdu</groupId> + <artifactId>oqm</artifactId> + <version>0.13.0-SNAPSHOT</version> + </dependency> + <dependency> <groupId>org.opengroup.osdu</groupId> <artifactId>os-core-common</artifactId> @@ -44,13 +50,13 @@ <dependency> <groupId>org.opengroup.osdu</groupId> <artifactId>core-lib-gcp</artifactId> - <version>0.11.0</version> + <version>0.13.0-rc3</version> </dependency> <dependency> <groupId>org.opengroup.osdu</groupId> <artifactId>notification-core</artifactId> - <version>0.12.0-SNAPSHOT</version> + <version>0.13.0-SNAPSHOT</version> </dependency> <dependency> diff --git a/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/di/PartitionProviderConfig.java b/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/di/PartitionProviderConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..d051f6672b352a47e67f92bcad757fd7076799e1 --- /dev/null +++ b/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/di/PartitionProviderConfig.java @@ -0,0 +1,33 @@ +package org.opengroup.osdu.notification.provider.gcp.di; + +import org.opengroup.osdu.core.common.model.http.DpsHeaders; +import org.opengroup.osdu.core.common.partition.IPartitionFactory; +import org.opengroup.osdu.core.common.partition.IPartitionProvider; +import org.opengroup.osdu.core.gcp.googleidtoken.GcpServiceAccountJwtClient; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.context.annotation.Scope; + +import static org.springframework.beans.factory.config.BeanDefinition.SCOPE_PROTOTYPE; +import static org.springframework.context.annotation.ScopedProxyMode.TARGET_CLASS; + +/** + * Enables partition info resolution outside of request scope + */ +@Configuration +public class PartitionProviderConfig { + + @Bean + @Primary + @Scope(value = SCOPE_PROTOTYPE, proxyMode = TARGET_CLASS) + public IPartitionProvider partitionProvider( + IPartitionFactory partitionFactory, + GcpServiceAccountJwtClient jwtClient + ) { + DpsHeaders partitionHeaders = new DpsHeaders(); + String idToken = jwtClient.getDefaultOrInjectedServiceAccountIdToken(); + partitionHeaders.put("authorization", idToken); + return partitionFactory.create(partitionHeaders); + } +} \ No newline at end of file diff --git a/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/mappers/oqm/MqOqmConfigurationProperties.java b/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/mappers/oqm/MqOqmConfigurationProperties.java new file mode 100644 index 0000000000000000000000000000000000000000..f87188a274c46790734eb1da4375d1c2d6c5d2a5 --- /dev/null +++ b/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/mappers/oqm/MqOqmConfigurationProperties.java @@ -0,0 +1,34 @@ +/* + Copyright 2020 Google LLC + Copyright 2020 EPAM Systems, Inc + + 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.opengroup.osdu.notification.provider.gcp.mappers.oqm; + +import lombok.Getter; +import lombok.Setter; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ConditionalOnProperty(name = "oqmDriver", havingValue = "rabbitmq") +@ConfigurationProperties(prefix = "oqm.rabbitmq") +@Getter +@Setter +public class MqOqmConfigurationProperties { + + private String partitionPropertiesPrefix = "oqm.rabbitmq"; + +} diff --git a/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/mappers/oqm/MqTenantOqmDestinationResolver.java b/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/mappers/oqm/MqTenantOqmDestinationResolver.java new file mode 100644 index 0000000000000000000000000000000000000000..c8da3f492875c162f68c1884e01724dcd0ba6c57 --- /dev/null +++ b/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/mappers/oqm/MqTenantOqmDestinationResolver.java @@ -0,0 +1,165 @@ +/* + Copyright 2020 Google LLC + Copyright 2020 EPAM Systems, Inc + + 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.opengroup.osdu.notification.provider.gcp.mappers.oqm; + +import com.rabbitmq.client.ConnectionFactory; +import com.rabbitmq.http.client.Client; +import com.rabbitmq.http.client.ClientParameters; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.opengroup.osdu.core.common.partition.IPartitionProvider; +import org.opengroup.osdu.core.common.partition.PartitionException; +import org.opengroup.osdu.core.common.partition.PartitionInfo; +import org.opengroup.osdu.core.common.partition.Property; +import org.opengroup.osdu.core.gcp.oqm.driver.OqmDriverRuntimeException; +import org.opengroup.osdu.core.gcp.oqm.driver.rabbitmq.MqOqmDestinationResolution; +import org.opengroup.osdu.core.gcp.oqm.model.OqmDestination; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; + +import javax.annotation.PreDestroy; +import java.net.MalformedURLException; +import java.net.URI; +import java.net.URISyntaxException; +import java.security.KeyManagementException; +import java.security.NoSuchAlgorithmException; +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; + +import static org.springframework.beans.factory.config.BeanDefinition.SCOPE_SINGLETON; + +/** + * For RabbitMQ. Tenant Based OQM destination resolver + */ +@Component +@Scope(SCOPE_SINGLETON) +@ConditionalOnProperty(name = "oqmDriver", havingValue = "rabbitmq") +@RequiredArgsConstructor +@Slf4j +public class MqTenantOqmDestinationResolver implements org.opengroup.osdu.core.gcp.oqm.driver.rabbitmq.MqOqmDestinationResolver { + + private final MqOqmConfigurationProperties properties; + + //Compose names to get configuration properties from Partition + private static final String AMQP = ".amqp."; + private static final String AMQP_HOST = AMQP.concat("host"); + private static final String AMQP_PORT = AMQP.concat("port"); + private static final String AMQP_PATH = AMQP.concat("path"); + private static final String AMQP_USERNAME = AMQP.concat("username"); + private static final String AMQP_PASSWORD = AMQP.concat("password"); + + private static final String ADMIN = ".admin."; + private static final String ADMIN_SCHEMA = ADMIN.concat("schema"); + private static final String ADMIN_HOST = ADMIN.concat("host"); + private static final String ADMIN_PORT = ADMIN.concat("port"); + private static final String ADMIN_PATH = ADMIN.concat("path"); + private static final String ADMIN_USERNAME = ADMIN.concat("username"); + private static final String ADMIN_PASSWORD = ADMIN.concat("password"); + + private final IPartitionProvider partitionProvider; + + private final Map<String, ConnectionFactory> amqpConnectionFactoryCache = new HashMap<>(); + private final Map<String, Client> httpClientCache = new HashMap<>(); + + @Override + public MqOqmDestinationResolution resolve(OqmDestination destination) { + + String partitionId = destination.getPartitionId(); + + //noinspection SwitchStatementWithTooFewBranches + switch (partitionId) { + default: + + String virtualHost = "/"; + + ConnectionFactory amqpFactory = amqpConnectionFactoryCache.get(partitionId); + Client httpClient = httpClientCache.get(partitionId); + + if (amqpFactory == null || httpClient == null) { + + PartitionInfo partitionInfo; + try { + partitionInfo = partitionProvider.get(partitionId); + } catch (PartitionException e) { + throw new OqmDriverRuntimeException(e, "Partition '%s' destination resolution issue", destination.getPartitionId()); + } + Map<String, Property> partitionProperties = partitionInfo.getProperties(); + + if (amqpFactory == null) { + + String amqpHost = getPartitionProperty(partitionId, partitionProperties, AMQP_HOST); + String amqpPort = getPartitionProperty(partitionId, partitionProperties, AMQP_PORT); + String amqpPath = getPartitionProperty(partitionId, partitionProperties, AMQP_PATH); + String amqpUser = getPartitionProperty(partitionId, partitionProperties, AMQP_USERNAME); + String amqpPass = getPartitionProperty(partitionId, partitionProperties, AMQP_PASSWORD); + + URI amqpUri; + try { + amqpUri = new URI("amqp", amqpUser + ":" + amqpPass, amqpHost, Integer.parseInt(amqpPort), amqpPath, null, null); + amqpFactory = new ConnectionFactory(); + amqpFactory.setUri(amqpUri); + amqpConnectionFactoryCache.put(partitionId, amqpFactory); + + } catch (URISyntaxException | NoSuchAlgorithmException | KeyManagementException e) { + throw new OqmDriverRuntimeException("RabbitMQ amqp URI and ConnectionFactory", e); + } + } + + if (httpClient == null) { + + String adminSchm = getPartitionProperty(partitionId, partitionProperties, ADMIN_SCHEMA); + String adminHost = getPartitionProperty(partitionId, partitionProperties, ADMIN_HOST); + String adminPort = getPartitionProperty(partitionId, partitionProperties, ADMIN_PORT); + String adminPath = getPartitionProperty(partitionId, partitionProperties, ADMIN_PATH); + String adminUser = getPartitionProperty(partitionId, partitionProperties, ADMIN_USERNAME); + String adminPass = getPartitionProperty(partitionId, partitionProperties, ADMIN_PASSWORD); + + try { + URI httpUrl = new URI(adminSchm, null, adminHost, Integer.parseInt(adminPort), adminPath, null, null); + ClientParameters clientParameters = new ClientParameters().url(httpUrl.toURL()) + .username(adminUser).password(adminPass); + + httpClient = new Client(clientParameters); + httpClientCache.put(partitionId, httpClient); + + } catch (URISyntaxException | MalformedURLException e) { + throw new OqmDriverRuntimeException("RabbitMQ http(api) URI and Client", e); + } + } + } + return MqOqmDestinationResolution.builder() + .amqpFactory(amqpFactory) + .adminClient(httpClient) + .virtualHost(virtualHost) + .build(); + } + } + + private String getPartitionProperty(String partitionId, Map<String, Property> partitionProperties, String propertyName) { + String fullName = properties.getPartitionPropertiesPrefix().concat(propertyName); + return Optional.ofNullable(partitionProperties.get(fullName)).map(Property::getValue).map(Object::toString) + .orElseThrow(() -> new OqmDriverRuntimeException(null, + "Partition '%s' RabbitMQ OQM destination resolution configuration issue. Property '%s' is not provided in PartitionInfo.", + partitionId, fullName)); + } + + @PreDestroy + public void shutdown() { + log.info("On pre-destroy."); + } +} diff --git a/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/mappers/oqm/OqmConfigurationProperties.java b/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/mappers/oqm/OqmConfigurationProperties.java new file mode 100644 index 0000000000000000000000000000000000000000..f062ae3ee15b4352a904085b832a29e8418c452e --- /dev/null +++ b/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/mappers/oqm/OqmConfigurationProperties.java @@ -0,0 +1,34 @@ +/* + Copyright 2020 Google LLC + Copyright 2020 EPAM Systems, Inc + + 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.opengroup.osdu.notification.provider.gcp.mappers.oqm; + +import lombok.Getter; +import lombok.Setter; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ConditionalOnProperty(name = "oqmDriver") +@ConfigurationProperties(prefix = "oqm") +@Getter +@Setter +public class OqmConfigurationProperties { + + private String registerSubscriberControlTopicName = "register-subscriber-control"; + +} diff --git a/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/mappers/oqm/PsTenantOqmDestinationResolver.java b/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/mappers/oqm/PsTenantOqmDestinationResolver.java new file mode 100644 index 0000000000000000000000000000000000000000..2ddca9bebde20fa4d434a966e85d69fd7c53db90 --- /dev/null +++ b/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/mappers/oqm/PsTenantOqmDestinationResolver.java @@ -0,0 +1,110 @@ +/* + Copyright 2020 Google LLC + Copyright 2020 EPAM Systems, Inc + + 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.opengroup.osdu.notification.provider.gcp.mappers.oqm; + +import com.google.cloud.pubsub.v1.SubscriptionAdminClient; +import com.google.cloud.pubsub.v1.TopicAdminClient; +import com.google.cloud.pubsub.v1.TopicAdminSettings; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.opengroup.osdu.core.common.model.tenant.TenantInfo; +import org.opengroup.osdu.core.common.provider.interfaces.ITenantFactory; +import org.opengroup.osdu.core.gcp.oqm.driver.OqmDriverRuntimeException; +import org.opengroup.osdu.core.gcp.oqm.driver.pubsub.PsOqmDestinationResolution; +import org.opengroup.osdu.core.gcp.oqm.driver.pubsub.PsOqmDestinationResolver; +import org.opengroup.osdu.core.gcp.oqm.model.OqmDestination; +import org.opengroup.osdu.notification.provider.gcp.util.GcpAppServiceConfig; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; + +import javax.annotation.PreDestroy; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +import static org.springframework.beans.factory.config.BeanDefinition.SCOPE_SINGLETON; + +/** + * For GCP PubSub. Tenant Based OQM destination resolver + */ +@Component +@Scope(SCOPE_SINGLETON) +@ConditionalOnProperty(name = "oqmDriver", havingValue = "pubsub") +@Slf4j +@RequiredArgsConstructor +public class PsTenantOqmDestinationResolver implements PsOqmDestinationResolver { + + private Map<OqmDestination, TopicAdminClient> topicClientCache = new HashMap<>(); + private Map<OqmDestination, SubscriptionAdminClient> subscriptionClientCache = new HashMap<>(); + + private final ITenantFactory tenantInfoFactory; + private final GcpAppServiceConfig config; + + @Override + public PsOqmDestinationResolution resolve(OqmDestination destination) { + TenantInfo ti = tenantInfoFactory.getTenantInfo(destination.getPartitionId()); + String partitionId = destination.getPartitionId(); + + //noinspection SwitchStatementWithTooFewBranches + switch (partitionId) { + default: + String servicesProjectId = config.getGoogleCloudProject(); + String dataProjectId = ti.getProjectId(); + + TopicAdminClient tac = topicClientCache.get(destination); + if (tac == null) { + try { + TopicAdminSettings tas = TopicAdminSettings.newBuilder().build(); + tac = TopicAdminClient.create(tas); + topicClientCache.put(destination, tac); + } catch (IOException e) { + throw new OqmDriverRuntimeException("PsOqmDestinationResolution#resolve TopicAdminClient", e); + } + } + + SubscriptionAdminClient sac = subscriptionClientCache.get(destination); + if (sac == null) { + try { + sac = SubscriptionAdminClient.create(); + subscriptionClientCache.put(destination, sac); + } catch (IOException e) { + throw new OqmDriverRuntimeException("PsOqmDestinationResolution#resolve SubscriptionAdminClient", e); + } + } + + return PsOqmDestinationResolution.builder() + .servicesProjectId(servicesProjectId) + .dataProjectId(dataProjectId) + .topicAdminClient(tac) + .subscriptionAdminClient(sac) + .build(); + } + } + + @PreDestroy + public void shutdown() { + log.info("On pre-destroy. {} topic client(s) & {} subscription clients to shutdown", + topicClientCache.size(), subscriptionClientCache.size()); + for (TopicAdminClient tac : topicClientCache.values()) { + tac.shutdown(); + } + for (SubscriptionAdminClient sac : subscriptionClientCache.values()) { + sac.shutdown(); + } + } +} diff --git a/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/pubsub/OqmSubscriberManager.java b/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/pubsub/OqmSubscriberManager.java new file mode 100644 index 0000000000000000000000000000000000000000..36f57d916a8973e061d133ccf4b1e6c804853482 --- /dev/null +++ b/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/pubsub/OqmSubscriberManager.java @@ -0,0 +1,215 @@ +/* + * Copyright 2017-2020, Schlumberger + * + * 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.opengroup.osdu.notification.provider.gcp.pubsub; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.opengroup.osdu.core.common.http.HttpResponse; +import org.opengroup.osdu.core.common.model.tenant.TenantInfo; +import org.opengroup.osdu.core.common.provider.interfaces.ITenantFactory; +import org.opengroup.osdu.core.gcp.oqm.driver.OqmDriver; +import org.opengroup.osdu.core.gcp.oqm.driver.OqmDriverRuntimeException; +import org.opengroup.osdu.core.gcp.oqm.model.*; +import org.opengroup.osdu.notification.provider.gcp.mappers.oqm.OqmConfigurationProperties; +import org.opengroup.osdu.notification.provider.gcp.pubsub.di.OqmNotificationHandler; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import javax.annotation.PreDestroy; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import static org.springframework.beans.factory.config.BeanDefinition.SCOPE_SINGLETON; + +/** + * Runs once on the service start. + * 1. Fetches oqm for message broker pull subscriptions in interested topics. Creates the service's subscribers in every found subscription. + * 2. Checks for the "subscriber control topic" and creates if it is absent. + * - This topic is a "control channel" between Register and Notification services. + * - The former sends events on new pull Subscriptions being created, the latter listens for events and creates corresponding Subscribers. + */ +@Slf4j +@Component +@Scope(SCOPE_SINGLETON) +@ConditionalOnProperty(name = "oqmDriver") +@RequiredArgsConstructor +public class OqmSubscriberManager { + + private final String ACKNOWLEDGE = "message acknowledged by client"; + private final String NOT_ACKNOWLEDGE = "message not acknowledged by client"; + + //TODO should be externalized to application.properties + private static final List<OqmTopic> INTERESTED_TOPICS = + Stream.of("records-changed", "schema-changed", "status-changed", "legaltags_changed") + .map(topicName -> OqmTopic.builder().name(topicName).build()).collect(Collectors.toList()); + + private static final String INTERESTED_SUBSCRIPTIONS_PREFIX = "de-"; + + private static final OqmSubscriptionQuery INTERESTED_SUBSCRIPTIONS_QUERY = OqmSubscriptionQuery.builder() + .forAnyOfTopics(INTERESTED_TOPICS).namePrefix(INTERESTED_SUBSCRIPTIONS_PREFIX) + .subscriberable(true).build(); + + private final ITenantFactory tenantInfoFactory; + private final OqmDriver driver; + private final OqmNotificationHandler notificationHandler; + private final OqmConfigurationProperties properties; + + private final Long constructDate = System.currentTimeMillis(); + private final String subscriberControlTopicSubscriptionName = "notification-service-" + constructDate; + private OqmSubscription subscriberControlTopicSubscription = null; + + + @PostConstruct + void postConstruct() { + log.info("OqmSubscriberManager bean constructed. Provisioning STARTED"); + + //Get all Tenant infos + for (TenantInfo tenantInfo : tenantInfoFactory.listTenantInfo()) { + log.info("* OqmSubscriberManager on provisioning tenant {}:", tenantInfo.getDataPartitionId()); + //For every Tenant Destination get "subscriberable" Subscriptions + for (OqmSubscription subscription : getSubscriberableSubscriptions(tenantInfo)) { + log.info("* * OqmSubscriberManager on provisioning for tenant {}, subscription {}:", tenantInfo.getDataPartitionId(), subscription.getName()); + + //Register a Subscriber on every subscription + registerSubscriber(tenantInfo, subscription); + + log.info("* * OqmSubscriberManager on provisioning for tenant {}, subscription {}: Subscriber REGISTERED.", tenantInfo.getDataPartitionId(), subscription.getName()); + } + log.info("* OqmSubscriberManager on provisioning tenant {}: COMPLETED.", tenantInfo.getDataPartitionId()); + } + + TenantInfo tenant = tenantInfoFactory.listTenantInfo().stream().findAny() + .orElseThrow(() -> new OqmDriverRuntimeException(null, "Unable to get any TenantInfo")); + + log.info("* OqmSubscriberManager on check '{}' subscriber control topic existence:", properties.getRegisterSubscriberControlTopicName()); + OqmTopic controlTopic = driver.getTopic(properties.getRegisterSubscriberControlTopicName(), getDestination(tenant)).orElse(null); + if (controlTopic != null) { + log.info("* * OqmSubscriberManager: '{}' subscriber control topic exists.", properties.getRegisterSubscriberControlTopicName()); + } else { + log.info("* * OqmSubscriberManager: '{}' subscriber control topic doesn't exist. Trying to create it:", properties.getRegisterSubscriberControlTopicName()); + driver.createAndGetTopic(properties.getRegisterSubscriberControlTopicName(), getDestination(tenant)); + } + + log.info("* OqmSubscriberManager on registering '{}' subscriber control topic subscription with name '{}'", + properties.getRegisterSubscriberControlTopicName(), subscriberControlTopicSubscriptionName); + + OqmSubscription subscriptionRequest = OqmSubscription.builder().name(subscriberControlTopicSubscriptionName) + .topics(Collections.singletonList(controlTopic)).build(); + + subscriberControlTopicSubscription = driver.createAndGetSubscription(subscriptionRequest, getDestination(tenant)); + log.info("* OqmSubscriberManager on registering '{}' subscriber control topic subscription with name '{}': Subscription CREATED.", + properties.getRegisterSubscriberControlTopicName(), subscriberControlTopicSubscriptionName); + + registerControlTopicSubscriber(tenant, subscriberControlTopicSubscription); + log.info("* OqmSubscriberManager on registering '{}' subscriber control topic subscription with name '{}': Subscriber REGISTERED.", + properties.getRegisterSubscriberControlTopicName(), subscriberControlTopicSubscriptionName); + + log.info("OqmSubscriberManager bean constructed. Provisioning COMPLETED"); + } + + @PreDestroy + void onPreDestroy() { + log.info("OqmSubscriberManager bean on pre-destroy: STARTED"); + if (subscriberControlTopicSubscription != null) { + TenantInfo tenant = tenantInfoFactory.listTenantInfo().stream().findAny() + .orElseThrow(() -> new OqmDriverRuntimeException(null, "Unable to get any TenantInfo")); + log.info("* OqmSubscriberManager on delete '{}' subscriber control topic subscription with name '{}': Subscriber REGISTERED.", + properties.getRegisterSubscriberControlTopicName(), subscriberControlTopicSubscriptionName); + driver.deleteSubscription(subscriberControlTopicSubscriptionName, getDestination(tenant)); + } + log.info("OqmSubscriberManager bean on pre-destroy: COMPLETED"); + } + + private void registerSubscriber(TenantInfo tenantInfo, OqmSubscription subscription) { + OqmDestination destination = getDestination(tenantInfo); + + OqmMessageReceiver receiver = (oqmMessage, oqmAckReplier) -> { + + String pubsubMessage = oqmMessage.getData(); + String notificationId = subscription.getName(); + Map<String, String> headerAttributes = oqmMessage.getAttributes(); + + + HttpResponse response; + boolean ackedNacked = false; + try { + response = notificationHandler.notifySubscriber(notificationId, pubsubMessage, headerAttributes); + + if (!response.isSuccessCode()) { + log.error(NOT_ACKNOWLEDGE + response.getBody()); + } else { + log.debug(ACKNOWLEDGE); + oqmAckReplier.ack(); + } + ackedNacked = true; + + } catch (Exception e) { + log.debug(NOT_ACKNOWLEDGE, e); + } + + if (!ackedNacked) oqmAckReplier.nack(); + }; + + OqmSubscriber subscriber = OqmSubscriber.builder().subscription(subscription).messageReceiver(receiver).build(); + driver.subscribe(subscriber, destination); + log.info("Just subscribed at topic {} subscription {} for tenant {}", + subscription.getTopics().get(0), subscription.getName(), tenantInfo.getDataPartitionId()); + } + + private void registerControlTopicSubscriber(TenantInfo tenantInfo, OqmSubscription controlTopicSubscriber) { + + OqmMessageReceiver receiver = (oqmMessage, oqmAckReplier) -> { + + String pubsubMessage = oqmMessage.getData(); + Map<String, String> headerAttributes = oqmMessage.getAttributes(); + String subscriptionId = headerAttributes.get("subscription-id"); + String dataPartitionId = headerAttributes.get("data-partition-id"); + String topic = headerAttributes.get("topic"); + + OqmSubscription subscription = OqmSubscription.builder() + .topic(OqmTopic.builder().name(topic).build()) + .name(subscriptionId) + .build(); + + registerSubscriber(tenantInfoFactory.getTenantInfo(dataPartitionId), subscription); + + log.debug(ACKNOWLEDGE); + oqmAckReplier.ack(); + }; + + OqmSubscriber subscriber = OqmSubscriber.builder().subscription(controlTopicSubscriber).messageReceiver(receiver).build(); + OqmDestination destination = getDestination(tenantInfo); + driver.subscribe(subscriber, destination); + + log.info("Just subscribed at topic {} subscription {} for tenant {}", + controlTopicSubscriber.getTopics().get(0), controlTopicSubscriber.getName(), tenantInfo.getDataPartitionId()); + } + + public List<OqmSubscription> getSubscriberableSubscriptions(TenantInfo tenantInfo) { + return driver.listSubscriptions(null, INTERESTED_SUBSCRIPTIONS_QUERY, getDestination(tenantInfo)); + } + + private OqmDestination getDestination(TenantInfo tenantInfo) { + return OqmDestination.builder().partitionId(tenantInfo.getDataPartitionId()).build(); + } + +} diff --git a/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/pubsub/di/OqmNotificationHandler.java b/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/pubsub/di/OqmNotificationHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..2235850d9ce603adc494b4b73af65c46b2165741 --- /dev/null +++ b/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/pubsub/di/OqmNotificationHandler.java @@ -0,0 +1,71 @@ +/* + * Copyright 2017-2020, Schlumberger + * + * 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.opengroup.osdu.notification.provider.gcp.pubsub.di; + +import org.opengroup.osdu.core.common.http.HttpClient; +import org.opengroup.osdu.core.common.http.HttpRequest; +import org.opengroup.osdu.core.common.http.HttpResponse; +import org.opengroup.osdu.core.common.model.http.DpsHeaders; +import org.opengroup.osdu.core.common.model.notification.Secret; +import org.opengroup.osdu.core.common.model.notification.Subscription; +import org.opengroup.osdu.notification.auth.factory.AuthFactory; +import org.opengroup.osdu.notification.auth.interfaces.SecretAuth; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.stereotype.Component; + +import java.util.Map; + +@Component +@ConditionalOnProperty(name = "oqmDriver") +public class OqmNotificationHandler { + private final static Logger LOGGER = LoggerFactory.getLogger(OqmNotificationHandler.class); + @Autowired + private HttpClient httpClient; + @Autowired + private OqmSubscriptionHandler subscriptionHandler; + @Autowired + private AuthFactory authFactory; + @Value("${app.waitingTime:30000}") + private int WAITING_TIME; + + public HttpResponse notifySubscriber(String notificationId, String pubsubMessage, Map<String, String> headerAttributes) throws Exception { + Subscription subscription = subscriptionHandler.getSubscriptionFromCache(notificationId, headerAttributes); + Secret secret = subscription.getSecret(); + String endpoint = subscription.getPushEndpoint(); + String secretType = secret.getSecretType(); + String pushUrl; + + // Authentication Secret + SecretAuth secretAuth = authFactory.getSecretAuth(secretType); + secretAuth.setSecret(secret); + pushUrl = secretAuth.getPushUrl(endpoint); + + Map<String, String> requestHeader = secretAuth.getRequestHeaders(); + requestHeader.put(DpsHeaders.CONTENT_TYPE, "application/json"); + requestHeader.put(DpsHeaders.CORRELATION_ID, headerAttributes.get(DpsHeaders.CORRELATION_ID)); + requestHeader.put(DpsHeaders.DATA_PARTITION_ID, headerAttributes.get(DpsHeaders.DATA_PARTITION_ID)); + + HttpRequest request = HttpRequest.post().url(pushUrl).headers(requestHeader).body(pubsubMessage).connectionTimeout(WAITING_TIME).build(); + HttpResponse response = httpClient.send(request); + LOGGER.debug("Sending out notification to endpoint: " + endpoint); + return response; + } +} diff --git a/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/pubsub/di/OqmSignatureService.java b/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/pubsub/di/OqmSignatureService.java new file mode 100644 index 0000000000000000000000000000000000000000..28e65f7beb280db55180d449e7685ba7bd7cd314 --- /dev/null +++ b/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/pubsub/di/OqmSignatureService.java @@ -0,0 +1,40 @@ +/* + Copyright 2020 Google LLC + Copyright 2020 EPAM Systems, Inc + + 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.opengroup.osdu.notification.provider.gcp.pubsub.di; + +import lombok.extern.slf4j.Slf4j; +import org.opengroup.osdu.core.common.cryptographic.SignatureService; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Primary; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; + +import static org.springframework.beans.factory.config.BeanDefinition.SCOPE_SINGLETON; + +@Component +@Scope(SCOPE_SINGLETON) +@Primary +@Slf4j +@ConditionalOnProperty(name = "oqmDriver") +public class OqmSignatureService extends SignatureService { + @PostConstruct + void postConstruct() { + log.info("OqmSignatureService bean constructed."); + } +} diff --git a/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/pubsub/di/OqmSubscriptionCacheFactory.java b/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/pubsub/di/OqmSubscriptionCacheFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..31d8353a241e2c0b1186edf75a698bd89b56d1ae --- /dev/null +++ b/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/pubsub/di/OqmSubscriptionCacheFactory.java @@ -0,0 +1,70 @@ +/* + * Copyright 2017-2020, Schlumberger + * + * 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.opengroup.osdu.notification.provider.gcp.pubsub.di; + +import org.opengroup.osdu.core.common.cache.ICache; +import org.opengroup.osdu.core.common.cache.MultiTenantCache; +import org.opengroup.osdu.core.common.cache.VmCache; +import org.opengroup.osdu.core.common.model.http.AppException; +import org.opengroup.osdu.core.common.model.http.DpsHeaders; +import org.opengroup.osdu.core.common.model.tenant.TenantInfo; +import org.opengroup.osdu.core.common.provider.interfaces.ITenantFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.stereotype.Component; + +import java.util.Map; + +@Component +@ConditionalOnProperty(name = "oqmDriver") +public class OqmSubscriptionCacheFactory { + @Autowired + private ITenantFactory tenantFactory; + + private MultiTenantCache<String> caches; + + public OqmSubscriptionCacheFactory(@Value("${app.expireTime}") int expireTime, @Value("${app.maxCacheSize}") int maxCacheSize) { + this.caches = new MultiTenantCache<>(new VmCache<>(expireTime, maxCacheSize)); + } + + public void put(String key, String val, Map<String, String> headerAttributes) { + this.partitionCache(headerAttributes).put(key, val); + } + + public String get(String key, Map<String, String> headerAttributes) { + return this.partitionCache(headerAttributes).get(key); + } + + public void delete(String key, Map<String, String> headerAttributes) { + this.partitionCache(headerAttributes).delete(key); + } + + public void clearAll(Map<String, String> headerAttributes) { + this.partitionCache(headerAttributes).clearAll(); + } + + private ICache<String, String> partitionCache(Map<String, String> headerAttributes) { + String tenantId = headerAttributes.get(DpsHeaders.DATA_PARTITION_ID); + TenantInfo tenantInfo = this.tenantFactory.getTenantInfo(tenantId); + if (tenantInfo == null) { + throw AppException.createUnauthorized(String.format("could not retrieve tenant info for data partition id: %s", tenantId)); + } + return this.caches.get(String.format("%s:subscription", tenantInfo.getDataPartitionId())); + } + +} diff --git a/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/pubsub/di/OqmSubscriptionHandler.java b/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/pubsub/di/OqmSubscriptionHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..d326ced415cf96015a42a14bb05f63353e7d9a6d --- /dev/null +++ b/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/pubsub/di/OqmSubscriptionHandler.java @@ -0,0 +1,109 @@ +/* + * Copyright 2017-2020, Schlumberger + * + * 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.opengroup.osdu.notification.provider.gcp.pubsub.di; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.common.base.Strings; +import com.google.gson.Gson; +import org.apache.http.HttpStatus; +import org.opengroup.osdu.core.common.logging.JaxRsDpsLog; +import org.opengroup.osdu.core.common.model.http.AppException; +import org.opengroup.osdu.core.common.model.http.DpsHeaders; +import org.opengroup.osdu.core.common.model.notification.Subscription; +import org.opengroup.osdu.core.common.notification.ISubscriptionFactory; +import org.opengroup.osdu.core.common.notification.ISubscriptionService; +import org.opengroup.osdu.core.common.notification.SubscriptionException; +import org.opengroup.osdu.core.common.util.IServiceAccountJwtClient; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.stereotype.Component; + +import java.io.IOException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Component +@ConditionalOnProperty(name = "oqmDriver") +public class OqmSubscriptionHandler { + @Autowired + private ISubscriptionFactory subscriptionFactory; + @Autowired + private OqmSubscriptionCacheFactory subscriptionCacheFactory; + @Autowired + private JaxRsDpsLog log; + + @Autowired + private IServiceAccountJwtClient serviceAccountJwtClient; + + private static final Gson gson = new Gson(); + private ObjectMapper objectMapper; + + public Subscription getSubscriptionFromCache(String notificationId, Map<String, String> headerAttributes) { + String subscriptionString = subscriptionCacheFactory.get(notificationId, headerAttributes); + try { + if (Strings.isNullOrEmpty(subscriptionString)) + subscriptionString = querySubscriptionAndUpdateCache(notificationId, headerAttributes); + ObjectMapper objectMapper = this.getObjectMapper(); + return objectMapper.readValue(subscriptionString, Subscription.class); + } catch (IOException e) { + throw new AppException(HttpStatus.SC_INTERNAL_SERVER_ERROR, "Error Parsing subscription String to object", "Unexpected error in pushing message", e); + } catch (SubscriptionException se) { + throw new AppException(HttpStatus.SC_INTERNAL_SERVER_ERROR, "Error query subscription from registration", "Unexpected error in pushing message", se); + } + } + + private String querySubscriptionAndUpdateCache(String notificationId, Map<String, String> headerAttributes) throws AppException, SubscriptionException { + DpsHeaders headers = getDpsHeaders(headerAttributes); + ISubscriptionService service = subscriptionFactory.create(headers); + + List<Subscription> subscriptionList = service.query(notificationId); + if (subscriptionList == null || subscriptionList.size() == 0) { + throw new AppException(HttpStatus.SC_NOT_FOUND, "Not found subscription for notificationId:" + notificationId, "Subscription not found"); + } + + Subscription subscription = subscriptionList.get(0); + String jsonSubscription = gson.toJson(subscription); + this.subscriptionCacheFactory.put(subscription.getNotificationId(), jsonSubscription, headerAttributes); + + return jsonSubscription; + } + + private DpsHeaders getDpsHeaders(Map<String, String> headerAttributes) { + Map<String, String> attributes = new HashMap<>(headerAttributes); + + //extract headers from pubsub message + String dataPartitionId = headerAttributes.get(DpsHeaders.DATA_PARTITION_ID); + String authToken = this.serviceAccountJwtClient.getIdToken(dataPartitionId); + attributes.put(DpsHeaders.AUTHORIZATION, authToken); + return DpsHeaders.createFromMap(attributes); + + } + + //unit test purpose + protected ObjectMapper getObjectMapper() { + if (this.objectMapper == null) { + this.objectMapper = new ObjectMapper(); + } + return this.objectMapper; + } + + //unit test purpose + void setObjectMapper(ObjectMapper objectMapper) { + this.objectMapper = objectMapper; + } +} diff --git a/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/pubsub/di/README.md b/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/pubsub/di/README.md new file mode 100644 index 0000000000000000000000000000000000000000..609d9001fd89dd9649ea3d94084ab80428a3bda9 --- /dev/null +++ b/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/pubsub/di/README.md @@ -0,0 +1,6 @@ +The content of the package is 4 classes derived from the eponymous classes from the core part +(find them by names with no "Oqm"prefix). They were derived for one only reason - to free OqmSubscriberManager +from addiction to "request scope" which is not valid for the OQM work context. + +In the future, one may probably find a better way to achieve the same (and reuse original classes) + diff --git a/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/util/GcpAppServiceConfig.java b/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/util/GcpAppServiceConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..f4d35e2a55f884c7490dc0dec68de39c7e89d25c --- /dev/null +++ b/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/util/GcpAppServiceConfig.java @@ -0,0 +1,33 @@ +/* + * Copyright 2017-2020, Schlumberger + * + * 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.opengroup.osdu.notification.provider.gcp.util; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Primary; +import org.springframework.stereotype.Component; + +@Component +@Primary +public class GcpAppServiceConfig { + + @Value("${APP_PROJECT}") + private String googleCloudProject; + + public String getGoogleCloudProject() { + return googleCloudProject; + } +} \ No newline at end of file diff --git a/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/util/GoogleServiceAccountImpl.java b/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/util/GoogleServiceAccountImpl.java index 1555ab181b10abe173a290752a13ed0628f7409d..ae30169a57df28d6b5c11b5ce1df668b237ee6f1 100644 --- a/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/util/GoogleServiceAccountImpl.java +++ b/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/util/GoogleServiceAccountImpl.java @@ -18,7 +18,7 @@ package org.opengroup.osdu.notification.provider.gcp.util; import lombok.SneakyThrows; import org.apache.http.impl.client.CloseableHttpClient; -import org.opengroup.osdu.core.gcp.GoogleIdToken.IGoogleIdTokenFactory; +import org.opengroup.osdu.core.gcp.googleidtoken.IGoogleIdTokenFactory; import org.opengroup.osdu.notification.provider.interfaces.IGoogleServiceAccount; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/util/ServiceAccountJwtGcpClientImpl.java b/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/util/ServiceAccountJwtGcpClientImpl.java index 1484bad38cdf6ff9f51070154f39b776f3398086..b5b7d51ff2b241f0b6def88f1f99d0d05b2fbfb5 100644 --- a/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/util/ServiceAccountJwtGcpClientImpl.java +++ b/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/util/ServiceAccountJwtGcpClientImpl.java @@ -19,8 +19,7 @@ package org.opengroup.osdu.notification.provider.gcp.util; import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; import com.google.api.client.http.HttpTransport; -import com.google.api.client.json.JsonFactory; -import com.google.api.client.json.jackson.JacksonFactory; +import com.google.api.client.json.gson.GsonFactory; import com.google.api.services.iam.v1.Iam; import com.google.api.services.iam.v1.IamScopes; import com.google.api.services.iam.v1.model.SignJwtRequest; @@ -59,7 +58,7 @@ public class ServiceAccountJwtGcpClientImpl implements IServiceAccountJwtClient private AppProperties config; private static final String JWT_AUDIENCE = "https://www.googleapis.com/oauth2/v4/token"; private static final String SERVICE_ACCOUNT_NAME_FORMAT = "projects/%s/serviceAccounts/%s"; - private static final JsonFactory JSON_FACTORY = new JacksonFactory(); + private static final GsonFactory JSON_FACTORY = new GsonFactory(); static final String INVALID_INPUT = "Invalid inputs provided to getIdToken function"; static final String INVALID_DATA_PARTITION = "Invalid data partition id"; diff --git a/provider/notification-gcp/src/main/resources/application.properties b/provider/notification-gcp/src/main/resources/application.properties index c2f3bf7bea18040d814d894a14b5b50ec671e6ad..45946ed858f7666a2e981b026a911b0f66854b93 100644 --- a/provider/notification-gcp/src/main/resources/application.properties +++ b/provider/notification-gcp/src/main/resources/application.properties @@ -22,4 +22,6 @@ app.maxCacheSize=10 server.error.whitelabel.enabled=false google.audiences=${APP_AUDIENCES} -partition.api=http://localhost:8081/api/partition/v1 \ No newline at end of file +partition.api=http://localhost:8081/api/partition/v1 + +oqmDriver=pubsub \ No newline at end of file diff --git a/provider/notification-ibm/pom.xml b/provider/notification-ibm/pom.xml index e3a18bdf8dd65c47265a4ee2f65a95ba4d029a00..09f5631d26672aea8feb32ff5b081313bad0dbbc 100644 --- a/provider/notification-ibm/pom.xml +++ b/provider/notification-ibm/pom.xml @@ -16,7 +16,7 @@ <modelVersion>4.0.0</modelVersion> <groupId>org.opengroup.osdu</groupId> <artifactId>notification-ibm</artifactId> - <version>0.12.0-SNAPSHOT</version> + <version>0.13.0-SNAPSHOT</version> <name>notification-ibm</name> <description>IBM implementation for Notification service</description> <packaging>jar</packaging> @@ -24,7 +24,7 @@ <parent> <groupId>org.opengroup.osdu</groupId> <artifactId>os-notification</artifactId> - <version>0.12.0-SNAPSHOT</version> + <version>0.13.0-SNAPSHOT</version> <relativePath>../../pom.xml</relativePath> </parent> @@ -44,13 +44,13 @@ <dependency> <groupId>org.opengroup.osdu</groupId> <artifactId>os-core-lib-ibm</artifactId> - <version>0.12.0-SNAPSHOT</version> + <version>0.13.0-rc4</version> </dependency> <dependency> <groupId>org.opengroup.osdu</groupId> <artifactId>notification-core</artifactId> - <version>0.12.0-SNAPSHOT</version> + <version>0.13.0-SNAPSHOT</version> </dependency> <!-- unit test dependencies --> diff --git a/provider/notification-ibm/src/main/java/org/opengroup/osdu/notification/provider/ibm/security/SecurityConfig.java b/provider/notification-ibm/src/main/java/org/opengroup/osdu/notification/provider/ibm/security/SecurityConfig.java index bfa018bdf7ae35152d42b234aa2eb248280477fe..ac2774b2059fe0943cc0113489abd8636907d630 100644 --- a/provider/notification-ibm/src/main/java/org/opengroup/osdu/notification/provider/ibm/security/SecurityConfig.java +++ b/provider/notification-ibm/src/main/java/org/opengroup/osdu/notification/provider/ibm/security/SecurityConfig.java @@ -1,28 +1,29 @@ -/* Licensed Materials - Property of IBM */ -/* (c) Copyright IBM Corp. 2020. All Rights Reserved.*/ - -package org.opengroup.osdu.notification.provider.ibm.security; - -import org.springframework.context.annotation.Configuration; -import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; -import org.springframework.security.config.annotation.web.builders.HttpSecurity; -import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; - -@Configuration -@EnableGlobalMethodSecurity(prePostEnabled = true) -public class SecurityConfig extends WebSecurityConfigurerAdapter { - @Override - protected void configure(HttpSecurity http) throws Exception { - http.csrf().disable().authorizeRequests() - .antMatchers("/test/challenge/**", - "/v1/api-docs", - "/configuration/ui", - "/swagger-resources/**", - "/configuration/security", - "/swagger-ui.html", - "/info", - "/webjars/**") - .permitAll().anyRequest().authenticated().and().oauth2ResourceServer().jwt(); - } - -} \ No newline at end of file +/* Licensed Materials - Property of IBM */ +/* (c) Copyright IBM Corp. 2020. All Rights Reserved.*/ + +package org.opengroup.osdu.notification.provider.ibm.security; + +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; + +@Configuration +@EnableGlobalMethodSecurity(prePostEnabled = true) +public class SecurityConfig extends WebSecurityConfigurerAdapter { + @Override + protected void configure(HttpSecurity http) throws Exception { + http.csrf().disable(); + // .authorizeRequests() + // .antMatchers("/test/challenge/**", + // "/v1/api-docs", + // "/configuration/ui", + // "/swagger-resources/**", + // "/configuration/security", + // "/swagger-ui.html", + // "/info", + // "/webjars/**") + // .permitAll().anyRequest().authenticated().and().oauth2ResourceServer().jwt(); + } + +} diff --git a/provider/notification-reference/pom.xml b/provider/notification-reference/pom.xml index cd5610ffa7fdd0a6db36e08998ed93bdda91674d..9204b87bf66112e920fe6fd69a1d5e56241fc4cb 100644 --- a/provider/notification-reference/pom.xml +++ b/provider/notification-reference/pom.xml @@ -7,13 +7,13 @@ <parent> <groupId>org.opengroup.osdu</groupId> <artifactId>os-notification</artifactId> - <version>0.12.0-SNAPSHOT</version> + <version>0.13.0-SNAPSHOT</version> <relativePath>../../pom.xml</relativePath> </parent> <groupId>org.opengroup.osdu</groupId> <artifactId>notification-reference</artifactId> - <version>0.12.0-SNAPSHOT</version> + <version>0.13.0-SNAPSHOT</version> <packaging>jar</packaging> <properties> @@ -37,7 +37,7 @@ <dependency> <groupId>org.opengroup.osdu</groupId> <artifactId>notification-core</artifactId> - <version>0.12.0-SNAPSHOT</version> + <version>0.13.0-SNAPSHOT</version> </dependency> <dependency> diff --git a/testing/notification-test-aws/pom.xml b/testing/notification-test-aws/pom.xml index c3336063beba95b562f28997ac649e3b8da0cfb6..ba1f44a5b58745948d3792fc7907c845d842d963 100644 --- a/testing/notification-test-aws/pom.xml +++ b/testing/notification-test-aws/pom.xml @@ -21,13 +21,13 @@ <parent> <groupId>org.opengroup.osdu</groupId> <artifactId>os-notification-testing</artifactId> - <version>0.12.0-SNAPSHOT</version> + <version>0.13.0-SNAPSHOT</version> <relativePath>../pom.xml</relativePath> </parent> <groupId>org.opengroup.osdu</groupId> <artifactId>notification-test-aws</artifactId> - <version>0.12.0-SNAPSHOT</version> + <version>0.13.0-SNAPSHOT</version> <name>notification-test-aws</name> <description>AWS Integration tests for Notification Service</description> <packaging>jar</packaging> @@ -52,7 +52,7 @@ <dependency> <groupId>org.opengroup.osdu.notification</groupId> <artifactId>notification-test-core</artifactId> - <version>0.12.0-SNAPSHOT</version> + <version>0.13.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.opengroup.osdu</groupId> diff --git a/testing/notification-test-azure/pom.xml b/testing/notification-test-azure/pom.xml index e206e2afba65d158c5af18936ceb106669981bce..729b7014b671015677a6b03fcf8a7cc126703989 100644 --- a/testing/notification-test-azure/pom.xml +++ b/testing/notification-test-azure/pom.xml @@ -21,13 +21,13 @@ <parent> <groupId>org.opengroup.osdu</groupId> <artifactId>os-notification-testing</artifactId> - <version>0.12.0-SNAPSHOT</version> + <version>0.13.0-SNAPSHOT</version> <relativePath>../pom.xml</relativePath> </parent> <groupId>org.opengroup.osdu</groupId> <artifactId>notification-test-azure</artifactId> - <version>0.12.0-SNAPSHOT</version> + <version>0.13.0-SNAPSHOT</version> <name>notification-test-azure</name> <description>Integration tests Azure for notification</description> <packaging>jar</packaging> @@ -42,7 +42,7 @@ <dependency> <groupId>org.opengroup.osdu.notification</groupId> <artifactId>notification-test-core</artifactId> - <version>0.12.0-SNAPSHOT</version> + <version>0.13.0-SNAPSHOT</version> </dependency> <dependency> diff --git a/testing/notification-test-azure/src/test/java/org/opengroup/osdu/notification/api/TestStorageIntegration.java b/testing/notification-test-azure/src/test/java/org/opengroup/osdu/notification/api/TestStorageIntegration.java index e25791aa146f8aa61a61c8213d24bed27bf89b58..99ea70b73ee298045061c2ee84917e39026d7e0c 100644 --- a/testing/notification-test-azure/src/test/java/org/opengroup/osdu/notification/api/TestStorageIntegration.java +++ b/testing/notification-test-azure/src/test/java/org/opengroup/osdu/notification/api/TestStorageIntegration.java @@ -148,7 +148,9 @@ public class TestStorageIntegration extends BaseTestTemplate { // The Test Ack Subscription gets created if the the test endpoint of actual subscription // created above receives notification from Notification Service. this.deleteAckSubscription(); - + // Delete legal tag + LegalTagUtils.delete(LEGAL_TAG, this.testUtils.getAdminToken()); + // Create legal tag used in storage record LegalTagUtils.create(LEGAL_TAG, this.testUtils.getAdminToken()); diff --git a/testing/notification-test-azure/src/test/java/org/opengroup/osdu/notification/util/LegalTagUtils.java b/testing/notification-test-azure/src/test/java/org/opengroup/osdu/notification/util/LegalTagUtils.java index c9f1eb14acdb95412a073c6b4316b4f682a07990..6a9b4671b46c3e98aeb0c304341ca67f8fa4e060 100644 --- a/testing/notification-test-azure/src/test/java/org/opengroup/osdu/notification/util/LegalTagUtils.java +++ b/testing/notification-test-azure/src/test/java/org/opengroup/osdu/notification/util/LegalTagUtils.java @@ -22,7 +22,7 @@ import org.apache.http.HttpStatus; import java.util.HashMap; import java.util.Map; -import static org.junit.Assert.assertEquals; +import static org.junit.Assert.*; public class LegalTagUtils { public static ClientResponse create(String legalTagName, String token) throws Exception { @@ -35,7 +35,7 @@ public class LegalTagUtils { Map<String, String> headers = new HashMap<>(); headers.put("Data-Partition-Id", TestUtils.getOsduTenant()); ClientResponse response = TestUtils.send(getLegalUrl(), "legaltags", "POST", token, body, "", headers, false); - assertEquals(HttpStatus.SC_CREATED, response.getStatus()); + assertTrue(response.getStatus()==HttpStatus.SC_CREATED ||response.getStatus()==HttpStatus.SC_CONFLICT ); Thread.sleep(100); return response; } diff --git a/testing/notification-test-core/pom.xml b/testing/notification-test-core/pom.xml index 02b337ba0c84b7c175fa568cb40fe05ab4697eb9..496c3ad8c3adef0f5f5ec1dfedacadfebd0f73e8 100644 --- a/testing/notification-test-core/pom.xml +++ b/testing/notification-test-core/pom.xml @@ -21,13 +21,13 @@ <parent> <groupId>org.opengroup.osdu</groupId> <artifactId>os-notification-testing</artifactId> - <version>0.12.0-SNAPSHOT</version> + <version>0.13.0-SNAPSHOT</version> <relativePath>../pom.xml</relativePath> </parent> <groupId>org.opengroup.osdu.notification</groupId> <artifactId>notification-test-core</artifactId> - <version>0.12.0-SNAPSHOT</version> + <version>0.13.0-SNAPSHOT</version> <name>notification-test-core</name> <description>Integration tests core for notification</description> <packaging>jar</packaging> diff --git a/testing/notification-test-gcp/pom.xml b/testing/notification-test-gcp/pom.xml index e22afb311f41d015a0f9a30f1cc19660ec8b7ef6..e770b4d576a7523e6f32336bf9504d228b36e006 100644 --- a/testing/notification-test-gcp/pom.xml +++ b/testing/notification-test-gcp/pom.xml @@ -21,12 +21,12 @@ <parent> <groupId>org.opengroup.osdu</groupId> <artifactId>os-notification-testing</artifactId> - <version>0.12.0-SNAPSHOT</version> + <version>0.13.0-SNAPSHOT</version> <relativePath>../pom.xml</relativePath> </parent> <artifactId>notification-test-gcp</artifactId> - <version>0.12.0-SNAPSHOT</version> + <version>0.13.0-SNAPSHOT</version> <name>notification-test-gcp</name> <description>Integration tests GCP for notification</description> <packaging>jar</packaging> @@ -41,7 +41,7 @@ <dependency> <groupId>org.opengroup.osdu.notification</groupId> <artifactId>notification-test-core</artifactId> - <version>0.12.0-SNAPSHOT</version> + <version>0.13.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.opengroup.osdu</groupId> diff --git a/testing/notification-test-ibm/pom.xml b/testing/notification-test-ibm/pom.xml index a314178708905e1d65f10d0e161c6ebde3d1fac0..b8c016febc483e7f2ca83f88df43545b58519301 100644 --- a/testing/notification-test-ibm/pom.xml +++ b/testing/notification-test-ibm/pom.xml @@ -18,13 +18,13 @@ <parent> <groupId>org.opengroup.osdu</groupId> <artifactId>os-notification-testing</artifactId> - <version>0.12.0-SNAPSHOT</version> + <version>0.13.0-SNAPSHOT</version> <relativePath>../pom.xml</relativePath> </parent> <groupId>org.opengroup.osdu</groupId> <artifactId>notification-test-ibm</artifactId> - <version>0.12.0-SNAPSHOT</version> + <version>0.13.0-SNAPSHOT</version> <name>notification-test-ibm</name> <description>Integration tests IBM for notification</description> <packaging>jar</packaging> @@ -33,7 +33,7 @@ <java.version>8</java.version> <maven.compiler.target>${java.version}</maven.compiler.target> <maven.compiler.source>${java.version}</maven.compiler.source> - <os-core-lib-ibm.version>0.12.0-SNAPSHOT</os-core-lib-ibm.version> + <os-core-lib-ibm.version>0.13.0-SNAPSHOT</os-core-lib-ibm.version> </properties> <dependencies> @@ -45,7 +45,7 @@ <dependency> <groupId>org.opengroup.osdu.notification</groupId> <artifactId>notification-test-core</artifactId> - <version>0.12.0-SNAPSHOT</version> + <version>0.13.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.opengroup.osdu</groupId> diff --git a/testing/notification-test-ibm/src/test/java/org/opengroup/osdu/notification/api/TestPubsubEndpointHMAC.java b/testing/notification-test-ibm/src/test/java/org/opengroup/osdu/notification/api/TestPubsubEndpointHMAC.java index e01b1c888f7f1f79f9707246c3ebb3ed26d56380..cac092dbefe95654bd8183edc6a5a996c2522d82 100644 --- a/testing/notification-test-ibm/src/test/java/org/opengroup/osdu/notification/api/TestPubsubEndpointHMAC.java +++ b/testing/notification-test-ibm/src/test/java/org/opengroup/osdu/notification/api/TestPubsubEndpointHMAC.java @@ -38,7 +38,7 @@ public class TestPubsubEndpointHMAC extends PubsubEndpointHMACTests { @Override public void should_return400_when_makingHttpRequestWithoutToken()throws Exception{ ClientResponse response = descriptor.run(getArg(), ""); - assertEquals(error( response.getEntity(String.class)), 401, response.getStatus()); + assertEquals(error( response.getEntity(String.class)), 403, response.getStatus()); } @Ignore diff --git a/testing/pom.xml b/testing/pom.xml index 92724d716d54f21bd1aa70cfcacc6aed42992a86..de0c48f883930d66e61f5967ce55b152b5d38d93 100644 --- a/testing/pom.xml +++ b/testing/pom.xml @@ -18,7 +18,7 @@ <modelVersion>4.0.0</modelVersion> <groupId>org.opengroup.osdu</groupId> <artifactId>os-notification-testing</artifactId> - <version>0.12.0-SNAPSHOT</version> + <version>0.13.0-SNAPSHOT</version> <description>Root Notification Service project</description> <packaging>pom</packaging>