diff --git a/pom.xml b/pom.xml index bb5b63e2a350888feb12f99cddea1da32574a8ad..342e9aab35c16b4e0754bf7be8530c3f9cab8bbb 100644 --- a/pom.xml +++ b/pom.xml @@ -56,11 +56,6 @@ <artifactId>os-core-common</artifactId> <version>0.0.20</version> </dependency> - <dependency> - <groupId>org.opengroup.osdu</groupId> - <artifactId>core-lib-gcp</artifactId> - <version>0.1.21</version> - </dependency> </dependencies> </dependencyManagement> diff --git a/provider/register-gcp/pom.xml b/provider/register-gcp/pom.xml index dd84b8bdac296738f22de48828609453dbe0d6f7..92abcc3ae67572759e355fce1b3d59b5cfdbaee2 100644 --- a/provider/register-gcp/pom.xml +++ b/provider/register-gcp/pom.xml @@ -37,6 +37,7 @@ <dependency> <groupId>org.opengroup.osdu</groupId> <artifactId>core-lib-gcp</artifactId> + <version>0.1.21</version> </dependency> <dependency> diff --git a/provider/register-gcp/src/main/appengine/app.yaml b/provider/register-gcp/src/main/appengine/app.yaml index be8764732b706d1b71887fd56d8041ef3c242596..f57bdeae5570a869f733aee8aa2b5ac0b7647d1c 100644 --- a/provider/register-gcp/src/main/appengine/app.yaml +++ b/provider/register-gcp/src/main/appengine/app.yaml @@ -38,6 +38,6 @@ env_variables: JETTY_MODULES_ENABLE: 'gzip' JAVA_OPTS: -Xms2048m -Xmx3072m SPRING_PROFILES_ACTIVE: 'dev' - GOOGLE_AUDIENCES: "GOOGLE-AUDIENCES" + INTEGRATION_TEST_AUDIENCES: "GOOGLE-AUDIENCES" SUBSCRIBER_SECRET: "SUBSCRIBER-SECRET" SUBSCRIBER_PRIVATE_KEY_ID: "SUBSCRIBER-PRIVATE-KEY-ID" \ No newline at end of file diff --git a/provider/register-gcp/src/main/java/org/opengroup/osdu/register/provider/gcp/subscriber/DatastoreAccess.java b/provider/register-gcp/src/main/java/org/opengroup/osdu/register/provider/gcp/subscriber/DatastoreAccess.java index dcc3ffb5a01b3069cca8b5f0bebdc7f7b42dc94e..ffba276139ddd7a8a9b32a255cf0e5261fc195f8 100644 --- a/provider/register-gcp/src/main/java/org/opengroup/osdu/register/provider/gcp/subscriber/DatastoreAccess.java +++ b/provider/register-gcp/src/main/java/org/opengroup/osdu/register/provider/gcp/subscriber/DatastoreAccess.java @@ -20,9 +20,9 @@ import com.google.cloud.datastore.*; import org.opengroup.osdu.core.common.model.http.AppException; import org.opengroup.osdu.core.common.model.tenant.TenantInfo; import org.opengroup.osdu.register.provider.gcp.ddms.datastore.DatastoreMultiTenantAccess; +import org.opengroup.osdu.register.provider.gcp.util.GcpAppServiceConfig; import org.opengroup.osdu.register.subscriber.model.Secret; import org.opengroup.osdu.register.subscriber.model.Subscription; -import org.opengroup.osdu.register.utils.AppServiceConfig; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; @@ -42,7 +42,7 @@ public class DatastoreAccess implements IDatastoreAccess { @Autowired private ModelEntityHelper modelEntityHelper; @Autowired - private AppServiceConfig config; + private GcpAppServiceConfig config; private static final String NAMESPACE = "DE"; private static final String KIND = "SUBSCRIPTION"; diff --git a/provider/register-gcp/src/main/java/org/opengroup/osdu/register/provider/gcp/util/GcpAppServiceConfig.java b/provider/register-gcp/src/main/java/org/opengroup/osdu/register/provider/gcp/util/GcpAppServiceConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..1c91de2bb4dc7fea518153032892b3bce72ff589 --- /dev/null +++ b/provider/register-gcp/src/main/java/org/opengroup/osdu/register/provider/gcp/util/GcpAppServiceConfig.java @@ -0,0 +1,40 @@ +/* + * 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.register.provider.gcp.util; + +import org.opengroup.osdu.register.utils.AppServiceConfig; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Primary; +import org.springframework.stereotype.Component; + +@Component +@Primary +public class GcpAppServiceConfig extends AppServiceConfig { + + @Value("${GOOGLE_CLOUD_PROJECT}") + private String googleCloudProject; + @Value("${SERVICE_IDENTITY}") + private String serviceIdentity; + + public String getGoogleCloudProject() { + return googleCloudProject; + } + + public String getServiceAccountIdentity() { + return String.format("%s@%s.iam.gserviceaccount.com", serviceIdentity, googleCloudProject); + } +} \ No newline at end of file diff --git a/provider/register-gcp/src/main/java/org/opengroup/osdu/register/provider/gcp/util/GoogleServiceAccountImpl.java b/provider/register-gcp/src/main/java/org/opengroup/osdu/register/provider/gcp/util/GoogleServiceAccountImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..471b48541fbbddd402c8870cfebf19615fcd089d --- /dev/null +++ b/provider/register-gcp/src/main/java/org/opengroup/osdu/register/provider/gcp/util/GoogleServiceAccountImpl.java @@ -0,0 +1,43 @@ +/* + * 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.register.provider.gcp.util; + +import lombok.SneakyThrows; +import org.apache.http.impl.client.HttpClients; +import org.opengroup.osdu.core.gcp.GoogleIdToken.IGoogleIdTokenFactory; +import org.opengroup.osdu.register.utils.IGoogleServiceAccount; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class GoogleServiceAccountImpl implements IGoogleServiceAccount { + + @Autowired + private IGoogleIdTokenFactory googleIdTokenFactory; + + @SneakyThrows + @Override + public String getIdToken(String keyString, String audience) { + return this.googleIdTokenFactory.getGoogleIdToken(keyString, audience, HttpClients.createDefault()); + } + + @SneakyThrows + @Override + public String getPrivateKeyId(String keyString) { + return this.googleIdTokenFactory.getPrivateKeyId(keyString); + } +} \ No newline at end of file diff --git a/provider/register-gcp/src/main/resources/application-dev.properties b/provider/register-gcp/src/main/resources/application-dev.properties index 63d399a1953f4c5a96568f2c2cb214a5c919bb64..2747cdcba70a55a30a3047be2eef68d8647058b9 100644 --- a/provider/register-gcp/src/main/resources/application-dev.properties +++ b/provider/register-gcp/src/main/resources/application-dev.properties @@ -5,7 +5,7 @@ STORAGE_API=https://os-storage-dot-opendes.appspot.com/api/storage/v2 RECORDS_CHANGE_PUBSUB_ENDPOINT=https://os-notification-dot-opendes.appspot.com/push-handlers/records-changed GOOGLE_CLOUD_PROJECT=opendes GCLOUD_REGION=us-central -GOOGLE_AUDIENCES={GOOGLE_AUDIENCES} +INTEGRATION_TEST_AUDIENCES={GOOGLE_AUDIENCES} SUBSCRIBER_SECRET={SUBSCRIBER_SECRET} SUBSCRIBER_PRIVATE_KEY_ID={SUBSCRIBER_PRIVATE_KEY_ID} enable.appengine.log.factory=true \ No newline at end of file diff --git a/provider/register-gcp/src/main/resources/application-local.properties b/provider/register-gcp/src/main/resources/application-local.properties index 3d82959e2a4dc26394baaa4e3c23b7f73944c920..eb922505390b2a9991997ce514c75d60745fec9c 100644 --- a/provider/register-gcp/src/main/resources/application-local.properties +++ b/provider/register-gcp/src/main/resources/application-local.properties @@ -5,7 +5,7 @@ STORAGE_API=https://os-storage-dot-opendes.appspot.com/api/storage/v2 RECORDS_CHANGE_PUBSUB_ENDPOINT=https://os-notification-dot-opendes.appspot.com/push-handlers/records-changed GOOGLE_CLOUD_PROJECT=opendes GCLOUD_REGION=us-central -GOOGLE_AUDIENCES=245464679631-ktfdfpl147m1mjpbutl00b3cmffissgq.apps.googleusercontent.com +INTEGRATION_TEST_AUDIENCES=245464679631-ktfdfpl147m1mjpbutl00b3cmffissgq.apps.googleusercontent.com SUBSCRIBER_SECRET={SUBSCRIBER_SECRET} SUBSCRIBER_PRIVATE_KEY_ID={SUBSCRIBER_PRIVATE_KEY_ID} enable.appengine.log.factory=false \ No newline at end of file diff --git a/register-core/pom.xml b/register-core/pom.xml index 01745ce18be4b18a15a7d70dc6e4a67c7571d81b..41ebb643cb2c8edbccd392e3739590ba1582665b 100644 --- a/register-core/pom.xml +++ b/register-core/pom.xml @@ -82,10 +82,6 @@ <groupId>org.opengroup.osdu</groupId> <artifactId>os-core-common</artifactId> </dependency> - <dependency> - <groupId>org.opengroup.osdu</groupId> - <artifactId>core-lib-gcp</artifactId> - </dependency> <dependency> <groupId>com.google.api</groupId> <artifactId>gax-grpc</artifactId> diff --git a/register-core/src/main/java/org/opengroup/osdu/register/api/SubscriberTestListenerApi.java b/register-core/src/main/java/org/opengroup/osdu/register/api/SubscriberTestListenerApi.java index 4fa6a0de72112fc2cb17469d2be8fae633f57036..d9606812112976beb16adc9e7744b81e70932918 100644 --- a/register-core/src/main/java/org/opengroup/osdu/register/api/SubscriberTestListenerApi.java +++ b/register-core/src/main/java/org/opengroup/osdu/register/api/SubscriberTestListenerApi.java @@ -113,7 +113,7 @@ public class SubscriberTestListenerApi { try { GoogleIdTokenVerifier verifier = new GoogleIdTokenVerifier.Builder(new NetHttpTransport(), JacksonFactory.getDefaultInstance()) - .setAudience(Collections.singletonList(this.serviceConfig.getGoogleAudiences())) + .setAudience(Collections.singletonList(this.serviceConfig.getIntegrationTestJwtAudiences())) .build(); GoogleIdToken idToken = verifier.verify(headers.getAuthorization()); return idToken != null; diff --git a/register-core/src/main/java/org/opengroup/osdu/register/subscriber/services/ChallengeResponseCheck.java b/register-core/src/main/java/org/opengroup/osdu/register/subscriber/services/ChallengeResponseCheck.java index c29192b258a00350ea221109de0185433c4bf0d8..0f734231e67b07c600fc2b053e6f7e96483a7358 100644 --- a/register-core/src/main/java/org/opengroup/osdu/register/subscriber/services/ChallengeResponseCheck.java +++ b/register-core/src/main/java/org/opengroup/osdu/register/subscriber/services/ChallengeResponseCheck.java @@ -19,20 +19,19 @@ package org.opengroup.osdu.register.subscriber.services; import com.google.common.hash.Hashing; import com.google.gson.JsonElement; import com.google.gson.JsonParser; -import org.apache.http.impl.client.HttpClients; +import org.opengroup.osdu.core.common.cryptographic.ISignatureService; import org.opengroup.osdu.core.common.http.HttpRequest; import org.opengroup.osdu.core.common.http.HttpResponse; import org.opengroup.osdu.core.common.http.IHttpClient; import org.opengroup.osdu.core.common.logging.JaxRsDpsLog; import org.opengroup.osdu.core.common.model.http.DpsHeaders; -import org.opengroup.osdu.core.common.cryptographic.ISignatureService; -import org.opengroup.osdu.core.gcp.GoogleIdToken.IGoogleIdTokenFactory; -import org.opengroup.osdu.register.utils.AppServiceConfig; -import org.opengroup.osdu.register.utils.Constants; import org.opengroup.osdu.register.subscriber.model.GsaSecret; import org.opengroup.osdu.register.subscriber.model.HmacSecret; import org.opengroup.osdu.register.subscriber.model.Secret; import org.opengroup.osdu.register.subscriber.model.Subscription; +import org.opengroup.osdu.register.utils.AppServiceConfig; +import org.opengroup.osdu.register.utils.Constants; +import org.opengroup.osdu.register.utils.IGoogleServiceAccount; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -51,7 +50,7 @@ public class ChallengeResponseCheck { @Autowired private ISignatureService signatureService; @Autowired - private IGoogleIdTokenFactory googleIdTokenFactory; + private IGoogleServiceAccount googleServiceAccount; @Autowired private AppServiceConfig serviceConfig; @Autowired @@ -89,8 +88,8 @@ public class ChallengeResponseCheck { JsonParser jsonParser = new JsonParser(); JsonElement root = jsonParser.parse(gsaSecret.getValue().getKey()); String keyString = root.getAsJsonObject().toString(); - String idToken = this.googleIdTokenFactory.getGoogleIdToken(keyString, gsaSecret.getValue().getAudience(), HttpClients.createDefault()); - secretString = this.googleIdTokenFactory.getPrivateKeyId(keyString); + String idToken = this.googleServiceAccount.getIdToken(keyString, gsaSecret.getValue().getAudience()); + secretString = this.googleServiceAccount.getPrivateKeyId(keyString); // send gsa challange with idtoken in header response = sendGsaChallenge(input, crc, idToken); diff --git a/register-core/src/main/java/org/opengroup/osdu/register/utils/AppServiceConfig.java b/register-core/src/main/java/org/opengroup/osdu/register/utils/AppServiceConfig.java index c4f4f46f569838af2b96a769096fd9a268ebe81e..9c2bb3b6b63a720d71cbe8974b8e5304ac914ee9 100644 --- a/register-core/src/main/java/org/opengroup/osdu/register/utils/AppServiceConfig.java +++ b/register-core/src/main/java/org/opengroup/osdu/register/utils/AppServiceConfig.java @@ -22,18 +22,14 @@ import org.springframework.stereotype.Component; @Component public class AppServiceConfig { - @Value("${GOOGLE_CLOUD_PROJECT}") - private String googleCloudProject; - @Value("${GOOGLE_AUDIENCES}") - private String googleAudiences; + @Value("${INTEGRATION_TEST_AUDIENCES}") + private String integrationTestJwtAudiences; @Value("${CRON_JOB_EXPECTED_IP}") private String cronJobExpectedIp; @Value("${ACCEPT_HTTP:false}") private boolean acceptHttp; @Value("${ENVIRONMENT}") private String environment; - @Value("${SERVICE_IDENTITY}") - private String serviceIdentity; @Value("${PERSISTENCE:CLOUD_NATIVE}") private String persistence; @Value("${ENTITLEMENTS_API}") @@ -45,12 +41,8 @@ public class AppServiceConfig { @Value("${SUBSCRIBER_SECRET}") private String subscriberSecret; - public String getGoogleCloudProject() { - return googleCloudProject; - } - - public String getGoogleAudiences() { - return googleAudiences; + public String getIntegrationTestJwtAudiences() { + return integrationTestJwtAudiences; } public boolean getAcceptHttp() { @@ -86,10 +78,6 @@ public class AppServiceConfig { "TEST".equalsIgnoreCase(environment) || "P4D".equalsIgnoreCase(environment); } - public String getServiceAccountIdentity() { - return String.format("%s@%s.iam.gserviceaccount.com", serviceIdentity, googleCloudProject); - } - public String getMongoDatabaseName() { return String.format("ddms-db-%s", getDeploymentEnvironment()).toLowerCase(); } diff --git a/register-core/src/main/java/org/opengroup/osdu/register/utils/IGoogleServiceAccount.java b/register-core/src/main/java/org/opengroup/osdu/register/utils/IGoogleServiceAccount.java new file mode 100644 index 0000000000000000000000000000000000000000..c8ccc89a963fa708d8708ad96c2708c050125ea3 --- /dev/null +++ b/register-core/src/main/java/org/opengroup/osdu/register/utils/IGoogleServiceAccount.java @@ -0,0 +1,24 @@ +/* + * 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.register.utils; + +public interface IGoogleServiceAccount { + + String getIdToken(String keyString, String audience); + + String getPrivateKeyId(String keyString); +} \ No newline at end of file