From 4210b0fb3a8c302afb53640df4eb6f51565bf302 Mon Sep 17 00:00:00 2001 From: "Dmitrii Novikov (EPAM)" <dmitrii_novikov1@epam.com> Date: Mon, 7 Feb 2022 09:33:56 +0000 Subject: [PATCH] Remove datastore tenant info provisioning from Notification service (EPAM GONRG-4242) --- NOTICE | 14 + .../templates/notification-configmap.yaml | 3 +- devops/gcp/configmap/values.yaml | 3 +- provider/notification-gcp/README.md | 244 +++--------------- .../notification-gcp/docs/anthos/README.md | 175 +++++++++++++ .../docs/anthos/pics/client.png | Bin 0 -> 92098 bytes .../docs/anthos/pics/rabbit.PNG | Bin 0 -> 9605 bytes .../notification-gcp/docs/anthos/pics/sa.png | Bin 0 -> 52971 bytes provider/notification-gcp/docs/gcp/README.md | 60 +++++ .../docs/gcp/pics/namespace.PNG | Bin 0 -> 2307 bytes provider/notification-gcp/pom.xml | 8 +- .../provider/gcp/config/AppProperties.java | 48 ++++ .../config/OqmConfigurationProperties.java | 33 +++ .../gcp/di/PartitionProviderConfig.java | 33 --- .../di/ServiceAccountJwtClientFactory.java | 42 --- .../oqm/MqOqmConfigurationProperties.java | 34 --- .../oqm/MqTenantOqmDestinationResolver.java | 165 ------------ .../oqm/OqmConfigurationProperties.java | 34 --- .../oqm/PsTenantOqmDestinationResolver.java | 110 -------- .../gcp/pubsub/OqmSubscriberManager.java | 2 +- .../gcp/pubsub/di/OqmNotificationHandler.java | 74 +++--- .../provider/gcp/util/AppProperties.java | 55 ---- .../GoogleServiceAccountValidatorImpl.java | 1 + .../util/ServiceAccountJwtGcpClientImpl.java | 188 +------------- .../resources/application-anthos.properties | 20 ++ .../main/resources/application-dev.properties | 23 -- .../main/resources/application-gcp.properties | 20 ++ .../resources/application-kuber.properties | 23 -- .../resources/application-local.properties | 15 +- .../src/main/resources/application.properties | 13 +- 30 files changed, 488 insertions(+), 952 deletions(-) create mode 100644 provider/notification-gcp/docs/anthos/README.md create mode 100644 provider/notification-gcp/docs/anthos/pics/client.png create mode 100644 provider/notification-gcp/docs/anthos/pics/rabbit.PNG create mode 100644 provider/notification-gcp/docs/anthos/pics/sa.png create mode 100644 provider/notification-gcp/docs/gcp/README.md create mode 100644 provider/notification-gcp/docs/gcp/pics/namespace.PNG create mode 100644 provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/config/AppProperties.java create mode 100644 provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/config/OqmConfigurationProperties.java delete mode 100644 provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/di/PartitionProviderConfig.java delete mode 100644 provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/di/ServiceAccountJwtClientFactory.java delete mode 100644 provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/mappers/oqm/MqOqmConfigurationProperties.java delete mode 100644 provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/mappers/oqm/MqTenantOqmDestinationResolver.java delete mode 100644 provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/mappers/oqm/OqmConfigurationProperties.java delete mode 100644 provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/mappers/oqm/PsTenantOqmDestinationResolver.java delete mode 100644 provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/util/AppProperties.java create mode 100644 provider/notification-gcp/src/main/resources/application-anthos.properties delete mode 100644 provider/notification-gcp/src/main/resources/application-dev.properties create mode 100644 provider/notification-gcp/src/main/resources/application-gcp.properties delete mode 100644 provider/notification-gcp/src/main/resources/application-kuber.properties diff --git a/NOTICE b/NOTICE index 8d189b26b..3c4b837e5 100644 --- a/NOTICE +++ b/NOTICE @@ -83,6 +83,7 @@ The following software have components provided under the terms of this license: - Guava: Google Core Libraries for Java (from http://code.google.com/p/guava-libraries, https://github.com/google/guava, https://repo1.maven.org/maven2/com/google/guava/guava) - HTTP functionality for the Reactor Netty library (from https://github.com/reactor/reactor-netty) - Hibernate Validator (from https://repo1.maven.org/maven2/org/hibernate/hibernate-validator, https://repo1.maven.org/maven2/org/hibernate/validator/hibernate-validator) +- HikariCP (from https://github.com/brettwooldridge/HikariCP) - Hop (from https://github.com/rabbitmq/hop, https://www.rabbitmq.com) - HttpClient (from http://hc.apache.org/httpcomponents-client) - HttpClient Cache (from http://hc.apache.org/httpcomponents-client) @@ -131,6 +132,8 @@ The following software have components provided under the terms of this license: - 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) +- Kotlin Stdlib (from https://kotlinlang.org/, https://repo1.maven.org/maven2/org/jetbrains/kotlin/kotlin-stdlib) +- Kotlin Stdlib Common (from https://kotlinlang.org/) - 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) @@ -175,6 +178,7 @@ The following software have components provided under the terms of this license: - Okio (from https://github.com/square/okio/, https://repo1.maven.org/maven2/com/squareup/okio/okio) - OpenCensus (from https://github.com/census-instrumentation/opencensus-java) - PWDB :: Database (from https://repo1.maven.org/maven2/org/linguafranca/pwdb/database) +- PostgreSQL JDBC Driver - PowerMock (from http://www.powermock.org, https://repo1.maven.org/maven2/org/powermock/powermock-api-mockito) - 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) @@ -182,6 +186,7 @@ The following software have components provided under the terms of this license: - RabbitMQ Java Client (from http://www.rabbitmq.com, https://www.rabbitmq.com) - Reactive Streams Netty driver (from https://github.com/reactor/reactor-netty) - Retrofit (from https://github.com/square/retrofit, https://repo1.maven.org/maven2/com/squareup/retrofit2/retrofit) +- Simple XML (safe) (from https://github.com/dweiss/simplexml) - SnakeYAML (from http://code.google.com/p/snakeyaml/, http://www.snakeyaml.org) - Spring AMQP Core (from http://www.springsource.org/spring-amqp, https://github.com/spring-projects/spring-amqp, https://projects.spring.io/spring-amqp) - Spring AOP (from http://www.springframework.org, https://github.com/spring-projects/spring-framework, https://repo1.maven.org/maven2/org/springframework/spring-aop) @@ -194,6 +199,7 @@ The following software have components provided under the terms of this license: - Spring Boot Actuator Starter (from http://projects.spring.io/spring-boot/, https://projects.spring.io/spring-boot/#/spring-boot-parent/spring-boot-starters/spring-boot-starter-actuator, https://spring.io/projects/spring-boot) - Spring Boot AutoConfigure (from http://projects.spring.io/spring-boot/, https://projects.spring.io/spring-boot/#/spring-boot-parent/spring-boot-autoconfigure, https://spring.io/projects/spring-boot) - Spring Boot Dependencies (from http://projects.spring.io/spring-boot/, https://spring.io/projects/spring-boot) +- Spring Boot JDBC Starter (from http://projects.spring.io/spring-boot/, https://spring.io/projects/spring-boot) - Spring Boot Json Starter (from https://projects.spring.io/spring-boot/#/spring-boot-parent/spring-boot-starters/spring-boot-starter-json, https://spring.io/projects/spring-boot) - Spring Boot Log4j 2 Starter (from http://projects.spring.io/spring-boot/, https://projects.spring.io/spring-boot/#/spring-boot-parent/spring-boot-starters/spring-boot-starter-log4j2, https://spring.io/projects/spring-boot) - Spring Boot Logging Starter (from http://projects.spring.io/spring-boot/, https://projects.spring.io/spring-boot/#/spring-boot-parent/spring-boot-starters/spring-boot-starter-logging, https://spring.io/projects/spring-boot) @@ -264,6 +270,7 @@ The following software have components provided under the terms of this license: - lettuce (from http://github.com/mp911de/lettuce/wiki, https://github.com/lettuce-io/lettuce-core/wiki) - micrometer-core (from https://github.com/micrometer-metrics/micrometer) - micrometer-registry-azure-monitor (from https://github.com/micrometer-metrics/micrometer) +- minio (from https://github.com/minio/minio-java) - 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) @@ -280,6 +287,7 @@ The following software have components provided under the terms of this license: - proto-google-iam-v1 (from https://github.com/googleapis/googleapis, https://github.com/googleapis/java-iam/proto-google-iam-v1) - resilience4j (from https://github.com/resilience4j/resilience4j, https://resilience4j.readme.io, ttps://resilience4j.readme.io) - rxjava (from https://github.com/ReactiveX/RxJava) +- spring-jdbc (from https://repo1.maven.org/maven2/org/springframework/spring-jdbc) - springfox-bean-validators (from https://github.com/springfox/springfox) - springfox-boot-starter (from https://github.com/springfox/springfox) - springfox-core (from https://github.com/springfox/springfox) @@ -311,6 +319,7 @@ The following software have components provided under the terms of this license: - Hamcrest (from http://hamcrest.org/JavaHamcrest/) - Hamcrest Core (from https://repo1.maven.org/maven2/org/hamcrest/hamcrest-core) - HdrHistogram (from http://hdrhistogram.github.io/HdrHistogram/) +- PostgreSQL JDBC Driver - Reflections (from http://code.google.com/p/reflections/, http://github.com/ronmamo/reflections) - Stax2 API (from http://github.com/FasterXML/stax2-api) - ThreeTen backport (from https://github.com/ThreeTen/threetenbp, https://www.threeten.org/threetenbp) @@ -341,6 +350,7 @@ The following software have components provided under the terms of this license: - Mockito (from http://mockito.org, http://www.mockito.org, https://github.com/mockito/mockito) - Netty/Codec/HTTP (from https://repo1.maven.org/maven2/io/netty/netty-codec-http) - Netty/Transport/Classes/KQueue (from https://repo1.maven.org/maven2/io/netty/netty-transport-classes-kqueue) +- PostgreSQL JDBC Driver - Protocol Buffer Java API (from http://code.google.com/p/protobuf, https://repo1.maven.org/maven2/com/google/protobuf/protobuf-java) - Protocol Buffers [Util] (from https://repo1.maven.org/maven2/com/google/protobuf/protobuf-java-util) - Reflections (from http://code.google.com/p/reflections/, http://github.com/ronmamo/reflections) @@ -567,6 +577,7 @@ The following software have components provided under the terms of this license: - 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) +- Bouncy Castle Provider (from http://www.bouncycastle.org/java.html, https://www.bouncycastle.org/java.html) - Checker Qual (from https://checkerframework.org) - ClassGraph (from https://github.com/classgraph/classgraph) - Extensions on Apache Proton-J library (from https://github.com/Azure/qpid-proton-j-extensions) @@ -663,6 +674,7 @@ The following software have components provided under the terms of this license: - Apache Groovy (from http://groovy-lang.org, http://groovy.codehaus.org/, https://groovy-lang.org) - Asynchronous Http Client (from https://repo1.maven.org/maven2/org/asynchttpclient/async-http-client) +- Bouncy Castle Provider (from http://www.bouncycastle.org/java.html, https://www.bouncycastle.org/java.html) - Guava: Google Core Libraries for Java (from http://code.google.com/p/guava-libraries, https://github.com/google/guava, https://repo1.maven.org/maven2/com/google/guava/guava) - HdrHistogram (from http://hdrhistogram.github.io/HdrHistogram/) - Joda-Time (from http://joda-time.sourceforge.net, http://www.joda.org/joda-time/, https://www.joda.org/joda-time/) @@ -671,6 +683,7 @@ The following software have components provided under the terms of this license: - 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) +- PostgreSQL JDBC Driver - Project Lombok (from http://projectlombok.org, https://projectlombok.org) - RabbitMQ Java Client (from http://www.rabbitmq.com, https://www.rabbitmq.com) - Spring Web (from http://www.springframework.org, https://github.com/spring-projects/spring-framework, https://repo1.maven.org/maven2/org/springframework/spring-web) @@ -683,6 +696,7 @@ unknown ======================================================================== The following software have components provided under the terms of this license: +- Bouncy Castle Provider (from http://www.bouncycastle.org/java.html, https://www.bouncycastle.org/java.html) - Byte Buddy (without dependencies) (from https://repo1.maven.org/maven2/net/bytebuddy/byte-buddy) - Checker Qual (from https://checkerframework.org) - JSON in Java (from https://github.com/douglascrockford/JSON-java) diff --git a/devops/gcp/configmap/templates/notification-configmap.yaml b/devops/gcp/configmap/templates/notification-configmap.yaml index 1c1ce1b79..61d38f087 100644 --- a/devops/gcp/configmap/templates/notification-configmap.yaml +++ b/devops/gcp/configmap/templates/notification-configmap.yaml @@ -10,6 +10,7 @@ data: APP_PROJECT: "{{ .Values.data.app_project }}" APP_ENTITLEMENTS: "{{ .Values.data.app_entitlements }}" APP_REGISTER: "{{ .Values.data.app_register }}" - APP_GOOGLEAUDIENCE: "{{ .Values.data.app_googleaudience }}" PARTITION_API: "{{ .Values.data.partition_api }}" GOOGLE_AUDIENCES: "{{ .Values.data.google_audiences }}" + SERVICE_TOKEN_PROVIDER: "{{ .Values.data.token_provider }}" + PARTITION_AUTH_ENABLED: "{{ .Values.data.partition_auth_enabled }}" diff --git a/devops/gcp/configmap/values.yaml b/devops/gcp/configmap/values.yaml index 36510b00e..129e9d1c3 100644 --- a/devops/gcp/configmap/values.yaml +++ b/devops/gcp/configmap/values.yaml @@ -3,9 +3,10 @@ data: app_project: "" app_entitlements: "http://entitlements/api/entitlements/v2/" app_register: "http://register/api/register/v1" - app_googleaudience: "" partition_api: "http://partition/api/partition/v1/" google_audiences: "" + token_provider: "GCP" + partition_auth_enabled: "true" conf: configmap: "notification-config" app_name: "notification" diff --git a/provider/notification-gcp/README.md b/provider/notification-gcp/README.md index 3f73c6807..ba9b8b9f3 100644 --- a/provider/notification-gcp/README.md +++ b/provider/notification-gcp/README.md @@ -1,225 +1,49 @@ # Notification Service notification-gcp is a [Spring Boot](https://spring.io/projects/spring-boot) service that allow for interested consumers to subscribe to data and metadata changes using a publish/subscriber pattern. +## Table of Contents <a name="TOC"></a> +* [Getting started](#Getting-started) +* [Mappers](#Mappers) +* [Settings and Configuration](#Settings-and-Configuration) +* [Run service](#Run-service) +* [Testing](#Testing) +* [Tutorial](#Tutorial) +* [Licence](#License) + ## 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. -# Features of implementation +## Mappers 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 +For more information about mappers: +- [OQM Readme](https://community.opengroup.org/osdu/platform/system/lib/cloud/gcp/oqm/-/blob/master/README.md) In the current version, the OQM mapper is equipped with 2 drivers to the message brokers: - -- Google PubSub; +- 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 - -**Environment Variable Management** -The following tools make environment variable configuration simpler - - [direnv](https://direnv.net/) - for a shell/terminal environment - - [EnvFile](https://plugins.jetbrains.com/plugin/7861-envfile) - for [Intellij IDEA](https://www.jetbrains.com/idea/) - -**Lombok** -This project uses [Lombok](https://projectlombok.org/) for code generation. You may need to configure your IDE to take advantage of this tool. - - [Intellij configuration](https://projectlombok.org/setup/intellij) - - [VSCode configuration](https://projectlombok.org/setup/vscode) - -## 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 +## Settings and Configuration -### for native Google Cloud technologies: -- for PubSub: mappers/oqm/PsTenantOqmDestinationResolver.java +#### Requirements -#### 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. +1. Mandatory + - Java 8 + -[Maven 3.6.0+](https://maven.apache.org/download.cgi) -# Configuration +2. For Google Cloud only + - GCloud command line tool + - GCloud access to opendes project -## 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. +### Anthos Service Configuration: +[Anthos service configuration ](docs/anthos/README.md) +### GCP Service Configuration: +[Gcp service configuration ](docs/gcp/README.md) -#### Common properties for all environments +## Run service -| 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 | - -##### 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** - -| name | value | description | sensitive? | source | -| --- | --- | --- | --- | --- | -| `SPRING_PROFILES_ACTIVE` | `local` | spring active profile | no | - -## 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 +### Running Locally Check that maven is installed: ```bash $ mvn --version @@ -298,7 +122,7 @@ Navigate to notification service's root folder and run all the tests: $ (cd notification-core/ && mvn clean install) ``` -## Test the application +### Test the application After the service has started it should be accessible via a web browser by visiting [http://localhost:8080/api/notification/v1/swagger-ui.html](http://localhost:8080/swagger-ui.html). If the request does not fail, you can then run the integration tests. @@ -340,6 +164,18 @@ Above variables should be configured in the release pipeline to run integration # above are already exported in your environment. $ (cd testing/notification-test-gcp/ && mvn clean test) ``` + +## Tutorial + +- [Notification OpenAPI specification ](../../docs/api/notification_openapi.yaml) +- [Notification tutorial ](../../docs/tutorial/DataNotification.md) + +## Entitlements groups +Notification service account should have entitlements groups listed below: +- users +- users.datalake.editors +- service.entitlements.user + ## License Copyright © Google LLC diff --git a/provider/notification-gcp/docs/anthos/README.md b/provider/notification-gcp/docs/anthos/README.md new file mode 100644 index 000000000..a1de38b54 --- /dev/null +++ b/provider/notification-gcp/docs/anthos/README.md @@ -0,0 +1,175 @@ +# Service Configuration for Anthos + +## Table of Contents <a name="TOC"></a> +* [Environment variables](#Environment-variables) + * [Common properties for all environments](#Common-properties-for-all-environments) + * [For Mappers to activate drivers](#For-Mappers-to-activate-drivers) +* [Requirements for requests](#Requirements-for-requests) +* [Configuring mappers Datasources](#Configuring-mappers-Datasources) + * [For OQM RabbitMQ](#For-OQM-RabbitMQ) + * [Exchanges and queues configuration](#Exchanges-and-queues-configuration) +* [Interaction with message brokers](#Interaction-with-message-brokers) +* [Keycloak configuration](#Keycloak-configuration) + +## Environment variables + +### 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 | +| `APP_PROJECT` | ex `opendes` | Google Cloud Project Id | no | output of infrastructure deployment | +| `PARTITION_API` | ex `http://localhost:8081/api/partition/v1` | Partition service endpoint | no | - | +| `SERVICE_TOKEN_PROVIDER` | ex `GCP` or `OPENID` | Service token provider | no | - | + +**System Environment required to run service** + +| name | value | description | sensitive? | source | +| --- | --- | --- | --- | --- | +| `SPRING_PROFILES_ACTIVE` | `anthos` | spring active profile | 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** | + +## Requirements for requests + +Record identifiers cannot contain a space character. At the same time, they may contain a % character, which, when +combined with subsequent numeric characters, may cause the application to misinterpret that combination. For example, +the "%20" combination will be interpreted as a space " " character. To correctly transfer such an identifier, you should +additionally perform the url-encode operation on it. This functionality can be built into the front-end application, or +you can use an online url-encoder tool ( eg.: https://www.urlencoder.org/). Thus, having ID "osdu: +work-product-component--WellboreMarkerSet:3D%20Kirchhoff%20DepthMigration" (with %20 combination) +you should url-encode it and request +"osdu%3Awork-product-component--WellboreMarkerSet%3A3D%2520Kirchhoff%2520DepthMigration" instead. + +## 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.partition-properties-prefix` +- environment variable `OQM_RABBITMQ_PARTITION_PROPERTIES_PREFIX`` + +**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> + +#### Exchanges and queues configuration + +At RabbitMq should be created exchange with name: + +**name:** `register-subscriber-control` + +It can be overridden by: + +- through the Spring Boot property `oqm-register-subscriber-control-topic-name` +- environment variable `OQM_REGISTER_SUBSCRIBER_CONTROL_TOPIC_NAME` + + + +## Interaction with message brokers + +### Specifics of work through PULL subscription + +To receive messages from brokers, this solution uses the PULL-subscriber mechanism to get 'record_changed' messages. +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 Storage service subscribers at the start of Storage service. +This magic happens in the `OqmSubscriberManager.java` class from `core-lib-gcp` in the @PostConstruct method. + +## Keycloak configuration + +[Keycloak service accounts setup](https://www.keycloak.org/docs/latest/server_admin/#_service_accounts) + +Configure Clients. One Client per OSDU service. Set them “confidentialâ€. + + + +Each Client has embedded Service Account (SA) option. Enable SAs for Clients, make “Authorization enabledâ€: + + + +Add `partition-and-entitlements` scope to `Default Client Scopes` and generate Keys. + +Give `client-id` and `client-secret` to services, which should be authorized within the platform. \ No newline at end of file diff --git a/provider/notification-gcp/docs/anthos/pics/client.png b/provider/notification-gcp/docs/anthos/pics/client.png new file mode 100644 index 0000000000000000000000000000000000000000..8a2014e672b65ddf644558e2c9e8cb8823f549dd GIT binary patch literal 92098 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 literal 0 HcmV?d00001 diff --git a/provider/notification-gcp/docs/anthos/pics/rabbit.PNG b/provider/notification-gcp/docs/anthos/pics/rabbit.PNG new file mode 100644 index 0000000000000000000000000000000000000000..e1c67734b91a536659fdf0b940a93208d749e3c8 GIT binary patch literal 9605 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 I<jSr80*{qvcK`qY literal 0 HcmV?d00001 diff --git a/provider/notification-gcp/docs/anthos/pics/sa.png b/provider/notification-gcp/docs/anthos/pics/sa.png new file mode 100644 index 0000000000000000000000000000000000000000..b9c8124047b5834a2cf79baecbf751dc106feeff GIT binary patch literal 52971 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 K>nbasJO2PpLB22m literal 0 HcmV?d00001 diff --git a/provider/notification-gcp/docs/gcp/README.md b/provider/notification-gcp/docs/gcp/README.md new file mode 100644 index 000000000..a40859ab1 --- /dev/null +++ b/provider/notification-gcp/docs/gcp/README.md @@ -0,0 +1,60 @@ +# Service Configuration for GCP + +## Table of Contents <a name="TOC"></a> +* [Environment variables](#Environment-variables) +* [Common properties for all environments](#Common-properties-for-all-environments) +* [For Mappers to activate drivers](#For-Mappers-to-activate-drivers) +* [For Google Cloud only](#For-Google-Cloud-only) +* [GCS configuration](#GCS-configuration) +* [Google cloud service account configuration](#Google-cloud-service-account-configuration) + +## Environment variables + +### 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 | +| `APP_PROJECT` | ex `opendes` | Google Cloud Project Id | no | output of infrastructure deployment | +| `PARTITION_API` | ex `http://localhost:8081/api/partition/v1` | Partition service endpoint | no | - | +| `SERVICE_TOKEN_PROVIDER` | ex `GCP` or `OPENID` | Service token provider | no | - | + +**System Environment required to run service** + +| name | value | description | sensitive? | source | +| --- | --- | --- | --- | --- | +| `SPRING_PROFILES_ACTIVE` | `gcp` | spring active profile | 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 | +| `GOOGLE_AUDIENCES` | ex `*****.apps.googleusercontent.com` | Client ID for getting access to cloud resources | yes | https://console.cloud.google.com/apis/credentials | + +##### 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 | + +## Pubsub configuration: + +At Pubsub should be created topic with name: + +**name:** `register-subscriber-control` + +It can be overridden by: + +- through the Spring Boot property `oqm-register-subscriber-control-topic-name` +- environment variable `OQM_REGISTER_SUBSCRIBER_CONTROL_TOPIC_NAME` \ No newline at end of file diff --git a/provider/notification-gcp/docs/gcp/pics/namespace.PNG b/provider/notification-gcp/docs/gcp/pics/namespace.PNG new file mode 100644 index 0000000000000000000000000000000000000000..539d6a746febbd1787c80ec7a215f2b20bf21412 GIT binary patch literal 2307 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 T^I=K+aRE>#U2JjI{we<gPy%Tr literal 0 HcmV?d00001 diff --git a/provider/notification-gcp/pom.xml b/provider/notification-gcp/pom.xml index 0cf8e34d7..fb042f28d 100644 --- a/provider/notification-gcp/pom.xml +++ b/provider/notification-gcp/pom.xml @@ -37,12 +37,6 @@ </properties> <dependencies> - <dependency> - <groupId>org.opengroup.osdu</groupId> - <artifactId>oqm</artifactId> - <version>0.13.0</version> - </dependency> - <dependency> <groupId>org.opengroup.osdu</groupId> <artifactId>os-core-common</artifactId> @@ -50,7 +44,7 @@ <dependency> <groupId>org.opengroup.osdu</groupId> <artifactId>core-lib-gcp</artifactId> - <version>0.13.0</version> + <version>0.14.0-rc1</version> </dependency> <dependency> diff --git a/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/config/AppProperties.java b/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/config/AppProperties.java new file mode 100644 index 000000000..7f7ce4cb6 --- /dev/null +++ b/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/config/AppProperties.java @@ -0,0 +1,48 @@ +/* + * 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.config; + +import lombok.Getter; +import lombok.Setter; +import org.opengroup.osdu.notification.provider.interfaces.IAppProperties; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ConfigurationProperties(prefix = "app") +@Getter +@Setter +public class AppProperties implements IAppProperties { + + private String entitlements; + private String register; + private String project; + private int expireTime; + private int maxCacheSize; + + public String getAuthorizeAPI() { + return this.entitlements; + } + + public String getRegisterAPI() { + return this.register; + } + + public String getPubSubServiceAccountEmail() { + return String.format("de-notification-service@%s.iam.gserviceaccount.com", this.project); + } +} diff --git a/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/config/OqmConfigurationProperties.java b/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/config/OqmConfigurationProperties.java new file mode 100644 index 000000000..886e3d95d --- /dev/null +++ b/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/config/OqmConfigurationProperties.java @@ -0,0 +1,33 @@ +/* + 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.config; + +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"; + private int waitingTime = 30000; +} 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 deleted file mode 100644 index d051f6672..000000000 --- a/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/di/PartitionProviderConfig.java +++ /dev/null @@ -1,33 +0,0 @@ -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/di/ServiceAccountJwtClientFactory.java b/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/di/ServiceAccountJwtClientFactory.java deleted file mode 100644 index ad4a541f0..000000000 --- a/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/di/ServiceAccountJwtClientFactory.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * 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.di; -import org.opengroup.osdu.core.common.util.IServiceAccountJwtClient; -import org.opengroup.osdu.notification.provider.gcp.util.AppProperties; -import org.opengroup.osdu.notification.provider.gcp.util.ServiceAccountJwtGcpClientImpl; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.config.AbstractFactoryBean; -import org.springframework.context.annotation.Primary; -import org.springframework.stereotype.Component; - -@Component -@Primary -public class ServiceAccountJwtClientFactory extends AbstractFactoryBean<IServiceAccountJwtClient> { - - @Autowired - private AppProperties config; - - @Override - public IServiceAccountJwtClient createInstance() throws Exception { - return new ServiceAccountJwtGcpClientImpl(config); - } - - @Override - public Class<?> getObjectType() { - return IServiceAccountJwtClient.class; - } -} 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 deleted file mode 100644 index f87188a27..000000000 --- a/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/mappers/oqm/MqOqmConfigurationProperties.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - 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 deleted file mode 100644 index c8da3f492..000000000 --- a/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/mappers/oqm/MqTenantOqmDestinationResolver.java +++ /dev/null @@ -1,165 +0,0 @@ -/* - 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 deleted file mode 100644 index f062ae3ee..000000000 --- a/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/mappers/oqm/OqmConfigurationProperties.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - 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 deleted file mode 100644 index 2ddca9beb..000000000 --- a/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/mappers/oqm/PsTenantOqmDestinationResolver.java +++ /dev/null @@ -1,110 +0,0 @@ -/* - 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 index 36f57d916..b57ac2db2 100644 --- 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 @@ -24,7 +24,7 @@ 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.config.OqmConfigurationProperties; import org.opengroup.osdu.notification.provider.gcp.pubsub.di.OqmNotificationHandler; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Scope; 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 index 2235850d9..d764bf314 100644 --- 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 @@ -16,6 +16,9 @@ package org.opengroup.osdu.notification.provider.gcp.pubsub.di; +import java.util.Map; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.opengroup.osdu.core.common.http.HttpClient; import org.opengroup.osdu.core.common.http.HttpRequest; import org.opengroup.osdu.core.common.http.HttpResponse; @@ -24,48 +27,51 @@ 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.opengroup.osdu.notification.provider.gcp.config.OqmConfigurationProperties; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.stereotype.Component; -import java.util.Map; - @Component @ConditionalOnProperty(name = "oqmDriver") +@RequiredArgsConstructor +@Slf4j 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; + private final OqmConfigurationProperties oqmConfigurationProperties; + private final HttpClient httpClient; + private final OqmSubscriptionHandler subscriptionHandler; + private final AuthFactory authFactory; + + 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); + // 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)); + 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; - } + HttpRequest request = + HttpRequest.post() + .url(pushUrl) + .headers(requestHeader) + .body(pubsubMessage) + .connectionTimeout(oqmConfigurationProperties.getWaitingTime()) + .build(); + HttpResponse response = httpClient.send(request); + log.debug("Sending out notification to endpoint: " + endpoint); + return response; + } } diff --git a/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/util/AppProperties.java b/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/util/AppProperties.java deleted file mode 100644 index 1aa85c59d..000000000 --- a/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/util/AppProperties.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * 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.opengroup.osdu.notification.provider.interfaces.IAppProperties; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Component; - -@Component -public class AppProperties implements IAppProperties { - - @Value("${app.entitlements}") - private String authorizeAPI; - @Value("${app.register}") - private String registerAPI; - @Value("${app.project}") - private String projectId; - @Value("${app.googleAudience}") - private String googleAudience; - @Value("${app.expireTime}") - private int expireTime; - @Value("${app.maxCacheSize}") - private int maxCacheSize; - - - public String getAuthorizeAPI() { - return authorizeAPI; - } - - public String getRegisterAPI() { - return registerAPI; - } - - public String getPubSubServiceAccountEmail() { - return String.format("de-notification-service@%s.iam.gserviceaccount.com", this.projectId); - } - - public String getGoogleAudiences() { - return this.googleAudience; - } -} diff --git a/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/util/GoogleServiceAccountValidatorImpl.java b/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/util/GoogleServiceAccountValidatorImpl.java index cd5617615..af1dedf52 100644 --- a/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/util/GoogleServiceAccountValidatorImpl.java +++ b/provider/notification-gcp/src/main/java/org/opengroup/osdu/notification/provider/gcp/util/GoogleServiceAccountValidatorImpl.java @@ -21,6 +21,7 @@ import com.google.api.client.googleapis.auth.oauth2.GoogleIdTokenVerifier; import com.google.api.client.http.javanet.NetHttpTransport; import com.google.api.client.json.jackson2.JacksonFactory; import org.opengroup.osdu.core.common.logging.JaxRsDpsLog; +import org.opengroup.osdu.notification.provider.gcp.config.AppProperties; import org.opengroup.osdu.notification.provider.interfaces.IServiceAccountValidator; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; 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 b5b7d51ff..f05a02653 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 @@ -17,188 +17,22 @@ 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.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; -import com.google.api.services.iam.v1.model.SignJwtResponse; -import com.google.auth.http.HttpCredentialsAdapter; -import com.google.auth.oauth2.GoogleCredentials; -import com.google.common.base.Strings; -import com.google.gson.JsonObject; -import com.google.gson.JsonParser; -import org.apache.http.HttpHeaders; -import org.apache.http.HttpStatus; -import org.apache.http.NameValuePair; -import org.apache.http.client.entity.UrlEncodedFormEntity; -import org.apache.http.client.methods.CloseableHttpResponse; -import org.apache.http.client.methods.HttpPost; -import org.apache.http.entity.ContentType; -import org.apache.http.impl.client.CloseableHttpClient; -import org.apache.http.impl.client.HttpClients; -import org.apache.http.message.BasicNameValuePair; -import org.apache.http.util.EntityUtils; -import org.opengroup.osdu.core.common.model.http.AppException; -import org.opengroup.osdu.core.common.model.tenant.TenantInfo; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.opengroup.osdu.core.auth.TokenProvider; import org.opengroup.osdu.core.common.util.IServiceAccountJwtClient; -import org.opengroup.osdu.core.gcp.multitenancy.TenantFactory; - -import java.io.IOException; -import java.security.GeneralSecurityException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; +import org.springframework.stereotype.Component; +@Component +@Slf4j +@RequiredArgsConstructor 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 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"; - - private static ConcurrentHashMap<String, JwtValidity> jwtCache = new ConcurrentHashMap<>(); - private Iam iam; - - public ServiceAccountJwtGcpClientImpl(AppProperties config) { - if (config == null) { - throw new IllegalArgumentException("AppProperties is null when initializing jwt client."); - } else { - this.config = config; - } - } - - public String getIdToken(String dataPartitionId) { - String googleAudience = this.config.getGoogleAudiences(); - String hostName = this.config.getRegisterAPI(); - if (Strings.isNullOrEmpty(dataPartitionId) || Strings.isNullOrEmpty(googleAudience) || Strings.isNullOrEmpty(hostName)) { - throw new AppException(HttpStatus.SC_BAD_REQUEST, "data partition id, audiences or hostname are null", INVALID_INPUT); - } - try { - // Check if there is already a valid jwt - String key = dataPartitionId + googleAudience + hostName; - String jwt = checkAndGetJwtIfValid(key); - if (!Strings.isNullOrEmpty(jwt)) - return jwt; - - TenantInfo tenantInfo = new TenantFactory().getTenantInfo(dataPartitionId); - if (tenantInfo == null) { - throw new AppException(HttpStatus.SC_BAD_REQUEST, "data partition id is invalid", INVALID_DATA_PARTITION); - } - long currentTime = System.currentTimeMillis() / 1000; - long expiryTime = currentTime + 3600; - - // get signed JWT - Map<String, Object> signJwtPayload = this.getJwtCreationPayload(tenantInfo, googleAudience, currentTime, expiryTime); - - SignJwtRequest signJwtRequest = new SignJwtRequest(); - signJwtRequest.setPayload(JSON_FACTORY.toString(signJwtPayload)); - - String serviceAccountName = String.format(SERVICE_ACCOUNT_NAME_FORMAT, tenantInfo.getProjectId(), - tenantInfo.getServiceAccount()); - - Iam.Projects.ServiceAccounts.SignJwt signJwt = this.getIam(hostName).projects().serviceAccounts() - .signJwt(serviceAccountName, signJwtRequest); - SignJwtResponse signJwtResponse = signJwt.execute(); - String signedJwt = signJwtResponse.getSignedJwt(); - - // get id token - List<NameValuePair> postParameters = new ArrayList<>(); - postParameters.add(new BasicNameValuePair("grant_type", "urn:ietf:params:oauth:grant-type:jwt-bearer")); - postParameters.add(new BasicNameValuePair("assertion", signedJwt)); - - HttpPost post = new HttpPost(JWT_AUDIENCE); - post.setHeader(HttpHeaders.CONTENT_TYPE, ContentType.APPLICATION_FORM_URLENCODED.getMimeType()); - post.setEntity(new UrlEncodedFormEntity(postParameters, "UTF-8")); - - try (CloseableHttpClient httpClient = HttpClients.createDefault()) { - CloseableHttpResponse httpResponse = httpClient.execute(post); - - JsonObject jsonContent = new JsonParser().parse(EntityUtils.toString(httpResponse.getEntity())) - .getAsJsonObject(); - - if (!jsonContent.has("id_token")) { - throw new AppException(HttpStatus.SC_UNAUTHORIZED, "User is not authorized to perform this operation.", "Unauthorized to generate token"); - } - - String token = "Bearer " + jsonContent.get("id_token").getAsString(); - jwtCache.put(key, new JwtValidity(token, expiryTime)); - return token; - } - } catch (Exception e) { - throw new AppException(HttpStatus.SC_INTERNAL_SERVER_ERROR, "Error happens when generating sauth token", "Error generating token", e); - } - - } - - Iam getIam(String hostName) throws GeneralSecurityException, IOException { - if (this.iam == null) { - HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport(); - - GoogleCredentials credential = GoogleCredentials.getApplicationDefault(); - if (credential.createScopedRequired()) { - List<String> scopes = new ArrayList<>(); - scopes.add(IamScopes.CLOUD_PLATFORM); - credential = credential.createScoped(scopes); - } - - this.iam = new Iam.Builder(httpTransport, JSON_FACTORY, new HttpCredentialsAdapter(credential)) - .setApplicationName(hostName).build(); - } - - return this.iam; - } - - // THIS METHOD IS ONLY TO ENABLE UNIT TESTING - boolean reduceTenantExpiry(String dataPartitionId, String googleAudience, String hostName, long keepDifference) { - JwtValidity jwtValidity = jwtCache.get(dataPartitionId + googleAudience + hostName); - if (jwtValidity == null) - return false; - - long currentTime = System.currentTimeMillis() / 1000; - jwtValidity.expiryTime = currentTime + keepDifference; - return true; - } - - // THIS METHOD IS ONLY TO ENABLE UNIT TESTING - void clearCache() { - jwtCache.clear(); - } - - private String checkAndGetJwtIfValid(String key) { - JwtValidity jwtValidity = jwtCache.get(key); - if (jwtValidity == null) - return null; - - // get current time - long currentTime = System.currentTimeMillis() / 1000; - - // If exipring in less than 5 minutes then need to renew the token - if (jwtValidity.expiryTime - 300 < currentTime) { - jwtCache.remove(key); - return null; - } - - return jwtValidity.token; - } - + private final TokenProvider tokenProvider; - private Map<String, Object> getJwtCreationPayload(TenantInfo tenantInfo, String googleAudience, long currentTime, long expiryTime) { - if (googleAudience.contains(",")) { - googleAudience = googleAudience.split(",")[0]; - } - Map<String, Object> payload = new HashMap<>(); - payload.put("target_audience", googleAudience); - payload.put("aud", JWT_AUDIENCE); - payload.put("exp", expiryTime); - payload.put("iat", currentTime); - payload.put("iss", tenantInfo.getServiceAccount()); - return payload; + public String getIdToken(String tenantName) { + log.info("Tenant name received for auth token is: {}", tenantName); + return tokenProvider.getIdToken(); } } diff --git a/provider/notification-gcp/src/main/resources/application-anthos.properties b/provider/notification-gcp/src/main/resources/application-anthos.properties new file mode 100644 index 000000000..9aa4ecc28 --- /dev/null +++ b/provider/notification-gcp/src/main/resources/application-anthos.properties @@ -0,0 +1,20 @@ +# +# Copyright 2022 Google LLC +# Copyright 2022 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 +# +# https://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. +# + +service.token.provider=OPENID +partition-auth-enabled=false +oqmDriver=rabbitmq \ No newline at end of file diff --git a/provider/notification-gcp/src/main/resources/application-dev.properties b/provider/notification-gcp/src/main/resources/application-dev.properties deleted file mode 100644 index 00e1abb14..000000000 --- a/provider/notification-gcp/src/main/resources/application-dev.properties +++ /dev/null @@ -1,23 +0,0 @@ -# -# 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. -# - -spring.profiles.active=dev -app.entitlements=https://entitlements-dot-opendes.appspot.com/entitlements/v1 -app.register=https://os-register-dot-opendes.appspot.com/api/register/v1 -app.project=opendes -app.googleAudience=245464679631-ktfdfpl147m1mjpbutl00b3cmffissgq.apps.googleusercontent.com -server.port=8080 -enable.appengine.log.factory=true \ No newline at end of file diff --git a/provider/notification-gcp/src/main/resources/application-gcp.properties b/provider/notification-gcp/src/main/resources/application-gcp.properties new file mode 100644 index 000000000..aac090a9d --- /dev/null +++ b/provider/notification-gcp/src/main/resources/application-gcp.properties @@ -0,0 +1,20 @@ +# +# Copyright 2022 Google LLC +# Copyright 2022 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 +# +# https://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. +# + +service.token.provider=GCP +partition-auth-enabled=true +oqmDriver=pubsub \ No newline at end of file diff --git a/provider/notification-gcp/src/main/resources/application-kuber.properties b/provider/notification-gcp/src/main/resources/application-kuber.properties deleted file mode 100644 index 856d60997..000000000 --- a/provider/notification-gcp/src/main/resources/application-kuber.properties +++ /dev/null @@ -1,23 +0,0 @@ -# -# 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. -# - -app.entitlements=http://os-entitlement-service/entitlements/v1 -app.register=https://os-register-dot-opendes.appspot.com/api/register/v1 -app.project=${GOOGLE_CLOUD_PROJECT} -app.googleAudience=${GOOGLE_AUDIENCES} -server.port=8080 - -server.servlet.contextPath=/api/notification/v1/ diff --git a/provider/notification-gcp/src/main/resources/application-local.properties b/provider/notification-gcp/src/main/resources/application-local.properties index 58c982df5..ec8e96864 100644 --- a/provider/notification-gcp/src/main/resources/application-local.properties +++ b/provider/notification-gcp/src/main/resources/application-local.properties @@ -14,9 +14,14 @@ # limitations under the License. # -spring.profiles.active=local -app.entitlements=https://entitlements-dot-opendes.appspot.com/entitlements/v1 -app.register=https://os-register-dot-opendes.appspot.com/api/register/v1 -app.project=opendes -app.googleAudience=245464679631-ktfdfpl147m1mjpbutl00b3cmffissgq.apps.googleusercontent.com server.port=8080 +logging.level.org.springframework.web=${LOG_LEVEL:DEBUG} + +app.entitlements=https://community.gcp.gnrg-osdu.projects.epam.com/entitlements/v2 +app.register=https://community.gcp.gnrg-osdu.projects.epam.com/api/register/v1 +app.project=nice-etching-277309 +google-audiences=689762842995-pv217jo3k8j803kk6gqf52qb5amos3a9.apps.googleusercontent.com + +service.token.provider=GCP +partition-auth-enabled=true +oqmDriver=pubsub diff --git a/provider/notification-gcp/src/main/resources/application.properties b/provider/notification-gcp/src/main/resources/application.properties index 45946ed85..80608c45f 100644 --- a/provider/notification-gcp/src/main/resources/application.properties +++ b/provider/notification-gcp/src/main/resources/application.properties @@ -14,14 +14,21 @@ # limitations under the License. # +# Global defaults LOG_PREFIX=notification -logging.level.org.springframework.web=${LOG_LEVEL:DEBUG} +logging.level.org.springframework.web=${LOG_LEVEL:INFO} server.servlet.contextPath=/api/notification/v1 + app.expireTime=300 app.maxCacheSize=10 server.error.whitelabel.enabled=false -google.audiences=${APP_AUDIENCES} -partition.api=http://localhost:8081/api/partition/v1 +# External services +app.entitlements=http://entitlements/api/entitlements/v2/ +app.register=http://register/api/register/v1 +partition.api=http://partition/api/partition/v1/ +# No profile defaults +service.token.provider=GCP +partition-auth-enabled=true oqmDriver=pubsub \ No newline at end of file -- GitLab